diff options
author | Kim Kibum <kb0929.kim@samsung.com> | 2012-05-21 17:42:43 +0900 |
---|---|---|
committer | Kim Kibum <kb0929.kim@samsung.com> | 2012-05-21 17:42:43 +0900 |
commit | 4a2c24a45b7af1aa715eae442c7ef3d91e7dde6d (patch) | |
tree | 5431ff1d419d4ee35f8bd3cb3ebd5e334c2a737e /test | |
parent | c22a3ed09b982b93feb23655eba7b55fa27885cb (diff) | |
download | gawk-4a2c24a45b7af1aa715eae442c7ef3d91e7dde6d.tar.gz gawk-4a2c24a45b7af1aa715eae442c7ef3d91e7dde6d.tar.bz2 gawk-4a2c24a45b7af1aa715eae442c7ef3d91e7dde6d.zip |
Upload Tizen:Base source
Diffstat (limited to 'test')
565 files changed, 36603 insertions, 0 deletions
diff --git a/test/ChangeLog b/test/ChangeLog new file mode 100644 index 0000000..2ce66ae --- /dev/null +++ b/test/ChangeLog @@ -0,0 +1,1145 @@ +Tue Jul 26 21:46:16 2005 Arnold D. Robbins <arnold@skeeve.com> + + * Release 3.1.5: Release tar file made. + +Sun Jul 10 18:31:45 2005 Scott Deifik <scottd@amgen.com> + + * regtest.sh: Changed to use diff instead of cmp for djgpp. + This addresses DOS vs. UNIX end-of-line issues. + +Thu Jun 9 23:40:14 2005 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (Maketests): Don't use $< in rule, it breaks + on some non-GNU versions of make. Sigh. + +Wed Apr 27 22:22:05 2005 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (longdbl): new test. + * longdbl.awk, longdbl.in, longdbl.ok: new files. + +Wed Feb 2 16:44:41 2005 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (exitval2): new test. + * exitval2.awk, exitval2.ok: new files. + +Mon Jan 31 10:00:52 2005 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (gnuops3): new test. + * gnuops3.awk, gnuops3.ok: new files. + +Wed Jan 19 18:04:40 2005 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (hex): new test. + * hex.awk, hex.ok: new files. + +Sun Jan 9 11:53:09 2005 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (strftime, igncras2, subamp): Use `GAWKLOCALE', + not `GAWK_LOCALE'. Grrr! + +Mon Jan 3 12:20:08 2005 William J. Poser <wjposer@ldc.upenn.edu> + + * Makefile.am (wjposer1): new test. + * wjposer1.awk, wjposer1.in, wjposer1.ok: new files. + +Mon Jan 3 11:55:48 2005 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (rsstart1, rsstart2, rsstart3): new tests. + * rsstart1.in, rsstart1.awk, rsstart1.ok, rsstart2.awk, + rsstart2.ok, rsstart3.ok: new files. + +Sun Dec 19 17:31:48 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (gensub2): new test. + * gensub2.awk, gensub2.ok: new files. + + Thanks to "John H. DuBois III" <spcecdt@armory.com>. + +Thu Dec 9 15:22:58 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (fsspcoln): new test. + * fsspcoln.awk, fsspcoln.in, fsspcoln.ok: new files. + +Mon Nov 29 18:41:33 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (iobug1): new test. + * iobug1.awk, iobug1.ok: new files. + +Tue Sep 28 18:39:53 2004 Arnold D. Robbins <arnold@skeeve.com> + + * nondec.awk, nondec.ok: Add 00.34 as value to print, it should + not be treated as octal. + +Mon Aug 2 12:18:15 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Release 3.1.4: Release tar file made. + +Wed Jul 14 16:04:46 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (rstest6): new test. + * rstest6.awk, rstest6.in, rstest6.ok: new files. + +Tue Jul 13 10:53:32 2004 Arnold D. Robbins <arnold@skeeve.com> + + * strftlng: Use `$(CMP) ... >/dev/null 2>&1' instead of `-s' + for OS/2 and other systems that use `CMP = diff -a'. + +Mon Jun 14 18:44:39 2004 Pat Rankin <rankin@pactechdata.com> + + * longwrds.awk: allow caller the means to override SORT command. + +Tue Jun 8 14:12:52 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (fordel, printfbad1): new tests. + * fordel.awk, fordel.ok: new files. + * printfbad1.awk, printfbad1.ok: new files. + +Mon Apr 19 20:29:52 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (manglprm): new test. + * manglprm.awk, manglprm.in, manglprm.ok: new files. + +Mon Feb 23 18:39:24 2004 Arnold D. Robbins <arnold@skeeve.com> + + * inftest.awk: Add loop limit per Nelson H.F. Beebe. + * Makefile.am (strftime): Use LC_ALL=C for `date' invocation. + +Thu Feb 12 02:08:15 2004 Stepan Kasal <kasal@ucw.cz> + + * Makefile.am (diffout): Use $(srcdir), when we are not building + in the source tree. + +Wed Feb 11 10:23:39 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (strcat1): new test. + * strcat1.awk, strcat1.ok: new files. + +Fri Feb 6 12:09:55 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (CLEANFILES): Added. + +Thu Feb 5 15:34:14 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (exitval1): new test. + * exitval1.awk, exitval1.ok: new files. + +Mon Feb 2 10:29:19 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (subamp): new test. + * subamp.awk, subamp.in, subamp.ok: new files. + + * subamp, ignrcas2, strftime: Set GAWK_LOCALE, not LC_ALL. + +Wed Jan 14 15:28:34 2004 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (backw): new test. + * backw.awk, backw.in, backw.ok: new files. + +Mon Dec 1 10:29:22 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (concat3): new test. + * concat3.awk, concat3.ok: new files. + +Sun Nov 2 16:05:21 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (concat2): new test. + * concat2.awk, concat2.ok: new files. + +Wed Oct 29 13:35:37 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (subsepnm): new test. + * subsepnm.awk, subsepnm.ok: new files. + +Mon Sep 15 16:05:37 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (ignrcas2): new test. + * ignrcas2.awk, ignrcas2.ok: new files. + +Tue Sep 9 16:03:34 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (unterm): new test. + * unterm.awk, unterm.ok: new files. + +Mon Jul 7 11:01:43 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Release 3.1.3: Release tar file made. + +Fri Jul 4 11:12:07 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (poundbang2): Removed. + (poundbang): Added env var settings. + +Thu Jun 26 15:44:33 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (match2, whiny): new tests. + * match2.awk, match2.ok: new files. + * whiny.awk, whiny.ok: new files. + +Thu Jun 26 14:51:40 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am: Use double quotes for sed invocation to make + life easier (eventually) for DOS version of Makefile. + * pipeio2.awk, pipio2.ok: Ditto. + +Wed Jun 18 12:32:14 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (AWK): Use LC_ALL=$${GAWKLOCALE:-C} and + same for LANG when running awk. Provides sane locale for + tests with ability to override it if need be. + (all tests): Removed explicit setting of LC_ALL and LANG. + * Gentests: Ditto. + +Wed May 28 08:02:33 CEST 2003 Stepan Kasal <kasal@math.cas.cz> + + * Makefile.am (uninit4): new test. + * uninit4.awk, uninit4.ok: new files. + +Wed May 28 06:30:23 2003 Stepan Kasal <kasal@math.cas.cz> + + * Makefile.am (aryprm4 aryprm5 aryprm6 aryprm7 aryprm8 scalar uninit3): + new tests. + * aryprm4.awk aryprm4.ok aryprm5.awk aryprm5.ok aryprm6.awk aryprm6.ok: + aryprm7.awk aryprm7.ok aryprm8.awk aryprm8.ok scalar.awk scalar.ok: + uninit3.awk uninit3.ok: new files. + +Tue May 27 14:27:50 2003 Stepan Kasal <kasal@math.cas.cz> + + * Makefile.am (aryprm1, aryprm2, aryprm3, sortempty): New tests. + * aryprm1.awk, aryprm1.ok, aryprm2.awk, aryprm2.ok: New files. + * aryprm3.awk, aryprm3.ok, sortempty.awk, sortempty.ok: dtto + * prmarscl.ok: The actual error message has changed. + +Tue May 27 08:23:51 2003 Stepan Kasal <kasal@math.cas.cz> + + * arrayref3.ok, arrayref4.ok, fnaryscl.ok: Error messages reformatted. + +Sun Jun 8 17:18:06 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (fmttest, strtonum, nested, gsubtst5, delarpm2): New tests. + * fmttest.awk, fmttest.ok: New files. From Nelson Beebe, + <beebe@math.utah.edu>. + * strtonum.awk, strtonum.ok: New files. + * nested.awk, nested.in, nested.ok: New files. + * gsubtst5.awk, gsubtst5.in, gsubtst5.ok: New files. + * delarpm2.awk, delarpm2.ok: New files. (Also from Nelson Beebe.) + + * switch2.awk: Currently unused test for switch code. + +Wed May 14 16:49:53 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Gentests: Add LC_ALL=C LANG=C to generated tests. + * Makefile.am: All other manual tests: ditto. + +Sun May 11 15:27:55 2003 Stepan Kasal <kasal@math.cas.cz> + + * Makefile.am (rsnulbig, rsnulbig2): New tests. + * rsnulbig.ok, rsnulbig2.ok: New files. + +Sun May 11 15:00:20 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (arrayprm2, arrayprm3, arryref2, arryref3, arryref4, + arryref5, rstest3, rstest4, rstest5): New tests. + * arrayprm2.awk, arrayprm2.ok, arrayprm3.awk, arrayprm3.ok, arryref2.ok, + arryref3.ok, arryref4.ok, arryref5.ok, rstest3.awk, rstest3.ok, rstest4.awk, + rstest4.ok, rstest5.awk, rstest5.ok: New files. + +Sun May 11 12:20:59 2003 Arnold D. Robbins <arnold@skeeve.com> + + * strftime.awk: Remove seconds from input and strftime output, + to decrease chance of failing on second boundary. + * Makefile.am (strftime): Tweak message appropriately. + +Tue Mar 25 08:35:42 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (fnarray2): New test. + * fnarray2.awk, fnarray2.ok: New files. + +Wed Mar 19 14:10:31 2003 Arnold D. Robbins <arnold@skeeve.com> + + This time for sure. + -- Bullwinkle + + * Release 3.1.2: Release tar file made. + +Wed Mar 19 14:00:00 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (synerr1): New test. + * synerr1.awk, synerr1.ok: New files. + +Tue Mar 4 10:32:23 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (clean): Remove `core*' for modern Linux which + drops core in `core.PID' files. + +2003-02-17 Jim Meyering <jim@meyering.net> + + * Makefile.am (check): Don't depend on the pass-fail rule that + reports any failures. Otherwise, for `make -j' that rule's commands + could run before all tests had completed, resulting in spurious + failures or potentially, even unreported failures. Instead, just + `$(MAKE) pass-fail'. + +Sun Feb 9 11:48:32 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am: Moved `space' into UNIX_TESTS. Breaks in + MS environments. + +Tue Feb 4 14:28:06 2003 Arnold D. Robbins <arnold@skeeve.com> + + All relevant files: Copyright year updated to 2003. + +Tue Feb 4 12:22:41 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (fnmisc): New test case. + * fnmisc.awk, fnmisc.ok: New files. + +Sun Feb 2 15:33:33 2003 Stepan Kasal <kasal@math.cas.cz> + + * getline3.awk, getline3.ok: Renamed from getline2.awk, getline2.ok + * Makefile.am (getline, getline2): getline renamed to getline2, + new test under the name getline. + * getline.awk, getline.ok, getline2.awk, getline2.ok: + rename getline.* getline2.*; new files getline.* . + * getline.awk, getline.ok: add tests for ``cmd | getline '' + * Makefile.am (printf0): New test. + * printf0.awk, printf0.ok: New files. + * fnarray.ok: The error message has changed. + +Thu Jan 30 15:32:56 2003 Stepan Kasal <kasal@math.cas.cz> + + * Makefile.am (splitarr, getline2, inputred, prec): New tests. + * splitarr.awk, splitarr.ok: New files. + * getline2.awk, getline2.ok: New files. + * inputred.awk, inputred.ok: New files. + * prec.awk, prec.ok: New files. + * noeffect.awk: add second no-effect command; two error messages + should be generated. Add some empty statements, to check that --lint + doesn't abort on them. + +Tue Jan 28 18:34:22 2003 Arnold D. Robbins <arnold@skeeve.com> + + * arrymem1.awk: Enhanced test. + * arrayme1.ok: Updated for new output + +Mon Jan 27 14:07:16 2003 Stepan Kasal <kasal@math.cas.cz> + + * nfldstr.awk: Add tests for automatic number conversion. + +Mon Jan 27 12:25:41 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (asort, asorti, match1): New tests. + * match1.awk, match1.in: New files. + * asort.awk, asort.in: New files. + * asorti.awk, asorti.in: New files. + +Mon Jan 27 12:10:16 2003 Stepan Kasal <kasal@math.cas.cz> + + * strtod.awk, strtod.in, strtod.ok: Added test for 0e0 and similar. + +Sun Jan 26 16:49:41 2003 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (zeroe0): New test. + * zeroe0.awk, zeroe0.in: New files. + +Thu Jan 2 11:09:12 2003 Arnold D. Robbins <arnold@skeeve.com> + + * parseme.ok, noparms.ok: Revised for bison 1.875. + +Tue Dec 31 16:54:44 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am: (poundbang): Fix code. + (efence): New target to remove _* files run with Electric Fence + but that are otherwise OK. + +Thu Dec 26 16:44:37 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (poundbang): Add code to handle systems with limits on + paths for #! files. + +Mon Dec 9 14:20:44 2002 Stepan Kasal <kasal@math.cas.cz> + + * Makefile.am (space): New test: ``gawk -f " " file'' should try + to include file ` '. + +Sun Nov 17 21:47:11 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (manyfiles): Reference $(srcdir)/$@.ok so can build + and test in a different directory. + +Sun Nov 3 14:47:59 2002 Arnold D. Robbins <arnold@skeeve.com> + + Move tests with inline input and/or programs into separate files so can let + Gentests do more work. Per Nelson Beebe, just print the name of each test. + + * Makefile.am (fstabplus, longwrds, fieldwdth, ignrcase, posix, rs, fsbs): + removed targets so will be generated by Gentests. + (negexp, resplit, childin, back89, nfldstr, nondec): ditto. + * Gentests: print name of test, make cmp not echo by prefixing with @. + * fstabplus.in: new file. + * fieldwdth.awk, fieldwdth.in: new files. + * ignrcase.awk, ignrcase.in: new files. + * longwrds.awk: send output to sort instead of letting makefile do it. + * longwrds.in: renamed from manpage. + * posix.in: new file. + * manyfiles.ok: new file. + * rs.awk: new file. + * fsbs.awk: new file. + * negexp.awk: new file. + * resplit.awk, resplit.in: new files. + * childin.awk, childin.in: new files. + * back89.awk: new file. + * nfldstr.awk, nfldstr.in: new files. + +Sun Nov 3 14:37:39 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (uninit2): new test case, requires lint. + * uninit2.awk, uninit2.ok: new files. + +Fri Nov 1 11:34:45 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (nondec): Always run this test. + +Tue Oct 29 10:40:47 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (EXTRA_DIST): Added Gentests to list of files + to distribute. + +Mon Oct 28 15:36:42 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (icasers, icasefs, rstest1, rstest2): new test cases. + (argarray): Remove argarray.in if not in srcdir. + * icasers.awk, icasers.in, icasers.ok: new files. + * icasefs.awk, icasefs.ok: new files. + * rstest1.awk, rstest1.ok: new files. + * rstest2.awk, rstest2.ok: new files. + +Mon Oct 28 12:25:25 2002 Stepan Kasal <kasal@math.cas.cz> + + * Makefile.am (uninitialized): New test. + * uninitialized.awk, uninitialized.ok: New files. + +Mon Oct 28 11:24:16 2002 Stepan Kasal <kasal@math.cas.cz> + + * Gentests: new script + * Maketests: new file, generated automatically by Gentests + * Makefile.am: new rules and variables to make use of Gentests; + Most targets removed, Gentests will take care + +Sun Oct 13 16:58:07 2002 Stepan Kasal <kasal@math.cas.cz> + + * Makefile.am (nfneg): new test case. + * nfneg.awk, nfneg.ok: new files. + +Mon Oct 7 09:38:07 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (noloop1, noloop2): new test cases. + * noloop.awk, noloop1.in, noloop1.ok, noloop2.in, noloop2.ok: + new files. + +Tue Oct 1 18:28:40 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (poundbang): Rewrote rule to avoid problems + with hardcoding of /tmp pathname. + (poundbang.awk): Changed the way it works. + (poundbang.ok): Removed. + +Thu Sep 5 13:31:28 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (rebuf): new test case. + * rebuf.awk, rebuf.in, rebuf.ok: new files. + +Wed Aug 21 15:31:57 2002 Andreas Buening <andreas.buening@nexgo.de> + + * Makefile.am (AWKPROG): Add $(EXEEXT) macro. + (PATH_SEPERATOR): Removed. + (poundbag): Added $(EXEEXT) and use of ${TMPDIR-/tmp}. + +Wed Aug 7 13:47:09 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (nulrsend): new test case. + * nulrsend.awk, nulrsend.in, nulrsend.ok: new files. + +Sun Aug 4 00:25:23 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (gsubtst3, gsubtst4): new test cases. + * gsubtst3.awk, gsubtst3.ok, gsubtst4.awk, gsubtst4.ok: new files. + +Thu May 9 22:31:36 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (gsubtst2): new test case. + * gsubtest.awk, gsubtest.ok: Added new test. + * gsubtst2.awk, gsubtst2.ok: new files. + +Sun May 5 12:38:55 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am: Minor mods to use LC_ALL=C so that checks will + use the English messages, not any translations. + (manyfiles): Fixed (hopefully) to leave a file around if the + test fails, so that we don't get a spurious "ALL TESTS PASSED" + message. + +Wed May 1 16:41:32 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Release 3.1.1: Release tar file made. + +Tue Apr 16 17:07:25 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (pass-fail): New target that prints an + `all passed' or `x tests failed' message, for use in + grep-ing build logs. + (check): Add pass-fail as last dependency. + + Thanks to Nelson Beebe for the thought, beebe@math.utah.edu. + +Sun Mar 10 17:00:51 2002 Scott Deifik <scottd@amgen.com> + + * Makefile.am (strftime): Add TZ=GMT0 into environment, to + regularize things, esp. for some DJGPP systems. + +Mon Feb 18 14:55:19 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (longsub): new test case. + * longsub.awk, longsub.in, longsub.ok: new files. + +Wed Jan 23 15:03:36 2002 Andreas Buening <andreas.buening@nexgo.de> + + * Makefile.am (PATH_SEPARATOR): Added. + (awkpath): Make use of PATH_SEPARATOR. + +Wed Jan 23 14:50:38 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (concat1): new test case. + * concat1.awk, concat1.in, concat1.ok: new files. + +Mon Jan 7 22:21:25 2002 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (forsimp): new test case. + * forsimp.awk, forsimp.ok: new files. + +Wed Dec 26 22:01:52 2001 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (inftest): Add sed to fix case issues between + different libc versions. Ugh. + +Wed Dec 19 16:01:58 2001 Peter J. Farley III <pjfarley@dorsai.org> + + * Makefile.am (manyfiles): Also delete \15 in tr. + +Tue Dec 18 20:56:07 2001 Andreas Buening <andreas.buening@nexgo.de> + + * Makefile.am (nors): Add \15 to list of chars to delete so + test will run on OS/2 also. + +Thu Oct 4 18:34:49 2001 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (membug1): new test case. + * membug1.awk, membug1.in, membug1.ok: new files. + +Thu Aug 23 14:04:10 2001 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (minusstr): new test case. + * minusstr.awk, minusstr.ok: new files. + +Sat Aug 4 23:42:37 2001 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (arrymem1): new test case. + (compare2): new test case. + (regtest): Make test work, use regtest.sh, not .awk. + * arrymem1.awk, arrymem1.ok: new files. + * compare2.awk, compare2.ok: new files. + +Mon Jul 23 17:32:03 2001 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (onlynl): new test case. + * onlynl.awk, onlynl.in, onlynl.ok: new files. + +Wed Jun 13 18:12:43 2001 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (ofmtfidl): new test case. + * ofmtfidl.awk, ofmtfidl.in, ofmtfidl.ok: new files. + +Sun Jun 3 13:04:44 2001 Arnold D. Robbins <arnold@skeeve.com> + + * Release 3.1.0: Release tar file made. And there was + rejoicing. + +Sun May 6 13:30:20 2001 Arnold Robbins <arnold@skeeve.com> + + * inftest.awk: Changed test to use < so that it will + work for MSC and DJGPP combination, per Scott Deifik. + +Tue Mar 20 11:09:51 2001 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (funsemnl): new test case. + * funsemnl.awk, funsemnl.ok: new files. + +Wed Mar 7 11:31:41 2001 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (leadnl): new test case. + * leadnl.awk, leadnl.in, leadnl.ok: new files. + +Tue Feb 6 18:08:15 2001 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (rebt8b1, rebt8b2): new test case. + * rebt8b1.awk, rebt8b1.ok: new files. + * rebt8b2.awk, rebt8b2.ok: new files. + +Sun Dec 3 15:36:41 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (gnuops2): New test case. + * gnuops2.awk, gnuops2.ok: New files, based on bug report from + Servatius.Brandt@fujitsu-siemens.com. + +Mon Nov 27 15:52:46 2000 Arnold Robbins <arnold@skeeve.com> + + * regx8bit.awk, regx8bit.ok: Updated to what should + work on all systems. + +Wed Nov 22 13:27:59 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (poundbang): Added some smarts for /tmp mounted + noexec. Hopefully it'll even work. + +Tue Nov 14 17:45:02 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am: Added - to all cmp calls for consistency. + +Sun Nov 12 17:50:18 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (addcomma): new test case. + * addcomma.awk, addcomma.in, addcomma.ok: new files. + +Tue Nov 7 16:03:06 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (regx8bit, psx96sub): new test cases. + * regx8bit.awk, regx8bit.ok, psx96sub.awk, psx96sub.ok: new files. + +Sun Oct 22 12:09:43 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (shadow): new test case. + * shadow.awk, shadow.ok: new files. + +Tue Oct 17 10:51:09 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (arynasty): new test case. + * arynasty.awk, arynasty.ok: new files. + +Mon Oct 2 10:17:13 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (clsflnam): Add redirect of stderr. + * clsflnam.awk, clsflnam.ok: modified to reflect changed + semantics of close() for a non-open file. See ../ChangeLog. + +Sun Sep 24 16:46:29 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (nasty2): new test case. + * nasty2.awk, nasty2.ok: new files. + +Wed Sep 13 11:09:49 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (check): Added calls to new targets that + print messages. + (clos1way, basic-msg-start, basic-msg-end, unix-msg-start, + unix-msg-end, extend-msg-start, extend-msg-end): new targets. + * clos1way.awk, clos1way.ok: new files. + +Tue Sep 12 16:29:54 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (leaddig): new test case. + * leaddig.awk, leaddig.ok: new files. + +Wed Sep 6 14:09:15 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (strtod): new test case. + * strtod.awk, strtod.in, strtod.ok: new files. + +Mon Sep 4 09:33:28 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (octsub): new test case. + * octsub.awk, octsub.ok: new files. + +Sun Aug 13 12:37:16 2000 Arnold Robbins <arnold@skeeve.com> + + * Makefile.am (sort1, diffout): new test cases. + * sort1.awk, sort1.ok: new files. + +2000-02-15 Arnold Robbins <arnold@skeeve.com> + + * MOVED TO AUTOMAKE AND GETTEXT. + Just about every file touched. Work done by Arno Peters. + +Wed May 19 15:41:41 1999 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (datanonl,regeq,redfilnm): new test cases. + * datanonl.awk, datanonl.in, datanonl.ok: new files. + * regeq.awk, regeq.in, regeq.ok: new files. + * redfilnm.awk, redfilnm.in, redfilnm.ok: new files. + +Mon May 10 17:11:30 1999 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (rsnul1nl): new test case. + * rsnul1nl.awk, rsnul1nl.in, rsnul1nl.ok: new files. + +Sun Apr 25 13:02:35 1999 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (inetechu,inetecht,inetdayu,inetdayt,inet): new + tests, courtesy of Juergen Khars. + (paramtyp): new test for bug from Juergen. + * paramtyp.awk, paramtyp.in: new files. + +Sun Oct 25 23:11:46 1998 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (ofmtbig,procinfs): new test cases. + * procinfs.awk, procinfs.ok: new files. + * ofmtbig.awk, ofmtbig.in, ofmtbig.ok: new files. + +Tue Oct 20 22:07:10 1998 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (lint): new test case. + * lint.awk, lint.ok: new files. + * badargs.ok: updated output corresponding to change made to + main.c (see main ChangeLog). + +Tue May 26 20:39:07 1998 Arnold D. Robbins <arnold@gnu.org> + + * pipeio2.awk: change "\'" to "'" to avoid new warning. + +Mon Mar 23 21:53:36 1998 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (fnasgnm): new test case. + * fnasgnm.awk, fnasgnm.in, fnasgnm.ok: new files. + +Fri Mar 20 11:01:38 1998 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (fnaryscl): new test case. + * fnaryscl.awk, fnaryscl.ok: new files. + +Mon Mar 16 15:23:22 1998 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (splitdef): new test case. + * splitdef.awk, splitdef.ok: new files. + +Fri Sep 26 01:10:14 1997 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (parseme): new test case. + * parseme.awk, parseme.ok: new files. + +Sun Sep 14 23:25:10 1997 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (ofmts): new test case. + * ofmts.awk, ofmts.in, ofmts.ok: new files. + +Sun Aug 17 07:17:35 1997 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (fsfwfs): new test case. + * fsfwfs.awk, fsfwfs.in, fsfwfs.ok: new files. + +Sun Jul 27 23:08:53 1997 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (hsprint): new test case. + * hsprint.awk, hsprint.ok, printfloat.awk: new files. + +Thu Jul 17 20:07:31 1997 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (ofmt): new test case. + * ofmt.awk, ofmt.in, ofmt.ok: new files. + +Sun Jun 22 16:17:35 1997 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (nlinstr): new test case. + * nlinstr.awk, nlinstr.in, nlinstr.ok: new files. + +Wed Jun 4 13:18:21 1997 Arnold D. Robbins <arnold@gnu.org> + + * pid.sh: send errors to /dev/null to toss warning about + using PROCINFO["pid"] etc. This test explicitly tests + the special files. It'll need changing in 3.2. + +Thu Apr 24 23:24:59 1997 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (messages): remove special case if /dev/fd exists. + Finally. + +Mon Aug 7 15:23:00 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Release 3.0.6: Release tar file made. + +Thu Aug 3 17:51:56 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (nlstrina): new test case. + * nlstrina.awk, nlstrina.ok: new files. + +Tue Jul 11 14:22:55 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (fnparydl): new test case. + * fnparydl.awk, fnparydl.ok: new files. + +Fri Jun 30 22:00:03 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (arysubnm): new test case. + * arysubnm.awk, arysubnm.ok: new files. + +Sun Jun 25 15:08:19 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Release 3.0.5: Release tar file made. + +Wed Jun 14 13:17:59 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (getlnbuf): new test case. + * getlnbuf.awk, gtlnbufv.awk, getlnbuf.in, getlnbuf.ok: new files. + +Mon Jun 5 15:51:39 2000 Arnold D. Robbins <arnold@skeeve.com> + + * pipeio2.awk: Change use of tr to sed, fixes problems + on SCO OS5. + * pipeio2.ok: Updated to reflect use of sed. + +Tue May 2 13:28:04 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (strftime): moved test code into a separate + file for the PC guys. + * strftime.awk: new file. + +Mon Apr 10 15:58:13 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (longwrds): Add setting LC_ALL=C to sort + call to preserve traditional output. (Theme from the + Twilight Zone plays eerily in the background...) + +Sun Apr 2 17:51:40 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (igncdym): new test case. + * igncdym.awk, igncdym.in, igncdym.ok: new files. + +Wed Mar 8 13:43:44 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (arynocls): new test case. + * arynocls.awk, arynocls.in, arynocls.ok: new files. + +Sun Feb 6 11:45:15 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (opasnidx): new test case. + * opasnidx.awk, opasnidx.ok: new files. + +Tue Feb 1 18:40:45 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (opasnslf): new test case. + * opasnslf.awk, opasnslf.ok: new files. + +Thu Jan 27 18:09:18 2000 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (subslash): new test case. + * subslash.awk, subslash.ok: new files. + +Fri Nov 26 11:03:07 1999 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (numindex): new test case. + * numindex.awk, numindex.in, numindex.ok: new files. + +Sun Oct 24 08:46:16 1999 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (strftime): Add tweak for $NF that should + hopefully avoid cygwin problems with lack of timezone. + +Thu Jul 29 19:25:02 1999 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.in (fsmnam, fnamedat): new test cases. + * fsmnam.awk, fsmnam.ok: new files. + * fnamedat.awk, fnamedat.in, fnamedat.ok: new files. + +Wed Jun 30 16:14:36 1999 Arnold D. Robbins <arnold@gnu.org> + + * Release 3.0.4: Release tar file made. This time for sure. + +Tue May 25 16:37:50 1999 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (printf1): new test case. + * printf1.awk, printf1.ok: new files. + +Wed May 19 15:32:09 1999 Arnold D. Robbins <arnold@gnu.org> + + * reg/*: moved exp and log tests to new `Obsolete' directory; they + would only succeed under SunOS 4.x. + +Mon May 3 11:53:33 1999 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (gawk.extensions): removed `nondec' until the + associated features get documented in 3.1. + +Tue Nov 3 16:46:39 1998 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (getnr2tm, getnr2tb): new test cases. + * getnr2tm.awk, getnr2tm.in, getnr2tm.ok: new files. + * getnr2tb.awk, getnr2tb.in, getnr2tb.ok: new files. + +Sun Nov 1 13:20:08 1998 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (zeroflag): new test case. + * zeroflag.awk, zeroflag.ok: new files + +Wed Oct 28 18:44:19 1998 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (nasty): new test case. + * nasty.awk, nasty.ok: new files + +Sun Nov 16 20:08:59 1997 Arnold D. Robbins <arnold@gnu.org> + + * gsubtest.awk, gsubtest.ok: fix for count of matches in gsub + from Geert.Debyser@esat.kuleuven.ac.be. + +Sun Nov 16 19:54:50 1997 Arnold D. Robbins <arnold@gnu.org> + + * Makefile.in (strftime): fix a typo (LANC -> LANG). + +Thu May 15 12:49:08 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Release 3.0.3: Release tar file made. + +Tue May 13 12:53:46 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (messages): more testing for OK failure on Linux. + +Sun May 11 14:57:11 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (nondec): new test case. + * nondec.awk, nondec.ok: new files. + +Sun May 11 07:07:05 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (prdupval): new test case. + * prdupval.awk, prdupval.in, prdupval.ok: new files. + +Wed May 7 21:54:34 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (delarprm): new test case. + * delarprm.awk, delarprm.ok: new files. + +Wed May 7 17:54:00 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (pid): several fixes from ghazi@caip.rutgers.edu. + +Tue May 6 20:28:30 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (strftime): Use the right locale stuff. + (clobber): don't need an input file. + +Thu Apr 24 22:24:42 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (pid): new test case, from jco@convex.com. + (specfile): removed test case, pid does it better. + * pid.awk, pid.ok, pid.sh: new files. + * specfile.awk: removed. + +Wed Apr 23 23:37:10 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (pipeio2): new test case. + * pipeio2.awk, pipeio2.ok, pipeio2.in: new files. + +Sun Apr 20 12:22:52 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (clobber): new test case. + * clobber.awk, clobber.ok: new files. + +Fri Apr 18 07:55:47 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * BETA Release 3.0.34: Release tar file made. + +Tue Apr 15 05:57:29 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (strftlng): More wizardry for bizarre Unix systems. + (nlfldsep): use program and input file, not shell script + (basic, unix-tests, gawk.extensions): moved specfile, pipeio1 + and strftlng into unix-tests per Pat Rankin. + * nlfldsep.awk, nlfldsep.in: new files. + * nlfldsep.sh: removed. + +Wed Apr 9 23:32:47 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (funstack): new test case. + * funstack.awk, funstack.in, funstack.ok: new files. + * substr.awk: added many more tests. + * substr.ok: updated + +Wed Mar 19 20:10:21 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (pipeio1): new test case. + * pipeio1.awk, pipeio1.ok: new files. + +Tue Mar 18 06:38:36 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (noparm): new test case. + * noparm.awk, noparm.ok: new files. + +Fri Feb 21 06:30:18 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (reint): new test case. + * reint.awk, reint.in, reint.ok: new files. + +Wed Feb 5 18:17:51 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (fnarydel): new test case. + * fnarydel.awk, fnarydel.ok: new files. + +Sun Jan 19 17:06:18 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (nors): new test case. + * nors.ok: new file. + +Sun Jan 19 17:06:18 1997 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (specfile, strftlng, nfldstr): new test cases. + * specfile.awk, strftlng.awk, strftlng.ok, nfldstr.ok: new files. + +Fri Dec 27 11:27:13 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (intest): new test case. + * intest.awk, intest.ok: new files. + +Wed Dec 25 11:25:22 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Release 3.0.2: Release tar file made. + +Tue Dec 10 23:09:26 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Release 3.0.1: Release tar file made. + +Thu Nov 7 09:12:20 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (splitvar): new test case. + * splitvar.awk, splitvar.in, splitvar.ok: new files. + +Sun Nov 3 10:55:50 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (nlfldsep): new test case. + * nlfldsep.sh, nlfldsep.ok: new files. + +Fri Oct 25 10:29:56 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * rand.awk: call srand with fixed seed. + * rand.ok: new file. + * Makefile.in (rand): changed to compare output with rand.ok. + +Sat Oct 19 21:52:04 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (tradanch): new test case. + * tradanch.awk, tradanch.in, tradanch.ok: new files. + +Thu Oct 17 21:22:05 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * tweakfld.awk: move `rm' out into Makefile.in. + * eofsplit.awk: fixed buggy code so won't loop forever. + * Makefile.in (all): add unix-tests. + (unix-tests): new target, has pound-bang, fflush, getlnhd. + (basic): removed fflush, getlnhd. + (tweakfld): added rm from tweakfld.awk. + +Sun Oct 6 22:00:35 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (back89): new test case. + * back89.in, back89.ok: new files. + +Sun Oct 6 20:45:54 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (splitwht): new test case. + * splitwht.awk, splitwht.ok: new files. + +Sun Sep 29 23:14:20 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (gsubtest): new test case. + * gsubtest.awk, gsubtest.ok: new files. + +Fri Sep 20 11:58:40 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (prtoeval): new test case. + * prtoeval.awk, prtoeval.ok: new files. + +Tue Sep 10 06:26:44 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (gsubasgn): new test case. + * gsubasgn.awk, gsubasgn.ok: new files. + +Wed Aug 28 22:06:33 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * badargs.ok: updated output corresponding to change made to + main.c (see main ChangeLog). + +Thu Aug 1 07:20:28 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (clean): remove out[123] files from `messages' test. + Thanks to Pat Rankin (rankin@eql.caltech.edu). + +Sat Jul 27 23:56:57 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (prt1eval): new test case. + * prt1eval.awk, prt1eval.ok: new files. + +Mon Jul 22 22:06:10 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (eofsplit): new test case. + * eofsplit.awk, eofsplit.ok: new files. + +Sun Jul 14 07:07:45 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (fldchgnf): new test case. + * fldchgnf.awk, fldchgnf.ok: new files. + +Tue May 21 23:23:22 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (substr): new test case. + * substr.awk, substr.ok: new files. + +Tue May 14 15:05:23 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (dynlj): new test case. + * dynlj.awk, dynlj.ok: new files. + +Sun May 12 20:45:34 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (fnarray): new test case. + * fnarray.awk, fnarray.ok: new files. + +Fri Mar 15 06:46:48 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (clean): added `*~' to list of files to be removed. + * tweakfld.awk (END): added to do clean up action. + +Thu Mar 14 16:41:32 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (mmap8k): new test case. + * mmap8k.in, mmap8k.ok: new files. + +Sun Mar 10 22:58:35 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (clsflnam): new test case. + * clsflnam.in, clsflnam.awk, clsflnam.ok: new files. + * tweakfld.awk: changed to have a fixed date. + +Thu Mar 7 09:56:09 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (tweakfld): new test case. + * tweakfld.in, tweakfld.awk, tweakfld.ok: new files. + +Sun Mar 3 06:51:26 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (getlnhd, backgsub) : new test cases. + * getlnhd.awk, getlnhd.ok: new files. + * backgsub.in, backgsub.awk, backgsub.ok: new files. + +Mon Feb 26 22:30:02 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (sprintfc): new test case. + * sprintfc.in, sprintfc.awk, sprintfc.ok: new files. + * gensub.awk: updated for case of no match of regex. + +Wed Jan 24 10:06:16 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * Makefile.in (distclean, maintainer-clean): new targets. + (reindops): added test from Rick Adams (rick@uunet.uu.net). + (arrayparm, paramdup, defref, strftime, prmarscl, sclforin, + sclifin): Fix from Larry Schwimmer (schwim@cyclone.stanford.edu) + so that tests that are supposed to fail use `... || exit 0' to + cause a clean `make clean'. + +Wed Jan 10 22:58:55 1996 Arnold D. Robbins <arnold@skeeve.atl.ga.us> + + * ChangeLog created. diff --git a/test/Gentests b/test/Gentests new file mode 100755 index 0000000..10401dd --- /dev/null +++ b/test/Gentests @@ -0,0 +1,92 @@ +#!/usr/bin/gawk -f + +# This program should generate Maketests + +BEGIN { + # read the list of files + for (i = 2; i < ARGC; i++) + files[ARGV[i]] + + # throw it away + ARGC = 2 + + ntests = 0 +} + +# process the file Makefile.am: + +/^[A-Z_]*_TESTS *=/,/[^\\]$/ { + gsub(/(^[A-Z_]*_TESTS *=|\\$)/,"") + for (i = 1; i <= NF; i++) + tests[++ntests] = $i + next +} + +/^NEED_LINT *=/,/[^\\]$/ { + gsub(/(^NEED_LINT *=|\\$)/,"") + for (i = 1; i <= NF; i++) + lint[$i] + next +} + +/^GENTESTS_UNUSED *=/,/[^\\]$/ { + gsub(/(^GENTESTS_UNUSED *=|\\$)/,"") + for (i = 1; i <= NF; i++) + unused[$i] + next +} + +/^[a-zA-Z][a-zA-Z0-9]*:/ { + # remember all targets from Makefile.am + sub(/:.*/,"") + targets[$0] +} + +# Now write the output file: +END { + # this line tells automake to keep the comment with the rules: + print "Gt-dummy:" + print "# file Maketests, generated from Makefile.am by the Gentests program" + + for (i = 1; i <= ntests; i++) { + x = tests[i] + if (!(x in targets)) + generate(x) + } + + print "# end of file Maketests" +} + +function generate(x, s) +{ + if (!(x".awk" in files)) + printf "WARNING: file `%s.awk' not found.\n", x > "/dev/stderr" + else + delete files[x".awk"] + + print x ":" + + s = "" + if (x in lint) { + s = s " --lint" + delete lint[x] + } + if (x".in" in files) { + s = s " < $(srcdir)/$@.in" + delete files[x".in"] + } + + printf "\t@echo %s\n", x + printf "\t@AWKPATH=$(srcdir) $(AWK) -f $@.awk %s >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@\n", s + printf "\t@-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@\n\n" +} + +END { + for (x in lint) + if (!(x in targets)) + printf "WARNING: --lint target `%s' is missing.\n", x > "/dev/stderr" + for (x in files) + if (!(x in unused) && \ + !(gensub(/\.(awk|in)$/,"","",x) in targets)) + printf "WARNING: unused file `%s'.\n", x > "/dev/stderr" +} diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 0000000..ada5d39 --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,1005 @@ +# +# test/Makefile.am --- automake input file for gawk +# +# Copyright (C) 1988-2005 the Free Software Foundation, Inc. +# +# This file is part of GAWK, the GNU implementation of the +# AWK Programming Language. +# +# GAWK is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GAWK is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# + +## process this file with automake to produce Makefile.in + +EXTRA_DIST = \ + reg \ + lib \ + Gentests \ + Maketests \ + README \ + addcomma.awk \ + addcomma.in \ + addcomma.ok \ + anchgsub.awk \ + anchgsub.in \ + anchgsub.ok \ + argarray.awk \ + argarray.in \ + argarray.ok \ + argtest.awk \ + argtest.ok \ + arrayparm.awk \ + arrayparm.ok \ + arrayprm2.awk \ + arrayprm2.ok \ + arrayprm3.awk \ + arrayprm3.ok \ + arrayref.awk \ + arrayref.ok \ + arrymem1.awk \ + arrymem1.ok \ + arryref2.awk \ + arryref2.ok \ + arryref3.awk \ + arryref3.ok \ + arryref4.awk \ + arryref4.ok \ + arryref5.awk \ + arryref5.ok \ + arynasty.awk \ + arynasty.ok \ + arynocls.awk \ + arynocls.in \ + arynocls.ok \ + aryprm1.awk \ + aryprm1.ok \ + aryprm2.awk \ + aryprm2.ok \ + aryprm3.awk \ + aryprm3.ok \ + aryprm4.awk \ + aryprm4.ok \ + aryprm5.awk \ + aryprm5.ok \ + aryprm6.awk \ + aryprm6.ok \ + aryprm7.awk \ + aryprm7.ok \ + aryprm8.awk \ + aryprm8.ok \ + arysubnm.awk \ + arysubnm.ok \ + asgext.awk \ + asgext.in \ + asgext.ok \ + asort.awk \ + asort.ok \ + asorti.awk \ + asorti.ok \ + awkpath.ok \ + back89.awk \ + back89.in \ + back89.ok \ + backgsub.awk \ + backgsub.in \ + backgsub.ok \ + backw.awk \ + backw.in \ + backw.ok \ + badargs.ok \ + childin.awk \ + childin.in \ + childin.ok \ + clobber.awk \ + clobber.ok \ + clos1way.awk \ + clos1way.ok \ + clsflnam.awk \ + clsflnam.in \ + clsflnam.ok \ + compare.awk \ + compare.in \ + compare.ok \ + compare2.awk \ + compare2.ok \ + concat1.awk \ + concat1.in \ + concat1.ok \ + concat2.awk \ + concat2.ok \ + concat3.awk \ + concat3.ok \ + convfmt.awk \ + convfmt.ok \ + datanonl.awk \ + datanonl.in \ + datanonl.ok \ + defref.awk \ + defref.ok \ + delarprm.awk \ + delarprm.ok \ + delarpm2.awk \ + delarpm2.ok \ + delfunc.awk \ + delfunc.ok \ + dynlj.awk \ + dynlj.ok \ + eofsplit.awk \ + eofsplit.ok \ + exitval1.awk \ + exitval1.ok \ + exitval2.awk \ + exitval2.ok \ + fflush.ok \ + fflush.sh \ + fieldwdth.awk \ + fieldwdth.in \ + fieldwdth.ok \ + fldchg.awk \ + fldchg.in \ + fldchg.ok \ + fldchgnf.awk \ + fldchgnf.in \ + fldchgnf.ok \ + fmttest.awk \ + fmttest.ok \ + fnamedat.awk \ + fnamedat.in \ + fnamedat.ok \ + fnarray.awk \ + fnarray.ok \ + fnarray2.awk \ + fnarray2.ok \ + fnarydel.awk \ + fnarydel.ok \ + fnaryscl.awk \ + fnaryscl.ok \ + fnasgnm.awk \ + fnasgnm.in \ + fnasgnm.ok \ + fnmisc.awk \ + fnmisc.ok \ + fnparydl.awk \ + fnparydl.ok \ + fordel.awk \ + fordel.ok \ + forsimp.awk \ + forsimp.ok \ + fsbs.awk \ + fsbs.in \ + fsbs.ok \ + fsfwfs.awk \ + fsfwfs.in \ + fsfwfs.ok \ + fsrs.awk \ + fsrs.in \ + fsrs.ok \ + fsspcoln.awk \ + fsspcoln.in \ + fsspcoln.ok \ + fstabplus.awk \ + fstabplus.in \ + fstabplus.ok \ + funsemnl.awk \ + funsemnl.ok \ + funsmnam.awk \ + funsmnam.ok \ + funstack.awk \ + funstack.in \ + funstack.ok \ + gensub.awk \ + gensub.in \ + gensub.ok \ + gensub2.awk \ + gensub2.ok \ + getline.awk \ + getline.in \ + getline.ok \ + getline2.awk \ + getline2.ok \ + getline3.awk \ + getline3.ok \ + getlnbuf.awk \ + getlnbuf.in \ + getlnbuf.ok \ + getlnhd.awk \ + getlnhd.ok \ + getnr2tb.awk \ + getnr2tb.in \ + getnr2tb.ok \ + getnr2tm.awk \ + getnr2tm.in \ + getnr2tm.ok \ + gnuops2.awk \ + gnuops2.ok \ + gnuops3.awk \ + gnuops3.ok \ + gnureops.awk \ + gnureops.ok \ + gsubasgn.awk \ + gsubasgn.ok \ + gsubtest.awk \ + gsubtest.ok \ + gsubtst2.awk \ + gsubtst2.ok \ + gsubtst3.awk \ + gsubtst3.in \ + gsubtst3.ok \ + gsubtst4.awk \ + gsubtst4.ok \ + gsubtst5.awk \ + gsubtst5.in \ + gsubtst5.ok \ + gtlnbufv.awk \ + hex.awk \ + hex.ok \ + hsprint.awk \ + hsprint.ok \ + icasefs.awk \ + icasefs.ok \ + icasers.awk \ + icasers.in \ + icasers.ok \ + igncdym.awk \ + igncdym.in \ + igncdym.ok \ + igncfs.awk \ + igncfs.in \ + igncfs.ok \ + ignrcase.awk \ + ignrcase.in \ + ignrcase.ok \ + ignrcas2.awk \ + ignrcas2.ok \ + inftest.awk \ + inftest.ok \ + inputred.awk \ + inputred.ok \ + intest.awk \ + intest.ok \ + intprec.awk \ + intprec.ok \ + iobug1.awk \ + iobug1.ok \ + leaddig.awk \ + leaddig.ok \ + leadnl.awk \ + leadnl.in \ + leadnl.ok \ + lint.awk \ + lint.ok \ + litoct.awk \ + litoct.ok \ + longdbl.awk \ + longdbl.in \ + longdbl.ok \ + longsub.awk \ + longsub.in \ + longsub.ok \ + longwrds.awk \ + longwrds.ok \ + longwrds.in \ + manglprm.awk \ + manglprm.in \ + manglprm.ok \ + manyfiles.awk \ + manyfiles.ok \ + match1.awk \ + match1.ok \ + match2.awk \ + match2.ok \ + math.awk \ + math.ok \ + membug1.awk \ + membug1.in \ + membug1.ok \ + messages.awk \ + minusstr.awk \ + minusstr.ok \ + mmap8k.in \ + nasty.awk \ + nasty.ok \ + nasty2.awk \ + nasty2.ok \ + negexp.awk \ + negexp.ok \ + nested.awk \ + nested.in \ + nested.ok \ + nfldstr.awk \ + nfldstr.in \ + nfldstr.ok \ + nfneg.awk \ + nfneg.ok \ + nfset.awk \ + nfset.in \ + nfset.ok \ + nlfldsep.awk \ + nlfldsep.in \ + nlfldsep.ok \ + nlinstr.awk \ + nlinstr.in \ + nlinstr.ok \ + nlstrina.awk \ + nlstrina.ok \ + noeffect.awk \ + noeffect.ok \ + nofmtch.awk \ + nofmtch.ok \ + noloop1.awk \ + noloop1.in \ + noloop1.ok \ + noloop2.awk \ + noloop2.in \ + noloop2.ok \ + nondec.awk \ + nondec.ok \ + nondec2.awk \ + nondec2.ok \ + nonl.awk \ + nonl.ok \ + noparms.awk \ + noparms.ok \ + nors.in \ + nors.ok \ + nulrsend.awk \ + nulrsend.in \ + nulrsend.ok \ + numindex.awk \ + numindex.in \ + numindex.ok \ + numsubstr.awk \ + numsubstr.in \ + numsubstr.ok \ + octsub.awk \ + octsub.ok \ + ofmt.awk \ + ofmt.in \ + ofmt.ok \ + ofmtbig.awk \ + ofmtbig.in \ + ofmtbig.ok \ + ofmtfidl.awk \ + ofmtfidl.in \ + ofmtfidl.ok \ + ofmts.awk \ + ofmts.in \ + ofmts.ok \ + onlynl.awk \ + onlynl.in \ + onlynl.ok \ + opasnidx.awk \ + opasnidx.ok \ + opasnslf.awk \ + opasnslf.ok \ + out1.ok \ + out2.ok \ + out3.ok \ + paramdup.awk \ + paramdup.ok \ + paramtyp.awk \ + paramtyp.ok \ + parseme.awk \ + parseme.ok \ + pcntplus.awk \ + pcntplus.ok \ + pid.awk \ + pid.ok \ + pid.sh \ + pipeio1.awk \ + pipeio1.ok \ + pipeio2.awk \ + pipeio2.in \ + pipeio2.ok \ + posix.awk \ + posix.in \ + posix.ok \ + poundbang.awk \ + prdupval.awk \ + prdupval.in \ + prdupval.ok \ + prec.awk \ + prec.ok \ + printf0.awk \ + printf0.ok \ + printf1.awk \ + printf1.ok \ + printfbad1.awk \ + printfbad1.ok \ + printfloat.awk \ + printlang.awk \ + prmarscl.awk \ + prmarscl.ok \ + prmreuse.awk \ + prmreuse.ok \ + procinfs.awk \ + procinfs.ok \ + prt1eval.awk \ + prt1eval.ok \ + prtoeval.awk \ + prtoeval.ok \ + psx96sub.awk \ + psx96sub.ok \ + rand.awk \ + rand.ok \ + rebt8b1.awk \ + rebt8b1.ok \ + rebt8b2.awk \ + rebt8b2.ok \ + redfilnm.awk \ + redfilnm.in \ + redfilnm.ok \ + regeq.awk \ + regeq.in \ + regeq.ok \ + regtest.sh \ + regx8bit.awk \ + regx8bit.ok \ + rebuf.awk \ + rebuf.in \ + rebuf.ok \ + reindops.awk \ + reindops.in \ + reindops.ok \ + reint.awk \ + reint.in \ + reint.ok \ + reparse.awk \ + reparse.in \ + reparse.ok \ + resplit.awk \ + resplit.in \ + resplit.ok \ + rs.awk \ + rs.in \ + rs.ok \ + rsnul1nl.awk \ + rsnul1nl.in \ + rsnul1nl.ok \ + rsnulbig.ok \ + rsnulbig2.ok \ + rsstart1.awk \ + rsstart1.in \ + rsstart1.ok \ + rsstart2.awk \ + rsstart2.ok \ + rsstart3.ok \ + rstest1.awk \ + rstest1.ok \ + rstest2.awk \ + rstest2.ok \ + rstest3.awk \ + rstest3.ok \ + rstest4.awk \ + rstest4.ok \ + rstest5.awk \ + rstest5.ok \ + rstest6.awk \ + rstest6.in \ + rstest6.ok \ + rswhite.awk \ + rswhite.in \ + rswhite.ok \ + scalar.awk \ + scalar.ok \ + sclforin.awk \ + sclforin.ok \ + sclifin.awk \ + sclifin.ok \ + shadow.awk \ + shadow.ok \ + sort1.awk \ + sort1.ok \ + sortempty.awk \ + sortempty.ok \ + space.ok \ + splitargv.awk \ + splitargv.in \ + splitargv.ok \ + splitarr.awk \ + splitarr.ok \ + splitdef.awk \ + splitdef.ok \ + splitvar.awk \ + splitvar.in \ + splitvar.ok \ + splitwht.awk \ + splitwht.ok \ + sprintfc.awk \ + sprintfc.in \ + sprintfc.ok \ + strcat1.awk \ + strcat1.ok \ + strtod.awk \ + strtod.in \ + strtod.ok \ + strtonum.awk \ + strtonum.ok \ + strftime.awk \ + strftlng.awk \ + strftlng.ok \ + subamp.awk \ + subamp.in \ + subamp.ok \ + subsepnm.awk \ + subsepnm.ok \ + subslash.awk \ + subslash.ok \ + substr.awk \ + substr.ok \ + swaplns.awk \ + swaplns.in \ + swaplns.ok \ + switch2.awk \ + synerr1.awk \ + synerr1.ok \ + tradanch.awk \ + tradanch.in \ + tradanch.ok \ + tweakfld.awk \ + tweakfld.in \ + tweakfld.ok \ + uninit2.awk \ + uninit2.ok \ + uninit3.awk \ + uninit3.ok \ + uninit4.awk \ + uninit4.ok \ + uninitialized.awk \ + uninitialized.ok \ + unterm.awk \ + unterm.ok \ + whiny.awk \ + whiny.in \ + whiny.ok \ + wjposer1.awk \ + wjposer1.in \ + wjposer1.ok \ + zeroe0.awk \ + zeroe0.ok \ + zeroflag.awk \ + zeroflag.ok + +TESTS_WE_ARE_NOT_DOING_YET_FIXME_ONE_DAY = longdbl + +# Get rid of core files when cleaning +CLEANFILES = core core.* + +# try to keep these sorted +BASIC_TESTS = addcomma anchgsub argarray arrayparm arrayref arrymem1 \ + arrayprm2 arrayprm3 arryref2 arryref3 arryref4 arryref5 arynasty \ + arynocls aryprm1 aryprm2 aryprm3 aryprm4 aryprm5 aryprm6 aryprm7 \ + aryprm8 arysubnm asgext awkpath back89 backgsub childin clobber \ + clsflnam compare compare2 concat1 concat2 concat3 convfmt datanonl defref \ + delarprm delarpm2 delfunc dynlj eofsplit exitval1 exitval2 fldchg fldchgnf fmttest fnamedat \ + fnarray fnarray2 fnarydel fnaryscl fnasgnm fnmisc fnparydl \ + fordel forsimp fsbs fsspcoln fsrs fstabplus funsemnl funsmnam funstack getline \ + getline2 getline3 getlnbuf getnr2tb getnr2tm gsubasgn gsubtest \ + gsubtst2 gsubtst3 gsubtst4 gsubtst5 hex hsprint inputred intest \ + intprec iobug1 leaddig leadnl litoct longsub longwrds manglprm math membug1 \ + messages minusstr mmap8k nasty nasty2 negexp nested nfldstr \ + nfneg nfset nlfldsep nlinstr nlstrina noeffect nofmtch noloop1 \ + noloop2 nonl noparms nors nulrsend numindex numsubstr octsub ofmt \ + ofmtbig ofmtfidl ofmts onlynl opasnidx opasnslf paramdup paramtyp \ + parseme pcntplus prdupval prec printf0 printf1 prmarscl prmreuse \ + prt1eval prtoeval psx96sub rand rebt8b1 rebt8b2 redfilnm regeq \ + reindops reparse resplit rs rsnul1nl rsnulbig rsnulbig2 rstest1 \ + rstest2 rstest3 rstest4 rstest5 rswhite scalar sclforin sclifin \ + sortempty splitargv splitarr splitdef splitvar splitwht sprintfc \ + strcat1 strtod subamp subsepnm subslash substr swaplns synerr1 tradanch \ + tweakfld uninit2 uninit3 uninit4 uninitialized unterm wjposer1 \ + zeroe0 zeroflag + +UNIX_TESTS = fflush getlnhd pid pipeio1 pipeio2 poundbang space strftlng + +GAWK_EXT_TESTS = argtest asort asorti backw badargs clos1way fieldwdth fsfwfs \ + gensub gensub2 gnuops2 gnuops3 gnureops icasefs icasers igncdym igncfs ignrcase \ + ignrcas2 lint match1 match2 manyfiles nondec nondec2 posix procinfs \ + printfbad1 regx8bit rebuf reint rsstart1 rsstart2 rsstart3 \ + rstest6 shadow sort1 strtonum strftime whiny + +EXTRA_TESTS = regtest inftest + +INET_TESTS = inetechu inetecht inetdayu inetdayt + +# List of the tests which should be run with --lint option: +NEED_LINT = defref noeffect nofmtch shadow uninit2 uninit3 uninit4 uninitialized + +# List of the files that appear in manual tests or are for reserve testing: +GENTESTS_UNUSED = Makefile.in gtlnbufv.awk printfloat.awk switch2.awk + +CMP = cmp +AWKPROG = ../gawk$(EXEEXT) + +# This business forces the locale to be C for running the tests, +# unless we override it to something else for testing. +# +# This can also be done in individual tests where we wish to +# check things specifically not in the C locale. +AWK = LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} $(AWKPROG) + +# Message stuff is to make it a little easier to follow. +# Make the pass-fail last and dependent on others to avoid +# spurious errors if `make -j' in effect. +check: msg \ + printlang \ + basic-msg-start basic basic-msg-end \ + unix-msg-start unix-tests unix-msg-end \ + extend-msg-start gawk-extensions extend-msg-end + @$(MAKE) pass-fail + +basic: $(BASIC_TESTS) + +unix-tests: $(UNIX_TESTS) + +gawk-extensions: $(GAWK_EXT_TESTS) + +extra: $(EXTRA_TESTS) inet + +inet: inetmesg $(INET_TESTS) + +msg:: + @echo '' + @echo 'Any output from "cmp" is bad news, although some differences' + @echo 'in floating point values are probably benign -- in particular,' + @echo 'some systems may omit a leading zero and the floating point' + @echo 'precision may lead to slightly different output in a few cases.' + +printlang:: + @$(AWK) -f $(srcdir)/printlang.awk + +basic-msg-start: + @echo "======== Starting basic tests ========" + +basic-msg-end: + @echo "======== Done with basic tests ========" + +unix-msg-start: + @echo "======== Starting Unix tests ========" + +unix-msg-end: + @echo "======== Done with Unix tests ========" + +extend-msg-start: + @echo "======== Starting gawk extension tests ========" + +extend-msg-end: + @echo "======== Done with gawk extension tests ========" + + +# This test is a PITA because increasingly, /tmp is getting +# mounted noexec. So, we'll test it locally. Sigh. +# +# More PITA; some systems have medium short limits on #! paths, +# so this can still fail +poundbang:: + @echo $@ + @sed "s;/tmp/gawk;`pwd`/$(AWKPROG);" < $(srcdir)/poundbang.awk > ./_pbd.awk + @chmod +x ./_pbd.awk + @if ./_pbd.awk $(srcdir)/poundbang.awk > _`basename $@` ; \ + then : ; \ + else \ + sed "s;/tmp/gawk;../$(AWKPROG);" < $(srcdir)/poundbang.awk > ./_pbd.awk ; \ + chmod +x ./_pbd.awk ; \ + LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} ./_pbd.awk $(srcdir)/poundbang.awk > _`basename $@`; \ + fi + @-$(CMP) $(srcdir)/poundbang.awk _`basename $@` && rm -f _`basename $@` _pbd.awk + +messages:: + @echo $@ + @$(AWK) -f $(srcdir)/messages.awk >out2 2>out3 + @-$(CMP) $(srcdir)/out1.ok out1 && $(CMP) $(srcdir)/out2.ok out2 && $(CMP) $(srcdir)/out3.ok out3 && rm -f out1 out2 out3 + +argarray:: + @echo $@ + @case $(srcdir) in \ + .) : ;; \ + *) cp $(srcdir)/argarray.in . ;; \ + esac + @TEST=test echo just a test | $(AWK) -f $(srcdir)/argarray.awk ./argarray.in - >_$@ + @case $(srcdir) in \ + .) : ;; \ + *) rm -f ./argarray.in ;; \ + esac + @-$(CMP) $(srcdir)/argarray.ok _$@ && rm -f _$@ + +regtest:: + @echo 'Some of the output from regtest is very system specific, do not' + @echo 'be distressed if your output differs from that distributed.' + @echo 'Manual inspection is called for.' + AWK=`pwd`/$(AWK) $(srcdir)/regtest.sh + +manyfiles:: + @echo manyfiles + @rm -rf junk + @mkdir junk + @$(AWK) 'BEGIN { for (i = 1; i <= 300; i++) print i, i}' >_$@ + @$(AWK) -f $(srcdir)/manyfiles.awk _$@ _$@ + @wc -l junk/* | $(AWK) '$$1 != 2' | wc -l | sed "s/ *//g" > _$@ + @rm -rf junk ; $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +compare:: + @echo $@ + @$(AWK) -f $(srcdir)/compare.awk 0 1 $(srcdir)/compare.in >_$@ + @-$(CMP) $(srcdir)/compare.ok _$@ && rm -f _$@ + +inftest:: + @echo $@ + @echo This test is very machine specific... + @$(AWK) -f $(srcdir)/inftest.awk | sed "s/inf/Inf/g" >_$@ + @-$(CMP) $(srcdir)/inftest.ok _$@ && rm -f _$@ + +getline2:: + @echo $@ + @$(AWK) -f $(srcdir)/getline2.awk $(srcdir)/getline2.awk $(srcdir)/getline2.awk >_$@ + @-$(CMP) $(srcdir)/getline2.ok _$@ && rm -f _$@ + +awkpath:: + @echo $@ + @AWKPATH="$(srcdir)$(PATH_SEPARATOR)$(srcdir)/lib" $(AWK) -f awkpath.awk >_$@ + @-$(CMP) $(srcdir)/awkpath.ok _$@ && rm -f _$@ + +argtest:: + @echo $@ + @$(AWK) -f $(srcdir)/argtest.awk -x -y abc >_$@ + @-$(CMP) $(srcdir)/argtest.ok _$@ && rm -f _$@ + +badargs:: + @echo $@ + @-$(AWK) -f 2>&1 | grep -v patchlevel >_$@ + @-$(CMP) $(srcdir)/badargs.ok _$@ && rm -f _$@ + +nonl:: + @echo $@ + @-AWKPATH=$(srcdir) $(AWK) --lint -f nonl.awk /dev/null >_$@ 2>&1 + @-$(CMP) $(srcdir)/nonl.ok _$@ && rm -f _$@ + +strftime:: + @echo This test could fail on slow machines or on a minute boundary, + @echo so if it does, double check the actual results: + @echo $@ + @GAWKLOCALE=C; export GAWKLOCALE; \ + TZ=GMT0; export TZ; \ + (LC_ALL=C date) | $(AWK) -v OUTPUT=_$@ -f $(srcdir)/strftime.awk + @-$(CMP) strftime.ok _$@ && rm -f _$@ strftime.ok || exit 0 + +litoct:: + @echo $@ + @echo ab | $(AWK) --traditional -f $(srcdir)/litoct.awk >_$@ + @-$(CMP) $(srcdir)/litoct.ok _$@ && rm -f _$@ + +fflush:: + @echo $@ + @$(srcdir)/fflush.sh >_$@ + @-$(CMP) $(srcdir)/fflush.ok _$@ && rm -f _$@ + +tweakfld:: + @echo $@ + @$(AWK) -f $(srcdir)/tweakfld.awk $(srcdir)/tweakfld.in >_$@ + @rm -f errors.cleanup + @-$(CMP) $(srcdir)/tweakfld.ok _$@ && rm -f _$@ + +mmap8k:: + @echo $@ + @$(AWK) '{ print }' $(srcdir)/mmap8k.in >_$@ + @-$(CMP) $(srcdir)/mmap8k.in _$@ && rm -f _$@ + +tradanch:: + @echo $@ + @$(AWK) --traditional -f $(srcdir)/tradanch.awk $(srcdir)/tradanch.in >_$@ + @-$(CMP) $(srcdir)/tradanch.ok _$@ && rm -f _$@ + +# AIX /bin/sh exec's the last command in a list, therefore issue a ":" +# command so that pid.sh is fork'ed as a child before being exec'ed. +pid:: + @echo pid + @AWKPATH=$(srcdir) AWK=$(AWKPROG) $(SHELL) $(srcdir)/pid.sh $$$$ > _`basename $@` ; : + @-$(CMP) $(srcdir)/pid.ok _`basename $@` && rm -f _`basename $@` _`basename $@`.in + +strftlng:: + @echo $@ + @TZ=UTC; export TZ; $(AWK) -f $(srcdir)/strftlng.awk >_$@ + @if $(CMP) $(srcdir)/strftlng.ok _$@ >/dev/null 2>&1 ; then : ; else \ + TZ=UTC0; export TZ; $(AWK) -f $(srcdir)/strftlng.awk >_$@ ; \ + fi + @-$(CMP) $(srcdir)/strftlng.ok _$@ && rm -f _$@ + +nors:: + @echo $@ + @echo A B C D E | tr -d '\12\15' | $(AWK) '{ print $$NF }' - $(srcdir)/nors.in > _$@ + @-$(CMP) $(srcdir)/nors.ok _$@ && rm -f _$@ + +reint:: + @echo $@ + @$(AWK) --re-interval -f $(srcdir)/reint.awk $(srcdir)/reint.in >_$@ + @-$(CMP) $(srcdir)/reint.ok _$@ && rm -f _$@ + +pipeio1:: + @echo $@ + @$(AWK) -f $(srcdir)/pipeio1.awk >_$@ + @rm -f test1 test2 + @-$(CMP) $(srcdir)/pipeio1.ok _$@ && rm -f _$@ + +pipeio2:: + @echo $@ + @$(AWK) -v SRCDIR=$(srcdir) -f $(srcdir)/pipeio2.awk >_$@ + @-$(CMP) $(srcdir)/pipeio2.ok _$@ && rm -f _$@ + +clobber:: + @echo $@ + @$(AWK) -f $(srcdir)/clobber.awk >_$@ + @-$(CMP) $(srcdir)/clobber.ok seq && $(CMP) $(srcdir)/clobber.ok _$@ && rm -f _$@ + @rm -f seq + +arynocls:: + @echo $@ + @-AWKPATH=$(srcdir) $(AWK) -v INPUT=$(srcdir)/arynocls.in -f arynocls.awk >_$@ + @-$(CMP) $(srcdir)/arynocls.ok _$@ && rm -f _$@ + +getlnbuf:: + @echo $@ + @-AWKPATH=$(srcdir) $(AWK) -f getlnbuf.awk $(srcdir)/getlnbuf.in > _$@ + @-AWKPATH=$(srcdir) $(AWK) -f gtlnbufv.awk $(srcdir)/getlnbuf.in > _2$@ + @-$(CMP) $(srcdir)/getlnbuf.ok _$@ && $(CMP) $(srcdir)/getlnbuf.ok _2$@ && rm -f _$@ _2$@ + +inetmesg:: + @echo These tests only work if your system supports the services + @echo "'discard'" at port 9 and "'daytimed'" at port 13. Check your + @echo file /etc/services and do "'netstat -a'". + +inetechu:: + @echo This test is for establishing UDP connections + @$(AWK) 'BEGIN {print "" |& "/inet/udp/0/127.0.0.1/9"}' + +inetecht:: + @echo This test is for establishing TCP connections + @$(AWK) 'BEGIN {print "" |& "/inet/tcp/0/127.0.0.1/9"}' + +inetdayu:: + @echo This test is for bidirectional UDP transmission + @$(AWK) 'BEGIN { print "" |& "/inet/udp/0/127.0.0.1/13"; \ + "/inet/udp/0/127.0.0.1/13" |& getline; print $0}' + +inetdayt:: + @echo This test is for bidirectional TCP transmission + @$(AWK) 'BEGIN { print "" |& "/inet/tcp/0/127.0.0.1/13"; \ + "/inet/tcp/0/127.0.0.1/13" |& getline; print $0}' + +redfilnm:: + @echo $@ + @$(AWK) -f $(srcdir)/redfilnm.awk srcdir=$(srcdir) $(srcdir)/redfilnm.in >_$@ + @-$(CMP) $(srcdir)/redfilnm.ok _$@ && rm -f _$@ + +leaddig:: + @echo $@ + @$(AWK) -v x=2E -f $(srcdir)/leaddig.awk >_$@ + @-$(CMP) $(srcdir)/leaddig.ok _$@ && rm -f _$@ + +gsubtst3:: + @echo $@ + @$(AWK) --re-interval -f $(srcdir)/$@.awk $(srcdir)/$@.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +space:: + @echo $@ + @$(AWK) -f ' ' $(srcdir)/space.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +printf0:: + @echo $@ + @$(AWK) --posix -f $(srcdir)/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsnulbig:: + @echo $@ + @ : Suppose that block size for pipe is at most 128kB: + @$(AWK) 'BEGIN { for (i = 1; i <= 128*64+1; i++) print "abcdefgh123456\n" }' 2>&1 | \ + $(AWK) 'BEGIN { RS = ""; ORS = "\n\n" }; { print }' 2>&1 | \ + $(AWK) '/^[^a]/; END{ print NR }' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsnulbig2:: + @echo $@ + @$(AWK) 'BEGIN { ORS = ""; n = "\n"; for (i = 1; i <= 10; i++) n = (n n); \ + for (i = 1; i <= 128; i++) print n; print "abc\n" }' 2>&1 | \ + $(AWK) 'BEGIN { RS = ""; ORS = "\n\n" };{ print }' 2>&1 | \ + $(AWK) '/^[^a]/; END { print NR }' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +whiny:: + @echo $@ + @WHINY_USERS=1 $(AWK) -f $(srcdir)/$@.awk $(srcdir)/$@.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ignrcas2:: + @echo $@ + @GAWKLOCALE=en_US ; export GAWKLOCALE ; \ + $(AWK) -f $(srcdir)/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +subamp:: + @echo $@ + @GAWKLOCALE=en_US.UTF-8 ; export GAWKLOCALE ; \ + $(AWK) -f $(srcdir)/$@.awk $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +# This test makes sure gawk exits with a zero code. +# Thus, unconditionally generate the exit code. +exitval1:: + @echo $@ + @$(AWK) -f $(srcdir)/exitval1.awk >_$@ 2>&1; echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fsspcoln:: + @echo $@ + @$(AWK) -f $(srcdir)/$@.awk 'FS=[ :]+' $(srcdir)/$@.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsstart1:: + @echo $@ + @$(AWK) -f $(srcdir)/$@.awk $(srcdir)/rsstart1.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsstart2:: + @echo $@ + @$(AWK) -f $(srcdir)/$@.awk $(srcdir)/rsstart1.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsstart3:: + @echo $@ + @head $(srcdir)/rsstart1.in | $(AWK) -f $(srcdir)/rsstart2.awk >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nondec2:: + @echo $@ + @$(AWK) --non-decimal-data -v a=0x1 -f $(srcdir)/$@.awk >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +# Targets generated for other tests: +include Maketests + +$(srcdir)/Maketests: $(srcdir)/Makefile.am $(srcdir)/Gentests + $(AWK) -f $(srcdir)/Gentests "$(srcdir)/Makefile.am" *.awk *.in > $(srcdir)/Maketests + +clean: + rm -fr _* core core.* junk out1 out2 out3 strftime.ok test1 test2 seq *~ + +# An attempt to print something that can be grepped for in build logs +pass-fail: + @COUNT=`ls _* 2>/dev/null | wc -l` ; \ + if test $$COUNT = 0 ; \ + then echo ALL TESTS PASSED ; \ + else echo $$COUNT TESTS FAILED ; \ + fi + +# This target for my convenience to look at all the results +diffout: + for i in _* ; \ + do \ + echo ============== $$i ============= ; \ + diff -c $(srcdir)/$${i#_}.ok $$i ; \ + done | more + +# This target is for testing with electric fence. +efence: + for i in $$(ls _* | sed 's;_\(.*\);\1;') ; \ + do \ + bad=$$(wc -l < _$$i) \ + ok=$$(wc -l < $$i.ok) ; \ + if (( $$bad == $$ok + 2 )) ; \ + then \ + rm _$$i ; \ + fi ; \ + done diff --git a/test/Makefile.in b/test/Makefile.in new file mode 100644 index 0000000..0ce9b09 --- /dev/null +++ b/test/Makefile.in @@ -0,0 +1,2249 @@ +# Makefile.in generated by automake 1.9.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# test/Makefile.am --- automake input file for gawk +# +# Copyright (C) 1988-2005 the Free Software Foundation, Inc. +# +# This file is part of GAWK, the GNU implementation of the +# AWK Programming Language. +# +# GAWK is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# GAWK is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +# +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Maketests ChangeLog +subdir = test +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/arch.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/socket.m4 \ + $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ + +# This business forces the locale to be C for running the tests, +# unless we override it to something else for testing. +# +# This can also be done in individual tests where we wish to +# check things specifically not in the C locale. +AWK = LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} $(AWKPROG) +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SOCKET_LIBS = @SOCKET_LIBS@ +STRIP = @STRIP@ +U = @U@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +EXTRA_DIST = \ + reg \ + lib \ + Gentests \ + Maketests \ + README \ + addcomma.awk \ + addcomma.in \ + addcomma.ok \ + anchgsub.awk \ + anchgsub.in \ + anchgsub.ok \ + argarray.awk \ + argarray.in \ + argarray.ok \ + argtest.awk \ + argtest.ok \ + arrayparm.awk \ + arrayparm.ok \ + arrayprm2.awk \ + arrayprm2.ok \ + arrayprm3.awk \ + arrayprm3.ok \ + arrayref.awk \ + arrayref.ok \ + arrymem1.awk \ + arrymem1.ok \ + arryref2.awk \ + arryref2.ok \ + arryref3.awk \ + arryref3.ok \ + arryref4.awk \ + arryref4.ok \ + arryref5.awk \ + arryref5.ok \ + arynasty.awk \ + arynasty.ok \ + arynocls.awk \ + arynocls.in \ + arynocls.ok \ + aryprm1.awk \ + aryprm1.ok \ + aryprm2.awk \ + aryprm2.ok \ + aryprm3.awk \ + aryprm3.ok \ + aryprm4.awk \ + aryprm4.ok \ + aryprm5.awk \ + aryprm5.ok \ + aryprm6.awk \ + aryprm6.ok \ + aryprm7.awk \ + aryprm7.ok \ + aryprm8.awk \ + aryprm8.ok \ + arysubnm.awk \ + arysubnm.ok \ + asgext.awk \ + asgext.in \ + asgext.ok \ + asort.awk \ + asort.ok \ + asorti.awk \ + asorti.ok \ + awkpath.ok \ + back89.awk \ + back89.in \ + back89.ok \ + backgsub.awk \ + backgsub.in \ + backgsub.ok \ + backw.awk \ + backw.in \ + backw.ok \ + badargs.ok \ + childin.awk \ + childin.in \ + childin.ok \ + clobber.awk \ + clobber.ok \ + clos1way.awk \ + clos1way.ok \ + clsflnam.awk \ + clsflnam.in \ + clsflnam.ok \ + compare.awk \ + compare.in \ + compare.ok \ + compare2.awk \ + compare2.ok \ + concat1.awk \ + concat1.in \ + concat1.ok \ + concat2.awk \ + concat2.ok \ + concat3.awk \ + concat3.ok \ + convfmt.awk \ + convfmt.ok \ + datanonl.awk \ + datanonl.in \ + datanonl.ok \ + defref.awk \ + defref.ok \ + delarprm.awk \ + delarprm.ok \ + delarpm2.awk \ + delarpm2.ok \ + delfunc.awk \ + delfunc.ok \ + dynlj.awk \ + dynlj.ok \ + eofsplit.awk \ + eofsplit.ok \ + exitval1.awk \ + exitval1.ok \ + exitval2.awk \ + exitval2.ok \ + fflush.ok \ + fflush.sh \ + fieldwdth.awk \ + fieldwdth.in \ + fieldwdth.ok \ + fldchg.awk \ + fldchg.in \ + fldchg.ok \ + fldchgnf.awk \ + fldchgnf.in \ + fldchgnf.ok \ + fmttest.awk \ + fmttest.ok \ + fnamedat.awk \ + fnamedat.in \ + fnamedat.ok \ + fnarray.awk \ + fnarray.ok \ + fnarray2.awk \ + fnarray2.ok \ + fnarydel.awk \ + fnarydel.ok \ + fnaryscl.awk \ + fnaryscl.ok \ + fnasgnm.awk \ + fnasgnm.in \ + fnasgnm.ok \ + fnmisc.awk \ + fnmisc.ok \ + fnparydl.awk \ + fnparydl.ok \ + fordel.awk \ + fordel.ok \ + forsimp.awk \ + forsimp.ok \ + fsbs.awk \ + fsbs.in \ + fsbs.ok \ + fsfwfs.awk \ + fsfwfs.in \ + fsfwfs.ok \ + fsrs.awk \ + fsrs.in \ + fsrs.ok \ + fsspcoln.awk \ + fsspcoln.in \ + fsspcoln.ok \ + fstabplus.awk \ + fstabplus.in \ + fstabplus.ok \ + funsemnl.awk \ + funsemnl.ok \ + funsmnam.awk \ + funsmnam.ok \ + funstack.awk \ + funstack.in \ + funstack.ok \ + gensub.awk \ + gensub.in \ + gensub.ok \ + gensub2.awk \ + gensub2.ok \ + getline.awk \ + getline.in \ + getline.ok \ + getline2.awk \ + getline2.ok \ + getline3.awk \ + getline3.ok \ + getlnbuf.awk \ + getlnbuf.in \ + getlnbuf.ok \ + getlnhd.awk \ + getlnhd.ok \ + getnr2tb.awk \ + getnr2tb.in \ + getnr2tb.ok \ + getnr2tm.awk \ + getnr2tm.in \ + getnr2tm.ok \ + gnuops2.awk \ + gnuops2.ok \ + gnuops3.awk \ + gnuops3.ok \ + gnureops.awk \ + gnureops.ok \ + gsubasgn.awk \ + gsubasgn.ok \ + gsubtest.awk \ + gsubtest.ok \ + gsubtst2.awk \ + gsubtst2.ok \ + gsubtst3.awk \ + gsubtst3.in \ + gsubtst3.ok \ + gsubtst4.awk \ + gsubtst4.ok \ + gsubtst5.awk \ + gsubtst5.in \ + gsubtst5.ok \ + gtlnbufv.awk \ + hex.awk \ + hex.ok \ + hsprint.awk \ + hsprint.ok \ + icasefs.awk \ + icasefs.ok \ + icasers.awk \ + icasers.in \ + icasers.ok \ + igncdym.awk \ + igncdym.in \ + igncdym.ok \ + igncfs.awk \ + igncfs.in \ + igncfs.ok \ + ignrcase.awk \ + ignrcase.in \ + ignrcase.ok \ + ignrcas2.awk \ + ignrcas2.ok \ + inftest.awk \ + inftest.ok \ + inputred.awk \ + inputred.ok \ + intest.awk \ + intest.ok \ + intprec.awk \ + intprec.ok \ + iobug1.awk \ + iobug1.ok \ + leaddig.awk \ + leaddig.ok \ + leadnl.awk \ + leadnl.in \ + leadnl.ok \ + lint.awk \ + lint.ok \ + litoct.awk \ + litoct.ok \ + longdbl.awk \ + longdbl.in \ + longdbl.ok \ + longsub.awk \ + longsub.in \ + longsub.ok \ + longwrds.awk \ + longwrds.ok \ + longwrds.in \ + manglprm.awk \ + manglprm.in \ + manglprm.ok \ + manyfiles.awk \ + manyfiles.ok \ + match1.awk \ + match1.ok \ + match2.awk \ + match2.ok \ + math.awk \ + math.ok \ + membug1.awk \ + membug1.in \ + membug1.ok \ + messages.awk \ + minusstr.awk \ + minusstr.ok \ + mmap8k.in \ + nasty.awk \ + nasty.ok \ + nasty2.awk \ + nasty2.ok \ + negexp.awk \ + negexp.ok \ + nested.awk \ + nested.in \ + nested.ok \ + nfldstr.awk \ + nfldstr.in \ + nfldstr.ok \ + nfneg.awk \ + nfneg.ok \ + nfset.awk \ + nfset.in \ + nfset.ok \ + nlfldsep.awk \ + nlfldsep.in \ + nlfldsep.ok \ + nlinstr.awk \ + nlinstr.in \ + nlinstr.ok \ + nlstrina.awk \ + nlstrina.ok \ + noeffect.awk \ + noeffect.ok \ + nofmtch.awk \ + nofmtch.ok \ + noloop1.awk \ + noloop1.in \ + noloop1.ok \ + noloop2.awk \ + noloop2.in \ + noloop2.ok \ + nondec.awk \ + nondec.ok \ + nondec2.awk \ + nondec2.ok \ + nonl.awk \ + nonl.ok \ + noparms.awk \ + noparms.ok \ + nors.in \ + nors.ok \ + nulrsend.awk \ + nulrsend.in \ + nulrsend.ok \ + numindex.awk \ + numindex.in \ + numindex.ok \ + numsubstr.awk \ + numsubstr.in \ + numsubstr.ok \ + octsub.awk \ + octsub.ok \ + ofmt.awk \ + ofmt.in \ + ofmt.ok \ + ofmtbig.awk \ + ofmtbig.in \ + ofmtbig.ok \ + ofmtfidl.awk \ + ofmtfidl.in \ + ofmtfidl.ok \ + ofmts.awk \ + ofmts.in \ + ofmts.ok \ + onlynl.awk \ + onlynl.in \ + onlynl.ok \ + opasnidx.awk \ + opasnidx.ok \ + opasnslf.awk \ + opasnslf.ok \ + out1.ok \ + out2.ok \ + out3.ok \ + paramdup.awk \ + paramdup.ok \ + paramtyp.awk \ + paramtyp.ok \ + parseme.awk \ + parseme.ok \ + pcntplus.awk \ + pcntplus.ok \ + pid.awk \ + pid.ok \ + pid.sh \ + pipeio1.awk \ + pipeio1.ok \ + pipeio2.awk \ + pipeio2.in \ + pipeio2.ok \ + posix.awk \ + posix.in \ + posix.ok \ + poundbang.awk \ + prdupval.awk \ + prdupval.in \ + prdupval.ok \ + prec.awk \ + prec.ok \ + printf0.awk \ + printf0.ok \ + printf1.awk \ + printf1.ok \ + printfbad1.awk \ + printfbad1.ok \ + printfloat.awk \ + printlang.awk \ + prmarscl.awk \ + prmarscl.ok \ + prmreuse.awk \ + prmreuse.ok \ + procinfs.awk \ + procinfs.ok \ + prt1eval.awk \ + prt1eval.ok \ + prtoeval.awk \ + prtoeval.ok \ + psx96sub.awk \ + psx96sub.ok \ + rand.awk \ + rand.ok \ + rebt8b1.awk \ + rebt8b1.ok \ + rebt8b2.awk \ + rebt8b2.ok \ + redfilnm.awk \ + redfilnm.in \ + redfilnm.ok \ + regeq.awk \ + regeq.in \ + regeq.ok \ + regtest.sh \ + regx8bit.awk \ + regx8bit.ok \ + rebuf.awk \ + rebuf.in \ + rebuf.ok \ + reindops.awk \ + reindops.in \ + reindops.ok \ + reint.awk \ + reint.in \ + reint.ok \ + reparse.awk \ + reparse.in \ + reparse.ok \ + resplit.awk \ + resplit.in \ + resplit.ok \ + rs.awk \ + rs.in \ + rs.ok \ + rsnul1nl.awk \ + rsnul1nl.in \ + rsnul1nl.ok \ + rsnulbig.ok \ + rsnulbig2.ok \ + rsstart1.awk \ + rsstart1.in \ + rsstart1.ok \ + rsstart2.awk \ + rsstart2.ok \ + rsstart3.ok \ + rstest1.awk \ + rstest1.ok \ + rstest2.awk \ + rstest2.ok \ + rstest3.awk \ + rstest3.ok \ + rstest4.awk \ + rstest4.ok \ + rstest5.awk \ + rstest5.ok \ + rstest6.awk \ + rstest6.in \ + rstest6.ok \ + rswhite.awk \ + rswhite.in \ + rswhite.ok \ + scalar.awk \ + scalar.ok \ + sclforin.awk \ + sclforin.ok \ + sclifin.awk \ + sclifin.ok \ + shadow.awk \ + shadow.ok \ + sort1.awk \ + sort1.ok \ + sortempty.awk \ + sortempty.ok \ + space.ok \ + splitargv.awk \ + splitargv.in \ + splitargv.ok \ + splitarr.awk \ + splitarr.ok \ + splitdef.awk \ + splitdef.ok \ + splitvar.awk \ + splitvar.in \ + splitvar.ok \ + splitwht.awk \ + splitwht.ok \ + sprintfc.awk \ + sprintfc.in \ + sprintfc.ok \ + strcat1.awk \ + strcat1.ok \ + strtod.awk \ + strtod.in \ + strtod.ok \ + strtonum.awk \ + strtonum.ok \ + strftime.awk \ + strftlng.awk \ + strftlng.ok \ + subamp.awk \ + subamp.in \ + subamp.ok \ + subsepnm.awk \ + subsepnm.ok \ + subslash.awk \ + subslash.ok \ + substr.awk \ + substr.ok \ + swaplns.awk \ + swaplns.in \ + swaplns.ok \ + switch2.awk \ + synerr1.awk \ + synerr1.ok \ + tradanch.awk \ + tradanch.in \ + tradanch.ok \ + tweakfld.awk \ + tweakfld.in \ + tweakfld.ok \ + uninit2.awk \ + uninit2.ok \ + uninit3.awk \ + uninit3.ok \ + uninit4.awk \ + uninit4.ok \ + uninitialized.awk \ + uninitialized.ok \ + unterm.awk \ + unterm.ok \ + whiny.awk \ + whiny.in \ + whiny.ok \ + wjposer1.awk \ + wjposer1.in \ + wjposer1.ok \ + zeroe0.awk \ + zeroe0.ok \ + zeroflag.awk \ + zeroflag.ok + +TESTS_WE_ARE_NOT_DOING_YET_FIXME_ONE_DAY = longdbl + +# Get rid of core files when cleaning +CLEANFILES = core core.* + +# try to keep these sorted +BASIC_TESTS = addcomma anchgsub argarray arrayparm arrayref arrymem1 \ + arrayprm2 arrayprm3 arryref2 arryref3 arryref4 arryref5 arynasty \ + arynocls aryprm1 aryprm2 aryprm3 aryprm4 aryprm5 aryprm6 aryprm7 \ + aryprm8 arysubnm asgext awkpath back89 backgsub childin clobber \ + clsflnam compare compare2 concat1 concat2 concat3 convfmt datanonl defref \ + delarprm delarpm2 delfunc dynlj eofsplit exitval1 exitval2 fldchg fldchgnf fmttest fnamedat \ + fnarray fnarray2 fnarydel fnaryscl fnasgnm fnmisc fnparydl \ + fordel forsimp fsbs fsspcoln fsrs fstabplus funsemnl funsmnam funstack getline \ + getline2 getline3 getlnbuf getnr2tb getnr2tm gsubasgn gsubtest \ + gsubtst2 gsubtst3 gsubtst4 gsubtst5 hex hsprint inputred intest \ + intprec iobug1 leaddig leadnl litoct longsub longwrds manglprm math membug1 \ + messages minusstr mmap8k nasty nasty2 negexp nested nfldstr \ + nfneg nfset nlfldsep nlinstr nlstrina noeffect nofmtch noloop1 \ + noloop2 nonl noparms nors nulrsend numindex numsubstr octsub ofmt \ + ofmtbig ofmtfidl ofmts onlynl opasnidx opasnslf paramdup paramtyp \ + parseme pcntplus prdupval prec printf0 printf1 prmarscl prmreuse \ + prt1eval prtoeval psx96sub rand rebt8b1 rebt8b2 redfilnm regeq \ + reindops reparse resplit rs rsnul1nl rsnulbig rsnulbig2 rstest1 \ + rstest2 rstest3 rstest4 rstest5 rswhite scalar sclforin sclifin \ + sortempty splitargv splitarr splitdef splitvar splitwht sprintfc \ + strcat1 strtod subamp subsepnm subslash substr swaplns synerr1 tradanch \ + tweakfld uninit2 uninit3 uninit4 uninitialized unterm wjposer1 \ + zeroe0 zeroflag + +UNIX_TESTS = fflush getlnhd pid pipeio1 pipeio2 poundbang space strftlng +GAWK_EXT_TESTS = argtest asort asorti backw badargs clos1way fieldwdth fsfwfs \ + gensub gensub2 gnuops2 gnuops3 gnureops icasefs icasers igncdym igncfs ignrcase \ + ignrcas2 lint match1 match2 manyfiles nondec nondec2 posix procinfs \ + printfbad1 regx8bit rebuf reint rsstart1 rsstart2 rsstart3 \ + rstest6 shadow sort1 strtonum strftime whiny + +EXTRA_TESTS = regtest inftest +INET_TESTS = inetechu inetecht inetdayu inetdayt + +# List of the tests which should be run with --lint option: +NEED_LINT = defref noeffect nofmtch shadow uninit2 uninit3 uninit4 uninitialized + +# List of the files that appear in manual tests or are for reserve testing: +GENTESTS_UNUSED = Makefile.in gtlnbufv.awk printfloat.awk switch2.awk +CMP = cmp +AWKPROG = ../gawk$(EXEEXT) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Maketests $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + + +# Message stuff is to make it a little easier to follow. +# Make the pass-fail last and dependent on others to avoid +# spurious errors if `make -j' in effect. +check: msg \ + printlang \ + basic-msg-start basic basic-msg-end \ + unix-msg-start unix-tests unix-msg-end \ + extend-msg-start gawk-extensions extend-msg-end + @$(MAKE) pass-fail + +basic: $(BASIC_TESTS) + +unix-tests: $(UNIX_TESTS) + +gawk-extensions: $(GAWK_EXT_TESTS) + +extra: $(EXTRA_TESTS) inet + +inet: inetmesg $(INET_TESTS) + +msg:: + @echo '' + @echo 'Any output from "cmp" is bad news, although some differences' + @echo 'in floating point values are probably benign -- in particular,' + @echo 'some systems may omit a leading zero and the floating point' + @echo 'precision may lead to slightly different output in a few cases.' + +printlang:: + @$(AWK) -f $(srcdir)/printlang.awk + +basic-msg-start: + @echo "======== Starting basic tests ========" + +basic-msg-end: + @echo "======== Done with basic tests ========" + +unix-msg-start: + @echo "======== Starting Unix tests ========" + +unix-msg-end: + @echo "======== Done with Unix tests ========" + +extend-msg-start: + @echo "======== Starting gawk extension tests ========" + +extend-msg-end: + @echo "======== Done with gawk extension tests ========" + +# This test is a PITA because increasingly, /tmp is getting +# mounted noexec. So, we'll test it locally. Sigh. +# +# More PITA; some systems have medium short limits on #! paths, +# so this can still fail +poundbang:: + @echo $@ + @sed "s;/tmp/gawk;`pwd`/$(AWKPROG);" < $(srcdir)/poundbang.awk > ./_pbd.awk + @chmod +x ./_pbd.awk + @if ./_pbd.awk $(srcdir)/poundbang.awk > _`basename $@` ; \ + then : ; \ + else \ + sed "s;/tmp/gawk;../$(AWKPROG);" < $(srcdir)/poundbang.awk > ./_pbd.awk ; \ + chmod +x ./_pbd.awk ; \ + LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} ./_pbd.awk $(srcdir)/poundbang.awk > _`basename $@`; \ + fi + @-$(CMP) $(srcdir)/poundbang.awk _`basename $@` && rm -f _`basename $@` _pbd.awk + +messages:: + @echo $@ + @$(AWK) -f $(srcdir)/messages.awk >out2 2>out3 + @-$(CMP) $(srcdir)/out1.ok out1 && $(CMP) $(srcdir)/out2.ok out2 && $(CMP) $(srcdir)/out3.ok out3 && rm -f out1 out2 out3 + +argarray:: + @echo $@ + @case $(srcdir) in \ + .) : ;; \ + *) cp $(srcdir)/argarray.in . ;; \ + esac + @TEST=test echo just a test | $(AWK) -f $(srcdir)/argarray.awk ./argarray.in - >_$@ + @case $(srcdir) in \ + .) : ;; \ + *) rm -f ./argarray.in ;; \ + esac + @-$(CMP) $(srcdir)/argarray.ok _$@ && rm -f _$@ + +regtest:: + @echo 'Some of the output from regtest is very system specific, do not' + @echo 'be distressed if your output differs from that distributed.' + @echo 'Manual inspection is called for.' + AWK=`pwd`/$(AWK) $(srcdir)/regtest.sh + +manyfiles:: + @echo manyfiles + @rm -rf junk + @mkdir junk + @$(AWK) 'BEGIN { for (i = 1; i <= 300; i++) print i, i}' >_$@ + @$(AWK) -f $(srcdir)/manyfiles.awk _$@ _$@ + @wc -l junk/* | $(AWK) '$$1 != 2' | wc -l | sed "s/ *//g" > _$@ + @rm -rf junk ; $(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +compare:: + @echo $@ + @$(AWK) -f $(srcdir)/compare.awk 0 1 $(srcdir)/compare.in >_$@ + @-$(CMP) $(srcdir)/compare.ok _$@ && rm -f _$@ + +inftest:: + @echo $@ + @echo This test is very machine specific... + @$(AWK) -f $(srcdir)/inftest.awk | sed "s/inf/Inf/g" >_$@ + @-$(CMP) $(srcdir)/inftest.ok _$@ && rm -f _$@ + +getline2:: + @echo $@ + @$(AWK) -f $(srcdir)/getline2.awk $(srcdir)/getline2.awk $(srcdir)/getline2.awk >_$@ + @-$(CMP) $(srcdir)/getline2.ok _$@ && rm -f _$@ + +awkpath:: + @echo $@ + @AWKPATH="$(srcdir)$(PATH_SEPARATOR)$(srcdir)/lib" $(AWK) -f awkpath.awk >_$@ + @-$(CMP) $(srcdir)/awkpath.ok _$@ && rm -f _$@ + +argtest:: + @echo $@ + @$(AWK) -f $(srcdir)/argtest.awk -x -y abc >_$@ + @-$(CMP) $(srcdir)/argtest.ok _$@ && rm -f _$@ + +badargs:: + @echo $@ + @-$(AWK) -f 2>&1 | grep -v patchlevel >_$@ + @-$(CMP) $(srcdir)/badargs.ok _$@ && rm -f _$@ + +nonl:: + @echo $@ + @-AWKPATH=$(srcdir) $(AWK) --lint -f nonl.awk /dev/null >_$@ 2>&1 + @-$(CMP) $(srcdir)/nonl.ok _$@ && rm -f _$@ + +strftime:: + @echo This test could fail on slow machines or on a minute boundary, + @echo so if it does, double check the actual results: + @echo $@ + @GAWKLOCALE=C; export GAWKLOCALE; \ + TZ=GMT0; export TZ; \ + (LC_ALL=C date) | $(AWK) -v OUTPUT=_$@ -f $(srcdir)/strftime.awk + @-$(CMP) strftime.ok _$@ && rm -f _$@ strftime.ok || exit 0 + +litoct:: + @echo $@ + @echo ab | $(AWK) --traditional -f $(srcdir)/litoct.awk >_$@ + @-$(CMP) $(srcdir)/litoct.ok _$@ && rm -f _$@ + +fflush:: + @echo $@ + @$(srcdir)/fflush.sh >_$@ + @-$(CMP) $(srcdir)/fflush.ok _$@ && rm -f _$@ + +tweakfld:: + @echo $@ + @$(AWK) -f $(srcdir)/tweakfld.awk $(srcdir)/tweakfld.in >_$@ + @rm -f errors.cleanup + @-$(CMP) $(srcdir)/tweakfld.ok _$@ && rm -f _$@ + +mmap8k:: + @echo $@ + @$(AWK) '{ print }' $(srcdir)/mmap8k.in >_$@ + @-$(CMP) $(srcdir)/mmap8k.in _$@ && rm -f _$@ + +tradanch:: + @echo $@ + @$(AWK) --traditional -f $(srcdir)/tradanch.awk $(srcdir)/tradanch.in >_$@ + @-$(CMP) $(srcdir)/tradanch.ok _$@ && rm -f _$@ + +# AIX /bin/sh exec's the last command in a list, therefore issue a ":" +# command so that pid.sh is fork'ed as a child before being exec'ed. +pid:: + @echo pid + @AWKPATH=$(srcdir) AWK=$(AWKPROG) $(SHELL) $(srcdir)/pid.sh $$$$ > _`basename $@` ; : + @-$(CMP) $(srcdir)/pid.ok _`basename $@` && rm -f _`basename $@` _`basename $@`.in + +strftlng:: + @echo $@ + @TZ=UTC; export TZ; $(AWK) -f $(srcdir)/strftlng.awk >_$@ + @if $(CMP) $(srcdir)/strftlng.ok _$@ >/dev/null 2>&1 ; then : ; else \ + TZ=UTC0; export TZ; $(AWK) -f $(srcdir)/strftlng.awk >_$@ ; \ + fi + @-$(CMP) $(srcdir)/strftlng.ok _$@ && rm -f _$@ + +nors:: + @echo $@ + @echo A B C D E | tr -d '\12\15' | $(AWK) '{ print $$NF }' - $(srcdir)/nors.in > _$@ + @-$(CMP) $(srcdir)/nors.ok _$@ && rm -f _$@ + +reint:: + @echo $@ + @$(AWK) --re-interval -f $(srcdir)/reint.awk $(srcdir)/reint.in >_$@ + @-$(CMP) $(srcdir)/reint.ok _$@ && rm -f _$@ + +pipeio1:: + @echo $@ + @$(AWK) -f $(srcdir)/pipeio1.awk >_$@ + @rm -f test1 test2 + @-$(CMP) $(srcdir)/pipeio1.ok _$@ && rm -f _$@ + +pipeio2:: + @echo $@ + @$(AWK) -v SRCDIR=$(srcdir) -f $(srcdir)/pipeio2.awk >_$@ + @-$(CMP) $(srcdir)/pipeio2.ok _$@ && rm -f _$@ + +clobber:: + @echo $@ + @$(AWK) -f $(srcdir)/clobber.awk >_$@ + @-$(CMP) $(srcdir)/clobber.ok seq && $(CMP) $(srcdir)/clobber.ok _$@ && rm -f _$@ + @rm -f seq + +arynocls:: + @echo $@ + @-AWKPATH=$(srcdir) $(AWK) -v INPUT=$(srcdir)/arynocls.in -f arynocls.awk >_$@ + @-$(CMP) $(srcdir)/arynocls.ok _$@ && rm -f _$@ + +getlnbuf:: + @echo $@ + @-AWKPATH=$(srcdir) $(AWK) -f getlnbuf.awk $(srcdir)/getlnbuf.in > _$@ + @-AWKPATH=$(srcdir) $(AWK) -f gtlnbufv.awk $(srcdir)/getlnbuf.in > _2$@ + @-$(CMP) $(srcdir)/getlnbuf.ok _$@ && $(CMP) $(srcdir)/getlnbuf.ok _2$@ && rm -f _$@ _2$@ + +inetmesg:: + @echo These tests only work if your system supports the services + @echo "'discard'" at port 9 and "'daytimed'" at port 13. Check your + @echo file /etc/services and do "'netstat -a'". + +inetechu:: + @echo This test is for establishing UDP connections + @$(AWK) 'BEGIN {print "" |& "/inet/udp/0/127.0.0.1/9"}' + +inetecht:: + @echo This test is for establishing TCP connections + @$(AWK) 'BEGIN {print "" |& "/inet/tcp/0/127.0.0.1/9"}' + +inetdayu:: + @echo This test is for bidirectional UDP transmission + @$(AWK) 'BEGIN { print "" |& "/inet/udp/0/127.0.0.1/13"; \ + "/inet/udp/0/127.0.0.1/13" |& getline; print $0}' + +inetdayt:: + @echo This test is for bidirectional TCP transmission + @$(AWK) 'BEGIN { print "" |& "/inet/tcp/0/127.0.0.1/13"; \ + "/inet/tcp/0/127.0.0.1/13" |& getline; print $0}' + +redfilnm:: + @echo $@ + @$(AWK) -f $(srcdir)/redfilnm.awk srcdir=$(srcdir) $(srcdir)/redfilnm.in >_$@ + @-$(CMP) $(srcdir)/redfilnm.ok _$@ && rm -f _$@ + +leaddig:: + @echo $@ + @$(AWK) -v x=2E -f $(srcdir)/leaddig.awk >_$@ + @-$(CMP) $(srcdir)/leaddig.ok _$@ && rm -f _$@ + +gsubtst3:: + @echo $@ + @$(AWK) --re-interval -f $(srcdir)/$@.awk $(srcdir)/$@.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +space:: + @echo $@ + @$(AWK) -f ' ' $(srcdir)/space.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +printf0:: + @echo $@ + @$(AWK) --posix -f $(srcdir)/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsnulbig:: + @echo $@ + @ : Suppose that block size for pipe is at most 128kB: + @$(AWK) 'BEGIN { for (i = 1; i <= 128*64+1; i++) print "abcdefgh123456\n" }' 2>&1 | \ + $(AWK) 'BEGIN { RS = ""; ORS = "\n\n" }; { print }' 2>&1 | \ + $(AWK) '/^[^a]/; END{ print NR }' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsnulbig2:: + @echo $@ + @$(AWK) 'BEGIN { ORS = ""; n = "\n"; for (i = 1; i <= 10; i++) n = (n n); \ + for (i = 1; i <= 128; i++) print n; print "abc\n" }' 2>&1 | \ + $(AWK) 'BEGIN { RS = ""; ORS = "\n\n" };{ print }' 2>&1 | \ + $(AWK) '/^[^a]/; END { print NR }' >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +whiny:: + @echo $@ + @WHINY_USERS=1 $(AWK) -f $(srcdir)/$@.awk $(srcdir)/$@.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ignrcas2:: + @echo $@ + @GAWKLOCALE=en_US ; export GAWKLOCALE ; \ + $(AWK) -f $(srcdir)/$@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +subamp:: + @echo $@ + @GAWKLOCALE=en_US.UTF-8 ; export GAWKLOCALE ; \ + $(AWK) -f $(srcdir)/$@.awk $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >> _$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +# This test makes sure gawk exits with a zero code. +# Thus, unconditionally generate the exit code. +exitval1:: + @echo $@ + @$(AWK) -f $(srcdir)/exitval1.awk >_$@ 2>&1; echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fsspcoln:: + @echo $@ + @$(AWK) -f $(srcdir)/$@.awk 'FS=[ :]+' $(srcdir)/$@.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsstart1:: + @echo $@ + @$(AWK) -f $(srcdir)/$@.awk $(srcdir)/rsstart1.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsstart2:: + @echo $@ + @$(AWK) -f $(srcdir)/$@.awk $(srcdir)/rsstart1.in >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsstart3:: + @echo $@ + @head $(srcdir)/rsstart1.in | $(AWK) -f $(srcdir)/rsstart2.awk >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nondec2:: + @echo $@ + @$(AWK) --non-decimal-data -v a=0x1 -f $(srcdir)/$@.awk >_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +Gt-dummy: +# file Maketests, generated from Makefile.am by the Gentests program +addcomma: + @echo addcomma + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +anchgsub: + @echo anchgsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrayparm: + @echo arrayparm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrayref: + @echo arrayref + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrymem1: + @echo arrymem1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrayprm2: + @echo arrayprm2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrayprm3: + @echo arrayprm3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arryref2: + @echo arryref2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arryref3: + @echo arryref3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arryref4: + @echo arryref4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arryref5: + @echo arryref5 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arynasty: + @echo arynasty + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm1: + @echo aryprm1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm2: + @echo aryprm2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm3: + @echo aryprm3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm4: + @echo aryprm4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm5: + @echo aryprm5 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm6: + @echo aryprm6 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm7: + @echo aryprm7 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm8: + @echo aryprm8 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arysubnm: + @echo arysubnm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +asgext: + @echo asgext + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +back89: + @echo back89 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +backgsub: + @echo backgsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +childin: + @echo childin + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +clsflnam: + @echo clsflnam + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +compare2: + @echo compare2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +concat1: + @echo concat1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +concat2: + @echo concat2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +concat3: + @echo concat3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +convfmt: + @echo convfmt + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +datanonl: + @echo datanonl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +defref: + @echo defref + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +delarprm: + @echo delarprm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +delarpm2: + @echo delarpm2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +delfunc: + @echo delfunc + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +dynlj: + @echo dynlj + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +eofsplit: + @echo eofsplit + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +exitval2: + @echo exitval2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fldchg: + @echo fldchg + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fldchgnf: + @echo fldchgnf + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fmttest: + @echo fmttest + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnamedat: + @echo fnamedat + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnarray: + @echo fnarray + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnarray2: + @echo fnarray2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnarydel: + @echo fnarydel + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnaryscl: + @echo fnaryscl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnasgnm: + @echo fnasgnm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnmisc: + @echo fnmisc + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnparydl: + @echo fnparydl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fordel: + @echo fordel + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +forsimp: + @echo forsimp + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fsbs: + @echo fsbs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fsrs: + @echo fsrs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fstabplus: + @echo fstabplus + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +funsemnl: + @echo funsemnl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +funsmnam: + @echo funsmnam + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +funstack: + @echo funstack + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getline: + @echo getline + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getline3: + @echo getline3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getnr2tb: + @echo getnr2tb + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getnr2tm: + @echo getnr2tm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubasgn: + @echo gsubasgn + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubtest: + @echo gsubtest + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubtst2: + @echo gsubtst2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubtst4: + @echo gsubtst4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubtst5: + @echo gsubtst5 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +hex: + @echo hex + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +hsprint: + @echo hsprint + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +inputred: + @echo inputred + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +intest: + @echo intest + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +intprec: + @echo intprec + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +iobug1: + @echo iobug1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +leadnl: + @echo leadnl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +longsub: + @echo longsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +longwrds: + @echo longwrds + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +manglprm: + @echo manglprm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +math: + @echo math + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +membug1: + @echo membug1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +minusstr: + @echo minusstr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nasty: + @echo nasty + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nasty2: + @echo nasty2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +negexp: + @echo negexp + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nested: + @echo nested + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nfldstr: + @echo nfldstr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nfneg: + @echo nfneg + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nfset: + @echo nfset + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nlfldsep: + @echo nlfldsep + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nlinstr: + @echo nlinstr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nlstrina: + @echo nlstrina + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +noeffect: + @echo noeffect + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nofmtch: + @echo nofmtch + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +noloop1: + @echo noloop1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +noloop2: + @echo noloop2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +noparms: + @echo noparms + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nulrsend: + @echo nulrsend + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +numindex: + @echo numindex + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +numsubstr: + @echo numsubstr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +octsub: + @echo octsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ofmt: + @echo ofmt + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ofmtbig: + @echo ofmtbig + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ofmtfidl: + @echo ofmtfidl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ofmts: + @echo ofmts + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +onlynl: + @echo onlynl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +opasnidx: + @echo opasnidx + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +opasnslf: + @echo opasnslf + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +paramdup: + @echo paramdup + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +paramtyp: + @echo paramtyp + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +parseme: + @echo parseme + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +pcntplus: + @echo pcntplus + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prdupval: + @echo prdupval + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prec: + @echo prec + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +printf1: + @echo printf1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prmarscl: + @echo prmarscl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prmreuse: + @echo prmreuse + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prt1eval: + @echo prt1eval + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prtoeval: + @echo prtoeval + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +psx96sub: + @echo psx96sub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rand: + @echo rand + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rebt8b1: + @echo rebt8b1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rebt8b2: + @echo rebt8b2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +regeq: + @echo regeq + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +reindops: + @echo reindops + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +reparse: + @echo reparse + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +resplit: + @echo resplit + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rs: + @echo rs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsnul1nl: + @echo rsnul1nl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest1: + @echo rstest1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest2: + @echo rstest2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest3: + @echo rstest3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest4: + @echo rstest4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest5: + @echo rstest5 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rswhite: + @echo rswhite + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +scalar: + @echo scalar + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sclforin: + @echo sclforin + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sclifin: + @echo sclifin + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sortempty: + @echo sortempty + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitargv: + @echo splitargv + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitarr: + @echo splitarr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitdef: + @echo splitdef + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitvar: + @echo splitvar + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitwht: + @echo splitwht + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sprintfc: + @echo sprintfc + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +strcat1: + @echo strcat1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +strtod: + @echo strtod + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +subsepnm: + @echo subsepnm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +subslash: + @echo subslash + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +substr: + @echo substr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +swaplns: + @echo swaplns + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +synerr1: + @echo synerr1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +uninit2: + @echo uninit2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +uninit3: + @echo uninit3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +uninit4: + @echo uninit4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +uninitialized: + @echo uninitialized + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +unterm: + @echo unterm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +wjposer1: + @echo wjposer1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +zeroe0: + @echo zeroe0 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +zeroflag: + @echo zeroflag + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getlnhd: + @echo getlnhd + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +asort: + @echo asort + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +asorti: + @echo asorti + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +backw: + @echo backw + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +clos1way: + @echo clos1way + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fieldwdth: + @echo fieldwdth + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fsfwfs: + @echo fsfwfs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gensub: + @echo gensub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gensub2: + @echo gensub2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gnuops2: + @echo gnuops2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gnuops3: + @echo gnuops3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gnureops: + @echo gnureops + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +icasefs: + @echo icasefs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +icasers: + @echo icasers + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +igncdym: + @echo igncdym + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +igncfs: + @echo igncfs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ignrcase: + @echo ignrcase + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +lint: + @echo lint + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +match1: + @echo match1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +match2: + @echo match2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nondec: + @echo nondec + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +posix: + @echo posix + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +procinfs: + @echo procinfs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +printfbad1: + @echo printfbad1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +regx8bit: + @echo regx8bit + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rebuf: + @echo rebuf + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest6: + @echo rstest6 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +shadow: + @echo shadow + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sort1: + @echo sort1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +strtonum: + @echo strtonum + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +# end of file Maketests + +# Targets generated for other tests: + +$(srcdir)/Maketests: $(srcdir)/Makefile.am $(srcdir)/Gentests + $(AWK) -f $(srcdir)/Gentests "$(srcdir)/Makefile.am" *.awk *.in > $(srcdir)/Maketests + +clean: + rm -fr _* core core.* junk out1 out2 out3 strftime.ok test1 test2 seq *~ + +# An attempt to print something that can be grepped for in build logs +pass-fail: + @COUNT=`ls _* 2>/dev/null | wc -l` ; \ + if test $$COUNT = 0 ; \ + then echo ALL TESTS PASSED ; \ + else echo $$COUNT TESTS FAILED ; \ + fi + +# This target for my convenience to look at all the results +diffout: + for i in _* ; \ + do \ + echo ============== $$i ============= ; \ + diff -c $(srcdir)/$${i#_}.ok $$i ; \ + done | more + +# This target is for testing with electric fence. +efence: + for i in $$(ls _* | sed 's;_\(.*\);\1;') ; \ + do \ + bad=$$(wc -l < _$$i) \ + ok=$$(wc -l < $$i.ok) ; \ + if (( $$bad == $$ok + 2 )) ; \ + then \ + rm _$$i ; \ + fi ; \ + done +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/test/Maketests b/test/Maketests new file mode 100644 index 0000000..cb11752 --- /dev/null +++ b/test/Maketests @@ -0,0 +1,943 @@ +Gt-dummy: +# file Maketests, generated from Makefile.am by the Gentests program +addcomma: + @echo addcomma + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +anchgsub: + @echo anchgsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrayparm: + @echo arrayparm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrayref: + @echo arrayref + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrymem1: + @echo arrymem1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrayprm2: + @echo arrayprm2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arrayprm3: + @echo arrayprm3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arryref2: + @echo arryref2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arryref3: + @echo arryref3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arryref4: + @echo arryref4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arryref5: + @echo arryref5 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arynasty: + @echo arynasty + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm1: + @echo aryprm1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm2: + @echo aryprm2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm3: + @echo aryprm3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm4: + @echo aryprm4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm5: + @echo aryprm5 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm6: + @echo aryprm6 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm7: + @echo aryprm7 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +aryprm8: + @echo aryprm8 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +arysubnm: + @echo arysubnm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +asgext: + @echo asgext + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +back89: + @echo back89 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +backgsub: + @echo backgsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +childin: + @echo childin + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +clsflnam: + @echo clsflnam + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +compare2: + @echo compare2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +concat1: + @echo concat1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +concat2: + @echo concat2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +concat3: + @echo concat3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +convfmt: + @echo convfmt + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +datanonl: + @echo datanonl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +defref: + @echo defref + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +delarprm: + @echo delarprm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +delarpm2: + @echo delarpm2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +delfunc: + @echo delfunc + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +dynlj: + @echo dynlj + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +eofsplit: + @echo eofsplit + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +exitval2: + @echo exitval2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fldchg: + @echo fldchg + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fldchgnf: + @echo fldchgnf + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fmttest: + @echo fmttest + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnamedat: + @echo fnamedat + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnarray: + @echo fnarray + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnarray2: + @echo fnarray2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnarydel: + @echo fnarydel + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnaryscl: + @echo fnaryscl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnasgnm: + @echo fnasgnm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnmisc: + @echo fnmisc + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fnparydl: + @echo fnparydl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fordel: + @echo fordel + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +forsimp: + @echo forsimp + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fsbs: + @echo fsbs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fsrs: + @echo fsrs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fstabplus: + @echo fstabplus + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +funsemnl: + @echo funsemnl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +funsmnam: + @echo funsmnam + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +funstack: + @echo funstack + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getline: + @echo getline + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getline3: + @echo getline3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getnr2tb: + @echo getnr2tb + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getnr2tm: + @echo getnr2tm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubasgn: + @echo gsubasgn + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubtest: + @echo gsubtest + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubtst2: + @echo gsubtst2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubtst4: + @echo gsubtst4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gsubtst5: + @echo gsubtst5 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +hex: + @echo hex + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +hsprint: + @echo hsprint + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +inputred: + @echo inputred + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +intest: + @echo intest + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +intprec: + @echo intprec + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +iobug1: + @echo iobug1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +leadnl: + @echo leadnl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +longsub: + @echo longsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +longwrds: + @echo longwrds + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +manglprm: + @echo manglprm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +math: + @echo math + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +membug1: + @echo membug1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +minusstr: + @echo minusstr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nasty: + @echo nasty + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nasty2: + @echo nasty2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +negexp: + @echo negexp + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nested: + @echo nested + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nfldstr: + @echo nfldstr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nfneg: + @echo nfneg + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nfset: + @echo nfset + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nlfldsep: + @echo nlfldsep + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nlinstr: + @echo nlinstr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nlstrina: + @echo nlstrina + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +noeffect: + @echo noeffect + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nofmtch: + @echo nofmtch + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +noloop1: + @echo noloop1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +noloop2: + @echo noloop2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +noparms: + @echo noparms + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nulrsend: + @echo nulrsend + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +numindex: + @echo numindex + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +numsubstr: + @echo numsubstr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +octsub: + @echo octsub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ofmt: + @echo ofmt + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ofmtbig: + @echo ofmtbig + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ofmtfidl: + @echo ofmtfidl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ofmts: + @echo ofmts + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +onlynl: + @echo onlynl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +opasnidx: + @echo opasnidx + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +opasnslf: + @echo opasnslf + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +paramdup: + @echo paramdup + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +paramtyp: + @echo paramtyp + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +parseme: + @echo parseme + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +pcntplus: + @echo pcntplus + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prdupval: + @echo prdupval + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prec: + @echo prec + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +printf1: + @echo printf1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prmarscl: + @echo prmarscl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prmreuse: + @echo prmreuse + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prt1eval: + @echo prt1eval + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +prtoeval: + @echo prtoeval + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +psx96sub: + @echo psx96sub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rand: + @echo rand + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rebt8b1: + @echo rebt8b1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rebt8b2: + @echo rebt8b2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +regeq: + @echo regeq + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +reindops: + @echo reindops + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +reparse: + @echo reparse + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +resplit: + @echo resplit + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rs: + @echo rs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rsnul1nl: + @echo rsnul1nl + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest1: + @echo rstest1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest2: + @echo rstest2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest3: + @echo rstest3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest4: + @echo rstest4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest5: + @echo rstest5 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rswhite: + @echo rswhite + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +scalar: + @echo scalar + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sclforin: + @echo sclforin + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sclifin: + @echo sclifin + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sortempty: + @echo sortempty + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitargv: + @echo splitargv + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitarr: + @echo splitarr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitdef: + @echo splitdef + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitvar: + @echo splitvar + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +splitwht: + @echo splitwht + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sprintfc: + @echo sprintfc + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +strcat1: + @echo strcat1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +strtod: + @echo strtod + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +subsepnm: + @echo subsepnm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +subslash: + @echo subslash + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +substr: + @echo substr + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +swaplns: + @echo swaplns + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +synerr1: + @echo synerr1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +uninit2: + @echo uninit2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +uninit3: + @echo uninit3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +uninit4: + @echo uninit4 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +uninitialized: + @echo uninitialized + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +unterm: + @echo unterm + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +wjposer1: + @echo wjposer1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +zeroe0: + @echo zeroe0 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +zeroflag: + @echo zeroflag + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +getlnhd: + @echo getlnhd + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +asort: + @echo asort + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +asorti: + @echo asorti + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +backw: + @echo backw + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +clos1way: + @echo clos1way + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fieldwdth: + @echo fieldwdth + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +fsfwfs: + @echo fsfwfs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gensub: + @echo gensub + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gensub2: + @echo gensub2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gnuops2: + @echo gnuops2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gnuops3: + @echo gnuops3 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +gnureops: + @echo gnureops + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +icasefs: + @echo icasefs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +icasers: + @echo icasers + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +igncdym: + @echo igncdym + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +igncfs: + @echo igncfs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +ignrcase: + @echo ignrcase + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +lint: + @echo lint + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +match1: + @echo match1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +match2: + @echo match2 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +nondec: + @echo nondec + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +posix: + @echo posix + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +procinfs: + @echo procinfs + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +printfbad1: + @echo printfbad1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +regx8bit: + @echo regx8bit + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rebuf: + @echo rebuf + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +rstest6: + @echo rstest6 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +shadow: + @echo shadow + @AWKPATH=$(srcdir) $(AWK) -f $@.awk --lint >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +sort1: + @echo sort1 + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +strtonum: + @echo strtonum + @AWKPATH=$(srcdir) $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ + +# end of file Maketests diff --git a/test/README b/test/README new file mode 100644 index 0000000..2343be2 --- /dev/null +++ b/test/README @@ -0,0 +1,18 @@ +Mon Jan 22 13:08:58 EST 1996 + +This directory contains the tests for gawk. The tests use the +following conventions. + +Given some aspect of gawk named `foo', there will be one or more +of the following files: + +foo.awk --- actual code for the test if not inline in the Makefile +foo.in --- the data for the test, if it needs data +foo.ok --- the expected results +_foo --- the actual results; generated at run time + +The _foo file will be left around if a test fails, allowing you to +compare actual and expected results, in case they differ. + +If they do differ (other than strftime.ok and _strftime!), send in a +bug report. See the manual for the bug report procedure. diff --git a/test/addcomma.awk b/test/addcomma.awk new file mode 100644 index 0000000..8f52f36 --- /dev/null +++ b/test/addcomma.awk @@ -0,0 +1,15 @@ +# addcomma - put commas in numbers +# input: a number per line +# output: the input number followed by +# the number with commas and two decimal places + +{ printf("%-12s %20s\n", $0, addcomma($0)) } + +function addcomma(x, num) { + if (x < 0) + return "-" addcomma(-x) + num = sprintf("%.2f", x) # num is dddddd.dd + while (num ~ /[0-9][0-9][0-9][0-9]/) + sub(/[0-9][0-9][0-9][,.]/, ",&", num) + return num +} diff --git a/test/addcomma.in b/test/addcomma.in new file mode 100644 index 0000000..be70ac9 --- /dev/null +++ b/test/addcomma.in @@ -0,0 +1,7 @@ +0 +-1 +-12.34 +12345 +-1234567.89 +-123. +-123456 diff --git a/test/addcomma.ok b/test/addcomma.ok new file mode 100644 index 0000000..57c5886 --- /dev/null +++ b/test/addcomma.ok @@ -0,0 +1,7 @@ +0 0.00 +-1 -1.00 +-12.34 -12.34 +12345 12,345.00 +-1234567.89 -1,234,567.89 +-123. -123.00 +-123456 -123,456.00 diff --git a/test/anchgsub.awk b/test/anchgsub.awk new file mode 100644 index 0000000..52e8aa4 --- /dev/null +++ b/test/anchgsub.awk @@ -0,0 +1 @@ +{ gsub(/^[ ]*/, "", $0) ; print } diff --git a/test/anchgsub.in b/test/anchgsub.in new file mode 100644 index 0000000..b829d84 --- /dev/null +++ b/test/anchgsub.in @@ -0,0 +1 @@ + This is a test, this is only a test. diff --git a/test/anchgsub.ok b/test/anchgsub.ok new file mode 100644 index 0000000..c33dfb9 --- /dev/null +++ b/test/anchgsub.ok @@ -0,0 +1 @@ +This is a test, this is only a test. diff --git a/test/argarray.awk b/test/argarray.awk new file mode 100644 index 0000000..1960f9b --- /dev/null +++ b/test/argarray.awk @@ -0,0 +1,14 @@ +BEGIN { + argn = " argument" (ARGC > 1 ? "s" : "") + are = ARGC > 1 ? "are" : "is" + print "here we have " ARGC argn + print "which " are + for (x = 0; x < ARGC; x++) + print "\t", ARGV[x] + print "Environment variable TEST=" ENVIRON["TEST"] + print "and the current input file is called \"" FILENAME "\"" +} + +FNR == 1 { + print "in main loop, this input file is known as \"" FILENAME "\"" +} diff --git a/test/argarray.in b/test/argarray.in new file mode 100644 index 0000000..bc93338 --- /dev/null +++ b/test/argarray.in @@ -0,0 +1 @@ +this is a simple test file diff --git a/test/argarray.ok b/test/argarray.ok new file mode 100644 index 0000000..18eb841 --- /dev/null +++ b/test/argarray.ok @@ -0,0 +1,9 @@ +here we have 3 arguments +which are + gawk + ./argarray.in + - +Environment variable TEST= +and the current input file is called "" +in main loop, this input file is known as "./argarray.in" +in main loop, this input file is known as "-" diff --git a/test/argtest.awk b/test/argtest.awk new file mode 100644 index 0000000..e7a1145 --- /dev/null +++ b/test/argtest.awk @@ -0,0 +1,4 @@ +BEGIN { + for (i = 0; i < ARGC; i++) + printf("ARGV[%d] = %s\n", i, ARGV[i]) +} diff --git a/test/argtest.ok b/test/argtest.ok new file mode 100644 index 0000000..591bc64 --- /dev/null +++ b/test/argtest.ok @@ -0,0 +1,4 @@ +ARGV[0] = gawk +ARGV[1] = -x +ARGV[2] = -y +ARGV[3] = abc diff --git a/test/arrayparm.awk b/test/arrayparm.awk new file mode 100644 index 0000000..d6f34d9 --- /dev/null +++ b/test/arrayparm.awk @@ -0,0 +1,21 @@ +# +# Test program from: +# +# Date: Tue, 21 Feb 95 16:09:29 EST +# From: emory!blackhawk.com!aaron (Aaron Sosnick) +# +BEGIN { + foo[1]=1; + foo[2]=2; + bug1(foo); +} +function bug1(i) { + for (i in foo) { + bug2(i); + delete foo[i]; + print i,1,bot[1]; + } +} +function bug2(arg) { + bot[arg]=arg; +} diff --git a/test/arrayparm.ok b/test/arrayparm.ok new file mode 100644 index 0000000..4dd199f --- /dev/null +++ b/test/arrayparm.ok @@ -0,0 +1,2 @@ +gawk: arrayparm.awk:18: fatal: attempt to use array `i (from foo)' in a scalar context +EXIT CODE: 2 diff --git a/test/arrayprm2.awk b/test/arrayprm2.awk new file mode 100644 index 0000000..35a92cc --- /dev/null +++ b/test/arrayprm2.awk @@ -0,0 +1,67 @@ +# From spcecdt@armory.com Wed Apr 30 11:08:48 2003 +# Return-Path: <spcecdt@armory.com> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h3U7uZWr015489 +# for <arnold@localhost>; Wed, 30 Apr 2003 11:08:48 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Wed, 30 Apr 2003 11:08:48 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Wed Apr 30 11:05:01 2003) +# X-From_: spcecdt@armory.com Wed Apr 30 04:06:46 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h3U16iv04111 for <arobbins@actcom.co.il>; +# Wed, 30 Apr 2003 04:06:45 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h3U16nEv009589 +# for <arobbins@actcom.co.il>; Wed, 30 Apr 2003 04:06:50 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.7/8.11.6) with ESMTP id h3U16gj29182 +# for <arnold@skeeve.com>; Tue, 29 Apr 2003 21:06:42 -0400 +# Received: from monty-python.gnu.org ([199.232.76.173]) +# by fencepost.gnu.org with esmtp (Exim 4.10) +# id 19Ag3W-00029w-00 +# for bug-gawk@gnu.org; Tue, 29 Apr 2003 21:06:42 -0400 +# Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.10.13) +# id 19Ag1V-0001AN-00 +# for bug-gawk@gnu.org; Tue, 29 Apr 2003 21:04:39 -0400 +# Received: from deepthought.armory.com ([192.122.209.42] helo=armory.com) +# by monty-python.gnu.org with smtp (Exim 4.10.13) +# id 19Ag1V-0001A3-00 +# for bug-gawk@gnu.org; Tue, 29 Apr 2003 21:04:37 -0400 +# Date: Tue, 29 Apr 2003 18:04:35 -0700 +# From: "John H. DuBois III" <spcecdt@armory.com> +# To: bug-gawk@gnu.org +# Subject: gawk 3.1.2a bug +# Message-ID: <20030430010434.GA4278@armory.com> +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# Content-Disposition: inline +# User-Agent: Mutt/1.3.28i +# X-Www: http://www.armory.com./~spcecdt/ +# Sender: spcecdt@armory.com +# X-Spam-Status: No, hits=-7.2 required=5.0 +# tests=SIGNATURE_SHORT_DENSE,SPAM_PHRASE_00_01,USER_AGENT, +# USER_AGENT_MUTT +# version=2.41 +# X-Spam-Level: +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: RO +# +# gawk-3.1.2a 'BEGIN {foo(bar)};function foo(baz){split("x",baz)}' +# gawk-3.1.2a: cmd. line:1: fatal: split: second argument is not an array +# +# John +# -- +# John DuBois spcecdt@armory.com KC6QKZ/AE http://www.armory.com/~spcecdt/ +# +BEGIN { + foo(bar) +} + +function foo(baz) +{ + split("x", baz) +} diff --git a/test/arrayprm2.ok b/test/arrayprm2.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/arrayprm2.ok diff --git a/test/arrayprm3.awk b/test/arrayprm3.awk new file mode 100644 index 0000000..a41e587 --- /dev/null +++ b/test/arrayprm3.awk @@ -0,0 +1,56 @@ +# From spcecdt@armory.com Fri May 2 13:24:46 2003 +# Return-Path: <spcecdt@armory.com> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h42AChum021950 +# for <arnold@localhost>; Fri, 2 May 2003 13:24:46 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Fri, 02 May 2003 13:24:46 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Fri May 2 13:23:37 2003) +# X-From_: spcecdt@armory.com Fri May 2 00:43:51 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h41Lhm500217 for <arobbins@actcom.co.il>; +# Fri, 2 May 2003 00:43:49 +0300 (EET DST) +# (rfc931-sender: lmail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h41LiGcO022817 +# for <arobbins@actcom.co.il>; Fri, 2 May 2003 00:44:18 +0300 +# Received: from armory.com (deepthought.armory.com [192.122.209.42]) +# by f7.net (8.11.7/8.11.6) with SMTP id h41Lhj106516 +# for <arnold@skeeve.com>; Thu, 1 May 2003 17:43:46 -0400 +# Date: Thu, 1 May 2003 14:43:45 -0700 +# From: "John H. DuBois III" <spcecdt@armory.com> +# To: Aharon Robbins <arnold@skeeve.com> +# Subject: Re: gawk 3.1.2a bug +# Message-ID: <20030501214345.GA24615@armory.com> +# References: <200305011738.h41Hcg76017565@localhost.localdomain> +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# Content-Disposition: inline +# In-Reply-To: <200305011738.h41Hcg76017565@localhost.localdomain> +# User-Agent: Mutt/1.3.28i +# X-Www: http://www.armory.com./~spcecdt/ +# Sender: spcecdt@armory.com +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: RO +# +# On Thu, May 01, 2003 at 08:38:42PM +0300, Aharon Robbins wrote: +# > > That worked, thanks. +# > +# > Great. Your report motivated me to find everywhere such additional +# > code ought to be needed. I think I did so. --Arnold +# +# Here's another one (perhaps fixed by your additional work): +# +BEGIN { foo(a) } +function foo(a) { bar(a); print "" in a } +function bar(a) { a[""]; } +# +# Prints 1 with gawk-3.1.1; 0 with 3.1.2a. +# +# John +# -- +# John DuBois spcecdt@armory.com KC6QKZ/AE http://www.armory.com/~spcecdt/ +# diff --git a/test/arrayprm3.ok b/test/arrayprm3.ok new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/arrayprm3.ok @@ -0,0 +1 @@ +1 diff --git a/test/arrayref.awk b/test/arrayref.awk new file mode 100644 index 0000000..144d41a --- /dev/null +++ b/test/arrayref.awk @@ -0,0 +1,13 @@ + BEGIN { # foo[10] = 0 # put this line in and it will work + test(foo); print foo[1] + test2(foo2); print foo2[1] + } + + function test(foo) + { + test2(foo) + } + function test2(bar) + { + bar[1] = 1 + } diff --git a/test/arrayref.ok b/test/arrayref.ok new file mode 100644 index 0000000..6ed281c --- /dev/null +++ b/test/arrayref.ok @@ -0,0 +1,2 @@ +1 +1 diff --git a/test/arrymem1.awk b/test/arrymem1.awk new file mode 100644 index 0000000..0a4ae89 --- /dev/null +++ b/test/arrymem1.awk @@ -0,0 +1,81 @@ +# From spcecdt@armory.com Thu Jun 14 13:24:32 2001 +# Received: from mail.actcom.co.il [192.114.47.13] +# by localhost with POP3 (fetchmail-5.5.0) +# for arnold@localhost (single-drop); Thu, 14 Jun 2001 13:24:32 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Thu Jun 14 13:25:13 2001) +# X-From_: spcecdt@armory.com Thu Jun 14 06:34:47 2001 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.9.1a/actcom-0.2) id GAA29661 for <arobbins@actcom.co.il>; +# Thu, 14 Jun 2001 06:34:46 +0300 (EET DST) +# (rfc931-sender: lmail.actcom.co.il [192.114.47.13]) +# Received: from billohost.com (www.billohost.com [209.196.35.10]) +# by lmail.actcom.co.il (8.11.2/8.11.2) with ESMTP id f5E3YiO27337 +# for <arobbins@actcom.co.il>; Thu, 14 Jun 2001 06:34:45 +0300 +# Received: from fencepost.gnu.org (we-refuse-to-spy-on-our-users@fencepost.gnu.org [199.232.76.164]) +# by billohost.com (8.9.3/8.9.3) with ESMTP id XAA02681 +# for <arnold@skeeve.com>; Wed, 13 Jun 2001 23:33:57 -0400 +# Received: from deepthought.armory.com ([192.122.209.42]) +# by fencepost.gnu.org with smtp (Exim 3.16 #1 (Debian)) +# id 15ANu2-00005C-00 +# for <bug-gawk@gnu.org>; Wed, 13 Jun 2001 23:34:38 -0400 +# Date: Wed, 13 Jun 2001 20:32:42 -0700 +# From: "John H. DuBois III" <spcecdt@armory.com> +# To: bug-gawk@gnu.org +# Subject: gawk 3.1.0 bug +# Message-ID: <20010613203242.A29975@armory.com> +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# X-Mailer: Mutt 1.0.1i +# X-Www: http://www.armory.com./~spcecdt/ +# Sender: spcecdt@armory.com +# Status: RO +# +# Under SCO OpenServer 5.0.6a using gawk 3.1.0 compiled with gcc 2.95.2, this +# program: + + BEGIN { + f1(Procs,b) + print "test" + } + + function f1(Procs,a) { + # a[""] + a[""] = "a" # ADR: Give it a value so can trace it + f2() + } + + function f2() { + # b[""] + b[""] = "b" # ADR: Give it a value so can trace it + } + + # ADR: 1/28/2003: Added this: + BEGIN { for (i in b) printf("b[\"%s\"] = \"%s\"\n", i, b[i]) } + # END ADR added. + +# gives: +# +# gawk: ./gtest:5: fatal error: internal error +# +# and dumps core. +# +# gdb gives me this stack backtrace: +# +# #0 0x80019943 in kill () from /usr/lib/libc.so.1 +# #1 0x8003e754 in abort () from /usr/lib/libc.so.1 +# #2 0x8062a87 in catchsig (sig=0, code=0) at main.c:947 +# #3 0x80053a0c in _sigreturn () from /usr/lib/libc.so.1 +# #4 0x80023d36 in cleanfree () from /usr/lib/libc.so.1 +# #5 0x80023156 in _real_malloc () from /usr/lib/libc.so.1 +# #6 0x80023019 in malloc () from /usr/lib/libc.so.1 +# #7 0x8053b95 in do_print (tree=0x0) at builtin.c:1336 +# #8 0x806b47c in interpret (tree=0x8084ee4) at eval.c:606 +# #9 0x806ad8d in interpret (tree=0x8084f0c) at eval.c:384 +# #10 0x806ad21 in interpret (tree=0x8084f5c) at eval.c:367 +# #11 0x8061d5b in main (argc=4, argv=0x80478ac) at main.c:506 +# +# John +# -- +# John DuBois spcecdt@armory.com. KC6QKZ/AE http://www.armory.com./~spcecdt/ +# diff --git a/test/arrymem1.ok b/test/arrymem1.ok new file mode 100644 index 0000000..e37775b --- /dev/null +++ b/test/arrymem1.ok @@ -0,0 +1,2 @@ +test +b[""] = "b" diff --git a/test/arryref2.awk b/test/arryref2.awk new file mode 100644 index 0000000..202a040 --- /dev/null +++ b/test/arryref2.awk @@ -0,0 +1,18 @@ +BEGIN { + foo(a) + + for (i in a) + print i, a[i] +} + +function foo(b) +{ + bar(b) + b[2] = "local" +} + +function bar(c) +{ + a[3] = "global" + c[1] = "local2" +} diff --git a/test/arryref2.ok b/test/arryref2.ok new file mode 100644 index 0000000..71aa9ed --- /dev/null +++ b/test/arryref2.ok @@ -0,0 +1,3 @@ +1 local2 +2 local +3 global diff --git a/test/arryref3.awk b/test/arryref3.awk new file mode 100644 index 0000000..e234ee5 --- /dev/null +++ b/test/arryref3.awk @@ -0,0 +1,18 @@ +BEGIN { + foo(a) + + for (i in a) + print i, a[i] +} + +function foo(b) +{ + a[1] = "global" + b[2] = "local" + bar(b) +} + +function bar(c) +{ + c = 12 +} diff --git a/test/arryref3.ok b/test/arryref3.ok new file mode 100644 index 0000000..eec04b6 --- /dev/null +++ b/test/arryref3.ok @@ -0,0 +1,2 @@ +gawk: arryref3.awk:17: fatal: attempt to use array `c (from b, from a)' in a scalar context +EXIT CODE: 2 diff --git a/test/arryref4.awk b/test/arryref4.awk new file mode 100644 index 0000000..072eade --- /dev/null +++ b/test/arryref4.awk @@ -0,0 +1,17 @@ +BEGIN { + foo(a) + + print a +} + +function foo(b) +{ + a = "global" + b[2] = "local" +# bar(b) +} + +function bar(c) +{ + c = 12 +} diff --git a/test/arryref4.ok b/test/arryref4.ok new file mode 100644 index 0000000..11cebfb --- /dev/null +++ b/test/arryref4.ok @@ -0,0 +1,2 @@ +gawk: arryref4.awk:10: fatal: attempt to use scalar parameter `b' as an array +EXIT CODE: 2 diff --git a/test/arryref5.awk b/test/arryref5.awk new file mode 100644 index 0000000..babff9c --- /dev/null +++ b/test/arryref5.awk @@ -0,0 +1,17 @@ +BEGIN { + foo(a) + + print a +} + +function foo(b) +{ + b[2] = "local" + a = "global" +# bar(b) +} + +function bar(c) +{ + c = 12 +} diff --git a/test/arryref5.ok b/test/arryref5.ok new file mode 100644 index 0000000..7b542fb --- /dev/null +++ b/test/arryref5.ok @@ -0,0 +1,2 @@ +gawk: arryref5.awk:10: fatal: attempt to use array `a' in a scalar context +EXIT CODE: 2 diff --git a/test/arynasty.awk b/test/arynasty.awk new file mode 100644 index 0000000..ec17093 --- /dev/null +++ b/test/arynasty.awk @@ -0,0 +1,16 @@ +BEGIN { + a = 12.153 +#print "-- stroring test[a]" > "/dev/stderr" ; fflush("/dev/stderr") + test[a] = "hi" +#print "-- setting CONVFMT" > "/dev/stderr" ; fflush("/dev/stderr") + CONVFMT = "%.0f" +#print "-- setting a" > "/dev/stderr" ; fflush("/dev/stderr") + a = 5 +#stopme() +#print "-- starting loop" > "/dev/stderr" ; fflush("/dev/stderr") + for (i in test) { +#print("-- i =", i) > "/dev/stderr" ; fflush("/dev/stderr"); +#printf("-- i = <%s>\n", i) > "/dev/stderr" ; fflush("/dev/stderr"); + printf ("test[%s] = %s\n", i, test[i]) + } +} diff --git a/test/arynasty.ok b/test/arynasty.ok new file mode 100644 index 0000000..125ed80 --- /dev/null +++ b/test/arynasty.ok @@ -0,0 +1 @@ +test[12.153] = hi diff --git a/test/arynocls.awk b/test/arynocls.awk new file mode 100644 index 0000000..724c9ac --- /dev/null +++ b/test/arynocls.awk @@ -0,0 +1,95 @@ +#To: bug-gnu-utils@gnu.org +#From: Kristján Jónasson <kristjan@decode.is> +#Subject: Gawk bug +#Cc: arnold@gnu.org +# +#Hi! +# +#The following seems to be a bug in gawk. I have tried as I could to +#minimize the bug-causing program, so of course it does not seem to do +#anything useful in its present form. The error message received is: +# +#gawk: test.awk:15: fatal error: internal error +#Aborted +# +#Note that there is an attached file that the program reads, called "a". I +#played with the program a fair bit and my feeling is that the error is +#related with the delete statement, and not the reading of the file and the +#close statement. At one point I was able to remove the file reading and +#still obtain the error. If, for example, I remove the close statement and +#make two copies of the file instead, (reading one copy in sub1 and the +#other in sub2), the error still occurs. +# +#The operating system is Red Hat Linux, version 6.0, the gawk is version +#3.0.4, and the gawk was obtained from an rpm file gawk-3.0.4-1.i386.rpm. +# +#The program is: +# + +# Wed Mar 8 13:41:34 IST 2000 +# ADR: modified to use INPUT, so can set it from command line. +# When run, no output is produced, but it shouldn't core +# dump, either. +# +# The program bug is to not close the file in sub2. + +function sub1(x) { +# while (getline < "a" == 1) i++ + while (getline < INPUT == 1) i++ +# close("a") + close(INPUT) +} + +function sub2(x) { + i=0 + delete y +# while (getline < "a" == 1) z[++i] = $1 + while (getline < INPUT == 1) z[++i] = $1 + for(i in z) y[i] = x[i] + z[i] +} + +function sub3(x, y, z) { + sub2(x) + for(i=1; i<=4; i++) z[i] = y[i] +} + +BEGIN { + sub1(x) + sub2(x) + sub3(x, y, z) +} +# +#And the data file is: +# +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# 32.440 3.830 3.383700000000000 10.08 298 865 +# +# diff --git a/test/arynocls.in b/test/arynocls.in new file mode 100644 index 0000000..8f4712c --- /dev/null +++ b/test/arynocls.in @@ -0,0 +1,30 @@ + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 + 32.440 3.830 3.383700000000000 10.08 298 865 diff --git a/test/arynocls.ok b/test/arynocls.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/arynocls.ok diff --git a/test/aryprm1.awk b/test/aryprm1.awk new file mode 100644 index 0000000..e5bb991 --- /dev/null +++ b/test/aryprm1.awk @@ -0,0 +1,9 @@ +function f(a) { + if (3 in a) + print 7 + a = 5 +} + +BEGIN { + f(arr) +} diff --git a/test/aryprm1.ok b/test/aryprm1.ok new file mode 100644 index 0000000..99ffd8f --- /dev/null +++ b/test/aryprm1.ok @@ -0,0 +1,2 @@ +gawk: aryprm1.awk:4: fatal: attempt to use array `a (from arr)' in a scalar context +EXIT CODE: 2 diff --git a/test/aryprm2.awk b/test/aryprm2.awk new file mode 100644 index 0000000..00dd763 --- /dev/null +++ b/test/aryprm2.awk @@ -0,0 +1,8 @@ +function f(a) { + delete a + a *= 5 +} + +BEGIN { + f(arr) +} diff --git a/test/aryprm2.ok b/test/aryprm2.ok new file mode 100644 index 0000000..c8585c9 --- /dev/null +++ b/test/aryprm2.ok @@ -0,0 +1,2 @@ +gawk: aryprm2.awk:3: fatal: attempt to use array `a (from arr)' in a scalar context +EXIT CODE: 2 diff --git a/test/aryprm3.awk b/test/aryprm3.awk new file mode 100644 index 0000000..c38ab58 --- /dev/null +++ b/test/aryprm3.awk @@ -0,0 +1,10 @@ +function f(a, i) { + for (i in a) + delete a[i] + if (a == 0) + print 7 +} + +BEGIN { + f(arr) +} diff --git a/test/aryprm3.ok b/test/aryprm3.ok new file mode 100644 index 0000000..63c5131 --- /dev/null +++ b/test/aryprm3.ok @@ -0,0 +1,2 @@ +gawk: aryprm3.awk:6: fatal: attempt to use array `a (from arr)' in a scalar context +EXIT CODE: 2 diff --git a/test/aryprm4.awk b/test/aryprm4.awk new file mode 100644 index 0000000..09427f6 --- /dev/null +++ b/test/aryprm4.awk @@ -0,0 +1,7 @@ +function f(x){ + x = 1 +} +BEGIN { + f(a) + a[1] +} diff --git a/test/aryprm4.ok b/test/aryprm4.ok new file mode 100644 index 0000000..9307e4a --- /dev/null +++ b/test/aryprm4.ok @@ -0,0 +1,2 @@ +gawk: aryprm4.awk:6: fatal: attempt to use scalar `a' as array +EXIT CODE: 2 diff --git a/test/aryprm5.awk b/test/aryprm5.awk new file mode 100644 index 0000000..a4aac36 --- /dev/null +++ b/test/aryprm5.awk @@ -0,0 +1,6 @@ +function f(x){ + x[1] = x +} +BEGIN { + f(a) +} diff --git a/test/aryprm5.ok b/test/aryprm5.ok new file mode 100644 index 0000000..1ce4119 --- /dev/null +++ b/test/aryprm5.ok @@ -0,0 +1,2 @@ +gawk: aryprm5.awk:2: fatal: attempt to use scalar parameter `x' as an array +EXIT CODE: 2 diff --git a/test/aryprm6.awk b/test/aryprm6.awk new file mode 100644 index 0000000..b12b278 --- /dev/null +++ b/test/aryprm6.awk @@ -0,0 +1,7 @@ +function f(x){ + a + x[1] = 3 +} +BEGIN { + f(a) +} diff --git a/test/aryprm6.ok b/test/aryprm6.ok new file mode 100644 index 0000000..8561ddf --- /dev/null +++ b/test/aryprm6.ok @@ -0,0 +1,2 @@ +gawk: aryprm6.awk:3: fatal: attempt to use scalar parameter `x' as an array +EXIT CODE: 2 diff --git a/test/aryprm7.awk b/test/aryprm7.awk new file mode 100644 index 0000000..b442b4d --- /dev/null +++ b/test/aryprm7.awk @@ -0,0 +1,6 @@ +function f(x, y){ + y[1] = x +} +BEGIN { + f(a, a) +} diff --git a/test/aryprm7.ok b/test/aryprm7.ok new file mode 100644 index 0000000..00e2896 --- /dev/null +++ b/test/aryprm7.ok @@ -0,0 +1,2 @@ +gawk: aryprm7.awk:2: fatal: attempt to use scalar parameter `y' as an array +EXIT CODE: 2 diff --git a/test/aryprm8.awk b/test/aryprm8.awk new file mode 100644 index 0000000..b294abb --- /dev/null +++ b/test/aryprm8.awk @@ -0,0 +1,22 @@ +BEGIN { + f(0, a) # nothing + f(1, a) +} +function f(i, a) { + if (i == 0) return + g(a, a) + pr(a) +} +function g(x, y) { + h(y, x, y) +} +function h(b, c, d) { + b[1] = 1 + c[1] = 2 # rewrite + print b[1], d[1] + c[2] = 1 + b[2] = 2 # should rewrite +} +function pr(x) { + print x[1], x[2] +} diff --git a/test/aryprm8.ok b/test/aryprm8.ok new file mode 100644 index 0000000..fad54c2 --- /dev/null +++ b/test/aryprm8.ok @@ -0,0 +1,2 @@ +2 2 +2 2 diff --git a/test/arysubnm.awk b/test/arysubnm.awk new file mode 100644 index 0000000..961b54a --- /dev/null +++ b/test/arysubnm.awk @@ -0,0 +1 @@ +BEGIN { n = 11 ; foo[n] = n; print (2 <= n) } diff --git a/test/arysubnm.ok b/test/arysubnm.ok new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/arysubnm.ok @@ -0,0 +1 @@ +1 diff --git a/test/asgext.awk b/test/asgext.awk new file mode 100644 index 0000000..c7f1775 --- /dev/null +++ b/test/asgext.awk @@ -0,0 +1 @@ +{ print $3; $4 = "a"; print } diff --git a/test/asgext.in b/test/asgext.in new file mode 100644 index 0000000..3743b5b --- /dev/null +++ b/test/asgext.in @@ -0,0 +1,3 @@ +1 2 3 +1 +1 2 3 4 diff --git a/test/asgext.ok b/test/asgext.ok new file mode 100644 index 0000000..2c0df70 --- /dev/null +++ b/test/asgext.ok @@ -0,0 +1,6 @@ +3 +1 2 3 a + +1 a +3 +1 2 3 a diff --git a/test/asort.awk b/test/asort.awk new file mode 100644 index 0000000..8a42e26 --- /dev/null +++ b/test/asort.awk @@ -0,0 +1,25 @@ +function init(a) +{ + a[1] = "aardvark" + a[2] = "animal" + a[3] = "zebra" + a[4] = "zoo" + a[5] = "Iguana" + a[6] = "Alligator" + a[7] = "Nouns" + a[8] = "people" +} + +BEGIN { + + for (IGNORECASE = 0; IGNORECASE < 2; IGNORECASE++) { + init(a) + + n = asort(a) + + for (i = 1; i <= n; i++) + printf("a[%d] = \"%s\"\n", i, a[i]) + + print "============" + } +} diff --git a/test/asort.ok b/test/asort.ok new file mode 100644 index 0000000..1d0ddd0 --- /dev/null +++ b/test/asort.ok @@ -0,0 +1,18 @@ +a[1] = "Alligator" +a[2] = "Iguana" +a[3] = "Nouns" +a[4] = "aardvark" +a[5] = "animal" +a[6] = "people" +a[7] = "zebra" +a[8] = "zoo" +============ +a[1] = "aardvark" +a[2] = "Alligator" +a[3] = "animal" +a[4] = "Iguana" +a[5] = "Nouns" +a[6] = "people" +a[7] = "zebra" +a[8] = "zoo" +============ diff --git a/test/asorti.awk b/test/asorti.awk new file mode 100644 index 0000000..3314c9f --- /dev/null +++ b/test/asorti.awk @@ -0,0 +1,27 @@ +function init(a) +{ + delete a + + a["aardvark"] = 1 + a["animal"] = 2 + a["zebra"] = 3 + a["zoo"] = 4 + a["Iguana"] = 5 + a["Alligator"] = 6 + a["Nouns"] = 7 + a["people"] = 8 +} + +BEGIN { + + for (IGNORECASE = 0; IGNORECASE < 2; IGNORECASE++) { + init(a) + + n = asorti(a) + + for (i = 1; i <= n; i++) + printf("a[%d] = \"%s\"\n", i, a[i]) + + print "============" + } +} diff --git a/test/asorti.ok b/test/asorti.ok new file mode 100644 index 0000000..1d0ddd0 --- /dev/null +++ b/test/asorti.ok @@ -0,0 +1,18 @@ +a[1] = "Alligator" +a[2] = "Iguana" +a[3] = "Nouns" +a[4] = "aardvark" +a[5] = "animal" +a[6] = "people" +a[7] = "zebra" +a[8] = "zoo" +============ +a[1] = "aardvark" +a[2] = "Alligator" +a[3] = "animal" +a[4] = "Iguana" +a[5] = "Nouns" +a[6] = "people" +a[7] = "zebra" +a[8] = "zoo" +============ diff --git a/test/awkpath.ok b/test/awkpath.ok new file mode 100644 index 0000000..6cffe1b --- /dev/null +++ b/test/awkpath.ok @@ -0,0 +1 @@ +Found it. diff --git a/test/back89.awk b/test/back89.awk new file mode 100644 index 0000000..0da3362 --- /dev/null +++ b/test/back89.awk @@ -0,0 +1 @@ +/a\8b/ diff --git a/test/back89.in b/test/back89.in new file mode 100644 index 0000000..b0a88f2 --- /dev/null +++ b/test/back89.in @@ -0,0 +1,2 @@ +a8b +a\8b diff --git a/test/back89.ok b/test/back89.ok new file mode 100644 index 0000000..e9ea4d5 --- /dev/null +++ b/test/back89.ok @@ -0,0 +1 @@ +a8b diff --git a/test/backgsub.awk b/test/backgsub.awk new file mode 100644 index 0000000..bec7354 --- /dev/null +++ b/test/backgsub.awk @@ -0,0 +1,4 @@ +{ + gsub( "\\\\", "\\\\") + print +} diff --git a/test/backgsub.in b/test/backgsub.in new file mode 100644 index 0000000..2d3f17f --- /dev/null +++ b/test/backgsub.in @@ -0,0 +1 @@ +\x\y\z diff --git a/test/backgsub.ok b/test/backgsub.ok new file mode 100644 index 0000000..e2e265f --- /dev/null +++ b/test/backgsub.ok @@ -0,0 +1 @@ +\\x\\y\\z diff --git a/test/backw.awk b/test/backw.awk new file mode 100644 index 0000000..078a5d8 --- /dev/null +++ b/test/backw.awk @@ -0,0 +1 @@ +/\w+/ diff --git a/test/backw.in b/test/backw.in new file mode 100644 index 0000000..ec09f60 --- /dev/null +++ b/test/backw.in @@ -0,0 +1,3 @@ +123 +abc +456 diff --git a/test/backw.ok b/test/backw.ok new file mode 100644 index 0000000..ec09f60 --- /dev/null +++ b/test/backw.ok @@ -0,0 +1,3 @@ +123 +abc +456 diff --git a/test/badargs.ok b/test/badargs.ok new file mode 100644 index 0000000..5c3bba7 --- /dev/null +++ b/test/badargs.ok @@ -0,0 +1,35 @@ +gawk: option requires an argument -- f +Usage: gawk [POSIX or GNU style options] -f progfile [--] file ... +Usage: gawk [POSIX or GNU style options] [--] 'program' file ... +POSIX options: GNU long options: + -f progfile --file=progfile + -F fs --field-separator=fs + -v var=val --assign=var=val + -m[fr] val + -W compat --compat + -W copyleft --copyleft + -W copyright --copyright + -W dump-variables[=file] --dump-variables[=file] + -W exec=file --exec=file + -W gen-po --gen-po + -W help --help + -W lint[=fatal] --lint[=fatal] + -W lint-old --lint-old + -W non-decimal-data --non-decimal-data + -W profile[=file] --profile[=file] + -W posix --posix + -W re-interval --re-interval + -W source=program-text --source=program-text + -W traditional --traditional + -W usage --usage + -W version --version + +To report bugs, see node `Bugs' in `gawk.info', which is +section `Reporting Problems and Bugs' in the printed version. + +gawk is a pattern scanning and processing language. +By default it reads standard input and writes standard output. + +Examples: + gawk '{ sum += $1 }; END { print sum }' file + gawk -F: '{ print $1 }' /etc/passwd diff --git a/test/childin.awk b/test/childin.awk new file mode 100644 index 0000000..041c6ec --- /dev/null +++ b/test/childin.awk @@ -0,0 +1 @@ +BEGIN { "cat" | getline; print; close("cat") } diff --git a/test/childin.in b/test/childin.in new file mode 100644 index 0000000..45b983b --- /dev/null +++ b/test/childin.in @@ -0,0 +1 @@ +hi diff --git a/test/childin.ok b/test/childin.ok new file mode 100644 index 0000000..45b983b --- /dev/null +++ b/test/childin.ok @@ -0,0 +1 @@ +hi diff --git a/test/clobber.awk b/test/clobber.awk new file mode 100644 index 0000000..6526de0 --- /dev/null +++ b/test/clobber.awk @@ -0,0 +1,98 @@ +BEGIN { + print "000800" > "seq" + close("seq") + ARGV[1] = "seq" + ARGC = 2 +} + +{ printf "%06d", $1 + 1 >"seq"; + printf "%06d", $1 + 1 } +# Date: Mon, 20 Jan 1997 15:14:06 -0600 (CST) +# From: Dave Bodenstab <emory!synet.net!imdave> +# To: bug-gnu-utils@prep.ai.mit.edu +# Subject: GNU awk 3.0.2 core dump +# Cc: arnold@gnu.ai.mit.edu +# +# The following program produces a core file on my FreeBSD system: +# +# bash$ echo 000800 >/tmp/seq +# bash$ gawk '{ printf "%06d", $1 + 1 >"/tmp/seq"; +# printf "%06d", $1 + 1 }' /tmp/seq +# +# This fragment comes from mgetty+sendfax. +# +# Here is the trace: +# +# Script started on Mon Jan 20 15:09:04 1997 +# bash$ gawk --version +# GNU Awk 3.0.2 +# Copyright (C) 1989, 1991-1996 Free Software Foundation. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# bash$ gdb gawk +# GDB is free software and you are welcome to distribute copies of it +# under certain conditions; type "show copying" to see the conditions. +# There is absolutely no warranty for GDB; type "show warranty" for details. +# GDB 4.13 (i386-unknown-freebsd), +# Copyright 1994 Free Software Foundation, Inc... +# (gdb) shell echo 000800 >/tmp/seq +# (gdb) r '{ printf "%06d", $1 + 1 >"/tmp/seq"; printf "%06d", $1 + 1 }(gdb) r '{ printf "%06d", $1 + 1 >"/tmp/seq"; printf "%06d", $1 + 1 }' /tmp/seq +# Starting program: /scratch/archive/src/cmd/gnuawk-3.0.2/gawk '{ printf "%06d", $1 + 1 >"/tmp/seq"; printf "%06d", $1 + 1 }' /tmp/seq +# +# Program received signal SIGBUS, Bus error. +# 0xd86f in def_parse_field (up_to=1, buf=0x37704, len=6, fs=0x3b240, rp=0x0, +# set=0xce6c <set_field>, n=0x0) at field.c:391 +# 391 sav = *end; +# (gdb) bt +# #0 0xd86f in def_parse_field (up_to=1, buf=0x37704, len=6, fs=0x3b240, +# rp=0x0, set=0xce6c <set_field>, n=0x0) at field.c:391 +# #1 0xddb1 in get_field (requested=1, assign=0x0) at field.c:669 +# #2 0xc25d in r_get_lhs (ptr=0x3b9b4, assign=0x0) at eval.c:1339 +# #3 0x9ab0 in r_tree_eval (tree=0x3b9b4, iscond=0) at eval.c:604 +# #4 0xa5f1 in r_tree_eval (tree=0x3b9fc, iscond=0) at eval.c:745 +# #5 0x4661 in format_tree (fmt_string=0x3e040 "%06d", n0=0, carg=0x3ba20) +# at builtin.c:620 +# #6 0x5beb in do_sprintf (tree=0x3b96c) at builtin.c:809 +# #7 0x5cd5 in do_printf (tree=0x3ba8c) at builtin.c:844 +# #8 0x9271 in interpret (tree=0x3ba8c) at eval.c:465 +# #9 0x8ca3 in interpret (tree=0x3bbd0) at eval.c:308 +# #10 0x8c34 in interpret (tree=0x3bc18) at eval.c:292 +# #11 0xf069 in do_input () at io.c:312 +# #12 0x12ba9 in main (argc=3, argv=0xefbfd538) at main.c:393 +# (gdb) l +# 386 *buf += len; +# 387 return nf; +# 388 } +# 389 +# 390 /* before doing anything save the char at *end */ +# 391 sav = *end; +# 392 /* because it will be destroyed now: */ +# 393 +# 394 *end = ' '; /* sentinel character */ +# 395 for (; nf < up_to; scan++) { +# (gdb) print end +# $1 = 0x804d006 <Error reading address 0x804d006: No such file or directory> +# (gdb) print buf +# $2 = (char **) 0x37704 +# (gdb) print *buf +# $3 = 0x804d000 <Error reading address 0x804d000: No such file or directory> +# (gdb) q +# The program is running. Quit anyway (and kill it)? (y or n) y +# bash$ exit +# +# Script done on Mon Jan 20 15:11:07 1997 +# +# Dave Bodenstab +# imdave@synet.net diff --git a/test/clobber.ok b/test/clobber.ok new file mode 100644 index 0000000..7105708 --- /dev/null +++ b/test/clobber.ok @@ -0,0 +1 @@ +000801
\ No newline at end of file diff --git a/test/clos1way.awk b/test/clos1way.awk new file mode 100644 index 0000000..5bc4068 --- /dev/null +++ b/test/clos1way.awk @@ -0,0 +1,21 @@ +BEGIN { + command = "LC_ALL=C sort" + + n = split("abcdefghijklmnopqrstuvwxyz", a, "") + for (i = n; i > 0; i--) { +# print "printing", a[i] > "/dev/stderr" + print a[i] |& command + } + + close(command, "to") + +# print "starting read loop" > "/dev/stderr" + do { + if (line) + print "got", line +# stopme(); + } while ((command |& getline line) > 0) + +# print "doing final close" > "/dev/stderr" + close(command) +} diff --git a/test/clos1way.ok b/test/clos1way.ok new file mode 100644 index 0000000..09d732a --- /dev/null +++ b/test/clos1way.ok @@ -0,0 +1,26 @@ +got a +got b +got c +got d +got e +got f +got g +got h +got i +got j +got k +got l +got m +got n +got o +got p +got q +got r +got s +got t +got u +got v +got w +got x +got y +got z diff --git a/test/clsflnam.awk b/test/clsflnam.awk new file mode 100644 index 0000000..0ba601f --- /dev/null +++ b/test/clsflnam.awk @@ -0,0 +1,12 @@ +#! /usr/bin/awk -f +BEGIN { + getline +# print ("FILENAME =", FILENAME) > "/dev/stderr" + #Rewind the file + if (close(FILENAME)) { + print "Error `" ERRNO "' closing input file" > "/dev/stderr"; + exit; + } +} +{ print "Analysing ", $0 } + diff --git a/test/clsflnam.in b/test/clsflnam.in new file mode 100644 index 0000000..a92d664 --- /dev/null +++ b/test/clsflnam.in @@ -0,0 +1,3 @@ +line 1 +line 2 +line 3 diff --git a/test/clsflnam.ok b/test/clsflnam.ok new file mode 100644 index 0000000..9addfc7 --- /dev/null +++ b/test/clsflnam.ok @@ -0,0 +1 @@ +Error `close of redirection that was never opened' closing input file diff --git a/test/compare.awk b/test/compare.awk new file mode 100644 index 0000000..39a88f3 --- /dev/null +++ b/test/compare.awk @@ -0,0 +1,13 @@ +BEGIN { + if (ARGV[1]) print 1 + ARGV[1] = "" + if (ARGV[2]) print 2 + ARGV[2] = "" + if ("0") print "zero" + if ("") print "null" + if (0) print 0 +} +{ + if ($0) print $0 + if ($1) print $1 +} diff --git a/test/compare.in b/test/compare.in new file mode 100644 index 0000000..1ab098b --- /dev/null +++ b/test/compare.in @@ -0,0 +1,4 @@ +0 +1 +0 1 + diff --git a/test/compare.ok b/test/compare.ok new file mode 100644 index 0000000..8241359 --- /dev/null +++ b/test/compare.ok @@ -0,0 +1,5 @@ +2 +zero +1 +1 +0 1 diff --git a/test/compare2.awk b/test/compare2.awk new file mode 100644 index 0000000..f2c2786 --- /dev/null +++ b/test/compare2.awk @@ -0,0 +1,165 @@ +# From beebe@math.utah.edu Thu Aug 2 15:35:07 2001 +# Received: from mail.actcom.co.il [192.114.47.13] +# by localhost with POP3 (fetchmail-5.7.4) +# for arnold@localhost (single-drop); Thu, 02 Aug 2001 15:35:07 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Thu Aug 2 16:02:36 2001) +# X-From_: beebe@sunshine.math.utah.edu Thu Aug 2 15:41:13 2001 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.9.1a/actcom-0.2) id PAA01349 for <arobbins@actcom.co.il>; +# Thu, 2 Aug 2001 15:41:06 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from billohost.com (www.billohost.com [209.196.35.10]) +# by lmail.actcom.co.il (8.11.2/8.11.2) with ESMTP id f72Cf3I21032 +# for <arobbins@actcom.co.il>; Thu, 2 Aug 2001 15:41:05 +0300 +# Received: from fencepost.gnu.org (we-refuse-to-spy-on-our-users@fencepost.gnu.org [199.232.76.164]) +# by billohost.com (8.9.3/8.9.3) with ESMTP id IAA28585 +# for <arnold@skeeve.com>; Thu, 2 Aug 2001 08:34:38 -0400 +# Received: from sunshine.math.utah.edu ([128.110.198.2]) +# by fencepost.gnu.org with esmtp (Exim 3.22 #1 (Debian)) +# id 15SHjG-00036x-00 +# for <arnold@gnu.org>; Thu, 02 Aug 2001 08:37:30 -0400 +# Received: from suncore.math.utah.edu (IDENT:GsUbUdUYCtFLRE4HvnnvhN4JsjooYcfR@suncore0.math.utah.edu [128.110.198.5]) +# by sunshine.math.utah.edu (8.9.3/8.9.3) with ESMTP id GAA00190; +# Thu, 2 Aug 2001 06:37:04 -0600 (MDT) +# Received: (from beebe@localhost) +# by suncore.math.utah.edu (8.9.3/8.9.3) id GAA20469; +# Thu, 2 Aug 2001 06:37:03 -0600 (MDT) +# Date: Thu, 2 Aug 2001 06:37:03 -0600 (MDT) +# From: "Nelson H. F. Beebe" <beebe@math.utah.edu> +# To: arnold@gnu.org +# Cc: beebe@math.utah.edu +# X-US-Mail: "Center for Scientific Computing, Department of Mathematics, 322 +# INSCC, University of Utah, 155 S 1400 E RM 233, Salt Lake City, UT +# 84112-0090, USA" +# X-Telephone: +1 801 581 5254 +# X-FAX: +1 801 585 1640, +1 801 581 4148 +# X-URL: http://www.math.utah.edu/~beebe +# Subject: awk implementations: a bug, or new dark corner? +# Message-ID: <CMM.0.92.0.996755823.beebe@suncore.math.utah.edu> +# Status: RO +# +# Consider the following program: +# +# % cat bug.awk +BEGIN { + split("00/00/00",mdy,"/") + if ((mdy[1] == 0) && (mdy[2] == 0) && (mdy[3] == 0)) + { + print "OK: zero strings compare equal to number zero" + exit(0) + } + else + { + print "ERROR: zero strings compare unequal to number zero" + exit(1) + } +} +# +# Here are the awk implementation versions (on Sun Solaris 2.7): +# +# % awk -V +# awk version 19990416 +# +# % mawk -W version +# mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan +# +# % nawk -V +# awk version 20001115 +# +# % gawk --version +# GNU Awk 3.1.10 +# ... +# +# Here's what they say about the test program: +# +# foreach f (awk mawk nawk gawk gawk-*) +# echo ======== $f +# $f -f ~/bug.awk +# end +# +# ======== awk +# OK: zero strings compare equal to number zero +# ======== mawk +# OK: zero strings compare equal to number zero +# ======== nawk +# OK: zero strings compare equal to number zero +# ======== gawk +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.0.0 +# OK: zero strings compare equal to number zero +# ======== gawk-3.0.1 +# OK: zero strings compare equal to number zero +# ======== gawk-3.0.3 +# OK: zero strings compare equal to number zero +# ======== gawk-3.0.4 +# OK: zero strings compare equal to number zero +# ======== gawk-3.0.5 +# OK: zero strings compare equal to number zero +# ======== gawk-3.0.6 +# OK: zero strings compare equal to number zero +# ======== gawk-3.0.60 +# OK: zero strings compare equal to number zero +# ======== gawk-3.0.90 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.0.91 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.0.92 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.0.93 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.0.94 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.0.95 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.0.96 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.0.97 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.1.0 +# ERROR: zero strings compare unequal to number zero +# ======== gawk-3.1.10 +# ERROR: zero strings compare unequal to number zero +# +# Identical results were obtained on Apple Rhapsody, Apple Darwin, +# Compaq/DEC Alpha OSF/1, Intel x86 GNU/Linux, SGI IRIX 6.5, DEC Alpha +# GNU/Linux, and Sun SPARC GNU/Linux, so it definitely is not a C +# compiler problem. +# +# However, the gray awk book, p. 44, says: +# +# In a comparison expression like: +# x == y +# if both operands have a numeric type, the comparison is numeric; +# otherwise, any numeric operand is converted to a string and the +# comparison is made on the string values. +# +# and the new green gawk book, p. 95, says: +# +# When comparing operands of mixed types, numeric operands are +# converted to strings using the value of `CONVFMT' +# +# This suggests that the OK response in bug.awk is wrong, and the ERROR +# response is correct. Only recent gawk releases do the right thing, +# and it is awk, mawk, and nawk that have a bug. +# +# If I change the test program from "00/00/00" to "0/0/0", all versions +# tested produce the OK response. +# +# Comments? +# +# After reading the two book excerpts, I changed my code to read +# +# if (((0 + mdy[1]) == 0) && ((0 + mdy[2]) == 0) && ((0 + mdy[3]) == 0)) +# +# and output from all implementations now agrees. +# +# ------------------------------------------------------------------------------- +# - Nelson H. F. Beebe Tel: +1 801 581 5254 - +# - Center for Scientific Computing FAX: +1 801 585 1640, +1 801 581 4148 - +# - University of Utah Internet e-mail: beebe@math.utah.edu - +# - Department of Mathematics, 322 INSCC beebe@acm.org beebe@computer.org - +# - 155 S 1400 E RM 233 beebe@ieee.org - +# - Salt Lake City, UT 84112-0090, USA URL: http://www.math.utah.edu/~beebe - +# ------------------------------------------------------------------------------- +# diff --git a/test/compare2.ok b/test/compare2.ok new file mode 100644 index 0000000..fd1043a --- /dev/null +++ b/test/compare2.ok @@ -0,0 +1 @@ +OK: zero strings compare equal to number zero diff --git a/test/concat1.awk b/test/concat1.awk new file mode 100644 index 0000000..4ccb117 --- /dev/null +++ b/test/concat1.awk @@ -0,0 +1,78 @@ +#From deep@cicada-semi.com Wed Jan 23 13:15:52 2002 +#X-From_: deep@cicada-semi.com Wed Jan 23 01:24:54 2002 +#From: "Mandeep Chadha" <deep@cicada-semi.com> +#To: <bug-gawk@gnu.org> +#Subject: gawk version 3.1.0 will not print a ";" +#Date: Tue, 22 Jan 2002 17:23:57 -0600 +#Message-ID: <NCBBLGONGLINHCDGFCPNOENHCOAA.deep@cicada-semi.com> +#MIME-Version: 1.0 +#Content-Type: text/plain; +# charset="iso-8859-1" +#Content-Transfer-Encoding: 7bit +#X-Priority: 3 (Normal) +#X-MSMail-Priority: Normal +#X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) +#Importance: Normal +#X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700 +# +# +#The file "tmp" contains the following lines: +# +#A +#B +#C +#D +# +#and when I run the command: +# +# gawk '{print "Input = "$_" ; "}' tmp +{print "Input = "$_" ; "} +# +#I get the following output: +# +#Input = A +#Input = B +#Input = C +#Input = D +# +#while I expect the following output: +# +#Input = A ; +#Input = B ; +#Input = C ; +#Input = D ; +# +#Running gawk --version produces the following output: +# +#GNU Awk 3.1.0 +#Copyright (C) 1989, 1991-2001 Free Software Foundation. +# +#This program is free software; you can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 2 of the License, or +#(at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with this program; if not, write to the Free Software +#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +#I am running this on a i686 machine that is running RedHat 7.2 (out of the box). +# +#Thanks, +# +#Mandeep Chadha +# +#---------------------------------------- +#Mandeep Chadha +#Cicada Semiconductor Corp. +#811 Barton Springs Road, Suite 550 +#Austin, TX 78704 +#Ph: (512) 327-3500 x111 +#E-mail: deep@cicada-semi.com +#URL: http://www.cicada-semi.com +#---------------------------------------- diff --git a/test/concat1.in b/test/concat1.in new file mode 100644 index 0000000..8422d40 --- /dev/null +++ b/test/concat1.in @@ -0,0 +1,4 @@ +A +B +C +D diff --git a/test/concat1.ok b/test/concat1.ok new file mode 100644 index 0000000..b0aad60 --- /dev/null +++ b/test/concat1.ok @@ -0,0 +1,4 @@ +Input = A ; +Input = B ; +Input = C ; +Input = D ; diff --git a/test/concat2.awk b/test/concat2.awk new file mode 100644 index 0000000..a94b29b --- /dev/null +++ b/test/concat2.awk @@ -0,0 +1,8 @@ +function f(s, x) { + x = 1 + s = 3 + s = s x + print s +} + +BEGIN { for (i = 1; i <=12; i++) f() } diff --git a/test/concat2.ok b/test/concat2.ok new file mode 100644 index 0000000..b7b86e5 --- /dev/null +++ b/test/concat2.ok @@ -0,0 +1,12 @@ +31 +31 +31 +31 +31 +31 +31 +31 +31 +31 +31 +31 diff --git a/test/concat3.awk b/test/concat3.awk new file mode 100644 index 0000000..554c9a9 --- /dev/null +++ b/test/concat3.awk @@ -0,0 +1 @@ +BEGIN { a; a = a (b "c"); print a; print b } diff --git a/test/concat3.ok b/test/concat3.ok new file mode 100644 index 0000000..8802331 --- /dev/null +++ b/test/concat3.ok @@ -0,0 +1,2 @@ +c + diff --git a/test/convfmt.awk b/test/convfmt.awk new file mode 100644 index 0000000..90fd204 --- /dev/null +++ b/test/convfmt.awk @@ -0,0 +1,10 @@ +BEGIN { + CONVFMT = "%2.2f" + a = 123.456 + b = a "" # give `a' string value also + printf "a = %s\n", a + CONVFMT = "%.6g" + printf "a = %s\n", a + a += 0 # make `a' numeric only again + printf "a = %s\n", a # use `a' as string +} diff --git a/test/convfmt.ok b/test/convfmt.ok new file mode 100644 index 0000000..a7b66f7 --- /dev/null +++ b/test/convfmt.ok @@ -0,0 +1,3 @@ +a = 123.46 +a = 123.456 +a = 123.456 diff --git a/test/datanonl.awk b/test/datanonl.awk new file mode 100644 index 0000000..29e668e --- /dev/null +++ b/test/datanonl.awk @@ -0,0 +1,3 @@ +# example program from alex@bofh.torun.pl +BEGIN { IGNORECASE=1 } +/\w+@([[:alnum:]]+\.)+[[:alnum:]]+[[:blank:]]+/ {print $0} diff --git a/test/datanonl.in b/test/datanonl.in new file mode 100644 index 0000000..5340d7b --- /dev/null +++ b/test/datanonl.in @@ -0,0 +1 @@ +bleble@foo1.bh.pl deny
\ No newline at end of file diff --git a/test/datanonl.ok b/test/datanonl.ok new file mode 100644 index 0000000..7b0fcaf --- /dev/null +++ b/test/datanonl.ok @@ -0,0 +1 @@ +bleble@foo1.bh.pl deny diff --git a/test/defref.awk b/test/defref.awk new file mode 100644 index 0000000..b4e8f10 --- /dev/null +++ b/test/defref.awk @@ -0,0 +1 @@ +BEGIN { foo() } diff --git a/test/defref.ok b/test/defref.ok new file mode 100644 index 0000000..e0061a0 --- /dev/null +++ b/test/defref.ok @@ -0,0 +1,3 @@ +gawk: defref.awk:2: warning: function `foo' called but never defined +gawk: defref.awk:1: fatal: function `foo' not defined +EXIT CODE: 2 diff --git a/test/delarpm2.awk b/test/delarpm2.awk new file mode 100644 index 0000000..ad0ed3d --- /dev/null +++ b/test/delarpm2.awk @@ -0,0 +1,95 @@ +# From beebe@math.utah.edu Sat May 17 21:31:27 2003 +# Return-Path: <beebe@math.utah.edu> +# Received: from localhost (aahz [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h4HIQmCw001380 +# for <arnold@localhost>; Sat, 17 May 2003 21:31:27 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Sat, 17 May 2003 21:31:27 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Sat May 17 21:34:07 2003) +# X-From_: beebe@sunshine.math.utah.edu Fri May 16 20:38:45 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h4GHcd226764 for <arobbins@actcom.co.il>; +# Fri, 16 May 2003 20:38:40 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h4GHgBc2023067 +# for <arobbins@actcom.co.il>; Fri, 16 May 2003 20:42:13 +0300 +# Received: from sunshine.math.utah.edu (sunshine.math.utah.edu [128.110.198.2]) +# by f7.net (8.11.7/8.11.6) with ESMTP id h4GHcbf09202 +# for <arnold@skeeve.com>; Fri, 16 May 2003 13:38:37 -0400 +# Received: from suncore.math.utah.edu (IDENT:r8KQWmkF4jVMLBhxpojXGNCAnBZB38ET@suncore.math.utah.edu [128.110.198.5]) +# by sunshine.math.utah.edu (8.9.3p2/8.9.3) with ESMTP id LAA09111; +# Fri, 16 May 2003 11:38:34 -0600 (MDT) +# Received: (from beebe@localhost) +# by suncore.math.utah.edu (8.9.3p2/8.9.3) id LAA01743; +# Fri, 16 May 2003 11:38:34 -0600 (MDT) +# Date: Fri, 16 May 2003 11:38:34 -0600 (MDT) +# From: "Nelson H. F. Beebe" <beebe@math.utah.edu> +# To: "Arnold Robbins" <arnold@skeeve.com> +# Cc: beebe@math.utah.edu +# X-US-Mail: "Center for Scientific Computing, Department of Mathematics, 110 +# LCB, University of Utah, 155 S 1400 E RM 233, Salt Lake City, UT +# 84112-0090, USA" +# X-Telephone: +1 801 581 5254 +# X-FAX: +1 801 585 1640, +1 801 581 4148 +# X-URL: http://www.math.utah.edu/~beebe +# Subject: gawk-3.1.2[ab]: bug in delete +# Message-ID: <CMM.0.92.0.1053106714.beebe@suncore.math.utah.edu> +# +# I discovered yesterday that one of my tools got broken by the upgrade +# to gawk-3.1.2a and gawk-3.1.2b. For now, I've temporarily reset +# /usr/local/bin/gawk on the Sun Solaris and Intel GNU/Linux systems +# back to be gawk-3.1.2. +# +# This morning, I isolated the problem to the following small test case: +# +# % cat bug.awk + BEGIN { + clear_array(table) + foo(table) + for (key in table) + print key, table[k] + clear_array(table) + exit(0) + } + + function clear_array(array, key) + { + for (key in array) + delete array[key] + } + + function foo(a) + { + a[1] = "one" + a[2] = "two" + } +# +# With nawk, mawk, and also gawk-3.1.2 or earlier, I get this: +# +# % mawk -f bug.awk +# 1 +# 2 +# +# However, with the two most recent gawk releases, I get: +# +# % gawk-3.1.2b -f bug.awk +# gawk-3.1.2b: bug.awk:12: fatal: delete: illegal use of variable `table' as +# array +# +# If the first clear_array() statement is commented out, it runs. +# However, the problem is that in a large program, it may not be easy to +# identify places where it is safe to invoke delete, so I believe the +# old behavior is more desirable. +# +# ------------------------------------------------------------------------------- +# - Nelson H. F. Beebe Tel: +1 801 581 5254 - +# - Center for Scientific Computing FAX: +1 801 581 4148 - +# - University of Utah Internet e-mail: beebe@math.utah.edu - +# - Department of Mathematics, 110 LCB beebe@acm.org beebe@computer.org - +# - 155 S 1400 E RM 233 beebe@ieee.org - +# - Salt Lake City, UT 84112-0090, USA URL: http://www.math.utah.edu/~beebe - +# ------------------------------------------------------------------------------- +# diff --git a/test/delarpm2.ok b/test/delarpm2.ok new file mode 100644 index 0000000..bea5b8a --- /dev/null +++ b/test/delarpm2.ok @@ -0,0 +1,2 @@ +1 +2 diff --git a/test/delarprm.awk b/test/delarprm.awk new file mode 100644 index 0000000..d59de31 --- /dev/null +++ b/test/delarprm.awk @@ -0,0 +1,50 @@ +# From dragon!unagi.cis.upenn.edu!sjanet Tue Mar 25 17:12:20 1997 +# Return-Path: <dragon!unagi.cis.upenn.edu!sjanet> +# Received: by skeeve.atl.ga.us (/\==/\ Smail3.1.22.1 #22.1) +# id <m0w9eS4-000GWyC@skeeve.atl.ga.us>; Tue, 25 Mar 97 17:12 EST +# Received: by vecnet.com (DECUS UUCP /2.0/2.0/2.0/); +# Tue, 25 Mar 97 16:58:36 EDT +# Received: from gnu-life.ai.mit.edu by antaries.vec.net (MX V4.2 VAX) with SMTP; +# Tue, 25 Mar 1997 16:58:26 EST +# Received: from linc.cis.upenn.edu by gnu-life.ai.mit.edu (8.8.5/8.6.12GNU) with +# ESMTP id QAA24350 for <bug-gnu-utils@prep.ai.mit.edu>; Tue, 25 Mar +# 1997 16:56:59 -0500 (EST) +# Received: from unagi.cis.upenn.edu (UNAGI.CIS.UPENN.EDU [158.130.8.153]) by +# linc.cis.upenn.edu (8.8.5/8.8.5) with ESMTP id QAA09424; Tue, 25 Mar +# 1997 16:56:54 -0500 (EST) +# Received: (from sjanet@localhost) by unagi.cis.upenn.edu (8.8.5/8.8.5) id +# QAA03969; Tue, 25 Mar 1997 16:56:50 -0500 (EST) +# Date: Tue, 25 Mar 1997 16:56:50 -0500 (EST) +# From: Stan Janet <sjanet@unagi.cis.upenn.edu> +# Message-ID: <199703252156.QAA03969@unagi.cis.upenn.edu> +# To: bug-gnu-utils@prep.ai.mit.edu +# CC: arnold@gnu.ai.mit.edu +# Subject: GNU awk 3.0.2 bug: fatal error deleting local array inside function +# Status: ORf +# +# Version: GNU Awk 3.0.2 +# Platforms: SunOS 4.1.1 (compiled with Sun cc) +# IRIX 5.3 (compiled with SGI cc) +# Problem: Deleting local array inside function causes fatal internal error (and +# core dump. The error does not occur when the variable "x", unused in +# the example, is removed or when the function is declared foo(x,p). +# When the function is declared foo(p,x), adding a dummy line that uses +# "x", e.g. "x=1" does not prevent the error. If "p" is not deleted, +# there is no error. If "p[1]" is used to delete the lone element, there +# is no error. +# +# ==== The program x.gawk ==== + +function foo(p,x) { + p[1]="bar" + delete p + return 0 +} + +BEGIN { + foo() +} + +# ==== The output for "gawk -f x.gawk" (SunOS) ==== +# +# gawk: x.gawk:4: fatal error: internal error diff --git a/test/delarprm.ok b/test/delarprm.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/delarprm.ok diff --git a/test/delfunc.awk b/test/delfunc.awk new file mode 100644 index 0000000..365a76b --- /dev/null +++ b/test/delfunc.awk @@ -0,0 +1,7 @@ +# from Stepan Kasal, 9 July 2003 +function f() +{ + delete f +} + +BEGIN { f() } diff --git a/test/delfunc.ok b/test/delfunc.ok new file mode 100644 index 0000000..d12f0bc --- /dev/null +++ b/test/delfunc.ok @@ -0,0 +1,2 @@ +gawk: delfunc.awk:4: fatal: attempt to use function `f' as an array +EXIT CODE: 2 diff --git a/test/dynlj.awk b/test/dynlj.awk new file mode 100644 index 0000000..ec6851b --- /dev/null +++ b/test/dynlj.awk @@ -0,0 +1 @@ +BEGIN { printf "%*sworld\n", -20, "hello" } diff --git a/test/dynlj.ok b/test/dynlj.ok new file mode 100644 index 0000000..c8f3fe9 --- /dev/null +++ b/test/dynlj.ok @@ -0,0 +1 @@ +hello world diff --git a/test/eofsplit.awk b/test/eofsplit.awk new file mode 100644 index 0000000..22042b4 --- /dev/null +++ b/test/eofsplit.awk @@ -0,0 +1,68 @@ +# Date: Sat, 30 Mar 1996 12:47:17 -0800 (PST) +# From: Charles Howes <chowes@grid.direct.ca> +# To: bug-gnu-utils@prep.ai.mit.edu, arnold@gnu.ai.mit.edu +# Subject: Bug in Gawk 3.0.0, sample code: +# +#!/usr/local/bin/gawk -f +# +# Hello! This is a bug report from chowes@direct.ca +# +# uname -a +# SunOS hostname 5.5 Generic sun4m +# +# Gnu Awk (gawk) 3.0, patchlevel 0: +BEGIN{ +FS=":" +while ((getline < "/etc/passwd") > 0) { + r=$3 + z=0 + n[0]=1 + } +FS=" " +} +#gawk: fp.new:16: fatal error: internal error +#Abort + +# #!/usr/local/bin/gawk -f +# # Gnu Awk (gawk) 2.15, patchlevel 6 +# +# BEGIN{ +# f="/etc/passwd" +# while (getline < f) n[0]=1 +# FS=" " +# } +# #gawk: /staff/chowes/bin/fp:7: fatal error: internal error +# #Abort + +# These examples are not perfect coding style because I took a real +# piece of code and tried to strip away anything that didn't make the error +# message go away. +# +# The interesting part of the 'truss' is: +# +# fstat(3, 0xEFFFF278) = 0 +# lseek(3, 0, SEEK_SET) = 0 +# read(3, " r o o t : x : 0 : 1 : S".., 2291) = 2291 +# brk(0x00050020) = 0 +# brk(0x00052020) = 0 +# read(3, 0x0004F4B8, 2291) = 0 +# close(3) = 0 +# Incurred fault #6, FLTBOUNDS %pc = 0x0001B810 +# siginfo: SIGSEGV SEGV_MAPERR addr=0x00053000 +# Received signal #11, SIGSEGV [caught] +# siginfo: SIGSEGV SEGV_MAPERR addr=0x00053000 +# write(2, " g a w k", 4) = 4 +# write(2, " : ", 2) = 2 +# +# -- +# Charles Howes -- chowes@direct.ca Voice: (604) 691-1607 +# System Administrator Fax: (604) 691-1605 +# Internet Direct - 1050 - 555 West Hastings St - Vancouver, BC V6B 4N6 +# +# A sysadmin's life is a sorry one. The only advantage he has over Emergency +# Room doctors is that malpractice suits are rare. On the other hand, ER +# doctors never have to deal with patients installing new versions of their +# own innards! -Michael O'Brien +# +# "I think I know what may have gone wrong in the original s/w. +# It's a bug in the way it was written." - Vagueness**n diff --git a/test/eofsplit.ok b/test/eofsplit.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/eofsplit.ok diff --git a/test/exitval1.awk b/test/exitval1.awk new file mode 100644 index 0000000..550200d --- /dev/null +++ b/test/exitval1.awk @@ -0,0 +1,3 @@ +# This should exit 0, even though child exits 1 +BEGIN { "exit 1" | getline junk ; exit 12 } +END { exit 0 } diff --git a/test/exitval1.ok b/test/exitval1.ok new file mode 100644 index 0000000..eca5994 --- /dev/null +++ b/test/exitval1.ok @@ -0,0 +1 @@ +EXIT CODE: 0 diff --git a/test/exitval2.awk b/test/exitval2.awk new file mode 100644 index 0000000..ed05e76 --- /dev/null +++ b/test/exitval2.awk @@ -0,0 +1,3 @@ +BEGIN { print "foo" | "read x ; echo $x ; exit 12" } +# this should still exit 0, as pointed out by kenny mccormack in +# comp.lang.awk on 2 feb 2005 diff --git a/test/exitval2.ok b/test/exitval2.ok new file mode 100644 index 0000000..257cc56 --- /dev/null +++ b/test/exitval2.ok @@ -0,0 +1 @@ +foo diff --git a/test/fflush.ok b/test/fflush.ok new file mode 100644 index 0000000..4cf0df6 --- /dev/null +++ b/test/fflush.ok @@ -0,0 +1,16 @@ +1st +2nd +1st +2nd +1st +2nd +1st +2nd +1st +2nd +1st +2nd +1st +2nd +1st +2nd diff --git a/test/fflush.sh b/test/fflush.sh new file mode 100755 index 0000000..42d624c --- /dev/null +++ b/test/fflush.sh @@ -0,0 +1,16 @@ +#! /bin/sh +../gawk 'BEGIN{print "1st";fflush("/dev/stdout");print "2nd"|"cat"}' + +../gawk 'BEGIN{print "1st";fflush("/dev/stdout");print "2nd"|"cat"}'|cat + +../gawk 'BEGIN{print "1st";fflush("/dev/stdout");close("/dev/stdout");print "2nd"|"cat"}'|cat + +../gawk 'BEGIN{print "1st";fflush("/dev/stdout");print "2nd"|"cat";close("cat")}'|cat + +../gawk 'BEGIN{print "1st";fflush("/dev/stdout");print "2nd"|"cat";close("cat")}'|cat + +../gawk 'BEGIN{print "1st";fflush("/dev/stdout");print "2nd"|"cat";close("cat")}'|cat + +../gawk 'BEGIN{print "1st";fflush("/dev/stdout");print "2nd"|"sort"}'|cat + +../gawk 'BEGIN{print "1st";fflush("/dev/stdout");print "2nd"|"sort";close("sort")}'|cat diff --git a/test/fieldwdth.awk b/test/fieldwdth.awk new file mode 100644 index 0000000..f2eeb6c --- /dev/null +++ b/test/fieldwdth.awk @@ -0,0 +1,2 @@ +BEGIN { FIELDWIDTHS = "2 3 4" } +{ print $2 } diff --git a/test/fieldwdth.in b/test/fieldwdth.in new file mode 100644 index 0000000..28d1445 --- /dev/null +++ b/test/fieldwdth.in @@ -0,0 +1 @@ +123456789 diff --git a/test/fieldwdth.ok b/test/fieldwdth.ok new file mode 100644 index 0000000..51b4008 --- /dev/null +++ b/test/fieldwdth.ok @@ -0,0 +1 @@ +345 diff --git a/test/fldchg.awk b/test/fldchg.awk new file mode 100644 index 0000000..a8018f7 --- /dev/null +++ b/test/fldchg.awk @@ -0,0 +1,8 @@ +{ +# print "0:", $0 + gsub("aa", "+") + print "1:", $0 + $3 = "<" $3 ">" + print "2:", $0 + print "2a:" "%" $1 "%" $2 "%" $3 "%" $4 "%" $5 +} diff --git a/test/fldchg.in b/test/fldchg.in new file mode 100644 index 0000000..f500c36 --- /dev/null +++ b/test/fldchg.in @@ -0,0 +1 @@ +aa aab c d e f diff --git a/test/fldchg.ok b/test/fldchg.ok new file mode 100644 index 0000000..cc5032a --- /dev/null +++ b/test/fldchg.ok @@ -0,0 +1,3 @@ +1: + +b c d e f +2: + +b <c> d e f +2a:%+%+b%<c>%d%e diff --git a/test/fldchgnf.awk b/test/fldchgnf.awk new file mode 100644 index 0000000..fbb8f11 --- /dev/null +++ b/test/fldchgnf.awk @@ -0,0 +1 @@ +{ OFS = ":"; $2 = ""; print $0; print NF } diff --git a/test/fldchgnf.in b/test/fldchgnf.in new file mode 100644 index 0000000..8e13e46 --- /dev/null +++ b/test/fldchgnf.in @@ -0,0 +1 @@ +a b c d diff --git a/test/fldchgnf.ok b/test/fldchgnf.ok new file mode 100644 index 0000000..10b38ed --- /dev/null +++ b/test/fldchgnf.ok @@ -0,0 +1,2 @@ +a::c:d +4 diff --git a/test/fmttest.awk b/test/fmttest.awk new file mode 100644 index 0000000..e8db0fb --- /dev/null +++ b/test/fmttest.awk @@ -0,0 +1,164 @@ +### /u/sy/beebe/xml/shbook/fmttest.awk, Sat May 31 09:13:52 2003 +### Edit by Nelson H. F. Beebe <beebe@math.utah.edu> +### ==================================================================== +### Test the degree of support for printf format items in awk +### implementations. +### +### Usage: +### awk -f fmttest.awk +### [31-May-2003] +### ==================================================================== + +BEGIN { + ## ----------------------------------------------------------------- + print "\n\nFormat item: c\n" + + printf("ABC with %%c : %c\n", "ABC") + printf("123 with %%c : %c\n", 123) + + printf("ABC with %%.15c : %.15c\n", "ABC") + printf("123 with %%.15c : %.15c\n", 123) + + printf("ABC with %%15c : %15c\n", "ABC") + printf("123 with %%15c : %15c\n", 123) + + printf("ABC with %%-15c : %-15c\n", "ABC") + printf("123 with %%-15c : %-15c\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: d\n" + + printf("ABC with %%d : %d\n", "ABC") + printf("123 with %%d : %d\n", 123) + + printf("ABC with %%.15d : %.15d\n", "ABC") + printf("123 with %%.15d : %.15d\n", 123) + + printf("ABC with %%15d : %15d\n", "ABC") + printf("123 with %%15d : %15d\n", 123) + + printf("ABC with %%-15d : %-15d\n", "ABC") + printf("123 with %%-15d : %-15d\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: e\n" + + printf("ABC with %%e : %e\n", "ABC") + printf("123 with %%e : %e\n", 123) + + printf("ABC with %%.25e : %.25e\n", "ABC") + printf("123 with %%.25e : %.25e\n", 123) + + printf("ABC with %%25e : %25e\n", "ABC") + printf("123 with %%25e : %25e\n", 123) + + printf("ABC with %%-25e : %-25e\n", "ABC") + printf("123 with %%-25e : %-25e\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: f\n" + + printf("ABC with %%f : %f\n", "ABC") + printf("123 with %%f : %f\n", 123) + + printf("ABC with %%.25f : %.25f\n", "ABC") + printf("123 with %%.25f : %.25f\n", 123) + + printf("ABC with %%25f : %25f\n", "ABC") + printf("123 with %%25f : %25f\n", 123) + + printf("ABC with %%-25f : %-25f\n", "ABC") + printf("123 with %%-25f : %-25f\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: g\n" + + printf("ABC with %%g : %g\n", "ABC") + printf("123 with %%g : %g\n", 123) + + printf("ABC with %%.25g : %.25g\n", "ABC") + printf("123 with %%.25g : %.25g\n", 123) + + printf("ABC with %%25g : %25g\n", "ABC") + printf("123 with %%25g : %25g\n", 123) + + printf("ABC with %%-25g : %-25g\n", "ABC") + printf("123 with %%-25g : %-25g\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: o\n" + + printf("ABC with %%o : %o\n", "ABC") + printf("123 with %%o : %o\n", 123) + + printf("ABC with %%.15o : %.15o\n", "ABC") + printf("123 with %%.15o : %.15o\n", 123) + + printf("ABC with %%15o : %15o\n", "ABC") + printf("123 with %%15o : %15o\n", 123) + + printf("ABC with %%-15o : %-15o\n", "ABC") + printf("123 with %%-15o : %-15o\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: s\n" + + printf("ABC with %%s : %s\n", "ABC") + printf("123 with %%s : %s\n", 123) + + printf("ABC with %%.15s : %.15s\n", "ABC") + printf("123 with %%.15s : %.15s\n", 123) + + printf("ABC with %%15s : %15s\n", "ABC") + printf("123 with %%15s : %15s\n", 123) + + printf("ABC with %%-15s : %-15s\n", "ABC") + printf("123 with %%-15s : %-15s\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: u\n" + + printf("ABC with %%u : %u\n", "ABC") + printf("123 with %%u : %u\n", 123) + + printf("ABC with %%.15u : %.15u\n", "ABC") + printf("123 with %%.15u : %.15u\n", 123) + + printf("ABC with %%15u : %15u\n", "ABC") + printf("123 with %%15u : %15u\n", 123) + + printf("ABC with %%-15u : %-15u\n", "ABC") + printf("123 with %%-15u : %-15u\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: x\n" + + printf("ABC with %%x : %x\n", "ABC") + printf("123 with %%x : %x\n", 123) + + printf("ABC with %%.15x : %.15x\n", "ABC") + printf("123 with %%.15x : %.15x\n", 123) + + printf("ABC with %%15x : %15x\n", "ABC") + printf("123 with %%15x : %15x\n", 123) + + printf("ABC with %%-15x : %-15x\n", "ABC") + printf("123 with %%-15x : %-15x\n", 123) + + ## ----------------------------------------------------------------- + print "\n\nFormat item: X\n" + + printf("ABC with %%X : %X\n", "ABC") + printf("123 with %%X : %X\n", 123) + + printf("ABC with %%.15X : %.15X\n", "ABC") + printf("123 with %%.15X : %.15X\n", 123) + + printf("ABC with %%15X : %15X\n", "ABC") + printf("123 with %%15X : %15X\n", 123) + + printf("ABC with %%-15X : %-15X\n", "ABC") + printf("123 with %%-15X : %-15X\n", 123) + + exit(0) +} diff --git a/test/fmttest.ok b/test/fmttest.ok new file mode 100644 index 0000000..753567a --- /dev/null +++ b/test/fmttest.ok @@ -0,0 +1,120 @@ + + +Format item: c + +ABC with %c : A +123 with %c : { +ABC with %.15c : A +123 with %.15c : { +ABC with %15c : A +123 with %15c : { +ABC with %-15c : A +123 with %-15c : { + + +Format item: d + +ABC with %d : 0 +123 with %d : 123 +ABC with %.15d : 000000000000000 +123 with %.15d : 000000000000123 +ABC with %15d : 0 +123 with %15d : 123 +ABC with %-15d : 0 +123 with %-15d : 123 + + +Format item: e + +ABC with %e : 0.000000e+00 +123 with %e : 1.230000e+02 +ABC with %.25e : 0.0000000000000000000000000e+00 +123 with %.25e : 1.2300000000000000000000000e+02 +ABC with %25e : 0.000000e+00 +123 with %25e : 1.230000e+02 +ABC with %-25e : 0.000000e+00 +123 with %-25e : 1.230000e+02 + + +Format item: f + +ABC with %f : 0.000000 +123 with %f : 123.000000 +ABC with %.25f : 0.0000000000000000000000000 +123 with %.25f : 123.0000000000000000000000000 +ABC with %25f : 0.000000 +123 with %25f : 123.000000 +ABC with %-25f : 0.000000 +123 with %-25f : 123.000000 + + +Format item: g + +ABC with %g : 0 +123 with %g : 123 +ABC with %.25g : 0 +123 with %.25g : 123 +ABC with %25g : 0 +123 with %25g : 123 +ABC with %-25g : 0 +123 with %-25g : 123 + + +Format item: o + +ABC with %o : 0 +123 with %o : 173 +ABC with %.15o : 000000000000000 +123 with %.15o : 000000000000173 +ABC with %15o : 0 +123 with %15o : 173 +ABC with %-15o : 0 +123 with %-15o : 173 + + +Format item: s + +ABC with %s : ABC +123 with %s : 123 +ABC with %.15s : ABC +123 with %.15s : 123 +ABC with %15s : ABC +123 with %15s : 123 +ABC with %-15s : ABC +123 with %-15s : 123 + + +Format item: u + +ABC with %u : 0 +123 with %u : 123 +ABC with %.15u : 000000000000000 +123 with %.15u : 000000000000123 +ABC with %15u : 0 +123 with %15u : 123 +ABC with %-15u : 0 +123 with %-15u : 123 + + +Format item: x + +ABC with %x : 0 +123 with %x : 7b +ABC with %.15x : 000000000000000 +123 with %.15x : 00000000000007b +ABC with %15x : 0 +123 with %15x : 7b +ABC with %-15x : 0 +123 with %-15x : 7b + + +Format item: X + +ABC with %X : 0 +123 with %X : 7B +ABC with %.15X : 000000000000000 +123 with %.15X : 00000000000007B +ABC with %15X : 0 +123 with %15X : 7B +ABC with %-15X : 0 +123 with %-15X : 7B diff --git a/test/fnamedat.awk b/test/fnamedat.awk new file mode 100644 index 0000000..33a0704 --- /dev/null +++ b/test/fnamedat.awk @@ -0,0 +1 @@ +function foo() { print foo } {foo()} diff --git a/test/fnamedat.in b/test/fnamedat.in new file mode 100644 index 0000000..257cc56 --- /dev/null +++ b/test/fnamedat.in @@ -0,0 +1 @@ +foo diff --git a/test/fnamedat.ok b/test/fnamedat.ok new file mode 100644 index 0000000..d32acff --- /dev/null +++ b/test/fnamedat.ok @@ -0,0 +1,2 @@ +gawk: fnamedat.awk:1: (FILENAME=- FNR=1) fatal: can't use function name `foo' as variable or array +EXIT CODE: 2 diff --git a/test/fnarray.awk b/test/fnarray.awk new file mode 100644 index 0000000..92a18b9 --- /dev/null +++ b/test/fnarray.awk @@ -0,0 +1,7 @@ +function foo(N) { + return 0 +} +BEGIN { + Num = foo[c] +} + diff --git a/test/fnarray.ok b/test/fnarray.ok new file mode 100644 index 0000000..3ee4181 --- /dev/null +++ b/test/fnarray.ok @@ -0,0 +1,3 @@ +gawk: fnarray.awk:5: Num = foo[c] +gawk: fnarray.awk:5: ^ use of non-array as array +EXIT CODE: 1 diff --git a/test/fnarray2.awk b/test/fnarray2.awk new file mode 100644 index 0000000..1723fbf --- /dev/null +++ b/test/fnarray2.awk @@ -0,0 +1,5 @@ +function pile(c, r) +{ + r = ++pile[c] +} +{ pile($1) } diff --git a/test/fnarray2.ok b/test/fnarray2.ok new file mode 100644 index 0000000..243e4cc --- /dev/null +++ b/test/fnarray2.ok @@ -0,0 +1,3 @@ +gawk: fnarray2.awk:3: r = ++pile[c] +gawk: fnarray2.awk:3: ^ use of non-array as array +EXIT CODE: 1 diff --git a/test/fnarydel.awk b/test/fnarydel.awk new file mode 100644 index 0000000..8a1264c --- /dev/null +++ b/test/fnarydel.awk @@ -0,0 +1,60 @@ +#!/usr/local/bin/gawk -f +BEGIN { + process() +} + +function process(aa,a) { + delete aa +} + +BEGIN { + for (i = 1; i < 10; i++) + a[i] = i; + + print "first loop" + for (i in a) + print a[i] + + delete a + + print "second loop" + for (i in a) + print a[i] + + for (i = 1; i < 10; i++) + a[i] = i; + + print "third loop" + for (i in a) + print a[i] + + print "call func" + delit(a) + + print "fourth loop" + for (i in a) + print a[i] + + stressit() +} + +function delit(arr) +{ + delete arr +} + +function stressit( array, i) +{ + delete array + array[4] = 4 + array[5] = 5 + delete array[5] + print "You should just see: 4 4" + for (i in array) + print i, array[i] + delete array + print "You should see nothing between this line" + for (i in array) + print i, array[i] + print "And this one" +} diff --git a/test/fnarydel.ok b/test/fnarydel.ok new file mode 100644 index 0000000..7f3e453 --- /dev/null +++ b/test/fnarydel.ok @@ -0,0 +1,27 @@ +first loop +4 +5 +6 +7 +8 +9 +1 +2 +3 +second loop +third loop +4 +5 +6 +7 +8 +9 +1 +2 +3 +call func +fourth loop +You should just see: 4 4 +4 4 +You should see nothing between this line +And this one diff --git a/test/fnaryscl.awk b/test/fnaryscl.awk new file mode 100644 index 0000000..b88778e --- /dev/null +++ b/test/fnaryscl.awk @@ -0,0 +1,10 @@ +BEGIN { + foo[1] = 4 + f1(foo) +} + +function f1(a) { f2(a) } + +function f2(b) { f3(b) } + +function f3(c) { c = 6 } diff --git a/test/fnaryscl.ok b/test/fnaryscl.ok new file mode 100644 index 0000000..ac84077 --- /dev/null +++ b/test/fnaryscl.ok @@ -0,0 +1,2 @@ +gawk: fnaryscl.awk:10: fatal: attempt to use array `c (from b, from a, from foo)' in a scalar context +EXIT CODE: 2 diff --git a/test/fnasgnm.awk b/test/fnasgnm.awk new file mode 100644 index 0000000..056cdf7 --- /dev/null +++ b/test/fnasgnm.awk @@ -0,0 +1,14 @@ +# AFP_Bug1.awk - illustrate a problem with `gawk' (GNU Awk 3.0.3 on OS/2) +# Arthur Pool .. pool@commerce.uq.edu.au +# $Id: AFP_Bug1.awk,v 1.1 1998-03-17 12:22:44+10 pool Exp pool $ + +# Assignment to a variable with the same name as a function from within +# that function causes an ABEND. +# +# Yes, I do realise that it's not a smart thing to do, but an error +# message would be a kinder response than a core dump (and would make +# debugging a whole lot easier). + +{ShowMe()} + +function ShowMe() {ShowMe = 1} diff --git a/test/fnasgnm.in b/test/fnasgnm.in new file mode 100644 index 0000000..a941931 --- /dev/null +++ b/test/fnasgnm.in @@ -0,0 +1 @@ +junk diff --git a/test/fnasgnm.ok b/test/fnasgnm.ok new file mode 100644 index 0000000..0db5c6d --- /dev/null +++ b/test/fnasgnm.ok @@ -0,0 +1,2 @@ +gawk: fnasgnm.awk:14: (FILENAME=- FNR=1) fatal: can't use function name `ShowMe' as variable or array +EXIT CODE: 2 diff --git a/test/fnmisc.awk b/test/fnmisc.awk new file mode 100644 index 0000000..4dcc94e --- /dev/null +++ b/test/fnmisc.awk @@ -0,0 +1,13 @@ +# Tue Feb 4 12:20:10 IST 2003 + +# Misc functions tests, in case we start mucking around in the grammar again. + +# Empty body shouldn't hurt anything: +function f() {} +BEGIN { f() } + +# Using a built-in function name should manage the symbol table +# correctly: +function split(x) { return x } + +function x(a) { return a } diff --git a/test/fnmisc.ok b/test/fnmisc.ok new file mode 100644 index 0000000..a265e40 --- /dev/null +++ b/test/fnmisc.ok @@ -0,0 +1,3 @@ +gawk: fnmisc.awk:11: function split(x) { return x } +gawk: fnmisc.awk:11: ^ `split' is a built-in function, it cannot be redefined +EXIT CODE: 1 diff --git a/test/fnparydl.awk b/test/fnparydl.awk new file mode 100644 index 0000000..ef3a822 --- /dev/null +++ b/test/fnparydl.awk @@ -0,0 +1,31 @@ +# fnparydl.awk --- check that deleting works with arrays +# that are parameters. +# +# Tue Jul 11 14:20:58 EDT 2000 + +function delit(a, k) +{ + print "BEFORE LOOP" + for (k in a) { + print "DELETING KEY", k + delete a[k] + } + print "AFTER LOOP" +} + +BEGIN { + for (i = 1 ; i <= 7; i++) { + q[i] = sprintf("element %d", i) + x[i] = i + y[i] = q[i] + } +# adump(q) + delit(q) +# for (i in q) +# delete q[i] + j = 0; + for (i in q) + j++ + print j, "elements still in q[]" +# adump(q) +} diff --git a/test/fnparydl.ok b/test/fnparydl.ok new file mode 100644 index 0000000..26a5c39 --- /dev/null +++ b/test/fnparydl.ok @@ -0,0 +1,10 @@ +BEFORE LOOP +DELETING KEY 4 +DELETING KEY 5 +DELETING KEY 6 +DELETING KEY 7 +DELETING KEY 1 +DELETING KEY 2 +DELETING KEY 3 +AFTER LOOP +0 elements still in q[] diff --git a/test/fordel.awk b/test/fordel.awk new file mode 100644 index 0000000..58ede20 --- /dev/null +++ b/test/fordel.awk @@ -0,0 +1,65 @@ +#Date: Mon, 7 Jun 2004 10:40:28 -0500 +#From: mary1john8@earthlink.net +#To: arnold@skeeve.com +#Subject: gawk internal errors +#Message-ID: <20040607154028.GA2457@apollo> +# +#Hello, +# +# gawk-3.1.3i internal errors: +# +#[1] +# +#$> ./gawk 'BEGIN { for (i in a) delete a; }' +BEGIN { for (i in a) delete a; } +#gawk: fatal error: internal error +#Aborted +# +#------------------------------------------------------------------ +#--- awkgram.y.orig 2004-06-07 09:42:14.000000000 -0500 +#+++ awkgram.y 2004-06-07 09:45:58.000000000 -0500 +#@@ -387,7 +387,7 @@ +# * Check that the body is a `delete a[i]' statement, +# * and that both the loop var and array names match. +# */ +#- if ($8 != NULL && $8->type == Node_K_delete) { +#+ if ($8 != NULL && $8->type == Node_K_delete && $8->rnode != NULL) { +# NODE *arr, *sub; +# +# assert($8->rnode->type == Node_expression_list); +#------------------------------------------------------------------ +# +# +#[2] +# +#$> ./gawk 'BEGIN { printf("%3$*10$.*1$s\n", 20, 10, "hello"); }' +#gawk: fatal error: internal error +#Aborted +# +#------------------------------------------------------------------ +#--- builtin.c.orig 2004-06-07 10:04:20.000000000 -0500 +#+++ builtin.c 2004-06-07 10:06:08.000000000 -0500 +#@@ -780,7 +780,10 @@ +# s1++; +# n0--; +# } +#- +#+ if (val >= num_args) { +#+ toofew = TRUE; +#+ break; +#+ } +# arg = the_args[val]; +# } else { +# parse_next_arg(); +#------------------------------------------------------------------ +# +# +# Finally, a test for the rewritten get_src_buf(): +# +#$> AWKBUFSIZE=2 make check +# +#I get 3 failed tests. Not sure this is of any interest. +# +# +#Thanks, +#John diff --git a/test/fordel.ok b/test/fordel.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/fordel.ok diff --git a/test/forsimp.awk b/test/forsimp.awk new file mode 100644 index 0000000..880548b --- /dev/null +++ b/test/forsimp.awk @@ -0,0 +1 @@ +BEGIN { for (print 9; 0;); } diff --git a/test/forsimp.ok b/test/forsimp.ok new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/test/forsimp.ok @@ -0,0 +1 @@ +9 diff --git a/test/fsbs.awk b/test/fsbs.awk new file mode 100644 index 0000000..d2ec52e --- /dev/null +++ b/test/fsbs.awk @@ -0,0 +1,2 @@ +BEGIN { FS = "\\" } +{ print $1, $2 } diff --git a/test/fsbs.in b/test/fsbs.in new file mode 100644 index 0000000..0a102c3 --- /dev/null +++ b/test/fsbs.in @@ -0,0 +1 @@ +1\2 diff --git a/test/fsbs.ok b/test/fsbs.ok new file mode 100644 index 0000000..8d04f96 --- /dev/null +++ b/test/fsbs.ok @@ -0,0 +1 @@ +1 2 diff --git a/test/fsfwfs.awk b/test/fsfwfs.awk new file mode 100644 index 0000000..beed10a --- /dev/null +++ b/test/fsfwfs.awk @@ -0,0 +1 @@ +BEGIN{FIELDWIDTHS="6 6 6 5";OFS=",";FS=FS}{print $1,$2,$3,$4} diff --git a/test/fsfwfs.in b/test/fsfwfs.in new file mode 100644 index 0000000..fc10928 --- /dev/null +++ b/test/fsfwfs.in @@ -0,0 +1,16 @@ +00000113000 00000000000 +00000275000 00000000000 +00000321334 00000000000 +00000048709 00000010000 +00000117000 00000100000 +00000152000 00000138000 +00000000000 00000150000 +00000189425 00000000000 +00000146128 00000000000 +00000146128 00000000000 +00000146128 00000000000 +00000000000 00000050000 +00000000000 00000050000 +00000000000 00000000000 +00000158014 00000000000 +00000113656 00000000000 diff --git a/test/fsfwfs.ok b/test/fsfwfs.ok new file mode 100644 index 0000000..36bea48 --- /dev/null +++ b/test/fsfwfs.ok @@ -0,0 +1,16 @@ +00000113000,00000000000,, +00000275000,00000000000,, +00000321334,00000000000,, +00000048709,00000010000,, +00000117000,00000100000,, +00000152000,00000138000,, +00000000000,00000150000,, +00000189425,00000000000,, +00000146128,00000000000,, +00000146128,00000000000,, +00000146128,00000000000,, +00000000000,00000050000,, +00000000000,00000050000,, +00000000000,00000000000,, +00000158014,00000000000,, +00000113656,00000000000,, diff --git a/test/fsrs.awk b/test/fsrs.awk new file mode 100644 index 0000000..a001489 --- /dev/null +++ b/test/fsrs.awk @@ -0,0 +1,8 @@ +BEGIN { + RS=""; FS="\n"; + ORS=""; OFS="\n"; + } +{ + split ($2,f," ") + print $0; +} diff --git a/test/fsrs.in b/test/fsrs.in new file mode 100644 index 0000000..4b49d81 --- /dev/null +++ b/test/fsrs.in @@ -0,0 +1,7 @@ +a b +c d +e f + +1 2 +3 4 +5 6 diff --git a/test/fsrs.ok b/test/fsrs.ok new file mode 100644 index 0000000..7dafd65 --- /dev/null +++ b/test/fsrs.ok @@ -0,0 +1,5 @@ +a b +c d +e f1 2 +3 4 +5 6
\ No newline at end of file diff --git a/test/fsspcoln.awk b/test/fsspcoln.awk new file mode 100644 index 0000000..8087c2e --- /dev/null +++ b/test/fsspcoln.awk @@ -0,0 +1,41 @@ +# Date: Wed, 08 Dec 2004 12:59:42 +0600 +# From: Alexander Sashnov <asashnov@sw-soft.com> +# Subject: addon to gawk test suite +# Sender: asashnov@sashnov.plesk.ru +# To: "Arnold D. Robbins" <arnold@skeeve.com> +# Message-id: <lzy8g9xokh.fsf@sashnov.plesk.ru> +# +# +# Hello, Arnold. +# +# I'm hit bug on SuSE 9.1 with awk: +# +# vsuse91:~ # echo "a:b:c" | awk '{ print $2 }' 'FS=[ :]' +# b +# vsuse91:~ # echo "a:b:c" | awk '{ print $2 }' 'FS=[ :]+' +# awk: cmd. line:2: fatal: Trailing backslash: /[ :]+/ +# +# vsuse91:~ # awk --version +# GNU Awk 3.1.3 +# +# +# +# But on my Debian machine all OK: +# +# asashnov@sashnov:~$ echo "a:b:c" | awk '{ print $2 }' 'FS=[ :]' +# b +# asashnov@sashnov:~$ echo "a:b:c" | awk '{ print $2 }' 'FS=[ :]+' +# b +# asashnov@sashnov:~$ awk --version +# GNU Awk 3.1.4 +# +# +# Need add test for this sample to gawk test suite for avoid this problems in future. +# -- +# Alexander Sashnov +# Plesk QA Engineer +# SWsoft, Inc. +# E-mail: asashnov@sw-soft.com +# ICQ UIN: 79404252 + +{ print $2 } diff --git a/test/fsspcoln.in b/test/fsspcoln.in new file mode 100644 index 0000000..af0abb2 --- /dev/null +++ b/test/fsspcoln.in @@ -0,0 +1 @@ +a:b:c diff --git a/test/fsspcoln.ok b/test/fsspcoln.ok new file mode 100644 index 0000000..6178079 --- /dev/null +++ b/test/fsspcoln.ok @@ -0,0 +1 @@ +b diff --git a/test/fstabplus.awk b/test/fstabplus.awk new file mode 100644 index 0000000..748a44f --- /dev/null +++ b/test/fstabplus.awk @@ -0,0 +1,2 @@ +BEGIN { FS = "\t+" } + { print $1, $2 } diff --git a/test/fstabplus.in b/test/fstabplus.in new file mode 100644 index 0000000..c35ba0a --- /dev/null +++ b/test/fstabplus.in @@ -0,0 +1 @@ +1 2 diff --git a/test/fstabplus.ok b/test/fstabplus.ok new file mode 100644 index 0000000..8d04f96 --- /dev/null +++ b/test/fstabplus.ok @@ -0,0 +1 @@ +1 2 diff --git a/test/funsemnl.awk b/test/funsemnl.awk new file mode 100644 index 0000000..6b39dca --- /dev/null +++ b/test/funsemnl.awk @@ -0,0 +1,3 @@ +# make sure that ; + \n at end after function works +function foo() { print "foo" } ; +BEGIN { foo() } diff --git a/test/funsemnl.ok b/test/funsemnl.ok new file mode 100644 index 0000000..257cc56 --- /dev/null +++ b/test/funsemnl.ok @@ -0,0 +1 @@ +foo diff --git a/test/funsmnam.awk b/test/funsmnam.awk new file mode 100644 index 0000000..1e8ca50 --- /dev/null +++ b/test/funsmnam.awk @@ -0,0 +1,6 @@ +function foo( \ + foo) +{ + print foo +} +{ foo() } diff --git a/test/funsmnam.ok b/test/funsmnam.ok new file mode 100644 index 0000000..c0234f3 --- /dev/null +++ b/test/funsmnam.ok @@ -0,0 +1,2 @@ +gawk: funsmnam.awk:6: fatal: function `foo': can't use function name as parameter name +EXIT CODE: 2 diff --git a/test/funstack.awk b/test/funstack.awk new file mode 100644 index 0000000..ab85b45 --- /dev/null +++ b/test/funstack.awk @@ -0,0 +1,977 @@ +### ==================================================================== +### @Awk-file{ +### author = "Nelson H. F. Beebe", +### version = "1.00", +### date = "09 October 1996", +### time = "15:57:06 MDT", +### filename = "journal-toc.awk", +### address = "Center for Scientific Computing +### Department of Mathematics +### University of Utah +### Salt Lake City, UT 84112 +### USA", +### telephone = "+1 801 581 5254", +### FAX = "+1 801 581 4148", +### URL = "http://www.math.utah.edu/~beebe", +### checksum = "25092 977 3357 26493", +### email = "beebe@math.utah.edu (Internet)", +### codetable = "ISO/ASCII", +### keywords = "BibTeX, bibliography, HTML, journal table of +### contents", +### supported = "yes", +### docstring = "Create a journal cover table of contents from +### <at>Article{...} entries in a journal BibTeX +### .bib file for checking the bibliography +### database against the actual journal covers. +### The output can be either plain text, or HTML. +### +### Usage: +### bibclean -max-width 0 BibTeX-file(s) | \ +### bibsort -byvolume | \ +### awk -f journal-toc.awk \ +### [-v HTML=nnn] [-v INDENT=nnn] \ +### [-v BIBFILEURL=url] >foo.toc +### +### or if the bibliography is already sorted +### by volume, +### +### bibclean -max-width 0 BibTeX-file(s) | \ +### awk -f journal-toc.awk \ +### [-v HTML=nnn] [-v INDENT=nnn] \ +### [-v BIBFILEURL=url] >foo.toc +### +### A non-zero value of the command-line option, +### HTML=nnn, results in HTML output instead of +### the default plain ASCII text (corresponding +### to HTML=0). The +### +### The INDENT=nnn command-line option specifies +### the number of blanks to indent each logical +### level of HTML. The default is INDENT=4. +### INDENT=0 suppresses indentation. The INDENT +### option has no effect when the default HTML=0 +### (plain text output) option is in effect. +### +### When HTML output is selected, the +### BIBFILEURL=url command-line option provides a +### way to request hypertext links from table of +### contents page numbers to the complete BibTeX +### entry for the article. These links are +### created by appending a sharp (#) and the +### citation label to the BIBFILEURL value, which +### conforms with the practice of +### bibtex-to-html.awk. +### +### The HTML output form may be useful as a more +### compact representation of journal article +### bibliography data than the original BibTeX +### file provides. Of course, the +### table-of-contents format provides less +### information, and is considerably more +### troublesome for a computer program to parse. +### +### When URL key values are provided, they will +### be used to create hypertext links around +### article titles. This supports journals that +### provide article contents on the World-Wide +### Web. +### +### For parsing simplicity, this program requires +### that BibTeX +### +### key = "value" +### +### and +### +### @String{name = "value"} +### +### specifications be entirely contained on +### single lines, which is readily provided by +### the `bibclean -max-width 0' filter. It also +### requires that bibliography entries begin and +### end at the start of a line, and that +### quotation marks, rather than balanced braces, +### delimit string values. This is a +### conventional format that again can be +### guaranteed by bibclean. +### +### This program requires `new' awk, as described +### in the book +### +### Alfred V. Aho, Brian W. Kernighan, and +### Peter J. Weinberger, +### ``The AWK Programming Language'', +### Addison-Wesley (1988), ISBN +### 0-201-07981-X, +### +### such as provided by programs named (GNU) +### gawk, nawk, and recent AT&T awk. +### +### The checksum field above contains a CRC-16 +### checksum as the first value, followed by the +### equivalent of the standard UNIX wc (word +### count) utility output of lines, words, and +### characters. This is produced by Robert +### Solovay's checksum utility.", +### } +### ==================================================================== + +BEGIN { initialize() } + +/^ *@ *[Ss][Tt][Rr][Ii][Nn][Gg] *{/ { do_String(); next } + +/^ *@ *[Pp][Rr][Ee][Aa][Mm][Bb][Ll][Ee]/ { next } + +/^ *@ *[Aa][Rr][Tt][Ii][Cc][Ll][Ee]/ { do_Article(); next } + +/^ *@/ { do_Other(); next } + +/^ *author *= *\"/ { do_author(); next } + +/^ *journal *= */ { do_journal(); next } + +/^ *volume *= *\"/ { do_volume(); next } + +/^ *number *= *\"/ { do_number(); next } + +/^ *year *= *\"/ { do_year(); next } + +/^ *month *= */ { do_month(); next } + +/^ *title *= *\"/ { do_title(); next } + +/^ *pages *= *\"/ { do_pages(); next } + +/^ *URL *= *\"/ { do_URL(); next } + +/^ *} *$/ { if (In_Article) do_end_entry(); next } + +END { terminate() } + + +######################################################################## +# NB: The programming conventions for variables in this program are: # +# UPPERCASE global constants and user options # +# Initialuppercase global variables # +# lowercase local variables # +# Any deviation is an error! # +######################################################################## + + +function do_Article() +{ + In_Article = 1 + + Citation_label = $0 + sub(/^[^\{]*{/,"",Citation_label) + sub(/ *, *$/,"",Citation_label) + + Author = "" + Title = "" + Journal = "" + Volume = "" + Number = "" + Month = "" + Year = "" + Pages = "" + Url = "" +} + + +function do_author() +{ + Author = TeX_to_HTML(get_value($0)) +} + + +function do_end_entry( k,n,parts) +{ + n = split(Author,parts," and ") + if (Last_number != Number) + do_new_issue() + for (k = 1; k < n; ++k) + print_toc_line(parts[k] " and", "", "") + Title_prefix = html_begin_title() + Title_suffix = html_end_title() + if (html_length(Title) <= (MAX_TITLE_CHARS + MIN_LEADERS)) # complete title fits on line + print_toc_line(parts[n], Title, html_begin_pages() Pages html_end_pages()) + else # need to split long title over multiple lines + do_long_title(parts[n], Title, html_begin_pages() Pages html_end_pages()) +} + + +function do_journal() +{ + if ($0 ~ /[=] *"/) # have journal = "quoted journal name", + Journal = get_value($0) + else # have journal = journal-abbreviation, + { + Journal = get_abbrev($0) + if (Journal in String) # replace abbrev by its expansion + Journal = String[Journal] + } + gsub(/\\-/,"",Journal) # remove discretionary hyphens +} + + +function do_long_title(author,title,pages, last_title,n) +{ + title = trim(title) # discard leading and trailing space + while (length(title) > 0) + { + n = html_breakpoint(title,MAX_TITLE_CHARS+MIN_LEADERS) + last_title = substr(title,1,n) + title = substr(title,n+1) + sub(/^ +/,"",title) # discard any leading space + print_toc_line(author, last_title, (length(title) == 0) ? pages : "") + author = "" + } +} + + +function do_month( k,n,parts) +{ + Month = ($0 ~ /[=] *"/) ? get_value($0) : get_abbrev($0) + gsub(/[\"]/,"",Month) + gsub(/ *# *\\slash *# */," / ",Month) + gsub(/ *# *-+ *# */," / ",Month) + n = split(Month,parts," */ *") + Month = "" + for (k = 1; k <= n; ++k) + Month = Month ((k > 1) ? " / " : "") \ + ((parts[k] in Month_expansion) ? Month_expansion[parts[k]] : parts[k]) +} + + +function do_new_issue() +{ + Last_number = Number + if (HTML) + { + if (Last_volume != Volume) + { + Last_volume = Volume + print_line(prefix(2) "<BR>") + } + html_end_toc() + html_begin_issue() + print_line(prefix(2) Journal "<BR>") + } + else + { + print_line("") + print_line(Journal) + } + + print_line(strip_html(vol_no_month_year())) + + if (HTML) + { + html_end_issue() + html_toc_entry() + html_begin_toc() + } + else + print_line("") +} + + +function do_number() +{ + Number = get_value($0) +} + + +function do_Other() +{ + In_Article = 0 +} + + +function do_pages() +{ + Pages = get_value($0) + sub(/--[?][?]/,"",Pages) +} + + +function do_String() +{ + sub(/^[^\{]*\{/,"",$0) # discard up to and including open brace + sub(/\} *$/,"",$0) # discard from optional whitespace and trailing brace to end of line + String[get_key($0)] = get_value($0) +} + + +function do_title() +{ + Title = TeX_to_HTML(get_value($0)) +} + + +function do_URL( parts) +{ + Url = get_value($0) + split(Url,parts,"[,;]") # in case we have multiple URLs + Url = trim(parts[1]) +} + + +function do_volume() +{ + Volume = get_value($0) +} + + +function do_year() +{ + Year = get_value($0) +} + + +function get_abbrev(s) +{ # return abbrev from ``key = abbrev,'' + sub(/^[^=]*= */,"",s) # discard text up to start of non-blank value + sub(/ *,? *$/,"",s) # discard trailing optional whitspace, quote, + # optional comma, and optional space + return (s) +} + + +function get_key(s) +{ # return kay from ``key = "value",'' + sub(/^ */,"",s) # discard leading space + sub(/ *=.*$/,"",s) # discard everthing after key + + return (s) +} + + +function get_value(s) +{ # return value from ``key = "value",'' + sub(/^[^\"]*\" */,"",s) # discard text up to start of non-blank value + sub(/ *\",? *$/,"",s) # discard trailing optional whitspace, quote, + # optional comma, and optional space + return (s) +} + + +function html_accents(s) +{ + if (index(s,"\\") > 0) # important optimization + { + # Convert common lower-case accented letters according to the + # table on p. 169 of in Peter Flynn's ``The World Wide Web + # Handbook'', International Thomson Computer Press, 1995, ISBN + # 1-85032-205-8. The official table of ISO Latin 1 SGML + # entities used in HTML can be found in the file + # /usr/local/lib/html-check/lib/ISOlat1.sgml (your path + # may differ). + + gsub(/{\\\a}/, "\\à", s) + gsub(/{\\'a}/, "\\á", s) + gsub(/{\\[\^]a}/,"\\â", s) + gsub(/{\\~a}/, "\\ã", s) + gsub(/{\\\"a}/, "\\ä", s) + gsub(/{\\aa}/, "\\å", s) + gsub(/{\\ae}/, "\\æ", s) + + gsub(/{\\c{c}}/,"\\ç", s) + + gsub(/{\\\e}/, "\\è", s) + gsub(/{\\'e}/, "\\é", s) + gsub(/{\\[\^]e}/,"\\ê", s) + gsub(/{\\\"e}/, "\\ë", s) + + gsub(/{\\\i}/, "\\ì", s) + gsub(/{\\'i}/, "\\í", s) + gsub(/{\\[\^]i}/,"\\î", s) + gsub(/{\\\"i}/, "\\ï", s) + + # ignore eth and thorn + + gsub(/{\\~n}/, "\\ñ", s) + + gsub(/{\\\o}/, "\\ò", s) + gsub(/{\\'o}/, "\\ó", s) + gsub(/{\\[\^]o}/, "\\ô", s) + gsub(/{\\~o}/, "\\õ", s) + gsub(/{\\\"o}/, "\\ö", s) + gsub(/{\\o}/, "\\ø", s) + + gsub(/{\\\u}/, "\\ù", s) + gsub(/{\\'u}/, "\\ú", s) + gsub(/{\\[\^]u}/,"\\û", s) + gsub(/{\\\"u}/, "\\ü", s) + + gsub(/{\\'y}/, "\\ý", s) + gsub(/{\\\"y}/, "\\ÿ", s) + + # Now do the same for upper-case accents + + gsub(/{\\\A}/, "\\À", s) + gsub(/{\\'A}/, "\\Á", s) + gsub(/{\\[\^]A}/, "\\Â", s) + gsub(/{\\~A}/, "\\Ã", s) + gsub(/{\\\"A}/, "\\Ä", s) + gsub(/{\\AA}/, "\\Å", s) + gsub(/{\\AE}/, "\\Æ", s) + + gsub(/{\\c{C}}/,"\\Ç", s) + + gsub(/{\\\e}/, "\\È", s) + gsub(/{\\'E}/, "\\É", s) + gsub(/{\\[\^]E}/, "\\Ê", s) + gsub(/{\\\"E}/, "\\Ë", s) + + gsub(/{\\\I}/, "\\Ì", s) + gsub(/{\\'I}/, "\\Í", s) + gsub(/{\\[\^]I}/, "\\Î", s) + gsub(/{\\\"I}/, "\\Ï", s) + + # ignore eth and thorn + + gsub(/{\\~N}/, "\\Ñ", s) + + gsub(/{\\\O}/, "\\Ò", s) + gsub(/{\\'O}/, "\\Ó", s) + gsub(/{\\[\^]O}/, "\\Ô", s) + gsub(/{\\~O}/, "\\Õ", s) + gsub(/{\\\"O}/, "\\Ö", s) + gsub(/{\\O}/, "\\Ø", s) + + gsub(/{\\\U}/, "\\Ù", s) + gsub(/{\\'U}/, "\\Ú", s) + gsub(/{\\[\^]U}/, "\\Û", s) + gsub(/{\\\"U}/, "\\Ü", s) + + gsub(/{\\'Y}/, "\\Ý", s) + + gsub(/{\\ss}/, "\\ß", s) + + # Others not mentioned in Flynn's book + gsub(/{\\'\\i}/,"\\í", s) + gsub(/{\\'\\j}/,"j", s) + } + return (s) +} + + +function html_begin_issue() +{ + print_line("") + print_line(prefix(2) "<HR>") + print_line("") + print_line(prefix(2) "<H1>") + print_line(prefix(3) "<A NAME=\"" html_label() "\">") +} + + +function html_begin_pages() +{ + return ((HTML && (BIBFILEURL != "")) ? ("<A HREF=\"" BIBFILEURL "#" Citation_label "\">") : "") +} + + +function html_begin_pre() +{ + In_PRE = 1 + print_line("<PRE>") +} + + +function html_begin_title() +{ + return ((HTML && (Url != "")) ? ("<A HREF=\"" Url "\">") : "") +} + + +function html_begin_toc() +{ + html_end_toc() + html_begin_pre() +} + + +function html_body( k) +{ + for (k = 1; k <= BodyLines; ++k) + print Body[k] +} + +function html_breakpoint(title,maxlength, break_after,k) +{ + # Return the largest character position in title AFTER which we + # can break the title across lines, without exceeding maxlength + # visible characters. + if (html_length(title) > maxlength) # then need to split title across lines + { + # In the presence of HTML markup, the initialization of + # k here is complicated, because we need to advance it + # until html_length(title) is at least maxlength, + # without invoking the expensive html_length() function + # too frequently. The need to split the title makes the + # alternative of delayed insertion of HTML markup much + # more complicated. + break_after = 0 + for (k = min(maxlength,length(title)); k < length(title); ++k) + { + if (substr(title,k+1,1) == " ") + { # could break after position k + if (html_length(substr(title,1,k)) <= maxlength) + break_after = k + else # advanced too far, retreat back to last break_after + break + } + } + if (break_after == 0) # no breakpoint found by forward scan + { # so switch to backward scan + for (k = min(maxlength,length(title)) - 1; \ + (k > 0) && (substr(title,k+1,1) != " "); --k) + ; # find space at which to break title + if (k < 1) # no break point found + k = length(title) # so must print entire string + } + else + k = break_after + } + else # title fits on one line + k = length(title) + return (k) +} + + + +function html_end_issue() +{ + print_line(prefix(3) "</A>") + print_line(prefix(2) "</H1>") +} + + +function html_end_pages() +{ + return ((HTML && (BIBFILEURL != "")) ? "</A>" : "") +} + + +function html_end_pre() +{ + if (In_PRE) + { + print_line("</PRE>") + In_PRE = 0 + } +} + + +function html_end_title() +{ + return ((HTML && (Url != "")) ? "</A>" : "") +} + + +function html_end_toc() +{ + html_end_pre() +} + + +function html_fonts(s, arg,control_word,k,level,n,open_brace) +{ + open_brace = index(s,"{") + if (open_brace > 0) # important optimization + { + level = 1 + for (k = open_brace + 1; (level != 0) && (k <= length(s)); ++k) + { + if (substr(s,k,1) == "{") + level++ + else if (substr(s,k,1) == "}") + level-- + } + + # {...} is now found at open_brace ... (k-1) + for (control_word in Font_decl_map) # look for {\xxx ...} + { + if (substr(s,open_brace+1,length(control_word)+1) ~ \ + ("\\" control_word "[^A-Za-z]")) + { + n = open_brace + 1 + length(control_word) + arg = trim(substr(s,n,k - n)) + if (Font_decl_map[control_word] == "toupper") # arg -> ARG + arg = toupper(arg) + else if (Font_decl_map[control_word] != "") # arg -> <TAG>arg</TAG> + arg = "<" Font_decl_map[control_word] ">" arg "</" Font_decl_map[control_word] ">" + return (substr(s,1,open_brace-1) arg html_fonts(substr(s,k))) + } + } + for (control_word in Font_cmd_map) # look for \xxx{...} + { + if (substr(s,open_brace - length(control_word),length(control_word)) ~ \ + ("\\" control_word)) + { + n = open_brace + 1 + arg = trim(substr(s,n,k - n)) + if (Font_cmd_map[control_word] == "toupper") # arg -> ARG + arg = toupper(arg) + else if (Font_cmd_map[control_word] != "") # arg -> <TAG>arg</TAG> + arg = "<" Font_cmd_map[control_word] ">" arg "</" Font_cmd_map[control_word] ">" + n = open_brace - length(control_word) - 1 + return (substr(s,1,n) arg html_fonts(substr(s,k))) + } + } + } + return (s) +} + + +function html_header() +{ + USER = ENVIRON["USER"] + if (USER == "") + USER = ENVIRON["LOGNAME"] + if (USER == "") + USER = "????" + "hostname" | getline HOSTNAME + "date" | getline DATE + ("ypcat passwd | grep '^" USER ":' | awk -F: '{print $5}'") | getline PERSONAL_NAME + if (PERSONAL_NAME == "") + ("grep '^" USER ":' /etc/passwd | awk -F: '{print $5}'") | getline PERSONAL_NAME + + + print "<!-- WARNING: Do NOT edit this file. It was converted from -->" + print "<!-- BibTeX format to HTML by journal-toc.awk version " VERSION_NUMBER " " VERSION_DATE " -->" + print "<!-- on " DATE " -->" + print "<!-- for " PERSONAL_NAME " (" USER "@" HOSTNAME ") -->" + print "" + print "" + print "<!DOCTYPE HTML public \"-//IETF//DTD HTML//EN\">" + print "" + print "<HTML>" + print prefix(1) "<HEAD>" + print prefix(2) "<TITLE>" + print prefix(3) Journal + print prefix(2) "</TITLE>" + print prefix(2) "<LINK REV=\"made\" HREF=\"mailto:" USER "@" HOSTNAME "\">" + print prefix(1) "</HEAD>" + print "" + print prefix(1) "<BODY>" +} + + +function html_label( label) +{ + label = Volume "(" Number "):" Month ":" Year + gsub(/[^A-Za-z0-9():,;.\/\-]/,"",label) + return (label) +} + + +function html_length(s) +{ # Return visible length of s, ignoring any HTML markup + if (HTML) + { + gsub(/<\/?[^>]*>/,"",s) # remove SGML tags + gsub(/&[A-Za-z0-9]+;/,"",s) # remove SGML entities + } + return (length(s)) +} + + +function html_toc() +{ + print prefix(2) "<H1>" + print prefix(3) "Table of contents for issues of " Journal + print prefix(2) "</H1>" + print HTML_TOC +} + + +function html_toc_entry() +{ + HTML_TOC = HTML_TOC " <A HREF=\"#" html_label() "\">" + HTML_TOC = HTML_TOC vol_no_month_year() + HTML_TOC = HTML_TOC "</A><BR>" "\n" +} + + +function html_trailer() +{ + html_end_pre() + print prefix(1) "</BODY>" + print "</HTML>" +} + + +function initialize() +{ + # NB: Update these when the program changes + VERSION_DATE = "[09-Oct-1996]" + VERSION_NUMBER = "1.00" + + HTML = (HTML == "") ? 0 : (0 + HTML) + + if (INDENT == "") + INDENT = 4 + + if (HTML == 0) + INDENT = 0 # indentation suppressed in ASCII mode + + LEADERS = " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ." + + MAX_TITLE_CHARS = 36 # 36 produces a 79-char output line when there is + # just an initial page number. If this is + # increased, the LEADERS string may need to be + # lengthened. + + MIN_LEADERS = 4 # Minimum number of characters from LEADERS + # required when leaders are used. The total + # number of characters that can appear in a + # title line is MAX_TITLE_CHARS + MIN_LEADERS. + # Leaders are omitted when the title length is + # between MAX_TITLE_CHARS and this sum. + + MIN_LEADERS_SPACE = " " # must be at least MIN_LEADERS characters long + + Month_expansion["jan"] = "January" + Month_expansion["feb"] = "February" + Month_expansion["mar"] = "March" + Month_expansion["apr"] = "April" + Month_expansion["may"] = "May" + Month_expansion["jun"] = "June" + Month_expansion["jul"] = "July" + Month_expansion["aug"] = "August" + Month_expansion["sep"] = "September" + Month_expansion["oct"] = "October" + Month_expansion["nov"] = "November" + Month_expansion["dec"] = "December" + + Font_cmd_map["\\emph"] = "EM" + Font_cmd_map["\\textbf"] = "B" + Font_cmd_map["\\textit"] = "I" + Font_cmd_map["\\textmd"] = "" + Font_cmd_map["\\textrm"] = "" + Font_cmd_map["\\textsc"] = "toupper" + Font_cmd_map["\\textsl"] = "I" + Font_cmd_map["\\texttt"] = "t" + Font_cmd_map["\\textup"] = "" + + Font_decl_map["\\bf"] = "B" + Font_decl_map["\\em"] = "EM" + Font_decl_map["\\it"] = "I" + Font_decl_map["\\rm"] = "" + Font_decl_map["\\sc"] = "toupper" + Font_decl_map["\\sf"] = "" + Font_decl_map["\\tt"] = "TT" + Font_decl_map["\\itshape"] = "I" + Font_decl_map["\\upshape"] = "" + Font_decl_map["\\slshape"] = "I" + Font_decl_map["\\scshape"] = "toupper" + Font_decl_map["\\mdseries"] = "" + Font_decl_map["\\bfseries"] = "B" + Font_decl_map["\\rmfamily"] = "" + Font_decl_map["\\sffamily"] = "" + Font_decl_map["\\ttfamily"] = "TT" +} + +function min(a,b) +{ + return (a < b) ? a : b +} + + +function prefix(level) +{ + # Return a prefix of up to 60 blanks + + if (In_PRE) + return ("") + else + return (substr(" ", \ + 1, INDENT * level)) +} + + +function print_line(line) +{ + if (HTML) # must buffer in memory so that we can accumulate TOC + Body[++BodyLines] = line + else + print line +} + + +function print_toc_line(author,title,pages, extra,leaders,n,t) +{ + # When we have a multiline title, the hypertext link goes only + # on the first line. A multiline hypertext link looks awful + # because of long underlines under the leading indentation. + + if (pages == "") # then no leaders needed in title lines other than last one + t = sprintf("%31s %s%s%s", author, Title_prefix, title, Title_suffix) + else # last title line, with page number + { + n = html_length(title) # potentially expensive + extra = n % 2 # extra space for aligned leader dots + if (n <= MAX_TITLE_CHARS) # then need leaders + leaders = substr(LEADERS, 1, MAX_TITLE_CHARS + MIN_LEADERS - extra - \ + min(MAX_TITLE_CHARS,n)) + else # title (almost) fills line, so no leaders + leaders = substr(MIN_LEADERS_SPACE,1, \ + (MAX_TITLE_CHARS + MIN_LEADERS - extra - n)) + t = sprintf("%31s %s%s%s%s%s %4s", \ + author, Title_prefix, title, Title_suffix, \ + (extra ? " " : ""), leaders, pages) + } + + Title_prefix = "" # forget any hypertext + Title_suffix = "" # link material + + # Efficency note: an earlier version accumulated the body in a + # single scalar like this: "Body = Body t". Profiling revealed + # this statement as the major hot spot, and the change to array + # storage made the program more than twice as fast. This + # suggests that awk might benefit from an optimization of + # "s = s t" that uses realloc() instead of malloc(). + if (HTML) + Body[++BodyLines] = t + else + print t +} + + +function protect_SGML_characters(s) +{ + gsub(/&/,"\\&",s) # NB: this one MUST be first + gsub(/</,"\\<",s) + gsub(/>/,"\\>",s) + gsub(/\"/,"\\"",s) + return (s) +} + + +function strip_braces(s, k) +{ # strip non-backslashed braces from s and return the result + + return (strip_char(strip_char(s,"{"),"}")) +} + + +function strip_char(s,c, k) +{ # strip non-backslashed instances of c from s, and return the result + k = index(s,c) + if (k > 0) # then found the character + { + if (substr(s,k-1,1) != "\\") # then not backslashed char + s = substr(s,1,k-1) strip_char(substr(s,k+1),c) # so remove it (recursively) + else # preserve backslashed char + s = substr(s,1,k) strip_char(s,k+1,c) + } + return (s) +} + + +function strip_html(s) +{ + gsub(/<\/?[^>]*>/,"",s) + return (s) +} + + +function terminate() +{ + if (HTML) + { + html_end_pre() + + HTML = 0 # NB: stop line buffering + html_header() + html_toc() + html_body() + html_trailer() + } +} + + +function TeX_to_HTML(s, k,n,parts) +{ + # First convert the four SGML reserved characters to SGML entities + if (HTML) + { + gsub(/>/, "\\>", s) + gsub(/</, "\\<", s) + gsub(/"/, "\\"", s) + } + + gsub(/[$][$]/,"$$",s) # change display math to triple dollars for split + n = split(s,parts,/[$]/)# split into non-math (odd) and math (even) parts + + s = "" + for (k = 1; k <= n; ++k) # unbrace non-math part, leaving math mode intact + s = s ((k > 1) ? "$" : "") \ + ((k % 2) ? strip_braces(TeX_to_HTML_nonmath(parts[k])) : \ + TeX_to_HTML_math(parts[k])) + + gsub(/[$][$][$]/,"$$",s) # restore display math + + return (s) +} + + +function TeX_to_HTML_math(s) +{ + # Mostly a dummy for now, but HTML 3 could support some math translation + + gsub(/\\&/,"\\&",s) # reduce TeX ampersands to SGML entities + + return (s) +} + + +function TeX_to_HTML_nonmath(s) +{ + if (index(s,"\\") > 0) # important optimization + { + gsub(/\\slash +/,"/",s) # replace TeX slashes with conventional ones + gsub(/ *\\emdash +/," --- ",s) # replace BibNet emdashes with conventional ones + gsub(/\\%/,"%",s) # reduce TeX percents to conventional ones + gsub(/\\[$]/,"$",s) # reduce TeX dollars to conventional ones + gsub(/\\#/,"#",s) # reduce TeX sharps to conventional ones + + if (HTML) # translate TeX markup to HTML + { + gsub(/\\&/,"\\&",s) # reduce TeX ampersands to SGML entities + s = html_accents(s) + s = html_fonts(s) + } + else # plain ASCII text output: discard all TeX markup + { + gsub(/\\\&/, "\\&", s) # reduce TeX ampersands to conventional ones + + gsub(/\\[a-z][a-z] +/,"",s) # remove TeX font changes + gsub(/\\[^A-Za-z]/,"",s) # remove remaining TeX control symbols + } + } + return (s) +} + + +function trim(s) +{ + gsub(/^[ \t]+/,"",s) + gsub(/[ \t]+$/,"",s) + return (s) +} + + +function vol_no_month_year() +{ + return ("Volume " wrap(Volume) ", Number " wrap(Number) ", " wrap(Month) ", " wrap(Year)) +} + + +function wrap(value) +{ + return (HTML ? ("<STRONG>" value "</STRONG>") : value) +} diff --git a/test/funstack.in b/test/funstack.in new file mode 100644 index 0000000..7a29a25 --- /dev/null +++ b/test/funstack.in @@ -0,0 +1,206 @@ +%%% ==================================================================== +%%% BibTeX-file{ +%%% author = "Nelson H. F. Beebe", +%%% version = "2.09", +%%% date = "26 March 1997", +%%% time = "08:21:19 MST", +%%% filename = "cacm1970.bib", +%%% address = "Center for Scientific Computing +%%% Department of Mathematics +%%% University of Utah +%%% Salt Lake City, UT 84112 +%%% USA", +%%% telephone = "+1 801 581 5254", +%%% FAX = "+1 801 581 4148", +%%% checksum = "50673 40670 196033 1787829", +%%% email = "beebe at math.utah.edu (Internet)", +%%% codetable = "ISO/ASCII", +%%% keywords = "bibliography, CACM, Communications of the +%%% ACM", +%%% supported = "yes", +%%% docstring = "This is a bibliography of the journal +%%% Communications of the ACM, covering +%%% (incompletely) 1970 -- 1979. +%%% +%%% At version 2.09, the year coverage looked +%%% like this: +%%% +%%% 1961 ( 1) 1972 (168) 1983 ( 0) +%%% 1962 ( 1) 1973 (158) 1984 ( 0) +%%% 1963 ( 2) 1974 (127) 1985 ( 2) +%%% 1964 ( 2) 1975 (107) 1986 ( 0) +%%% 1965 ( 1) 1976 ( 97) 1987 ( 0) +%%% 1966 ( 2) 1977 (117) 1988 ( 0) +%%% 1967 ( 1) 1978 (118) 1989 ( 0) +%%% 1968 ( 1) 1979 ( 78) 1990 ( 2) +%%% 1969 ( 3) 1980 ( 1) 1991 ( 4) +%%% 1970 (157) 1981 ( 2) 1992 ( 1) +%%% 1971 (104) 1982 ( 1) +%%% +%%% Article: 1252 +%%% Book: 2 +%%% InProceedings: 1 +%%% Manual: 1 +%%% MastersThesis: 1 +%%% PhdThesis: 1 +%%% +%%% Total entries: 1258 +%%% +%%% The size of the original cacm.bib file +%%% covering 1958--1996 became too large (about +%%% 4000 entries) for BibTeX and TeX to handle, +%%% so at version 1.44, it was split into +%%% cacm1950.bib, cacm1960.bib, cacm1970.bib, +%%% cacm1980.bib, and cacm1990.bib, each covering +%%% the decade starting with the year embedded in +%%% the filename. Version numbers for these +%%% files begin at 2.00. +%%% +%%% Volumes from the 1990s average more than 200 +%%% articles yearly, so a complete bibliography +%%% for this journal could contain more than 6000 +%%% entries from 1958 to 2000. +%%% +%%% These bibliographies also include ACM +%%% Algorithms 1--492. For Algorithms 493--686, +%%% including Algorithm 568, published in ACM +%%% Transactions on Programming Languages and +%%% Systems (TOPLAS), see the companion +%%% bibliographies, toms.bib and toplas.bib. +%%% +%%% All published Remarks and Corrigenda are +%%% cross-referenced in both directions, so +%%% that citing a paper will automatically +%%% generate citations for those Remarks and +%%% Corrigenda. Cross-referenced entries are +%%% duplicated in cacm19*.bib and toms.bib, so +%%% that each is completely self-contained. +%%% +%%% Source code for ACM Algorithms from 380 +%%% onwards, with some omissions, is available +%%% via the Netlib service at +%%% http://netlib.ornl.gov/, and +%%% ftp://netlib.bell-labs.com/netlib/toms. +%%% +%%% There is a World Wide Web search facility +%%% for articles published in this journal from +%%% 1959 to 1979 at +%%% http://ciir.cs.umass.edu/cgi-bin/web_query_form/public/cacm2.1. +%%% +%%% The initial draft of entries for 1981 -- +%%% 1990 was extracted from the ACM Computing +%%% Archive CD ROM for the 1980s, with manual +%%% corrections and additions. Additions were +%%% then made from all of the bibliographies in +%%% the TeX User Group collection, from +%%% bibliographies in the author's personal +%%% files, from the Compendex database +%%% (1970--1979), from the IEEE INSPEC database +%%% (1970--1979), from tables of contents +%%% information at http://www.acm.org/pubs/cacm/, +%%% from Zentralblatt fur Mathematik Mathematics +%%% Abstracts at +%%% http://www.emis.de/cgi-bin/MATH/, from +%%% bibliographies at Internet host +%%% netlib.bell-labs.com, and from the computer +%%% science bibliography collection on +%%% ftp.ira.uka.de in /pub/bibliography to which +%%% many people of have contributed. The +%%% snapshot of this collection was taken on +%%% 5-May-1994, and it consists of 441 BibTeX +%%% files, 2,672,675 lines, 205,289 entries, and +%%% 6,375 <at>String{} abbreviations, occupying +%%% 94.8MB of disk space. +%%% +%%% Numerous errors in the sources noted above +%%% have been corrected. Spelling has been +%%% verified with the UNIX spell and GNU ispell +%%% programs using the exception dictionary +%%% stored in the companion file with extension +%%% .sok. +%%% +%%% BibTeX citation tags are uniformly chosen +%%% as name:year:abbrev, where name is the +%%% family name of the first author or editor, +%%% year is a 4-digit number, and abbrev is a +%%% 3-letter condensation of important title +%%% words. Citation tags were automatically +%%% generated by software developed for the +%%% BibNet Project. +%%% +%%% In this bibliography, entries are sorted in +%%% publication order within each journal, +%%% using bibsort -byvolume. +%%% +%%% The checksum field above contains a CRC-16 +%%% checksum as the first value, followed by the +%%% equivalent of the standard UNIX wc (word +%%% count) utility output of lines, words, and +%%% characters. This is produced by Robert +%%% Solovay's checksum utility.", +%%% } +%%% ==================================================================== + +@Preamble{"\input bibnames.sty " # "\input path.sty " # "\def \TM {${}^{\sc TM}$} " # "\hyphenation{ al-pha-mer-ic Balz-er Blom-quist Bo-ta-fo-go Bran-din Brans-comb Bu-tera Chris-tina Christ-o-fi-des Col-lins Cor-dell data-base econ-omies Fletch-er + flow-chart flow-charts Fry-styk ge-dank-en Gar-fink-el Ge-ha-ni Glush-ko Goud-reau Gua-dan-go Hari-di Haw-thorn Hem-men-ding-er Hor-o-witz Hour-vitz Hirsch-berg Ike-da Ka-chi-tvi-chyan-u-kul Kat-ze-nel-son Kitz-miller Ko-ba-yashi Le-Me-tay-er Ken-ne-dy + Law-rence Mac-kay Mai-net-ti Mar-sa-glia Max-well Mer-ner Mo-ran-di Na-ray-an New-ell Nich-ols para-digm pat-ent-ed Phi-lo-kyp-rou Prep-a-ra-ta pseu-do-chain-ing QUIK-SCRIPT Rad-e-mach-er re-eval-u-a-tion re-wind Ros-witha Scheu-er-mann Schwach-heim + Schob-bens Schon-berg Sho-sha-ni Si-tha-ra-ma Skwa-rec-ki Streck-er Strin-gi-ni Tes-ler Te-zu-ka Teu-ho-la Till-quist Town-send Tsi-chri-tzis Tur-ski Vuille-min Wald-ing-er Za-bo-row-ski Za-mora }"} + +%======================================================================= +% Acknowledgement abbreviations: + +@String{ack-nhfb = "Nelson H. F. Beebe, Center for Scientific Computing, Department of Mathematics, University of Utah, Salt Lake City, UT 84112, USA, Tel: +1 801 581 5254, FAX: +1 801 581 4148, e-mail: \path|beebe@math.utah.edu|"} + +@String{ack-nj = "Norbert Juffa, 2445 Mission College Blvd. Santa Clara, CA 95054 USA email: \path=norbert@iit.com="} + +%======================================================================= +% Journal abbreviations: + +@String{j-CACM = "Communications of the ACM"} + +@String{j-COMP-SURV = "Computing Surveys"} + +@String{j-J-ACM = "Journal of the ACM"} + +@String{j-MANAGEMENT-SCIENCE = "Management Science"} + +@String{j-SIAM-J-COMPUT = "SIAM Journal of Computing"} + +@String{j-SPE = "Software --- Practice and Experience"} + +@String{j-TOMS = "ACM Transactions on Mathematical Software"} + +%======================================================================= +% Publisher abbreviations: + +@String{pub-ANSI = "American National Standards Institute"} + +@String{pub-ANSI:adr = "1430 Broadway, New York, NY 10018, USA"} + +@String{pub-AW = "Ad{\-d}i{\-s}on-Wes{\-l}ey"} + +@String{pub-AW:adr = "Reading, MA, USA"} + +@String{pub-SUCSLI = "Stanford University Center for the Study of Language and Information"} + +@String{pub-SUCSLI:adr = "Stanford, CA, USA"} + +@String{pub-SV = "Spring{\-}er-Ver{\-}lag"} + +@String{pub-SV:adr = "Berlin, Germany~/ Heidelberg, Germany~/ London, UK~/ etc."} +@MastersThesis{Dittmer:1976:IEP, + author = "Ingo Dittmer", + title = "{Implementation eines Einschrittcompilers f{\"u}r die Progammiersprache PASCAL auf der Rechenanlage IBM\slash 360 der Universit{\"a}t M{\"u}nster}. ({English} title: Implementation of a One-Step Compiler for the Programming Language + {PASCAL} on the {IBM}\slash 360 of the {University of Muenster})", + type = "Diplomearbeit", + school = "Universit{\"a}t M{\"u}nster", + address = "M{\"u}nster, Germany", + pages = "??", + month = "??", + year = "1976", + bibdate = "Sat Feb 17 13:24:29 1996", + note = "Diplomearbeit M{\"u}nster 1976 und doert angegebene Literatur (English: Muenster diploma work 1976 and the literature cited therein). The hashing method was rediscovered fourteen years later by Pearson \cite{Pearson:1990:FHV}, and then + commented on by several authors \cite{Dittmer:1991:NFH,Savoy:1991:NFH,Litsios:1991:NFH,Pearson:1991:NFH}.", + acknowledgement = ack-nhfb, + xxnote = "Cannot find in Dissertation Abstracts, European.", +} diff --git a/test/funstack.ok b/test/funstack.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/funstack.ok diff --git a/test/gensub.awk b/test/gensub.awk new file mode 100644 index 0000000..f91d84d --- /dev/null +++ b/test/gensub.awk @@ -0,0 +1,7 @@ +BEGIN { a = "this is a test of gawk" + b = gensub(/(this).*(test).*(gawk)/, "3 = <\\3>, 2 = <\\2>, 1 = <\\1>", 1, a) + print b +} +NR == 1 { print gensub(/b/, "BB", 2) } +NR == 2 { print gensub(/c/, "CC", "global") } +END { print gensub(/foo/, "bar", 1, "DON'T PANIC") } diff --git a/test/gensub.in b/test/gensub.in new file mode 100644 index 0000000..96c9faf --- /dev/null +++ b/test/gensub.in @@ -0,0 +1,2 @@ +a b c a b c a b c +a b c a b c a b c diff --git a/test/gensub.ok b/test/gensub.ok new file mode 100644 index 0000000..b9ea3de --- /dev/null +++ b/test/gensub.ok @@ -0,0 +1,4 @@ +3 = <gawk>, 2 = <test>, 1 = <this> +a b c a BB c a b c +a b CC a b CC a b CC +DON'T PANIC diff --git a/test/gensub2.awk b/test/gensub2.awk new file mode 100644 index 0000000..53554da --- /dev/null +++ b/test/gensub2.awk @@ -0,0 +1,5 @@ +BEGIN { + print gensub("x","y",2,"xx") + print gensub("x","y","2","xx") + print gensub("x","y","a","xx") +} diff --git a/test/gensub2.ok b/test/gensub2.ok new file mode 100644 index 0000000..8982414 --- /dev/null +++ b/test/gensub2.ok @@ -0,0 +1,3 @@ +xy +xy +yx diff --git a/test/getline.awk b/test/getline.awk new file mode 100644 index 0000000..fc09f78 --- /dev/null +++ b/test/getline.awk @@ -0,0 +1,29 @@ +BEGIN { + x = y = "s" + a = (getline x y) + print a, x + a = (getline x + 1) + print a, x + a = (getline x - 2) + print a, x + + cmd = "echo A" + a = (cmd | getline x y) + close(cmd) + print a, x + + cmd = "echo B" + a = (cmd | getline x + 1) + close(cmd) + print a, x + + cmd = "echo C" + a = (cmd | getline x - 2) + close(cmd) + print a, x + + cmd = "echo D" + a = cmd | getline x + close(cmd) + print a, x +} diff --git a/test/getline.in b/test/getline.in new file mode 100644 index 0000000..b1e6722 --- /dev/null +++ b/test/getline.in @@ -0,0 +1,3 @@ +A +B +C diff --git a/test/getline.ok b/test/getline.ok new file mode 100644 index 0000000..dd5bdb6 --- /dev/null +++ b/test/getline.ok @@ -0,0 +1,7 @@ +1s A +2 B +-1 C +1s A +2 B +-1 C +1 D diff --git a/test/getline2.awk b/test/getline2.awk new file mode 100644 index 0000000..f4e413f --- /dev/null +++ b/test/getline2.awk @@ -0,0 +1 @@ +BEGIN { while( getline > 0) { print } } diff --git a/test/getline2.ok b/test/getline2.ok new file mode 100644 index 0000000..9b7f2b9 --- /dev/null +++ b/test/getline2.ok @@ -0,0 +1,2 @@ +BEGIN { while( getline > 0) { print } } +BEGIN { while( getline > 0) { print } } diff --git a/test/getline3.awk b/test/getline3.awk new file mode 100644 index 0000000..03e1239 --- /dev/null +++ b/test/getline3.awk @@ -0,0 +1,7 @@ +BEGIN { + cmd = "echo 3" + y = 7 + cmd | getline x y + close(cmd) + print (cmd | getline x y) +} diff --git a/test/getline3.ok b/test/getline3.ok new file mode 100644 index 0000000..98d9bcb --- /dev/null +++ b/test/getline3.ok @@ -0,0 +1 @@ +17 diff --git a/test/getlnbuf.awk b/test/getlnbuf.awk new file mode 100644 index 0000000..8a4483e --- /dev/null +++ b/test/getlnbuf.awk @@ -0,0 +1,18 @@ +#Date: Tue, 21 Dec 1999 16:11:07 +0100 +#From: Daniel Schnell <Daniel.Schnell.GP@icn.siemens.de> +#To: bug-gnu-utils@gnu.org +#CC: arnold@gnu.org +#Subject: BUG in gawk (version 3.0.4 linux, windows): Text mangeling in between + +# search for "@K@CODE" segment + +$0 ~ /@K@CODE/ { + # get next record + getline temp + printf ("@K@CODE\n") + printf ("%s\n",temp) + } + +$0 !~ /@K@CODE/ { + printf ("%s\n", $0) + } diff --git a/test/getlnbuf.in b/test/getlnbuf.in new file mode 100644 index 0000000..062b377 --- /dev/null +++ b/test/getlnbuf.in @@ -0,0 +1,1708 @@ +EXTRA_INFO.TYP3.EC := EC; +EXTRA_INFO.TYP3.TEXT:= 'CONNECT_SERVICE TO OAM FAILED'; + +G9PXYA1S!G9TE500_EHP_P( +'G9IBSA1C003', /*@@ID*/ +G9PXYA1S!G9TE102_ERR_CLASS_SWERR, /*@@CLASS*/ +ADDR(EXTRA_INFO.ERROR_HANDLER), /* EXTRA-INFO ADDR */ +G9PXYA1S!G9TE100_GB_LM, /* USER-ID */ +NULL /* OPTIONAL-SWET-INFO ADDR */ +); +/***@@@ END OF ERROR ***/ + +@K@FREEZE +917596041 +@K@NAME +T_ERR4_1 +@K@INSCRIPT +ERROR_HANDLING: +DB_OVERFLOW +MP/NSEI +@K@CODE +/***@@@ ERROR ***/ +/*@@ERRORTEXT +*@ DB-OVERFLOW +*@ +*@ +*@@DESCRIPTION +*@ THE INSTANCE-CREATION WAS NOT POSSIBLE +*@ BECAUSE THE DATABASE WOULD OVERFLOW +*@ +*@@EXTRA INFO +*@ (EXTRA_INFO_4_STRUCT) +*@ NSEI +*@ NSVCI +*@ TEXT +*@ +*/ + +EXTRA_INFO.TYP4.NSEI := EVD_PTR->.KEYS.INT_ARR(0); +EXTRA_INFO.TYP4.NSVCI:= EVD_PTR->.KEYS.INT_ARR(1); +EXTRA_INFO.TYP4.TEXT := 'NSVC-HAND.: MP/NSEI-OVERFLOW'; + +G9PXYA1S!G9TE500_EHP_P( +'G9IBSA1C004', /*@@ID*/ +G9PXYA1S!G9TE102_ERR_CLASS_ESC_MAX_ANY, /*@@CLASS*/ +ADDR(EXTRA_INFO.ERROR_HANDLER), /* EXTRA-INFO ADDR */ +G9PXYA1S!G9TE100_GB_LM, /* USER-ID */ +NULL /* OPTIONAL-SWET-INFO ADDR */ +); +/***@@@ END OF ERROR ***/ + +@K@FREEZE +920903219 +@K@NAME +T_ERR4_2 +@K@INSCRIPT +ERROR_HANDLING: +DB_OVERFLOW +MP/NSVCI +@K@CODE +/***@@@ ERROR ***/ +/*@@ERRORTEXT +*@ DB-OVERFLOW +*@ +*@ +*@@DESCRIPTION +*@ THE INSTANCE-CREATION WAS NOT POSSIBLE +*@ BECAUSE THE DATABASE WOULD OVERFLOW +*@ +*@@EXTRA INFO +*@ (EXTRA_INFO_4_STRUCT) +*@ NSEI +*@ NSVCI +*@ TEXT +*@ +*/ + +EXTRA_INFO.TYP4.NSEI := EVD_PTR->.KEYS.INT_ARR(0); +EXTRA_INFO.TYP4.NSVCI:= EVD_PTR->.KEYS.INT_ARR(1); +EXTRA_INFO.TYP4.TEXT := 'NSVC-HAND.: MP/NSVCI-OVERFLOW'; + +G9PXYA1S!G9TE500_EHP_P( +'G9IBSA1C004', /*@@ID*/ +G9PXYA1S!G9TE102_ERR_CLASS_ESC_MAX_ANY, /*@@CLASS*/ +ADDR(EXTRA_INFO.ERROR_HANDLER), /* EXTRA-INFO ADDR */ +G9PXYA1S!G9TE100_GB_LM, /* USER-ID */ +NULL /* OPTIONAL-SWET-INFO ADDR */ +); +/***@@@ END OF ERROR ***/ + +@K@FREEZE +920903222 +@K@NAME +T_ERR4_3 +@K@INSCRIPT +ERROR_HANDLING: +DB_OVERFLOW +NSEI/NSVCI +@K@CODE +/***@@@ ERROR ***/ +/*@@ERRORTEXT +*@ DB-OVERFLOW +*@ +*@ +*@@DESCRIPTION +*@ THE INSTANCE-CREATION WAS NOT POSSIBLE +*@ BECAUSE THE DATABASE WOULD OVERFLOW +*@ +*@@EXTRA INFO +*@ (EXTRA_INFO_4_STRUCT) +*@ NSEI +*@ NSVCI +*@ TEXT +*@ +*/ + +EXTRA_INFO.TYP4.NSEI := EVD_PTR->.KEYS.INT_ARR(0); +EXTRA_INFO.TYP4.NSVCI:= EVD_PTR->.KEYS.INT_ARR(1); +EXTRA_INFO.TYP4.TEXT := 'NSVC-HAND.: NSEI/NSVC-OVERFLOW'; + +G9PXYA1S!G9TE500_EHP_P( +'G9IBSA1C004', /*@@ID*/ +G9PXYA1S!G9TE102_ERR_CLASS_ESC_MAX_ANY, /*@@CLASS*/ +ADDR(EXTRA_INFO.ERROR_HANDLER), /* EXTRA-INFO ADDR */ +G9PXYA1S!G9TE100_GB_LM, /* USER-ID */ +NULL /* OPTIONAL-SWET-INFO ADDR */ +); +/***@@@ END OF ERROR ***/ + +@K@FREEZE +920903226 +@K@NAME +TR_RESET +@K@INSCRIPT +RESTART_ +TNS_RESET_ +TIMER +@K@CODE +/* TIMER EVENT DESCRIPTOR STILL THERE */ + +/* INITIALIZATION OF THE TIMER-EVENT-DESCRIPTOR STILL VALID */ +NSVCI_CON_PTR->.TIM_EVD_PTR->.TIMER:= TNS_RESET_MAP; + +/* START TIMER */ +G9PX508_START_TIMER_P +( +NSVCI_CON_PTR->.TIM_EVD_PTR +); + +@K@FREEZE +924684867 +@K@NAME +TX_AUDIT +@K@INSCRIPT +FOR +AUDIT + +@K@NAME +M_BLKOACKM +@K@INSCRIPT +NS_ +BLOCK_ACK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9IBDF4_NS_LM_M) + G9IBD44_NS_PDU_DATA_OFFSET_C), +TX_EVD_PTR +); + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9IBD40_NS_LM_PDU_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBDL_HANDLE; + +IF +/* 'OTHER' ALIVE NSVC TO THIS NSEI EXISTING? */ +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR /= NULL +THEN +/* USE THIS 'OTHER' FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(0):= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; +/* NSEI TO BE USED FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; +/* NSVCI TO BE USED FOR TRANSPORT */ +ELSE +/* USE AFFECTED NSVC AGAIN FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(0):= + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; /* NSEI TO BE USED FOR +TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVCI TO BE USED FOR +TRANSPORT */ +FI; + + +/* POINTER TO PDU IN POOL-ELEMENT */ +NS_PDU_PTR:= NS_PDU_REF_M (INT(TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT) + + G9IBD44_NS_PDU_DATA_OFFSET_C); +/* OFFSET OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_OFFSET:= G9IBD44_NS_PDU_DATA_OFFSET_C; +/* LENGTH OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(NS_PDU_PTR->.G9IBDF4_PDU_TYPE) + +SIZE(NS_PDU_PTR->.D3); + +/* NOW THE POOL-ELEMENT */ +NS_PDU_PTR->.G9IBDF4_PDU_TYPE:= G9IBDR2_NS_BLOCK_ACK_C; /* PDU-TYPE */ + +NS_PDU_PTR->.D3.NSVCI_TLV.NSVCI_VAL := + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVC TO BE BLOCKED */ + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +938805885 +@K@NAME +T_RCTRUE +@K@INSCRIPT +RC += +TRUE +@K@CODE +RC:= TRUE; + +@K@FREEZE +922176328 +@K@NAME +M_AC_SBVCN +@K@INSCRIPT +G9IBME0_ +ACT_ +SIGN_BVC_C +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB512_GET_MSG_LESS_EV_DESCR_P +( +SID_GBNSVC, +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +TX_EVD_PTR->.EVENT_CMD:= G9IBME0_ACT_SIGN_BVC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBBVC_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= EVD_PTR->.KEYS.INT_ARR(0); +TX_EVD_PTR->.KEYS.INT_ARR(1):= SIGN_BVCI; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +938788211 +@K@NAME +T_RC_EOD +@K@INSCRIPT +RC += +END OF DATA + +@K@CODE +RC:= G9IBSM4_RC_END_OF_DATA; + +@K@FREEZE +921083785 +@K@NAME +T_RC_EMP +@K@INSCRIPT +RC += +EMPTY + +@K@CODE +RC:= G9IBSM4_RC_EMPTY; + +@K@FREEZE +921083757 +@K@NAME +T_RC_ERR +@K@INSCRIPT +RC += +ERROR + +@K@CODE +RC:= G9IBSM4_RC_ERROR; + +@K@FREEZE +921083731 +@K@NAME +S_UNUSED +@K@INSCRIPT +G9IBSM0_ +UNUSED +@K@CODE + + +@K@FREEZE +919416670 +@K@NAME +TA_UNBLOCK +@K@INSCRIPT +START_ +TNS_UNBLOCK_ +TIMER +@K@CODE +/* GET TIMER-EVENT DESCRIPTOR */ +G9PB513_GET_TIMER_EV_DESCR_P +( +SID_GBNSVC, +NSVCI_CON_PTR->.TIM_EVD_PTR +); + +/* INITIALIZATION OF THE TIMER-EVENT-DESCRIPTOR */ +NSVCI_CON_PTR->.TIM_EVD_PTR->.EVENT_CMD:= G9IBSE4_TO_TNS_C; +NSVCI_CON_PTR->.TIM_EVD_PTR->.EVENT_DESTINATION:= GBNSVC_HANDLE; +NSVCI_CON_PTR->.TIM_EVD_PTR->.KEYS.INT_ARR(0):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; +NSVCI_CON_PTR->.TIM_EVD_PTR->.KEYS.INT_ARR(1):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; +NSVCI_CON_PTR->.TIM_EVD_PTR->.TIMER:= TNS_UNBLOCK_MAP; + +/* START TIMER */ +G9PX508_START_TIMER_P +( +NSVCI_CON_PTR->.TIM_EVD_PTR +); + +@K@FREEZE +924686210 +@K@NAME +M_BLK_ACKM +@K@INSCRIPT +NS_ +BLOCK_ACK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9IBDF4_NS_LM_M) + G9IBD44_NS_PDU_DATA_OFFSET_C), +TX_EVD_PTR +); + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9IBD40_NS_LM_PDU_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBDL_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; /* NSEI TO BE USED FOR +TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVCI TO BE USED FOR +TRANSPORT */ +/* POINTER TO PDU IN POOL-ELEMENT */ +NS_PDU_PTR:= NS_PDU_REF_M (INT(TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT) + + G9IBD44_NS_PDU_DATA_OFFSET_C); +/* OFFSET OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_OFFSET:= G9IBD44_NS_PDU_DATA_OFFSET_C; +/* LENGTH OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(NS_PDU_PTR->.G9IBDF4_PDU_TYPE) + +SIZE(NS_PDU_PTR->.D3); + +/* NOW THE POOL-ELEMENT */ +NS_PDU_PTR->.G9IBDF4_PDU_TYPE:= G9IBDR2_NS_BLOCK_ACK_C; /* PDU-TYPE */ + +NS_PDU_PTR->.D3.NSVCI_TLV.NSVCI_VAL := + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVC TO BE BLOCKED */ + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +926348442 +@K@NAME +TA_NXTALIV +@K@INSCRIPT +DEFINE +NEW 'NEXT_ +ALIVE' +@K@CODE +IF +/* ALIVE NSVC TO THE NSEI EXISTING? */ +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR /= NULL + +THEN +/* TAKE NEXT ELEMENT IN THE LINKED LIST AS THE NEXT ALIVE NSVC */ +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR:= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.NEXT_ALV_NSVCI_CON_PTR; + +FI; + +@K@FREEZE +938801086 +@K@NAME +M_DE_CBVCN +@K@INSCRIPT +G9IBME2_ +DEACT_ +CELL_BVC_C + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB512_GET_MSG_LESS_EV_DESCR_P +( +SID_GBNSVC, +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +TX_EVD_PTR->.EVENT_CMD:= G9IBME2_DEACT_CELL_BVC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBBVC_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; +TX_EVD_PTR->.KEYS.INT_ARR(1):= EVD_PTR->.ADD_DATA(3); + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +933318270 +@K@NAME +TA_NXTRESP +@K@INSCRIPT +DEFINE +NEW 'NEXT_ +RESPONSIBLE' +@K@CODE +NSEI_CON_PTR->.NEXT_RESP_NSVCI_CON_PTR:= + NSEI_CON_PTR->.NEXT_RESP_NSVCI_CON_PTR->.NEXT_LSP_NSVCI_CON_PTR; + + +@K@FREEZE +938005006 +@K@NAME +TA_NXTSUBS +@K@INSCRIPT +DEFINE +NEW 'NEXT_ +SUBSTITUTE' +@K@CODE +NSEI_CON_PTR->.NEXT_SUBS_NSVCI_CON_PTR:= + NSEI_CON_PTR->.NEXT_SUBS_NSVCI_CON_PTR->.NEXT_UBL_NSVCI_CON_PTR; + +@K@NAME +M_BLK_O__M +@K@INSCRIPT +NS_ +BLOCK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9IBDF4_NS_LM_M) + G9IBD44_NS_PDU_DATA_OFFSET_C), +TX_EVD_PTR +); + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9IBD40_NS_LM_PDU_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBDL_HANDLE; + +IF +/* 'OTHER' ALIVE NSVC TO THIS NSEI EXISTING? */ +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR /= NULL +THEN +/* USE THIS 'OTHER' FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(0):= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; +/* NSEI TO BE USED FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; +/* NSVCI TO BE USED FOR TRANSPORT */ +ELSE +/* USE AFFECTED NSVC AGAIN FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(0):= + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; /* NSEI TO BE USED FOR +TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVCI TO BE USED FOR +TRANSPORT */ +FI; + + +/* POINTER TO PDU IN POOL-ELEMENT */ +NS_PDU_PTR:= NS_PDU_REF_M (INT(TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT) + + G9IBD44_NS_PDU_DATA_OFFSET_C); +/* OFFSET OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_OFFSET:= G9IBD44_NS_PDU_DATA_OFFSET_C; +/* LENGTH OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(NS_PDU_PTR->.G9IBDF4_PDU_TYPE) + +SIZE(NS_PDU_PTR->.D2); + + +/* NOW THE POOL-ELEMENT */ +NS_PDU_PTR->.G9IBDF4_PDU_TYPE:= G9IBDR1_NS_BLOCK_C; /* PDU-TYPE */ + +NS_PDU_PTR->.D2.CAUSE_TLV.CAUSE_VAL:= + G9IBBA2_NS_TRANSIT_NETWORK_FAILURE; /* CAUSE FOR BLOCK */ +NS_PDU_PTR->.D2.NSVCI_TLV.NSVCI_VAL := + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVC TO BE BLOCKED */ + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@TEXT +GSM 8.16 CHAP. 7.2: +THE NS-BLOCK-PDU MAY BE SENT IN ANY ALIVE +(BLOCKED OR UNBLOCKED) NS-VC... +@K@FREEZE +938803215 +@K@NAME +M_DE_SBVCN +@K@INSCRIPT +G9IBME1_ +DEACT_ +SIGN_BVC_C +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB512_GET_MSG_LESS_EV_DESCR_P +( +SID_GBNSVC, +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +TX_EVD_PTR->.EVENT_CMD:= G9IBME1_DEACT_SIGN_BVC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBBVC_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= EVD_PTR->.KEYS.INT_ARR(0); +TX_EVD_PTR->.KEYS.INT_ARR(1):= SIGN_BVCI; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +938788201 +@K@NAME +M_OAME401M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +RESET_PDU + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSE */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSE; +OAM_MSG_PTR->.HANDLED_OBJECT.NSE_ID:= EVD_PTR->.KEYS.INT_ARR(0); /* +USED NSEI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_RESET_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.ADD_DATA(0); /* AFFECTED NSEI (FROM PDU) */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.ADD_DATA(1); /* AFFECTED NSVCI (FROM PDU) */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +935766108 +@K@NAME +M_OAME402M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +RESET_PDU + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= EVD_PTR->.KEYS.INT_ARR(1); /* +USED NSVCI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_RESET_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.ADD_DATA(0); /* NSEI FROM PDU */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.ADD_DATA(1); /* NSVCI FROM PDU */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +935766407 +@K@NAME +M_OAME411M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +RESET_ACK_PDU + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSE */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSE; +OAM_MSG_PTR->.HANDLED_OBJECT.NSE_ID:= EVD_PTR->.KEYS.INT_ARR(0); /* +USED NSEI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_RESET_ACK_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.ADD_DATA(0); /* NSEI FROM PDU */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.ADD_DATA(1); /* NSVCI FROM PDU */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +935767332 +@K@NAME +M_OAME412M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +RESET_ACK_PDU + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= EVD_PTR->.KEYS.INT_ARR(1); /* +USED NSVCI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_RESET_ACK_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.ADD_DATA(0); /* NSEI FROM PDU */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.ADD_DATA(1); /* NSVCI FROM PDU */ + + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +935767189 +@K@NAME +C_CON +@K@INSCRIPT +RC_DB +@K@CODE +RC_DB + +@K@FREEZE +922176673 +@K@NAME +M_BLK____M +@K@INSCRIPT +NS_ +BLOCK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9IBDF4_NS_LM_M) + G9IBD44_NS_PDU_DATA_OFFSET_C), +TX_EVD_PTR +); + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9IBD40_NS_LM_PDU_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBDL_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; /* NSEI TO BE USED FOR +TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVCI TO BE USED FOR +TRANSPORT */ +/* POINTER TO PDU IN POOL-ELEMENT */ +NS_PDU_PTR:= NS_PDU_REF_M (INT(TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT) + + G9IBD44_NS_PDU_DATA_OFFSET_C); +/* OFFSET OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_OFFSET:= G9IBD44_NS_PDU_DATA_OFFSET_C; +/* LENGTH OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(NS_PDU_PTR->.G9IBDF4_PDU_TYPE) + +SIZE(NS_PDU_PTR->.D2); + + +/* NOW THE POOL-ELEMENT */ +NS_PDU_PTR->.G9IBDF4_PDU_TYPE:= G9IBDR1_NS_BLOCK_C; /* PDU-TYPE */ + +NS_PDU_PTR->.D2.CAUSE_TLV.CAUSE_VAL:= + G9IBBA2_NS_OAM_INTERVENTION; /* CAUSE FOR BLOCK */ +NS_PDU_PTR->.D2.NSVCI_TLV.NSVCI_VAL := + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVC TO BE BLOCKED */ + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@TEXT +GSM 8.16 CHAP. 7.2: +THE NS-BLOCK-PDU MAY BE SENT IN ANY ALIVE +(BLOCKED OR UNBLOCKED) NS-VC... +@K@FREEZE +926348613 +@K@NAME +S_BLOCKED +@K@INSCRIPT +G9IBSM0_ +BLOCKED +@K@CODE + + +@K@FREEZE +922176496 +@K@NAME +D_CON +@K@INSCRIPT +CONTEXT +GOT +@K@CODE +RC_DB = G9IBSR0_RC_OK + +@K@FREEZE +921772339 +@K@NAME +M_OAME901M +@K@INSCRIPT +ERROR_MESSAGE: +OPERATIONAL_STATE_CHANGE +UBL->BLK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = OPERATIONAL_STATE_CHANGE */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_OPERATIONAL_STATE_CHANGE; +/* ADDITIONAL_OPERATIONAL_STATE_INFO */ +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_OLD:= + G9OC101_UNBLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_OLD:= + G9OC102_ENABLED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_NEW:= + G9OC102_ENABLED; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +925970975 +@K@NAME +M_OAME902M +@K@INSCRIPT +ERROR_MESSAGE: +OPERATIONAL_STATE_CHANGE +UBL->BLK + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = OPERATIONAL_STATE_CHANGE */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_OPERATIONAL_STATE_CHANGE; +/* ADDITIONAL_OPERATIONAL_STATE_INFO */ +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_OLD:= + G9OC101_UNBLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_OLD:= + G9OC102_ENABLED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_NEW:= + G9OC102_DISABLED; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +925970987 +@K@NAME +M_OAME10SM +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_BEGIN_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_BEGIN_NS_ALIVE_TEST*/ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_BEGIN_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + TRUE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@NAME +M_OAME911M +@K@INSCRIPT +ERROR_MESSAGE: +OPERATIONAL_STATE_CHANGE +BLK->UBL +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = OPERATIONAL_STATE_CHANGE */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_OPERATIONAL_STATE_CHANGE; +/* ADDITIONAL_OPERATIONAL_STATE_INFO */ +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_NEW:= + G9OC101_UNBLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_OLD:= + G9OC102_ENABLED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_NEW:= + G9OC102_ENABLED; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +925970996 +@K@NAME +M_OAME20SM +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_END_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_END_NS_ALIVE_TEST */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_END_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + TRUE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@NAME +M_OAME10_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_BEGIN_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_BEGIN_NS_ALIVE_TEST*/ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_BEGIN_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + TRUE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443813 +@K@NAME +D_SEM +@K@INSCRIPT +CALL_SEM += +TRUE +@K@CODE +CALL_SEM = TRUE + +@K@FREEZE +922176624 +@K@NAME +D_N_0 +@K@INSCRIPT +N = 0 + +@K@CODE +NSVCI_CON_PTR->.N = 0 + +@K@FREEZE +921511000 +@K@NAME +M_OAME12_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_BEGIN_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_BEGIN_NS_ALIVE_TEST*/ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_BEGIN_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + FALSE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_ALIVE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443829 +@K@NAME +M_OAME21_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_END_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_END_NS_ALIVE_TEST */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_END_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + TRUE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + FALSE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443856 +@K@NAME +M_OAME13_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_BEGIN_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_BEGIN_NS_ALIVE_TEST*/ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_BEGIN_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + FALSE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_UNBLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_ALIVE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443838 +@K@NAME +M_OAME22_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_END_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_END_NS_ALIVE_TEST */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_END_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + FALSE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_ALIVE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443864 +@K@NAME +M_OAME30_M +@K@INSCRIPT +ERROR_MESSAGE: +NO_ANSWER_FORM_BSS +RESET_PROCEDURE + + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = NO_ANSWER_FROM_BSS */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_NO_ANSWER_FROM_BSS; +/* INITIATED_PROCEDURE */ +OAM_MSG_PTR->.INITIATED_PROCEDURE:= + G9OC123_RESET_PROCEDURE; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922175973 +@K@NAME +M_OAME31_M +@K@INSCRIPT +ERROR_MESSAGE: +NO_ANSWER_FROM_BSS +BLOCK_PROCEDURE + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = NO_ANSWER_FROM_BSS */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_NO_ANSWER_FROM_BSS; +/* INITIATED_PROCEDURE */ +OAM_MSG_PTR->.INITIATED_PROCEDURE:= + G9OC123_BLOCK_PROCEDURE; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922175976 +@K@NAME +M_OAME32_M +@K@INSCRIPT +ERROR_MESSAGE: +NO_ANSWER_FROM_BSS +UNBLOCK_PROCEDURE + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = NO_ANSWER_FROM_BSS */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_NO_ANSWER_FROM_BSS; +/* INITIATED_PROCEDURE */ +OAM_MSG_PTR->.INITIATED_PROCEDURE:= + G9OC123_UNBLOCK_PROCEDURE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922175980 +@K@NAME +M_OAME42_M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +BLOCK_PDU +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= EVD_PTR->.ADD_DATA(1); /* +USED NSVCI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_BLOCK_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.KEYS.INT_ARR(0); /* AFFECTED NSEI (FROM PDU) */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.KEYS.INT_ARR(1); /* AFFECTED NSVCI (FROM PDU) */ + + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +934296141 +@K@NAME +M_OAME50_M +@K@INSCRIPT +ERROR_MESSAGE: +STATUS_PDU_CONTAINS_ERROR_INFO +RECEIVED +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR-CAUSE = STATUS_PDU_CONTAINS_ERROR_INFO */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_STATUS_PDU_CONTAINS_ERROR_INFO; +/* ADDITIONAL_STATUS_PDU_INFO */ +INT_CAUSE_PTR.INT_PTR:= ADDR(EVD_PTR->.ADD_DATA(2)); +OAM_MSG_PTR->.ADDITIONAL_STATUS_PDU_INFO:= + INT_CAUSE_PTR.CAUSE_PTR->; /* CAUSE */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@TEXT +NICHT OK + +@K@FREEZE +934298924 +@K@NAME +M_OAME43_M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +BLOCK_ACK_PDU +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= EVD_PTR->.ADD_DATA(1); /* +USED NSVCI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_BLOCK_ACK_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.KEYS.INT_ARR(0); /* AFFECTED NSEI (FROM PDU) */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.KEYS.INT_ARR(1); /* AFFECTED NSVCI (FROM PDU) */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +934297710 diff --git a/test/getlnbuf.ok b/test/getlnbuf.ok new file mode 100644 index 0000000..062b377 --- /dev/null +++ b/test/getlnbuf.ok @@ -0,0 +1,1708 @@ +EXTRA_INFO.TYP3.EC := EC; +EXTRA_INFO.TYP3.TEXT:= 'CONNECT_SERVICE TO OAM FAILED'; + +G9PXYA1S!G9TE500_EHP_P( +'G9IBSA1C003', /*@@ID*/ +G9PXYA1S!G9TE102_ERR_CLASS_SWERR, /*@@CLASS*/ +ADDR(EXTRA_INFO.ERROR_HANDLER), /* EXTRA-INFO ADDR */ +G9PXYA1S!G9TE100_GB_LM, /* USER-ID */ +NULL /* OPTIONAL-SWET-INFO ADDR */ +); +/***@@@ END OF ERROR ***/ + +@K@FREEZE +917596041 +@K@NAME +T_ERR4_1 +@K@INSCRIPT +ERROR_HANDLING: +DB_OVERFLOW +MP/NSEI +@K@CODE +/***@@@ ERROR ***/ +/*@@ERRORTEXT +*@ DB-OVERFLOW +*@ +*@ +*@@DESCRIPTION +*@ THE INSTANCE-CREATION WAS NOT POSSIBLE +*@ BECAUSE THE DATABASE WOULD OVERFLOW +*@ +*@@EXTRA INFO +*@ (EXTRA_INFO_4_STRUCT) +*@ NSEI +*@ NSVCI +*@ TEXT +*@ +*/ + +EXTRA_INFO.TYP4.NSEI := EVD_PTR->.KEYS.INT_ARR(0); +EXTRA_INFO.TYP4.NSVCI:= EVD_PTR->.KEYS.INT_ARR(1); +EXTRA_INFO.TYP4.TEXT := 'NSVC-HAND.: MP/NSEI-OVERFLOW'; + +G9PXYA1S!G9TE500_EHP_P( +'G9IBSA1C004', /*@@ID*/ +G9PXYA1S!G9TE102_ERR_CLASS_ESC_MAX_ANY, /*@@CLASS*/ +ADDR(EXTRA_INFO.ERROR_HANDLER), /* EXTRA-INFO ADDR */ +G9PXYA1S!G9TE100_GB_LM, /* USER-ID */ +NULL /* OPTIONAL-SWET-INFO ADDR */ +); +/***@@@ END OF ERROR ***/ + +@K@FREEZE +920903219 +@K@NAME +T_ERR4_2 +@K@INSCRIPT +ERROR_HANDLING: +DB_OVERFLOW +MP/NSVCI +@K@CODE +/***@@@ ERROR ***/ +/*@@ERRORTEXT +*@ DB-OVERFLOW +*@ +*@ +*@@DESCRIPTION +*@ THE INSTANCE-CREATION WAS NOT POSSIBLE +*@ BECAUSE THE DATABASE WOULD OVERFLOW +*@ +*@@EXTRA INFO +*@ (EXTRA_INFO_4_STRUCT) +*@ NSEI +*@ NSVCI +*@ TEXT +*@ +*/ + +EXTRA_INFO.TYP4.NSEI := EVD_PTR->.KEYS.INT_ARR(0); +EXTRA_INFO.TYP4.NSVCI:= EVD_PTR->.KEYS.INT_ARR(1); +EXTRA_INFO.TYP4.TEXT := 'NSVC-HAND.: MP/NSVCI-OVERFLOW'; + +G9PXYA1S!G9TE500_EHP_P( +'G9IBSA1C004', /*@@ID*/ +G9PXYA1S!G9TE102_ERR_CLASS_ESC_MAX_ANY, /*@@CLASS*/ +ADDR(EXTRA_INFO.ERROR_HANDLER), /* EXTRA-INFO ADDR */ +G9PXYA1S!G9TE100_GB_LM, /* USER-ID */ +NULL /* OPTIONAL-SWET-INFO ADDR */ +); +/***@@@ END OF ERROR ***/ + +@K@FREEZE +920903222 +@K@NAME +T_ERR4_3 +@K@INSCRIPT +ERROR_HANDLING: +DB_OVERFLOW +NSEI/NSVCI +@K@CODE +/***@@@ ERROR ***/ +/*@@ERRORTEXT +*@ DB-OVERFLOW +*@ +*@ +*@@DESCRIPTION +*@ THE INSTANCE-CREATION WAS NOT POSSIBLE +*@ BECAUSE THE DATABASE WOULD OVERFLOW +*@ +*@@EXTRA INFO +*@ (EXTRA_INFO_4_STRUCT) +*@ NSEI +*@ NSVCI +*@ TEXT +*@ +*/ + +EXTRA_INFO.TYP4.NSEI := EVD_PTR->.KEYS.INT_ARR(0); +EXTRA_INFO.TYP4.NSVCI:= EVD_PTR->.KEYS.INT_ARR(1); +EXTRA_INFO.TYP4.TEXT := 'NSVC-HAND.: NSEI/NSVC-OVERFLOW'; + +G9PXYA1S!G9TE500_EHP_P( +'G9IBSA1C004', /*@@ID*/ +G9PXYA1S!G9TE102_ERR_CLASS_ESC_MAX_ANY, /*@@CLASS*/ +ADDR(EXTRA_INFO.ERROR_HANDLER), /* EXTRA-INFO ADDR */ +G9PXYA1S!G9TE100_GB_LM, /* USER-ID */ +NULL /* OPTIONAL-SWET-INFO ADDR */ +); +/***@@@ END OF ERROR ***/ + +@K@FREEZE +920903226 +@K@NAME +TR_RESET +@K@INSCRIPT +RESTART_ +TNS_RESET_ +TIMER +@K@CODE +/* TIMER EVENT DESCRIPTOR STILL THERE */ + +/* INITIALIZATION OF THE TIMER-EVENT-DESCRIPTOR STILL VALID */ +NSVCI_CON_PTR->.TIM_EVD_PTR->.TIMER:= TNS_RESET_MAP; + +/* START TIMER */ +G9PX508_START_TIMER_P +( +NSVCI_CON_PTR->.TIM_EVD_PTR +); + +@K@FREEZE +924684867 +@K@NAME +TX_AUDIT +@K@INSCRIPT +FOR +AUDIT + +@K@NAME +M_BLKOACKM +@K@INSCRIPT +NS_ +BLOCK_ACK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9IBDF4_NS_LM_M) + G9IBD44_NS_PDU_DATA_OFFSET_C), +TX_EVD_PTR +); + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9IBD40_NS_LM_PDU_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBDL_HANDLE; + +IF +/* 'OTHER' ALIVE NSVC TO THIS NSEI EXISTING? */ +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR /= NULL +THEN +/* USE THIS 'OTHER' FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(0):= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; +/* NSEI TO BE USED FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; +/* NSVCI TO BE USED FOR TRANSPORT */ +ELSE +/* USE AFFECTED NSVC AGAIN FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(0):= + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; /* NSEI TO BE USED FOR +TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVCI TO BE USED FOR +TRANSPORT */ +FI; + + +/* POINTER TO PDU IN POOL-ELEMENT */ +NS_PDU_PTR:= NS_PDU_REF_M (INT(TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT) + + G9IBD44_NS_PDU_DATA_OFFSET_C); +/* OFFSET OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_OFFSET:= G9IBD44_NS_PDU_DATA_OFFSET_C; +/* LENGTH OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(NS_PDU_PTR->.G9IBDF4_PDU_TYPE) + +SIZE(NS_PDU_PTR->.D3); + +/* NOW THE POOL-ELEMENT */ +NS_PDU_PTR->.G9IBDF4_PDU_TYPE:= G9IBDR2_NS_BLOCK_ACK_C; /* PDU-TYPE */ + +NS_PDU_PTR->.D3.NSVCI_TLV.NSVCI_VAL := + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVC TO BE BLOCKED */ + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +938805885 +@K@NAME +T_RCTRUE +@K@INSCRIPT +RC += +TRUE +@K@CODE +RC:= TRUE; + +@K@FREEZE +922176328 +@K@NAME +M_AC_SBVCN +@K@INSCRIPT +G9IBME0_ +ACT_ +SIGN_BVC_C +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB512_GET_MSG_LESS_EV_DESCR_P +( +SID_GBNSVC, +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +TX_EVD_PTR->.EVENT_CMD:= G9IBME0_ACT_SIGN_BVC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBBVC_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= EVD_PTR->.KEYS.INT_ARR(0); +TX_EVD_PTR->.KEYS.INT_ARR(1):= SIGN_BVCI; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +938788211 +@K@NAME +T_RC_EOD +@K@INSCRIPT +RC += +END OF DATA + +@K@CODE +RC:= G9IBSM4_RC_END_OF_DATA; + +@K@FREEZE +921083785 +@K@NAME +T_RC_EMP +@K@INSCRIPT +RC += +EMPTY + +@K@CODE +RC:= G9IBSM4_RC_EMPTY; + +@K@FREEZE +921083757 +@K@NAME +T_RC_ERR +@K@INSCRIPT +RC += +ERROR + +@K@CODE +RC:= G9IBSM4_RC_ERROR; + +@K@FREEZE +921083731 +@K@NAME +S_UNUSED +@K@INSCRIPT +G9IBSM0_ +UNUSED +@K@CODE + + +@K@FREEZE +919416670 +@K@NAME +TA_UNBLOCK +@K@INSCRIPT +START_ +TNS_UNBLOCK_ +TIMER +@K@CODE +/* GET TIMER-EVENT DESCRIPTOR */ +G9PB513_GET_TIMER_EV_DESCR_P +( +SID_GBNSVC, +NSVCI_CON_PTR->.TIM_EVD_PTR +); + +/* INITIALIZATION OF THE TIMER-EVENT-DESCRIPTOR */ +NSVCI_CON_PTR->.TIM_EVD_PTR->.EVENT_CMD:= G9IBSE4_TO_TNS_C; +NSVCI_CON_PTR->.TIM_EVD_PTR->.EVENT_DESTINATION:= GBNSVC_HANDLE; +NSVCI_CON_PTR->.TIM_EVD_PTR->.KEYS.INT_ARR(0):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; +NSVCI_CON_PTR->.TIM_EVD_PTR->.KEYS.INT_ARR(1):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; +NSVCI_CON_PTR->.TIM_EVD_PTR->.TIMER:= TNS_UNBLOCK_MAP; + +/* START TIMER */ +G9PX508_START_TIMER_P +( +NSVCI_CON_PTR->.TIM_EVD_PTR +); + +@K@FREEZE +924686210 +@K@NAME +M_BLK_ACKM +@K@INSCRIPT +NS_ +BLOCK_ACK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9IBDF4_NS_LM_M) + G9IBD44_NS_PDU_DATA_OFFSET_C), +TX_EVD_PTR +); + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9IBD40_NS_LM_PDU_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBDL_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; /* NSEI TO BE USED FOR +TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVCI TO BE USED FOR +TRANSPORT */ +/* POINTER TO PDU IN POOL-ELEMENT */ +NS_PDU_PTR:= NS_PDU_REF_M (INT(TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT) + + G9IBD44_NS_PDU_DATA_OFFSET_C); +/* OFFSET OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_OFFSET:= G9IBD44_NS_PDU_DATA_OFFSET_C; +/* LENGTH OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(NS_PDU_PTR->.G9IBDF4_PDU_TYPE) + +SIZE(NS_PDU_PTR->.D3); + +/* NOW THE POOL-ELEMENT */ +NS_PDU_PTR->.G9IBDF4_PDU_TYPE:= G9IBDR2_NS_BLOCK_ACK_C; /* PDU-TYPE */ + +NS_PDU_PTR->.D3.NSVCI_TLV.NSVCI_VAL := + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVC TO BE BLOCKED */ + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +926348442 +@K@NAME +TA_NXTALIV +@K@INSCRIPT +DEFINE +NEW 'NEXT_ +ALIVE' +@K@CODE +IF +/* ALIVE NSVC TO THE NSEI EXISTING? */ +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR /= NULL + +THEN +/* TAKE NEXT ELEMENT IN THE LINKED LIST AS THE NEXT ALIVE NSVC */ +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR:= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.NEXT_ALV_NSVCI_CON_PTR; + +FI; + +@K@FREEZE +938801086 +@K@NAME +M_DE_CBVCN +@K@INSCRIPT +G9IBME2_ +DEACT_ +CELL_BVC_C + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB512_GET_MSG_LESS_EV_DESCR_P +( +SID_GBNSVC, +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +TX_EVD_PTR->.EVENT_CMD:= G9IBME2_DEACT_CELL_BVC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBBVC_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; +TX_EVD_PTR->.KEYS.INT_ARR(1):= EVD_PTR->.ADD_DATA(3); + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +933318270 +@K@NAME +TA_NXTRESP +@K@INSCRIPT +DEFINE +NEW 'NEXT_ +RESPONSIBLE' +@K@CODE +NSEI_CON_PTR->.NEXT_RESP_NSVCI_CON_PTR:= + NSEI_CON_PTR->.NEXT_RESP_NSVCI_CON_PTR->.NEXT_LSP_NSVCI_CON_PTR; + + +@K@FREEZE +938005006 +@K@NAME +TA_NXTSUBS +@K@INSCRIPT +DEFINE +NEW 'NEXT_ +SUBSTITUTE' +@K@CODE +NSEI_CON_PTR->.NEXT_SUBS_NSVCI_CON_PTR:= + NSEI_CON_PTR->.NEXT_SUBS_NSVCI_CON_PTR->.NEXT_UBL_NSVCI_CON_PTR; + +@K@NAME +M_BLK_O__M +@K@INSCRIPT +NS_ +BLOCK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9IBDF4_NS_LM_M) + G9IBD44_NS_PDU_DATA_OFFSET_C), +TX_EVD_PTR +); + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9IBD40_NS_LM_PDU_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBDL_HANDLE; + +IF +/* 'OTHER' ALIVE NSVC TO THIS NSEI EXISTING? */ +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR /= NULL +THEN +/* USE THIS 'OTHER' FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(0):= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; +/* NSEI TO BE USED FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= + +NSVCI_CON_PTR->.OWN_NSEI_CON_PTR->.NEXT_ALIV_NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; +/* NSVCI TO BE USED FOR TRANSPORT */ +ELSE +/* USE AFFECTED NSVC AGAIN FOR TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(0):= + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; /* NSEI TO BE USED FOR +TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVCI TO BE USED FOR +TRANSPORT */ +FI; + + +/* POINTER TO PDU IN POOL-ELEMENT */ +NS_PDU_PTR:= NS_PDU_REF_M (INT(TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT) + + G9IBD44_NS_PDU_DATA_OFFSET_C); +/* OFFSET OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_OFFSET:= G9IBD44_NS_PDU_DATA_OFFSET_C; +/* LENGTH OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(NS_PDU_PTR->.G9IBDF4_PDU_TYPE) + +SIZE(NS_PDU_PTR->.D2); + + +/* NOW THE POOL-ELEMENT */ +NS_PDU_PTR->.G9IBDF4_PDU_TYPE:= G9IBDR1_NS_BLOCK_C; /* PDU-TYPE */ + +NS_PDU_PTR->.D2.CAUSE_TLV.CAUSE_VAL:= + G9IBBA2_NS_TRANSIT_NETWORK_FAILURE; /* CAUSE FOR BLOCK */ +NS_PDU_PTR->.D2.NSVCI_TLV.NSVCI_VAL := + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVC TO BE BLOCKED */ + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@TEXT +GSM 8.16 CHAP. 7.2: +THE NS-BLOCK-PDU MAY BE SENT IN ANY ALIVE +(BLOCKED OR UNBLOCKED) NS-VC... +@K@FREEZE +938803215 +@K@NAME +M_DE_SBVCN +@K@INSCRIPT +G9IBME1_ +DEACT_ +SIGN_BVC_C +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB512_GET_MSG_LESS_EV_DESCR_P +( +SID_GBNSVC, +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +TX_EVD_PTR->.EVENT_CMD:= G9IBME1_DEACT_SIGN_BVC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBBVC_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= EVD_PTR->.KEYS.INT_ARR(0); +TX_EVD_PTR->.KEYS.INT_ARR(1):= SIGN_BVCI; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +938788201 +@K@NAME +M_OAME401M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +RESET_PDU + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSE */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSE; +OAM_MSG_PTR->.HANDLED_OBJECT.NSE_ID:= EVD_PTR->.KEYS.INT_ARR(0); /* +USED NSEI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_RESET_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.ADD_DATA(0); /* AFFECTED NSEI (FROM PDU) */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.ADD_DATA(1); /* AFFECTED NSVCI (FROM PDU) */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +935766108 +@K@NAME +M_OAME402M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +RESET_PDU + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= EVD_PTR->.KEYS.INT_ARR(1); /* +USED NSVCI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_RESET_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.ADD_DATA(0); /* NSEI FROM PDU */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.ADD_DATA(1); /* NSVCI FROM PDU */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +935766407 +@K@NAME +M_OAME411M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +RESET_ACK_PDU + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSE */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSE; +OAM_MSG_PTR->.HANDLED_OBJECT.NSE_ID:= EVD_PTR->.KEYS.INT_ARR(0); /* +USED NSEI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_RESET_ACK_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.ADD_DATA(0); /* NSEI FROM PDU */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.ADD_DATA(1); /* NSVCI FROM PDU */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +935767332 +@K@NAME +M_OAME412M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +RESET_ACK_PDU + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= EVD_PTR->.KEYS.INT_ARR(1); /* +USED NSVCI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_RESET_ACK_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.ADD_DATA(0); /* NSEI FROM PDU */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.ADD_DATA(1); /* NSVCI FROM PDU */ + + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +935767189 +@K@NAME +C_CON +@K@INSCRIPT +RC_DB +@K@CODE +RC_DB + +@K@FREEZE +922176673 +@K@NAME +M_BLK____M +@K@INSCRIPT +NS_ +BLOCK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9IBDF4_NS_LM_M) + G9IBD44_NS_PDU_DATA_OFFSET_C), +TX_EVD_PTR +); + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9IBD40_NS_LM_PDU_C; +TX_EVD_PTR->.EVENT_DESTINATION:= GBDL_HANDLE; +TX_EVD_PTR->.KEYS.INT_ARR(0):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSEI; /* NSEI TO BE USED FOR +TRANSPORT */ +TX_EVD_PTR->.KEYS.INT_ARR(1):= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVCI TO BE USED FOR +TRANSPORT */ +/* POINTER TO PDU IN POOL-ELEMENT */ +NS_PDU_PTR:= NS_PDU_REF_M (INT(TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT) + + G9IBD44_NS_PDU_DATA_OFFSET_C); +/* OFFSET OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_OFFSET:= G9IBD44_NS_PDU_DATA_OFFSET_C; +/* LENGTH OF THE PDU IN POOL-ELEMENT */ +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(NS_PDU_PTR->.G9IBDF4_PDU_TYPE) + +SIZE(NS_PDU_PTR->.D2); + + +/* NOW THE POOL-ELEMENT */ +NS_PDU_PTR->.G9IBDF4_PDU_TYPE:= G9IBDR1_NS_BLOCK_C; /* PDU-TYPE */ + +NS_PDU_PTR->.D2.CAUSE_TLV.CAUSE_VAL:= + G9IBBA2_NS_OAM_INTERVENTION; /* CAUSE FOR BLOCK */ +NS_PDU_PTR->.D2.NSVCI_TLV.NSVCI_VAL := + NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; /* NSVC TO BE BLOCKED */ + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@TEXT +GSM 8.16 CHAP. 7.2: +THE NS-BLOCK-PDU MAY BE SENT IN ANY ALIVE +(BLOCKED OR UNBLOCKED) NS-VC... +@K@FREEZE +926348613 +@K@NAME +S_BLOCKED +@K@INSCRIPT +G9IBSM0_ +BLOCKED +@K@CODE + + +@K@FREEZE +922176496 +@K@NAME +D_CON +@K@INSCRIPT +CONTEXT +GOT +@K@CODE +RC_DB = G9IBSR0_RC_OK + +@K@FREEZE +921772339 +@K@NAME +M_OAME901M +@K@INSCRIPT +ERROR_MESSAGE: +OPERATIONAL_STATE_CHANGE +UBL->BLK +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = OPERATIONAL_STATE_CHANGE */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_OPERATIONAL_STATE_CHANGE; +/* ADDITIONAL_OPERATIONAL_STATE_INFO */ +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_OLD:= + G9OC101_UNBLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_OLD:= + G9OC102_ENABLED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_NEW:= + G9OC102_ENABLED; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +925970975 +@K@NAME +M_OAME902M +@K@INSCRIPT +ERROR_MESSAGE: +OPERATIONAL_STATE_CHANGE +UBL->BLK + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = OPERATIONAL_STATE_CHANGE */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_OPERATIONAL_STATE_CHANGE; +/* ADDITIONAL_OPERATIONAL_STATE_INFO */ +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_OLD:= + G9OC101_UNBLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_OLD:= + G9OC102_ENABLED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_NEW:= + G9OC102_DISABLED; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +925970987 +@K@NAME +M_OAME10SM +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_BEGIN_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_BEGIN_NS_ALIVE_TEST*/ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_BEGIN_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + TRUE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@NAME +M_OAME911M +@K@INSCRIPT +ERROR_MESSAGE: +OPERATIONAL_STATE_CHANGE +BLK->UBL +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = OPERATIONAL_STATE_CHANGE */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_OPERATIONAL_STATE_CHANGE; +/* ADDITIONAL_OPERATIONAL_STATE_INFO */ +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.OPER_STATE_NEW:= + G9OC101_UNBLOCKED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_OLD:= + G9OC102_ENABLED; +OAM_MSG_PTR->.ADDITIONAL_OPERATIONAL_STATE_INFO.ADMIN_STATE_NEW:= + G9OC102_ENABLED; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +925970996 +@K@NAME +M_OAME20SM +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_END_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_END_NS_ALIVE_TEST */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_END_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + TRUE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@NAME +M_OAME10_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_BEGIN_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_BEGIN_NS_ALIVE_TEST*/ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_BEGIN_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + TRUE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443813 +@K@NAME +D_SEM +@K@INSCRIPT +CALL_SEM += +TRUE +@K@CODE +CALL_SEM = TRUE + +@K@FREEZE +922176624 +@K@NAME +D_N_0 +@K@INSCRIPT +N = 0 + +@K@CODE +NSVCI_CON_PTR->.N = 0 + +@K@FREEZE +921511000 +@K@NAME +M_OAME12_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_BEGIN_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_BEGIN_NS_ALIVE_TEST*/ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_BEGIN_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + FALSE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_ALIVE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443829 +@K@NAME +M_OAME21_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_END_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_END_NS_ALIVE_TEST */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_END_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + TRUE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + FALSE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443856 +@K@NAME +M_OAME13_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_BEGIN_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_BEGIN_NS_ALIVE_TEST*/ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_BEGIN_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + FALSE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_UNBLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_ALIVE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443838 +@K@NAME +M_OAME22_M +@K@INSCRIPT +ERROR_MESSAGE: +ALARM_END_NS_ALIVE_TEST +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = ALARM_END_NS_ALIVE_TEST */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ALARM_END_NS_ALIVE_TEST; +/* ADDITIONAL_ALARM_INFO */ +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.ADMINISTRATIVE_STATE_CHANGED:= + FALSE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_OLD:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.OPER_STATE_NEW:= + G9OC101_BLOCKED; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_OLD:= + G9OC103_DEAD; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.AVAIL_STATE_NEW:= + G9OC103_ALIVE; +OAM_MSG_PTR->.ADDITIONAL_ALARM_INFO.CONFIGURATION_OF_NSVC:= + TRUE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922443864 +@K@NAME +M_OAME30_M +@K@INSCRIPT +ERROR_MESSAGE: +NO_ANSWER_FORM_BSS +RESET_PROCEDURE + + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = NO_ANSWER_FROM_BSS */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_NO_ANSWER_FROM_BSS; +/* INITIATED_PROCEDURE */ +OAM_MSG_PTR->.INITIATED_PROCEDURE:= + G9OC123_RESET_PROCEDURE; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922175973 +@K@NAME +M_OAME31_M +@K@INSCRIPT +ERROR_MESSAGE: +NO_ANSWER_FROM_BSS +BLOCK_PROCEDURE + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = NO_ANSWER_FROM_BSS */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_NO_ANSWER_FROM_BSS; +/* INITIATED_PROCEDURE */ +OAM_MSG_PTR->.INITIATED_PROCEDURE:= + G9OC123_BLOCK_PROCEDURE; + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922175976 +@K@NAME +M_OAME32_M +@K@INSCRIPT +ERROR_MESSAGE: +NO_ANSWER_FROM_BSS +UNBLOCK_PROCEDURE + +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR_CAUSE = NO_ANSWER_FROM_BSS */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_NO_ANSWER_FROM_BSS; +/* INITIATED_PROCEDURE */ +OAM_MSG_PTR->.INITIATED_PROCEDURE:= + G9OC123_UNBLOCK_PROCEDURE; + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +922175980 +@K@NAME +M_OAME42_M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +BLOCK_PDU +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= EVD_PTR->.ADD_DATA(1); /* +USED NSVCI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_BLOCK_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.KEYS.INT_ARR(0); /* AFFECTED NSEI (FROM PDU) */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.KEYS.INT_ARR(1); /* AFFECTED NSVCI (FROM PDU) */ + + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +934296141 +@K@NAME +M_OAME50_M +@K@INSCRIPT +ERROR_MESSAGE: +STATUS_PDU_CONTAINS_ERROR_INFO +RECEIVED +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= +NSVCI_CON_PTR->.DBMS.NSVC_INSTANCE.NSVCI; + +/* ERROR-CAUSE = STATUS_PDU_CONTAINS_ERROR_INFO */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_STATUS_PDU_CONTAINS_ERROR_INFO; +/* ADDITIONAL_STATUS_PDU_INFO */ +INT_CAUSE_PTR.INT_PTR:= ADDR(EVD_PTR->.ADD_DATA(2)); +OAM_MSG_PTR->.ADDITIONAL_STATUS_PDU_INFO:= + INT_CAUSE_PTR.CAUSE_PTR->; /* CAUSE */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@TEXT +NICHT OK + +@K@FREEZE +934298924 +@K@NAME +M_OAME43_M +@K@INSCRIPT +ERROR_MESSAGE: +ERRONOUS_PDU +BLOCK_ACK_PDU +@K@CODE +/* GETTING THE EVENT DESCRIPTOR */ +G9PB511_GET_MSG_BOUND_EV_DESCR_P +( +SID_GBNSVC, +(SIZE(G9OC109_REPORTED_EVENT_STR_M)), +TX_EVD_PTR +); + + +/* COMPOSING THE EVENT */ +/* FIRST THE DESCRIPTOR */ +TX_EVD_PTR->.EVENT_CMD:= G9PX040_SEND_MBC_C; +TX_EVD_PTR->.EVENT_DESTINATION:= RXTX_HANDLE; +TX_EVD_PTR->.KEYS.UBI_INDEX:= OAM_UBI_INDEX; +TX_EVD_PTR->.BOUND.DATA_OFFSET:= 0; +TX_EVD_PTR->.BOUND.DATA_LENGTH:= SIZE(G9OC109_REPORTED_EVENT_STR_M); + +/* NOW THE POOL-ELEMENT */ +/* INITIALIZATION OF THE POINTER WITH THE POOL-ELEMENT-START */ +OAM_MSG_PTR:= OAM_MSG_PTR_M (TX_EVD_PTR->.BOUND.PTR_TO_POOL_ELEMENT); + +/* COMPOSING THE MESSAGE */ +/* HANDLED OBJECT = AFFECTED INSTANCE, TYPE NSVC */ +OAM_MSG_PTR->.HANDLED_OBJECT.OBJECT_TYPE:= G9OC104_NSVC; +OAM_MSG_PTR->.HANDLED_OBJECT.NSVC_ID:= EVD_PTR->.ADD_DATA(1); /* +USED NSVCI (FROM ECI) */ + +/* ERROR-CAUSE = ERRONEOUS_PDU */ +OAM_MSG_PTR->.ERROR_CAUSE:= G9OC108_ERRONEOUS_PDU; +/* ADDITIONAL_PDU_INFO */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_PDU_TYPE:= + G9OC124_BLOCK_ACK_PDU; +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSEI:= + EVD_PTR->.KEYS.INT_ARR(0); /* AFFECTED NSEI (FROM PDU) */ +OAM_MSG_PTR->.ADDITIONAL_PDU_INFO.G9OC120_REPORTED_NSVC:= + EVD_PTR->.KEYS.INT_ARR(1); /* AFFECTED NSVCI (FROM PDU) */ + + + +/* SENDING */ +G9PX503_POST_EVENT_P(TX_EVD_PTR); + +@K@FREEZE +934297710 diff --git a/test/getlnhd.awk b/test/getlnhd.awk new file mode 100644 index 0000000..f0f801b --- /dev/null +++ b/test/getlnhd.awk @@ -0,0 +1,10 @@ +BEGIN { pipe = "cat <<EOF\n" + pipe = pipe "select * from user\n" + pipe = pipe " where Name = 'O\\'Donell'\n" + pipe = pipe "EOF\n" + + while ((pipe | getline) > 0) + print + + exit 0 +} diff --git a/test/getlnhd.ok b/test/getlnhd.ok new file mode 100644 index 0000000..d8cb453 --- /dev/null +++ b/test/getlnhd.ok @@ -0,0 +1,2 @@ +select * from user + where Name = 'O\'Donell' diff --git a/test/getnr2tb.awk b/test/getnr2tb.awk new file mode 100644 index 0000000..204acf4 --- /dev/null +++ b/test/getnr2tb.awk @@ -0,0 +1,111 @@ +#From vp@dmat.uevora.pt Thu Jun 18 09:10 EDT 1998 +#Received: from mescaline.gnu.org (we-refuse-to-spy-on-our-users@mescaline.gnu.org [158.121.106.21]) by cssun.mathcs.emory.edu (8.7.5/8.6.9-940818.01cssun) with ESMTP id JAA23649 for <arnold@mathcs.emory.edu>; Thu, 18 Jun 1998 09:10:54 -0400 (EDT) +#Received: from khromeleque.dmat.uevora.pt by mescaline.gnu.org (8.8.5/8.6.12GNU) with ESMTP id JAA21732 for <arnold@gnu.ai.mit.edu>; Thu, 18 Jun 1998 09:11:19 -0400 +#Received: from khromeleque.dmat.uevora.pt (vp@localhost [127.0.0.1]) +# by khromeleque.dmat.uevora.pt (8.8.8/8.8.8/Debian/GNU) with ESMTP id OAA11817 +# for <arnold@gnu.ai.mit.edu>; Thu, 18 Jun 1998 14:13:57 +0100 +#Message-Id: <199806181313.OAA11817@khromeleque.dmat.uevora.pt> +#To: arnold@gnu.org +#Subject: concatenation bug in gawk 3.0.3 +#Date: Thu, 18 Jun 1998 14:13:57 +0200 +#From: Vasco Pedro <vp@dmat.uevora.pt> +#Content-Type: text +#Content-Length: 2285 +#Status: RO +# +#Hi, +# +#The gawk program '{print NR " " 10/NR}' will print: +# +#1 10 +#5 5 +#3 3.33333 +#2 2.5 +#2 2 +#1 1.66667 +# +#instead of the correct: +# +#1 10 +#2 5 +#3 3.33333 +#4 2.5 +#5 2 +#6 1.66667 +# +#You'll notice, on the incorrect output, that the first column is +#the first digit of the second. +# +#I think the problem comes from the way builtin variables are handled. +#Since the items to be concatenated are processed in reverse order and +#the return value of tree_eval(``NR'') is a pointer to the value part +#of `NR_node', the `unref()' of `NR_node' due to its second occurrence +#will leave a dangling pointer in `strlist'. The reason that it doesn't +#reuse the freed space with objects of the same type. (Using Electric +#Fence with EF_PROTECT_FREE set confirms that freed space is being +#accessed.) +# +#The enclosed patch (hack would be a better word to describe it) is +#all I could come up with. With it installed, things seem to work ok, +#but I doubt this is the correct way to do it. (If I treated the +#case for `Node_field_spec' as the I did others, `make check' would +#fail in several places.) +# +#Regards, +#vasco +# +#*** eval.c~ Tue May 6 21:39:55 1997 +#--- eval.c Thu Jun 18 13:39:25 1998 +#*************** +#*** 685,697 **** +# return func_call(tree->rnode, tree->lnode); +# +# /* unary operations */ +# case Node_NR: +# case Node_FNR: +# case Node_NF: +# case Node_FIELDWIDTHS: +# case Node_FS: +# case Node_RS: +#- case Node_field_spec: +# case Node_subscript: +# case Node_IGNORECASE: +# case Node_OFS: +#--- 685,700 ---- +# return func_call(tree->rnode, tree->lnode); +# +# /* unary operations */ +#+ case Node_field_spec: +#+ lhs = get_lhs(tree, (Func_ptr *) NULL); +#+ return *lhs; +#+ +# case Node_NR: +# case Node_FNR: +# case Node_NF: +# case Node_FIELDWIDTHS: +# case Node_FS: +# case Node_RS: +# case Node_subscript: +# case Node_IGNORECASE: +# case Node_OFS: +#*************** +#*** 699,705 **** +# case Node_OFMT: +# case Node_CONVFMT: +# lhs = get_lhs(tree, (Func_ptr *) NULL); +#! return *lhs; +# +# case Node_var_array: +# fatal("attempt to use array `%s' in a scalar context", +#--- 702,710 ---- +# case Node_OFMT: +# case Node_CONVFMT: +# lhs = get_lhs(tree, (Func_ptr *) NULL); +#! r = dupnode(*lhs); +#! r->flags |= TEMP; +#! return r; +# +# case Node_var_array: +# fatal("attempt to use array `%s' in a scalar context", +# +{ print NR " " 10/NR } diff --git a/test/getnr2tb.in b/test/getnr2tb.in new file mode 100644 index 0000000..f985857 --- /dev/null +++ b/test/getnr2tb.in @@ -0,0 +1,6 @@ +line 1 +line 2 +line 3 +line 4 +line 5 +line 6 diff --git a/test/getnr2tb.ok b/test/getnr2tb.ok new file mode 100644 index 0000000..7b40e8d --- /dev/null +++ b/test/getnr2tb.ok @@ -0,0 +1,6 @@ +1 10 +2 5 +3 3.33333 +4 2.5 +5 2 +6 1.66667 diff --git a/test/getnr2tm.awk b/test/getnr2tm.awk new file mode 100644 index 0000000..dfe377a --- /dev/null +++ b/test/getnr2tm.awk @@ -0,0 +1,75 @@ +#From dhw@gamgee.acad.emich.edu Sat Oct 31 22:54:07 1998 +#Return-Path: <dhw@gamgee.acad.emich.edu> +#Received: from cssun.mathcs.emory.edu (cssun.mathcs.emory.edu [170.140.150.1]) +# by amx.netvision.net.il (8.9.0.Beta5/8.8.6) with ESMTP id HAA08891 +# for <arobbins@netvision.net.il>; Sat, 31 Oct 1998 07:14:07 +0200 (IST) +#Received: from mescaline.gnu.org (we-refuse-to-spy-on-our-users@mescaline.gnu.org [158.121.106.21]) by cssun.mathcs.emory.edu (8.7.5/8.6.9-940818.01cssun) with ESMTP id AAA14947 for <arnold@mathcs.emory.edu>; Sat, 31 Oct 1998 00:14:32 -0500 (EST) +#Received: from gamgee.acad.emich.edu (gamgee.acad.emich.edu [164.76.102.76]) +# by mescaline.gnu.org (8.9.1a/8.9.1) with SMTP id AAA20645 +# for <arnold@gnu.ai.mit.edu>; Sat, 31 Oct 1998 00:17:54 -0500 +#Received: by gamgee.acad.emich.edu (Smail3.1.29.1 #57) +# id m0zZUKY-000IDSC; Sat, 31 Oct 98 00:16 CST +#Message-Id: <m0zZUKY-000IDSC@gamgee.acad.emich.edu> +#Date: Sat, 31 Oct 98 00:16 CST +#From: dhw@gamgee.acad.emich.edu (David H. West) +#To: bug-gnu-utils@gnu.org +#Subject: gawk 3.0.3 bug report +#Cc: arnold@gnu.org +#X-UIDL: 7474b825cff989adf38f13883d84fdd7 +#Status: RO +# +#gawk version: 3.03 +#System used: Linux, kernel 2.0.28, libc 5.4.33, AMD K5PR133 (i586 clone) +#Remark: There seems to be at least one bug shown by the demo below. +# There may also be a Dark Corner involving the value of NR in an +# END block, a topic on which the info file is silent. In gawk +# 3.0.3, NR often seems to have the least-surprise value in an +# END block, but sometimes it doesn't - see example below. +#Problem descr: the log below shows a case where: +# a) (this may be a red herring) the output of the gawk script +# is different depending on whether its input file is named on +# the command line or catted to stdin, without any use of the +# legitimate means which could produce this effect. +# b) NR is clearly getting clobbered; I have tried to simplify +# the 19-line script "awkerr1" below, but seemingly unrelated +# changes, like shortening constant strings which appear only in +# print statements, or removing unexecuted or irrelevant code, +# cause the clobbering to go away. Some previous (larger) +# versions of this code would clobber NR also when reading from +# stdin, but I thought you'd prefer a shorter example :-). +#Reproduce-By: using the gawk script "awkerr1", the contents of +# which appear in the transcript below as the output of the +# command "cat awkerr1". Comments following # were added +# to the transcript later as explanation. +#---------------------------------------------- Script started on Fri +#Oct 30 20:04:16 1998 chipmunk:/ram0# ls -l a1 awkerr1 -rw-r--r-- 1 +#root root 2 Oct 30 18:42 a1 -rwxr-xr-x 1 root root +#389 Oct 30 19:54 awkerr1 chipmunk:/ram0# cat a1 #a1 contains +#one printable char and a newline a chipmunk:/ram0# od -c xc a1 +#0000000 0a61 +# a \n +#0000002 chipmunk:/ram0# cat a1 | awkerr1 #no surprises here +#1 lines in 1 sec: 1 lines/sec; nlines=1 chipmunk:/ram0# awkerr1 a1 È +#lines in 1 sec: 1 lines/sec; nlines=1 #?! first char is an uppercase +#E-grave chipmunk:/ram0# awkerr1 a1 | od -N1 -xc 0000000 00c8 +# 310 \0 +#0000001 chipmunk:/ram0# cat awkerr1 #the apparent ^M's are not +#actually in the file +#!/usr/bin/awk -f +function process(w) { + if(w in ws) { + printf " : found\n"; lc[p " " w]++; rc[w " " n]++; } + } +BEGIN {IGNORECASE=1; + } +/^/ {if(NR % 10 ==0)print "processing line " NR; + process($1); nlines++; + } +END {p=w; w=n; n=""; + if(w)process(w); t=1; print NR " lines in " t " sec: " NR+0 " lines/sec; nlines=" nlines; + } +#chipmunk:/ram0# exit Script done on Fri Oct 30 20:07:31 1998 +#--------------------------------------------- +# +#-David West dhw@gamgee.acad.emich.edu +# diff --git a/test/getnr2tm.in b/test/getnr2tm.in new file mode 100644 index 0000000..7898192 --- /dev/null +++ b/test/getnr2tm.in @@ -0,0 +1 @@ +a diff --git a/test/getnr2tm.ok b/test/getnr2tm.ok new file mode 100644 index 0000000..d63fca0 --- /dev/null +++ b/test/getnr2tm.ok @@ -0,0 +1 @@ +1 lines in 1 sec: 1 lines/sec; nlines=1 diff --git a/test/gnuops2.awk b/test/gnuops2.awk new file mode 100644 index 0000000..1b0d4d7 --- /dev/null +++ b/test/gnuops2.awk @@ -0,0 +1,72 @@ +# From Servatius.Brandt@fujitsu-siemens.com Fri Dec 1 13:44:48 2000 +# Received: from mail.actcom.co.il +# by localhost with POP3 (fetchmail-5.1.0) +# for arnold@localhost (single-drop); Fri, 01 Dec 2000 13:44:48 +0200 (IST) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Fri Dec 1 13:44:10 2000) +# X-From_: Servatius.Brandt@fujitsu-siemens.com Fri Dec 1 13:11:23 2000 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.9.1a/actcom-0.2) id NAA11033 for <arobbins@actcom.co.il>; +# Fri, 1 Dec 2000 13:11:21 +0200 (EET) +# (rfc931-sender: lmail.actcom.co.il [192.114.47.13]) +# Received: from billohost.com (10-209.196.35.dellhost.com [209.196.35.10] (may be forged)) +# by lmail.actcom.co.il (8.9.3/8.9.1) with ESMTP id NAA30286 +# for <arobbins@actcom.co.il>; Fri, 1 Dec 2000 13:12:25 +0200 +# Received: from fencepost.gnu.org (we-refuse-to-spy-on-our-users@fencepost.gnu.org [199.232.76.164]) +# by billohost.com (8.9.3/8.9.3) with ESMTP id GAA26074 +# for <arnold@skeeve.com>; Fri, 1 Dec 2000 06:09:08 -0500 +# Received: from energy.pdb.sbs.de ([192.109.2.19]) +# by fencepost.gnu.org with esmtp (Exim 3.16 #1 (Debian)) +# id 141o5z-0000RJ-00; Fri, 01 Dec 2000 06:11:16 -0500 +# Received: from trulli.pdb.fsc.net ([172.25.96.20]) +# by energy.pdb.sbs.de (8.9.3/8.9.3) with ESMTP id MAA32687; +# Fri, 1 Dec 2000 12:11:13 +0100 +# Received: from pdbrd02e.pdb.fsc.net (pdbrd02e.pdb.fsc.net [172.25.96.15]) +# by trulli.pdb.fsc.net (8.9.3/8.9.3) with ESMTP id MAA27384; +# Fri, 1 Dec 2000 12:11:13 +0100 +# Received: from Fujitsu-Siemens.com (pgtd1181.mch.fsc.net [172.25.126.152]) by pdbrd02e.pdb.fsc.net with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21) +# id XC2QLXS2; Fri, 1 Dec 2000 12:11:13 +0100 +# Message-ID: <3A2786CF.1000903@Fujitsu-Siemens.com> +# Date: Fri, 01 Dec 2000 12:09:03 +0100 +# From: Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com> +# Organization: Fujitsu Siemens Computers +# User-Agent: Mozilla/5.0 (Windows; U; Win95; en-US; m18) Gecko/20001108 Netscape6/6.0 +# X-Accept-Language: de, en +# MIME-Version: 1.0 +# To: bug-gnu-utils@gnu.org +# CC: arnold@gnu.org +# Subject: Bug Report: \y, \B, \<, \> do not work with _ +# Content-Type: text/plain; charset=us-ascii; format=flowed +# Content-Transfer-Encoding: 7bit +# Status: R +# +# Hello, +# +# The \y, \B, \<, \> patterns do not regard _ as +# word-constituent (unlike \w and \W, which do). +# +# Operating system: ReliantUNIX-Y 5.44 C2001 RM600 R10000 +# Version of gawk: 3.0.6 +# C-Compiler: Fujitsu Siemens Computers CDS++ V2.0C0004 +# +# Test program: +# +#!/usr/local/bin/gawk -f + +BEGIN { + print match("X _abc Y", /\<_abc/) # bug + print match("X _abc Y", /\y_abc/) # bug + print match("X abc_ Y", /abc_\>/) # bug + print match("X abc_ Y", /abc_\y/) # bug + print match("X abc_def Y", /abc_\Bdef/) # bug + + print match("X a_c Y", /a\wc/) # ok! + print match("X a.c Y", /a\Wc/) # ok! + exit +} +# +# +# Regards, +# Servatius Brandt +# +# diff --git a/test/gnuops2.ok b/test/gnuops2.ok new file mode 100644 index 0000000..aa0ecae --- /dev/null +++ b/test/gnuops2.ok @@ -0,0 +1,7 @@ +3 +3 +3 +3 +3 +3 +3 diff --git a/test/gnuops3.awk b/test/gnuops3.awk new file mode 100644 index 0000000..bcd40aa --- /dev/null +++ b/test/gnuops3.awk @@ -0,0 +1,14 @@ +# Mon Jan 31 09:57:30 IST 2005 +# test both dfa and regex matchers on \B +# tests from Stepan Kasal, kasal@ucw.cz +BEGIN { + + print (" " ~ / \B /) # test dfa matcher + print ("a b" ~ /\B/) + print (" b" ~ /\B/) + print ("a " ~ /\B/) + + a = " " + gsub(/\B/, "x", a) # test regex matcher + print a +} diff --git a/test/gnuops3.ok b/test/gnuops3.ok new file mode 100644 index 0000000..27db307 --- /dev/null +++ b/test/gnuops3.ok @@ -0,0 +1,5 @@ +1 +0 +1 +1 +x x x diff --git a/test/gnureops.awk b/test/gnureops.awk new file mode 100644 index 0000000..15b9b84 --- /dev/null +++ b/test/gnureops.awk @@ -0,0 +1,45 @@ +# test the gnu regexp ops + +BEGIN { + if ("a rat is here" ~ /\yrat/) print "test 1 ok (\\y)" + else print "test 1 failed (\\y)" + if ("a rat is here" ~ /rat\y/) print "test 2 ok (\\y)" + else print "test 2 failed (\\y)" + if ("what a brat" !~ /\yrat/) print "test 3 ok (\\y)" + else print "test 3 failed (\\y)" + + if ("in the crate" ~ /\Brat/) print "test 4 ok (\\B)" + else print "test 4 failed (\\B)" + if ("a rat" !~ /\Brat/) print "test 5 ok (\\B)" + else print "test 5 failed (\\B)" + + if ("a word" ~ /\<word/) print "test 6 ok (\\<)" + else print "test 6 failed (\\<)" + if ("foreword" !~ /\<word/) print "test 7 ok (\\<)" + else print "test 7 failed (\\<)" + + if ("a word" ~ /word\>/) print "test 8 ok (\\>)" + else print "test 8 failed (\\\\>)" + if ("wordy" !~ /word\>/) print "test 9 ok (\\>)" + else print "test 9 failed (\\>)" + + if ("a" ~ /\w/) print "test 10 ok (\\w)" + else print "test 10 failed (\\\\w)" + if ("+" !~ /\w/) print "test 11 ok (\\w)" + else print "test 11 failed (\\w)" + + if ("a" !~ /\W/) print "test 12 ok (\\W)" + else print "test 12 failed (\\W)" + if ("+" ~ /\W/) print "test 13 ok (\\W)" + else print "test 13 failed (\\W)" + + if ("a" ~ /\`a/) print "test 14 ok (\\`)" + else print "test 14 failed (\\`)" + if ("b" !~ /\`a/) print "test 15 ok (\\`)" + else print "test 15 failed (\\`)" + + if ("a" ~ /a\'/) print "test 16 ok (\\')" + else print "test 16 failed (\\')" + if ("b" !~ /a\'/) print "test 17 ok (\\')" + else print "test 17 failed (\\')" +} diff --git a/test/gnureops.ok b/test/gnureops.ok new file mode 100644 index 0000000..0fb5f50 --- /dev/null +++ b/test/gnureops.ok @@ -0,0 +1,17 @@ +test 1 ok (\y) +test 2 ok (\y) +test 3 ok (\y) +test 4 ok (\B) +test 5 ok (\B) +test 6 ok (\<) +test 7 ok (\<) +test 8 ok (\>) +test 9 ok (\>) +test 10 ok (\w) +test 11 ok (\w) +test 12 ok (\W) +test 13 ok (\W) +test 14 ok (\`) +test 15 ok (\`) +test 16 ok (\') +test 17 ok (\') diff --git a/test/gsubasgn.awk b/test/gsubasgn.awk new file mode 100644 index 0000000..f0b7701 --- /dev/null +++ b/test/gsubasgn.awk @@ -0,0 +1,13 @@ +# tests for assigning to a function within that function + +#1 - should be bad +function test1 (r) { gsub(r, "x", test1) } +BEGIN { test1("") } + +#2 - should be bad +function test2 () { gsub(/a/, "x", test2) } +BEGIN { test2() } + +#3 - should be ok +function test3 (r) { gsub(/a/, "x", r) } +BEGIN { test3("") } diff --git a/test/gsubasgn.ok b/test/gsubasgn.ok new file mode 100644 index 0000000..8817c36 --- /dev/null +++ b/test/gsubasgn.ok @@ -0,0 +1,5 @@ +gawk: gsubasgn.awk:4: function test1 (r) { gsub(r, "x", test1) } +gawk: gsubasgn.awk:4: ^ gsub third parameter is not a changeable object +gawk: gsubasgn.awk:8: function test2 () { gsub(/a/, "x", test2) } +gawk: gsubasgn.awk:8: ^ gsub third parameter is not a changeable object +EXIT CODE: 1 diff --git a/test/gsubtest.awk b/test/gsubtest.awk new file mode 100644 index 0000000..1d6fd1c --- /dev/null +++ b/test/gsubtest.awk @@ -0,0 +1,9 @@ +BEGIN { + str = "abc"; print gsub("b+", "FOO", str), str + str = "abc"; print gsub("x*", "X", str), str + str = "abc"; print gsub("b*", "X", str), str + str = "abc"; print gsub("c", "X", str), str + str = "abc"; print gsub("c+", "X", str), str + str = "abc"; print gsub("x*$", "X", str), str + str = "abc"; print gsub("b|$", "X", str), str +} diff --git a/test/gsubtest.ok b/test/gsubtest.ok new file mode 100644 index 0000000..f909d0d --- /dev/null +++ b/test/gsubtest.ok @@ -0,0 +1,7 @@ +1 aFOOc +4 XaXbXcX +3 XaXcX +1 abX +1 abX +1 abcX +2 aXcX diff --git a/test/gsubtst2.awk b/test/gsubtst2.awk new file mode 100644 index 0000000..fafbf96 --- /dev/null +++ b/test/gsubtst2.awk @@ -0,0 +1,241 @@ +#From arnold Thu May 9 17:27:03 2002 +#Return-Path: <arnold@skeeve.com> +#Received: (from arnold@localhost) +# by skeeve.com (8.11.6/8.11.6) id g49ER3K27925 +# for arnold; Thu, 9 May 2002 17:27:03 +0300 +#Date: Thu, 9 May 2002 17:27:03 +0300 +#From: Aharon Robbins <arnold@skeeve.com> +#Message-Id: <200205091427.g49ER3K27925@skeeve.com> +#To: arnold@skeeve.com +#Subject: fixme +#X-SpamBouncer: 1.4 (10/07/01) +#X-SBRule: Pattern Match (Other Patterns) (Score: 4850) +#X-SBRule: Pattern Match (Spam Phone #) (Score: 0) +#X-SBClass: Blocked +#Status: O +# +#Path: ord-read.news.verio.net!dfw-artgen!iad-peer.news.verio.net!news.verio.net!fu-berlin.de!uni-berlin.de!host213-120-137-48.in-addr.btopenworld.COM!not-for-mail +#From: laura@madonnaweb.com (laura fairhead) +#Newsgroups: comp.lang.awk +#Subject: bug in gawk3.1.0 regex code +#Date: Wed, 08 May 2002 23:31:40 GMT +#Organization: that'll be the daewooo :) +#Lines: 211 +#Message-ID: <3cd9b0f7.29675926@NEWS.CIS.DFN.DE> +#Reply-To: laura@madonnaweb.com +#NNTP-Posting-Host: host213-120-137-48.in-addr.btopenworld.com (213.120.137.48) +#X-Trace: fu-berlin.de 1020900891 18168286 213.120.137.48 (16 [53286]) +#X-Newsreader: Forte Free Agent 1.21/32.243 +#Xref: dfw-artgen comp.lang.awk:13059 +# +# +#I believe I've just found a bug in gawk3.1.0 implementation of +#extended regular expressions. It seems to be down to the alternation +#operator; when using an end anchor '$' as a subexpression in an +#alternation and the entire matched RE is a nul-string it fails +#to match the end of string, for example; +# +#gsub(/$|2/,"x") +#print +# +#input = 12345 +#expected output = 1x345x +#actual output = 1x345 +# +#The start anchor '^' always works as expected; +# +#gsub(/^|2/,"x") +#print +# +#input = 12345 +#expected output = x1x345 +#actual output = x1x345 +# +#This was with POSIX compliance enabled althought that doesn't +#effect the result. +# +#I checked on gawk3.0.6 and got exactly the same results however +#gawk2.15.6 gives the expected results. +# +#I'm about to post a bug report about this into gnu.utils.bug +#but I thought I'd post it here first in case anyone has +#any input/comments/whatever .... +# +#Complete test results were as follows; +# +#input 12345 +#output gsub(/regex/,"x",input) +# +#regex output +#(^) x12345 +#($) 12345x +#(^)|($) x12345x +#($)|(^) x12345x +#(2) 1x345 +#(^)|2 x1x345 +#2|(^) x1x345 +#($)|2 1x345 +#2|($) 1x345 +#(2)|(^) x1x345 +#(^)|(2) x1x345 +#(2)|($) 1x345 +#($)|(2) 1x345 +#.((2)|(^)) x345 +#.((^)|(2)) x345 +#.((2)|($)) x34x +#.(($)|(2)) x34x +#x{0}((2)|(^)) x1x345 +#x{0}((^)|(2)) x1x345 +#x{0}((2)|($)) 1x345 +#x{0}(($)|(2)) 1x345 +#x*((2)|(^)) x1x345 +#x*((^)|(2)) x1x345 +#x*((2)|($)) 1x345 +#x*(($)|(2)) 1x345 +# +#Here's the test program I used, a few of the cases use ERE {n[,[m]]} +#operators so that will have to be commented out or have a check +#added or something (should have put a conditional in I know... ;-) +# +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +BEGIN{ + +TESTSTR="12345" + +print "input "TESTSTR +print "output gsub(/regex/,\"x\",input)" +print "" + +print "regex output" +$0=TESTSTR +gsub(/(^)/,"x") +print "(^) "$0 + +$0=TESTSTR +gsub(/($)/,"x") +print "($) "$0 + +$0=TESTSTR +gsub(/(^)|($)/,"x") +print "(^)|($) "$0 + +$0=TESTSTR +gsub(/($)|(^)/,"x") +print "($)|(^) "$0 + +$0=TESTSTR +gsub(/2/,"x") +print "(2) "$0 + +$0=TESTSTR +gsub(/(^)|2/,"x") +print "(^)|2 "$0 + +$0=TESTSTR +gsub(/2|(^)/,"x") +print "2|(^) "$0 + +$0=TESTSTR +gsub(/($)|2/,"x") +print "($)|2 "$0 + +$0=TESTSTR +gsub(/2|($)/,"x") +print "2|($) "$0 + +$0=TESTSTR +gsub(/(2)|(^)/,"x") +print "(2)|(^) "$0 + +$0=TESTSTR +gsub(/(^)|(2)/,"x") +print "(^)|(2) "$0 + +$0=TESTSTR +gsub(/(2)|($)/,"x") +print "(2)|($) "$0 + +$0=TESTSTR +gsub(/($)|(2)/,"x") +print "($)|(2) "$0 + +$0=TESTSTR +gsub(/.((2)|(^))/,"x") +print ".((2)|(^)) "$0 + +$0=TESTSTR +gsub(/.((^)|(2))/,"x") +print ".((^)|(2)) "$0 + +$0=TESTSTR +gsub(/.((2)|($))/,"x") +print ".((2)|($)) "$0 + +$0=TESTSTR +gsub(/.(($)|(2))/,"x") +print ".(($)|(2)) "$0 + +# $0=TESTSTR +# gsub(/x{0}((2)|(^))/,"x") +# print "x{0}((2)|(^)) "$0 +# +# $0=TESTSTR +# gsub(/x{0}((^)|(2))/,"x") +# print "x{0}((^)|(2)) "$0 +# +# $0=TESTSTR +# gsub(/x{0}((2)|($))/,"x") +# print "x{0}((2)|($)) "$0 +# +# $0=TESTSTR +# gsub(/x{0}(($)|(2))/,"x") +# print "x{0}(($)|(2)) "$0 + +$0=TESTSTR +gsub(/x*((2)|(^))/,"x") +print "x*((2)|(^)) "$0 + +$0=TESTSTR +gsub(/x*((^)|(2))/,"x") +print "x*((^)|(2)) "$0 + +$0=TESTSTR +gsub(/x*((2)|($))/,"x") +print "x*((2)|($)) "$0 + +$0=TESTSTR +gsub(/x*(($)|(2))/,"x") +print "x*(($)|(2)) "$0 + +# $0=TESTSTR +# gsub(/x{0}^/,"x") +# print "x{0}^ "$0 +# +# $0=TESTSTR +# gsub(/x{0}$/,"x") +# print "x{0}$ "$0 +# +# $0=TESTSTR +# gsub(/(x{0}^)|2/,"x") +# print "(x{0}^)|2 "$0 +# +# $0=TESTSTR +# gsub(/(x{0}$)|2/,"x") +# print "(x{0}$)|2 "$0 + + +} +# +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +#byefrom +# +#-- +#laura fairhead # laura@madonnaweb.com http://lf.8k.com +# # if you are bored crack my sig. +#1F8B0808CABB793C0000666667002D8E410E83300C04EF91F2877D00CA138A7A +#EAA98F30C494480157B623C4EF1B508FDED1CEFA9152A23DE35D661593C5318E +#630C313CD701BE92E390563326EE17A3CA818F5266E4C2461547F1F5267659CA +#8EE2092F76C329ED02CA430C5373CC62FF94BAC6210B36D9F9BC4AB53378D978 +#80F2978A1A6E5D6F5133B67B6113178DC1059526698AFE5C17A5187E7D930492 diff --git a/test/gsubtst2.ok b/test/gsubtst2.ok new file mode 100644 index 0000000..a038528 --- /dev/null +++ b/test/gsubtst2.ok @@ -0,0 +1,25 @@ +input 12345 +output gsub(/regex/,"x",input) + +regex output +(^) x12345 +($) 12345x +(^)|($) x12345x +($)|(^) x12345x +(2) 1x345 +(^)|2 x1x345 +2|(^) x1x345 +($)|2 1x345x +2|($) 1x345x +(2)|(^) x1x345 +(^)|(2) x1x345 +(2)|($) 1x345x +($)|(2) 1x345x +.((2)|(^)) x345 +.((^)|(2)) x345 +.((2)|($)) x34x +.(($)|(2)) x34x +x*((2)|(^)) x1x345 +x*((^)|(2)) x1x345 +x*((2)|($)) 1x345x +x*(($)|(2)) 1x345x diff --git a/test/gsubtst3.awk b/test/gsubtst3.awk new file mode 100644 index 0000000..1c4f4ea --- /dev/null +++ b/test/gsubtst3.awk @@ -0,0 +1,290 @@ +# From laura_fairhead@talk21.com Fri May 10 11:24:41 2002 +# Return-Path: <laura_fairhead@talk21.com> +# Received: from localhost (aahz [127.0.0.1]) +# by skeeve.com (8.11.2/8.11.2) with ESMTP id g4A8OdU01822 +# for <arnold@localhost>; Fri, 10 May 2002 11:24:40 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.7.4) +# for arnold@localhost (single-drop); Fri, 10 May 2002 11:24:40 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Fri May 10 11:30:42 2002) +# X-From_: laura_fairhead@talk21.com Fri May 10 05:39:57 2002 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id g4A2dpw26380 for <arobbins@actcom.co.il>; +# Fri, 10 May 2002 05:39:52 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by lmail.actcom.co.il (8.11.6/8.11.6) with ESMTP id g4A2dxl10851 +# for <arobbins@actcom.co.il>; Fri, 10 May 2002 05:39:59 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.6/8.11.6) with ESMTP id g4A2dwN11097 +# for <arnold@skeeve.com>; Thu, 9 May 2002 22:39:58 -0400 +# Received: from [194.73.242.6] (helo=wmpmta04-app.mail-store.com) +# by fencepost.gnu.org with smtp (Exim 3.34 #1 (Debian)) +# id 1760K4-0001QX-00 +# for <bug-gawk@gnu.org>; Thu, 09 May 2002 22:39:56 -0400 +# Received: from wmpmtavirtual ([10.216.84.15]) +# by wmpmta04-app.mail-store.com +# (InterMail vM.5.01.02.00 201-253-122-103-101-20001108) with SMTP +# id <20020510023921.EEW24107.wmpmta04-app.mail-store.com@wmpmtavirtual> +# for <bug-gawk@gnu.org>; Fri, 10 May 2002 03:39:21 +0100 +# Received: from 213.1.102.243 by t21web05-lrs ([10.216.84.15]); Fri, 10 May 02 03:38:42 GMT+01:00 +# X-Mailer: talk21 v1.24 - http://talk21.btopenworld.com +# From: laura_fairhead@talk21.com +# To: bug-gawk@gnu.org +# X-Talk21Ref: none +# Date: Fri, 10 May 2002 03:38:42 GMT+01:00 +# Subject: bug in gawk 3.1.0 regex code +# Mime-Version: 1.0 +# Content-type: multipart/mixed; boundary="--GgOuLpDpIyE--1020998322088--" +# Message-Id: <20020510023921.EEW24107.wmpmta04-app.mail-store.com@wmpmtavirtual> +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: RO +# +# Multipart Message Boundary - attachment/bodypart follows: +# +# +# ----GgOuLpDpIyE--1020998322088-- +# Content-Type: text/plain +# Content-Transfer-Encoding: 7bit +# +# +# I believe I've just found a bug in gawk3.1.0 implementation of +# extended regular expressions. It seems to be down to the alternation +# operator; when using an end anchor '$' as a subexpression in an +# alternation and the entire matched RE is a nul-string it fails +# to match the end of string, for example; +# +# gsub(/$|2/,"x") +# print +# +# input = 12345 +# expected output = 1x345x +# actual output = 1x345 +# +# The start anchor '^' always works as expected; +# +# gsub(/^|2/,"x") +# print +# +# input = 12345 +# expected output = x1x345 +# actual output = x1x345 +# +# This was with POSIX compliance enabled althought that doesn't +# effect the result. +# +# I checked on gawk3.0.6 and got exactly the same results however +# gawk2.15.6 gives the expected results. +# +# All the follow platforms produced the same results; +# +# gawk3.0.6 / Win98 / i386 +# gawk3.1.0 / Win98 / i386 +# gawk3.0.5 / Linux2.2.16 / i386 +# +# Complete test results were as follows; +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# regex input expected actual bug? +# ------------------------------------------------------------- +# (^) 12345 x12345 x12345 +# ($) 12345 12345x 12345x +# (^)|($) 12345 x12345x x12345x +# ($)|(^) 12345 x12345x x12345x +# 2 12345 1x345 1x345 +# (^)|2 12345 x1x345 x1x345 +# 2|(^) 12345 x1x345 x1x345 +# ($)|2 12345 1x345x 1x345 **BUG** +# 2|($) 12345 1x345x 1x345 **BUG** +# (2)|(^) 12345 x1x345 x1x345 +# (^)|(2) 12345 x1x345 x1x345 +# (2)|($) 12345 1x345x 1x345 **BUG** +# ($)|(2) 12345 1x345x 1x345 **BUG** +# ((2)|(^)). 12345 xx45 xx45 +# ((^)|(2)). 12345 xx45 xx45 +# .((2)|($)) 12345 x34x x34x +# .(($)|(2)) 12345 x34x x34x +# (^)|6 12345 x12345 x12345 +# 6|(^) 12345 x12345 x12345 +# ($)|6 12345 12345x 12345x +# 6|($) 12345 12345x 12345x +# 2|6|(^) 12345 x1x345 x1x345 +# 2|(^)|6 12345 x1x345 x1x345 +# 6|2|(^) 12345 x1x345 x1x345 +# 6|(^)|2 12345 x1x345 x1x345 +# (^)|6|2 12345 x1x345 x1x345 +# (^)|2|6 12345 x1x345 x1x345 +# 2|6|($) 12345 1x345x 1x345 **BUG** +# 2|($)|6 12345 1x345x 1x345 **BUG** +# 6|2|($) 12345 1x345x 1x345 **BUG** +# 6|($)|2 12345 1x345x 1x345 **BUG** +# ($)|6|2 12345 1x345x 1x345 **BUG** +# ($)|2|6 12345 1x345x 1x345 **BUG** +# 2|4|(^) 12345 x1x3x5 x1x3x5 +# 2|(^)|4 12345 x1x3x5 x1x3x5 +# 4|2|(^) 12345 x1x3x5 x1x3x5 +# 4|(^)|2 12345 x1x3x5 x1x3x5 +# (^)|4|2 12345 x1x3x5 x1x3x5 +# (^)|2|4 12345 x1x3x5 x1x3x5 +# 2|4|($) 12345 1x3x5x 1x3x5 **BUG** +# 2|($)|4 12345 1x3x5x 1x3x5 **BUG** +# 4|2|($) 12345 1x3x5x 1x3x5 **BUG** +# 4|($)|2 12345 1x3x5x 1x3x5 **BUG** +# ($)|4|2 12345 1x3x5x 1x3x5 **BUG** +# ($)|2|4 12345 1x3x5x 1x3x5 **BUG** +# x{0}((2)|(^)) 12345 x1x345 x1x345 +# x{0}((^)|(2)) 12345 x1x345 x1x345 +# x{0}((2)|($)) 12345 1x345x 1x345 **BUG** +# x{0}(($)|(2)) 12345 1x345x 1x345 **BUG** +# x*((2)|(^)) 12345 x1x345 x1x345 +# x*((^)|(2)) 12345 x1x345 x1x345 +# x*((2)|($)) 12345 1x345x 1x345 **BUG** +# x*(($)|(2)) 12345 1x345x 1x345 **BUG** +# x{0}^ 12345 x12345 x12345 +# x{0}$ 12345 12345x 12345x +# (x{0}^)|2 12345 x1x345 x1x345 +# (x{0}$)|2 12345 1x345x 1x345 **BUG** +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# +# Here's the test program I used, a few of the cases use ERE {n[,[m]]} +# operators so need '-W posix', (although the same results minus +# those tests came out without POSIX compliance enabled) +# +# [ Invocation was 'gawk -W posix -f tregex.awk' ] +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# tregex.awk +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +BEGIN{ +print _=sprintf("%-20s%-10s%-10s%-10s%-10s\n","regex","input","expected","actual","bug?") +OFS="-" +$(length(_)+1)="" +print $0 + +while(getline <ARGV[1]) # ADR: was testre.dat +{ +RE=$1;IN=$2;OUT=$3 +$0=IN +gsub(RE,"x") +printf "%-20s%-10s%-10s%-10s%-10s\n",RE,IN,OUT,$0,$0==OUT?"":"**BUG**" +} +} +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# This is the test data file used; +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# testre.dat +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# (^) 12345 x12345 +# ($) 12345 12345x +# (^)|($) 12345 x12345x +# ($)|(^) 12345 x12345x +# 2 12345 1x345 +# (^)|2 12345 x1x345 +# 2|(^) 12345 x1x345 +# ($)|2 12345 1x345x +# 2|($) 12345 1x345x +# (2)|(^) 12345 x1x345 +# (^)|(2) 12345 x1x345 +# (2)|($) 12345 1x345x +# ($)|(2) 12345 1x345x +# ((2)|(^)). 12345 xx45 +# ((^)|(2)). 12345 xx45 +# .((2)|($)) 12345 x34x +# .(($)|(2)) 12345 x34x +# (^)|6 12345 x12345 +# 6|(^) 12345 x12345 +# ($)|6 12345 12345x +# 6|($) 12345 12345x +# 2|6|(^) 12345 x1x345 +# 2|(^)|6 12345 x1x345 +# 6|2|(^) 12345 x1x345 +# 6|(^)|2 12345 x1x345 +# (^)|6|2 12345 x1x345 +# (^)|2|6 12345 x1x345 +# 2|6|($) 12345 1x345x +# 2|($)|6 12345 1x345x +# 6|2|($) 12345 1x345x +# 6|($)|2 12345 1x345x +# ($)|6|2 12345 1x345x +# ($)|2|6 12345 1x345x +# 2|4|(^) 12345 x1x3x5 +# 2|(^)|4 12345 x1x3x5 +# 4|2|(^) 12345 x1x3x5 +# 4|(^)|2 12345 x1x3x5 +# (^)|4|2 12345 x1x3x5 +# (^)|2|4 12345 x1x3x5 +# 2|4|($) 12345 1x3x5x +# 2|($)|4 12345 1x3x5x +# 4|2|($) 12345 1x3x5x +# 4|($)|2 12345 1x3x5x +# ($)|4|2 12345 1x3x5x +# ($)|2|4 12345 1x3x5x +# x{0}((2)|(^)) 12345 x1x345 +# x{0}((^)|(2)) 12345 x1x345 +# x{0}((2)|($)) 12345 1x345x +# x{0}(($)|(2)) 12345 1x345x +# x*((2)|(^)) 12345 x1x345 +# x*((^)|(2)) 12345 x1x345 +# x*((2)|($)) 12345 1x345x +# x*(($)|(2)) 12345 1x345x +# x{0}^ 12345 x12345 +# x{0}$ 12345 12345x +# (x{0}^)|2 12345 x1x345 +# (x{0}$)|2 12345 1x345x +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# I've attached a full copy of this e-mail in ZIP format +# in case of e-mail transport errors corrupting the data. +# +# I've posted the same bug report to gnu.utils.bug and +# it's being discussed in this thread on comp.lang.awk; +# +# From: laura@madonnaweb.com (laura fairhead) +# Newsgroups: comp.lang.awk +# Subject: bug in gawk3.1.0 regex code +# Date: Wed, 08 May 2002 23:31:40 GMT +# Message-ID: <3cd9b0f7.29675926@NEWS.CIS.DFN.DE> +# +# +# byefrom +# +# Laura Fairhead +# +# +# +# +# -------------------- +# talk21 your FREE portable and private address on the net at http://www.talk21.com +# ----GgOuLpDpIyE--1020998322088-- +# Content-Type: : application/zip;; Name="COPY.ZIP" +# Content-Transfer-Encoding: base64 +# Content-Disposition: attachment; filename="COPY.ZIP" +# +# UEsDBBQAAAAIALoaqiyj8d/bjwMAAKsaAAADAAAARklMrVjfa+JAEH4P5H8ISwrRU9EYfbheKBR6 +# xRcLvevbYbFtzsqJlBrpQr3722+zMWZ31pk1MaG0Q/m+nR87O9kvruM6/5p4XOc9WSTc05/l +# +m2bSivhb8lzmrx43vw53c5X2f+etourHOc63XMe1wlmLQ8+g3AYjaTFD2ZplY9g+xRbWly3 +# NPastYMrQN9cs4DvHYz+dHbomY8SOTctGDlcQfXND1Uz6cK3EXcVdpY37ltSuB55u339cNtu +# F76NPTudHYR0zS2RZ/sd1maHVLdYI/cp31b2PvFW72jkvIi2tLTI94nXY/eCfeZK8Ap7GO1b +# u7QAO8+8FjsLfFx7OowtfW6dLYRv22wZ031uYYc7M/aK5xvEfjp7vDPnQxW2OZuqndDxWeyw +# dt6y5rXPt5xrqG8bW9a8tm8ZN1q1UyYTXvNT2HjN7VWLLL3GR7pl9nlUkx1Z+5xm2/qcYsu4 +# z2KHtfOWNad6jR92jGN9jvm2sSNbn1vYlj4n2TLus9h4zW1s/tn/e3iHV55MOXumvUarsvVX +# +OknNGfrr/AK7DbMulLkbZh1VTa8uFSLHF5cqlVt5tW9eWRsH2VbVY10rp+TCu9Q6Rxj2/Ju +# SJE2KG5TqW57848/jS15fXM7mX66ztv7cp16j/FGGr8DdtEN+5uL7sD49WvNOkwGIv5KaS3+ +# FsJamLmyFkYmrFnLde6+/4hZl7mOH6yS9SJ9DR5bXwatmLHCrd/PivTxulwlwSJJV8t14n1j +# abIRCfde5mm2iojx/ib2B5eTaeyHl3cPP2N/KNbsx5Op6yw226fg/qbDeIbNc/DoHAR6Mu2I +# dTp+X/zEsTCvGPvK9j0govsrfxqqdJN9cKhMY0vilwdPOebmRwqIy4+x+Tni+Hrc/PKAAnGZ +# 7pXH2fyaYK6X4+B9CcPBt/RRt9z8FoDhoOpH/QJ9j+KAkkf9As2O4oA6N/xy6RWo8OMoqLYN +# 1DDipqo+joIqEGtQqDWJRibXK9oO6igMB1Uu2XeKZwwHlSuO0zue6idVGVE4VQPheeiVIc8F +# sV6Bg6oRx+knkup3Kl8VR+Vb5qGru2N14SNTx2E4qNhwnH1/+chUYRROvfvjeejK6khdeLm/ +# +HoFDqolHGfdX17sG5WviqPyLXBQ1WB9D/ULjSvHH9ZXUJOgOKA+UL9AZ1A4dThTftXxTOWh +# qgRs7kI9gF4gwM0fnVfgjo/F19A96T9QSwECFAAUAAAACAC6Gqoso/Hf248DAACrGgAAAwAA +# AAAAAAABACAAAAAAAAAARklMUEsFBgAAAAABAAEAMQAAALADAAAAAA== +# ----GgOuLpDpIyE--1020998322088---- +# +# +# diff --git a/test/gsubtst3.in b/test/gsubtst3.in new file mode 100644 index 0000000..2dcf75a --- /dev/null +++ b/test/gsubtst3.in @@ -0,0 +1,57 @@ +(^) 12345 x12345 +($) 12345 12345x +(^)|($) 12345 x12345x +($)|(^) 12345 x12345x +2 12345 1x345 +(^)|2 12345 x1x345 +2|(^) 12345 x1x345 +($)|2 12345 1x345x +2|($) 12345 1x345x +(2)|(^) 12345 x1x345 +(^)|(2) 12345 x1x345 +(2)|($) 12345 1x345x +($)|(2) 12345 1x345x +((2)|(^)). 12345 xx45 +((^)|(2)). 12345 xx45 +.((2)|($)) 12345 x34x +.(($)|(2)) 12345 x34x +(^)|6 12345 x12345 +6|(^) 12345 x12345 +($)|6 12345 12345x +6|($) 12345 12345x +2|6|(^) 12345 x1x345 +2|(^)|6 12345 x1x345 +6|2|(^) 12345 x1x345 +6|(^)|2 12345 x1x345 +(^)|6|2 12345 x1x345 +(^)|2|6 12345 x1x345 +2|6|($) 12345 1x345x +2|($)|6 12345 1x345x +6|2|($) 12345 1x345x +6|($)|2 12345 1x345x +($)|6|2 12345 1x345x +($)|2|6 12345 1x345x +2|4|(^) 12345 x1x3x5 +2|(^)|4 12345 x1x3x5 +4|2|(^) 12345 x1x3x5 +4|(^)|2 12345 x1x3x5 +(^)|4|2 12345 x1x3x5 +(^)|2|4 12345 x1x3x5 +2|4|($) 12345 1x3x5x +2|($)|4 12345 1x3x5x +4|2|($) 12345 1x3x5x +4|($)|2 12345 1x3x5x +($)|4|2 12345 1x3x5x +($)|2|4 12345 1x3x5x +x{0}((2)|(^)) 12345 x1x345 +x{0}((^)|(2)) 12345 x1x345 +x{0}((2)|($)) 12345 1x345x +x{0}(($)|(2)) 12345 1x345x +x*((2)|(^)) 12345 x1x345 +x*((^)|(2)) 12345 x1x345 +x*((2)|($)) 12345 1x345x +x*(($)|(2)) 12345 1x345x +x{0}^ 12345 x12345 +x{0}$ 12345 12345x +(x{0}^)|2 12345 x1x345 +(x{0}$)|2 12345 1x345x diff --git a/test/gsubtst3.ok b/test/gsubtst3.ok new file mode 100644 index 0000000..190a20a --- /dev/null +++ b/test/gsubtst3.ok @@ -0,0 +1,60 @@ +regex input expected actual bug? + +------------------------------------------------------------- +(^) 12345 x12345 x12345 +($) 12345 12345x 12345x +(^)|($) 12345 x12345x x12345x +($)|(^) 12345 x12345x x12345x +2 12345 1x345 1x345 +(^)|2 12345 x1x345 x1x345 +2|(^) 12345 x1x345 x1x345 +($)|2 12345 1x345x 1x345x +2|($) 12345 1x345x 1x345x +(2)|(^) 12345 x1x345 x1x345 +(^)|(2) 12345 x1x345 x1x345 +(2)|($) 12345 1x345x 1x345x +($)|(2) 12345 1x345x 1x345x +((2)|(^)). 12345 xx45 xx45 +((^)|(2)). 12345 xx45 xx45 +.((2)|($)) 12345 x34x x34x +.(($)|(2)) 12345 x34x x34x +(^)|6 12345 x12345 x12345 +6|(^) 12345 x12345 x12345 +($)|6 12345 12345x 12345x +6|($) 12345 12345x 12345x +2|6|(^) 12345 x1x345 x1x345 +2|(^)|6 12345 x1x345 x1x345 +6|2|(^) 12345 x1x345 x1x345 +6|(^)|2 12345 x1x345 x1x345 +(^)|6|2 12345 x1x345 x1x345 +(^)|2|6 12345 x1x345 x1x345 +2|6|($) 12345 1x345x 1x345x +2|($)|6 12345 1x345x 1x345x +6|2|($) 12345 1x345x 1x345x +6|($)|2 12345 1x345x 1x345x +($)|6|2 12345 1x345x 1x345x +($)|2|6 12345 1x345x 1x345x +2|4|(^) 12345 x1x3x5 x1x3x5 +2|(^)|4 12345 x1x3x5 x1x3x5 +4|2|(^) 12345 x1x3x5 x1x3x5 +4|(^)|2 12345 x1x3x5 x1x3x5 +(^)|4|2 12345 x1x3x5 x1x3x5 +(^)|2|4 12345 x1x3x5 x1x3x5 +2|4|($) 12345 1x3x5x 1x3x5x +2|($)|4 12345 1x3x5x 1x3x5x +4|2|($) 12345 1x3x5x 1x3x5x +4|($)|2 12345 1x3x5x 1x3x5x +($)|4|2 12345 1x3x5x 1x3x5x +($)|2|4 12345 1x3x5x 1x3x5x +x{0}((2)|(^)) 12345 x1x345 x1x345 +x{0}((^)|(2)) 12345 x1x345 x1x345 +x{0}((2)|($)) 12345 1x345x 1x345x +x{0}(($)|(2)) 12345 1x345x 1x345x +x*((2)|(^)) 12345 x1x345 x1x345 +x*((^)|(2)) 12345 x1x345 x1x345 +x*((2)|($)) 12345 1x345x 1x345x +x*(($)|(2)) 12345 1x345x 1x345x +x{0}^ 12345 x12345 x12345 +x{0}$ 12345 12345x 12345x +(x{0}^)|2 12345 x1x345 x1x345 +(x{0}$)|2 12345 1x345x 1x345x diff --git a/test/gsubtst4.awk b/test/gsubtst4.awk new file mode 100644 index 0000000..48b8413 --- /dev/null +++ b/test/gsubtst4.awk @@ -0,0 +1,242 @@ +# From arnold Thu May 9 17:27:03 2002 +# Return-Path: <arnold@skeeve.com> +# Received: (from arnold@localhost) +# by skeeve.com (8.11.6/8.11.6) id g49ER3K27925 +# for arnold; Thu, 9 May 2002 17:27:03 +0300 +# Date: Thu, 9 May 2002 17:27:03 +0300 +# From: Aharon Robbins <arnold@skeeve.com> +# Message-Id: <200205091427.g49ER3K27925@skeeve.com> +# To: arnold@skeeve.com +# Subject: fixme +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBRule: Pattern Match (Other Patterns) (Score: 4850) +# X-SBRule: Pattern Match (Spam Phone #) (Score: 0) +# X-SBClass: Blocked +# Status: RO +# +# Path: ord-read.news.verio.net!dfw-artgen!iad-peer.news.verio.net!news.verio.net!fu-berlin.de!uni-berlin.de!host213-120-137-48.in-addr.btopenworld.COM!not-for-mail +# From: laura@madonnaweb.com (laura fairhead) +# Newsgroups: comp.lang.awk +# Subject: bug in gawk3.1.0 regex code +# Date: Wed, 08 May 2002 23:31:40 GMT +# Organization: that'll be the daewooo :) +# Lines: 211 +# Message-ID: <3cd9b0f7.29675926@NEWS.CIS.DFN.DE> +# Reply-To: laura@madonnaweb.com +# NNTP-Posting-Host: host213-120-137-48.in-addr.btopenworld.com (213.120.137.48) +# X-Trace: fu-berlin.de 1020900891 18168286 213.120.137.48 (16 [53286]) +# X-Newsreader: Forte Free Agent 1.21/32.243 +# Xref: dfw-artgen comp.lang.awk:13059 +# +# +# I believe I've just found a bug in gawk3.1.0 implementation of +# extended regular expressions. It seems to be down to the alternation +# operator; when using an end anchor '$' as a subexpression in an +# alternation and the entire matched RE is a nul-string it fails +# to match the end of string, for example; +# +# gsub(/$|2/,"x") +# print +# +# input = 12345 +# expected output = 1x345x +# actual output = 1x345 +# +# The start anchor '^' always works as expected; +# +# gsub(/^|2/,"x") +# print +# +# input = 12345 +# expected output = x1x345 +# actual output = x1x345 +# +# This was with POSIX compliance enabled althought that doesn't +# effect the result. +# +# I checked on gawk3.0.6 and got exactly the same results however +# gawk2.15.6 gives the expected results. +# +# I'm about to post a bug report about this into gnu.utils.bug +# but I thought I'd post it here first in case anyone has +# any input/comments/whatever .... +# +# Complete test results were as follows; +# +# input 12345 +# output gsub(/regex/,"x",input) +# +# regex output +# (^) x12345 +# ($) 12345x +# (^)|($) x12345x +# ($)|(^) x12345x +# (2) 1x345 +# (^)|2 x1x345 +# 2|(^) x1x345 +# ($)|2 1x345 +# 2|($) 1x345 +# (2)|(^) x1x345 +# (^)|(2) x1x345 +# (2)|($) 1x345 +# ($)|(2) 1x345 +# .((2)|(^)) x345 +# .((^)|(2)) x345 +# .((2)|($)) x34x +# .(($)|(2)) x34x +# x{0}((2)|(^)) x1x345 +# x{0}((^)|(2)) x1x345 +# x{0}((2)|($)) 1x345 +# x{0}(($)|(2)) 1x345 +# x*((2)|(^)) x1x345 +# x*((^)|(2)) x1x345 +# x*((2)|($)) 1x345 +# x*(($)|(2)) 1x345 +# +# Here's the test program I used, a few of the cases use ERE {n[,[m]]} +# operators so that will have to be commented out or have a check +# added or something (should have put a conditional in I know... ;-) +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +BEGIN{ + +TESTSTR="12345" + +print "input "TESTSTR +print "output gsub(/regex/,\"x\",input)" +print "" + +print "regex output" +$0=TESTSTR +gsub(/(^)/,"x") +print "(^) "$0 + +$0=TESTSTR +gsub(/($)/,"x") +print "($) "$0 + +$0=TESTSTR +gsub(/(^)|($)/,"x") +print "(^)|($) "$0 + +$0=TESTSTR +gsub(/($)|(^)/,"x") +print "($)|(^) "$0 + +$0=TESTSTR +gsub(/2/,"x") +print "(2) "$0 + +$0=TESTSTR +gsub(/(^)|2/,"x") +print "(^)|2 "$0 + +$0=TESTSTR +gsub(/2|(^)/,"x") +print "2|(^) "$0 + +$0=TESTSTR +gsub(/($)|2/,"x") +print "($)|2 "$0 + +$0=TESTSTR +gsub(/2|($)/,"x") +print "2|($) "$0 + +$0=TESTSTR +gsub(/(2)|(^)/,"x") +print "(2)|(^) "$0 + +$0=TESTSTR +gsub(/(^)|(2)/,"x") +print "(^)|(2) "$0 + +$0=TESTSTR +gsub(/(2)|($)/,"x") +print "(2)|($) "$0 + +$0=TESTSTR +gsub(/($)|(2)/,"x") +print "($)|(2) "$0 + +$0=TESTSTR +gsub(/.((2)|(^))/,"x") +print ".((2)|(^)) "$0 + +$0=TESTSTR +gsub(/.((^)|(2))/,"x") +print ".((^)|(2)) "$0 + +$0=TESTSTR +gsub(/.((2)|($))/,"x") +print ".((2)|($)) "$0 + +$0=TESTSTR +gsub(/.(($)|(2))/,"x") +print ".(($)|(2)) "$0 + +$0=TESTSTR +gsub(/x{0}((2)|(^))/,"x") +print "x{0}((2)|(^)) "$0 + +$0=TESTSTR +gsub(/x{0}((^)|(2))/,"x") +print "x{0}((^)|(2)) "$0 + +$0=TESTSTR +gsub(/x{0}((2)|($))/,"x") +print "x{0}((2)|($)) "$0 + +$0=TESTSTR +gsub(/x{0}(($)|(2))/,"x") +print "x{0}(($)|(2)) "$0 + +$0=TESTSTR +gsub(/x*((2)|(^))/,"x") +print "x*((2)|(^)) "$0 + +$0=TESTSTR +gsub(/x*((^)|(2))/,"x") +print "x*((^)|(2)) "$0 + +$0=TESTSTR +gsub(/x*((2)|($))/,"x") +print "x*((2)|($)) "$0 + +$0=TESTSTR +gsub(/x*(($)|(2))/,"x") +print "x*(($)|(2)) "$0 + +$0=TESTSTR +gsub(/x{0}^/,"x") +print "x{0}^ "$0 + +$0=TESTSTR +gsub(/x{0}$/,"x") +print "x{0}$ "$0 + +$0=TESTSTR +gsub(/(x{0}^)|2/,"x") +print "(x{0}^)|2 "$0 + +$0=TESTSTR +gsub(/(x{0}$)|2/,"x") +print "(x{0}$)|2 "$0 + + +} +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# byefrom +# +# -- +# laura fairhead # laura@madonnaweb.com http://lf.8k.com +# # if you are bored crack my sig. +# 1F8B0808CABB793C0000666667002D8E410E83300C04EF91F2877D00CA138A7A +# EAA98F30C494480157B623C4EF1B508FDED1CEFA9152A23DE35D661593C5318E +# 630C313CD701BE92E390563326EE17A3CA818F5266E4C2461547F1F5267659CA +# 8EE2092F76C329ED02CA430C5373CC62FF94BAC6210B36D9F9BC4AB53378D978 +# 80F2978A1A6E5D6F5133B67B6113178DC1059526698AFE5C17A5187E7D930492 +# diff --git a/test/gsubtst4.ok b/test/gsubtst4.ok new file mode 100644 index 0000000..6d0e490 --- /dev/null +++ b/test/gsubtst4.ok @@ -0,0 +1,33 @@ +input 12345 +output gsub(/regex/,"x",input) + +regex output +(^) x12345 +($) 12345x +(^)|($) x12345x +($)|(^) x12345x +(2) 1x345 +(^)|2 x1x345 +2|(^) x1x345 +($)|2 1x345x +2|($) 1x345x +(2)|(^) x1x345 +(^)|(2) x1x345 +(2)|($) 1x345x +($)|(2) 1x345x +.((2)|(^)) x345 +.((^)|(2)) x345 +.((2)|($)) x34x +.(($)|(2)) x34x +x{0}((2)|(^)) 12345 +x{0}((^)|(2)) 12345 +x{0}((2)|($)) 12345 +x{0}(($)|(2)) 12345 +x*((2)|(^)) x1x345 +x*((^)|(2)) x1x345 +x*((2)|($)) 1x345x +x*(($)|(2)) 1x345x +x{0}^ 12345 +x{0}$ 12345 +(x{0}^)|2 1x345 +(x{0}$)|2 1x345 diff --git a/test/gsubtst5.awk b/test/gsubtst5.awk new file mode 100644 index 0000000..4bef854 --- /dev/null +++ b/test/gsubtst5.awk @@ -0,0 +1,97 @@ +# From jose@monkey.org Thu Jun 5 11:48:35 2003 +# Return-Path: <jose@monkey.org> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h558eVvA012655 +# for <arnold@localhost>; Thu, 5 Jun 2003 11:48:35 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Thu, 05 Jun 2003 11:48:35 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Thu Jun 5 11:47:59 2003) +# X-From_: jose@monkey.org Thu Jun 5 07:14:45 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h554EdY08108 for <arobbins@actcom.co.il>; +# Thu, 5 Jun 2003 07:14:41 +0300 (EET DST) +# (rfc931-sender: smtp.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h554G3To008304 +# for <arobbins@actcom.co.il>; Thu, 5 Jun 2003 07:16:05 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.7/8.11.6) with ESMTP id h554Ean08172 +# for <arnold@skeeve.com>; Thu, 5 Jun 2003 00:14:36 -0400 +# Received: from monty-python.gnu.org ([199.232.76.173]) +# by fencepost.gnu.org with esmtp (Exim 4.20) +# id 19Nm96-0001xE-1i +# for arnold@gnu.ai.mit.edu; Thu, 05 Jun 2003 00:14:36 -0400 +# Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.20) +# id 19Nm8x-0005ge-Dz +# for arnold@gnu.ai.mit.edu; Thu, 05 Jun 2003 00:14:28 -0400 +# Received: from naughty.monkey.org ([66.93.9.164]) +# by monty-python.gnu.org with esmtp (Exim 4.20) +# id 19Nm8w-0005VM-Ko +# for arnold@gnu.ai.mit.edu; Thu, 05 Jun 2003 00:14:26 -0400 +# Received: by naughty.monkey.org (Postfix, from userid 1203) +# id C15511BA97B; Thu, 5 Jun 2003 00:14:19 -0400 (EDT) +# Received: from localhost (localhost [127.0.0.1]) +# by naughty.monkey.org (Postfix) with ESMTP +# id BF9821BA969; Thu, 5 Jun 2003 00:14:19 -0400 (EDT) +# Date: Thu, 5 Jun 2003 00:14:19 -0400 (EDT) +# From: Jose Nazario <jose@monkey.org> +# To: bug-gnu-utils@prep.ai.mit.edu, arnold@gnu.ai.mit.edu, +# netbsd-bugs@netbsd.org +# Subject: bug in gawk/gsub() (not present in nawk) +# Message-ID: <Pine.BSO.4.51.0306050007160.31577@naughty.monkey.org> +# MIME-Version: 1.0 +# Content-Type: TEXT/PLAIN; charset=US-ASCII +# X-Spam-Status: No, hits=-1.2 required=5.0 +# tests=SPAM_PHRASE_00_01,USER_AGENT_PINE +# version=2.41 +# X-Spam-Level: +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: R +# +# while playing with some tools in data massaging, i had to migrate from an +# openbsd/nawk system to a netbsd/gawk system. i found the folllowing +# behavior, which seems to be a bug. +# +# the following gsub() pattern has a strange effect under gawk which is not +# visible in nawk (at least as compiled on openbsd). the intention is to +# take a string like "This Is a Title: My Title?" and turn it into a +# normalized string: "ThisIsaTitleMyTitle". to do this, i wrote the +# following gross gsub line in an awk script: +# +# gsub(/[\ \"-\/\\:;\[\]\@\?\.\,\$]/, "", $2) +# print $2 +# +# in gawk, as found in netbsd-macppc/1.5.2, this will drop the first letter +# of every word. the resulting string will be "hissitleyitle", while in nawk +# as built on openbsd-3.3 this will get it correct. +# +# any insights? the inconsistency with this relatively naive pattern seems a +# bit odd. (i would up installing nawk built from openbsd sources.) +# +# thanks. sorry i didn't send a better bug report, netbsd folks, i'm not +# much of a netbsd user, and i dont have send-pr set up. yes, this is a +# slightly older version of netbsd and gawk: +# +# $ uname -a +# NetBSD entropy 1.5.2 NetBSD 1.5.2 (GENERIC) #0: Sun Feb 10 02:00:04 EST +# 2002 jose@entropy:/usr/src/sys/arch/macppc/compile/GENERIC macppc +# $ awk --version +# GNU Awk 3.0.3 +# Copyright (C) 1989, 1991-1997 Free Software Foundation. +# +# +# +# thanks. +# +# ___________________________ +# jose nazario, ph.d. jose@monkey.org +# http://monkey.org/~jose/ +# +# +{ + gsub(/[\ \"-\/\\:;\[\]\@\?\.\,\$]/, "") + print +} diff --git a/test/gsubtst5.in b/test/gsubtst5.in new file mode 100644 index 0000000..5d1f1a9 --- /dev/null +++ b/test/gsubtst5.in @@ -0,0 +1 @@ +This Is a Title: My Title? diff --git a/test/gsubtst5.ok b/test/gsubtst5.ok new file mode 100644 index 0000000..b038c8a --- /dev/null +++ b/test/gsubtst5.ok @@ -0,0 +1 @@ +ThisIsaTitleMyTitle diff --git a/test/gtlnbufv.awk b/test/gtlnbufv.awk new file mode 100644 index 0000000..ce7d243 --- /dev/null +++ b/test/gtlnbufv.awk @@ -0,0 +1,2 @@ +/@K@CODE/ { print ; getline temp ; print temp ;next } +{print} diff --git a/test/hex.awk b/test/hex.awk new file mode 100644 index 0000000..f9d1ad5 --- /dev/null +++ b/test/hex.awk @@ -0,0 +1,22 @@ +# Test program from Paul Eggert, eggert@cs.ucla.edu, Jan. 14, 2005 + +BEGIN { + e = "1(e)" + ex = "3e2(ex)" + x = "6e5(x)" + + print e+0, x+0 + print 0x + print 0e+x + print 0ex + print 010e2 + print 0e9.3 +} + +# Expected results: +# 1 600000 +# 06e5(x) +# 0600001 +# 03e2(ex) +# 1000 +# 00.3 diff --git a/test/hex.ok b/test/hex.ok new file mode 100644 index 0000000..59714c3 --- /dev/null +++ b/test/hex.ok @@ -0,0 +1,6 @@ +1 600000 +06e5(x) +0600001 +03e2(ex) +1000 +00.3 diff --git a/test/hsprint.awk b/test/hsprint.awk new file mode 100644 index 0000000..d17cede --- /dev/null +++ b/test/hsprint.awk @@ -0,0 +1,74 @@ +# Test which attempts to repeat examples of formatted output +# from "C a reference manual" by Harbison and Steele. +# +# In the second series of outputs formats of a type "%5%" are skipped +# since my old copy of H&S explicitely requires padding ("...%05% will +# print 0000%..."), whereas Standard says "...the complete conversion +# specification shall be %%". +# +# Michal Jaegermann - michal@phys.ualberta.ca + + +BEGIN { + zero = "0"; + alt = "#"; + spc = " "; + plus = "+"; + just = "-"; + value[0] = 45; + value[1] = 45; + value[2] = 45; + value[3] = 12.678; + value[4] = 12.678; + value[5] = 12.678; + value[6] = "zap"; + value[7] = "*"; + value[8] = -3.4567; + value[9] = -3.4567; + value[10]= -3.4567; + value[11]= -3.4567; + oper[0] = "5d"; + oper[1] = "5o"; + oper[2] = "5x"; + oper[3] = "7.2f"; + oper[4] = "10.2e"; + oper[5] = "10.4g"; + oper[6] = "5s"; + oper[7] = "5c"; + oper[8] = "7.1G"; + oper[9] = "7.2f"; + oper[10] = "10.2e"; + oper[11] = "10.4g"; + + + for (r = 0; r < 12; r += 6) { + for (j = 2; j > 0; --j) { + for (p = 2; p > 0; --p) { + for (s = 2; s > 0; --s) { + for (a = 2; a > 0; --a) { + for (z = 2; z > 0; --z) { + fmt = "%" substr(just,j,1) substr(plus,p,1) \ + substr(spc,s,1) substr(alt,a,1) substr(zero,z,1); + fstr = sprintf(\ + "%6s|%s%s|%s%s|%s%s|%s%s|%s%s|%s%s|\n", + fmt, + fmt, oper[r], + fmt, oper[r+1], + fmt, oper[r+2], + fmt, oper[r+3], + fmt, oper[r+4], + fmt, oper[r+5]); + printf(fstr, value[r], value[r+1], + value[r+2], value[r+3], + value[r+4], value[r+5]); + } + } + } + } + } + print ""; + } +} + + + diff --git a/test/hsprint.ok b/test/hsprint.ok new file mode 100644 index 0000000..55fd16f --- /dev/null +++ b/test/hsprint.ok @@ -0,0 +1,66 @@ + %| 45| 55| 2d| 12.68| 1.27e+01| 12.68| + %0|00045|00055|0002d|0012.68|001.27e+01|0000012.68| + %#| 45| 055| 0x2d| 12.68| 1.27e+01| 12.68| + %#0|00045|00055|0x02d|0012.68|001.27e+01|0000012.68| + % | 45| 55| 2d| 12.68| 1.27e+01| 12.68| + % 0| 0045|00055|0002d| 012.68| 01.27e+01| 000012.68| + % #| 45| 055| 0x2d| 12.68| 1.27e+01| 12.68| + % #0| 0045|00055|0x02d| 012.68| 01.27e+01| 000012.68| + %+| +45| 55| 2d| +12.68| +1.27e+01| +12.68| + %+0|+0045|00055|0002d|+012.68|+01.27e+01|+000012.68| + %+#| +45| 055| 0x2d| +12.68| +1.27e+01| +12.68| + %+#0|+0045|00055|0x02d|+012.68|+01.27e+01|+000012.68| + %+ | +45| 55| 2d| +12.68| +1.27e+01| +12.68| + %+ 0|+0045|00055|0002d|+012.68|+01.27e+01|+000012.68| + %+ #| +45| 055| 0x2d| +12.68| +1.27e+01| +12.68| + %+ #0|+0045|00055|0x02d|+012.68|+01.27e+01|+000012.68| + %-|45 |55 |2d |12.68 |1.27e+01 |12.68 | + %-0|45 |55 |2d |12.68 |1.27e+01 |12.68 | + %-#|45 |055 |0x2d |12.68 |1.27e+01 |12.68 | + %-#0|45 |055 |0x2d |12.68 |1.27e+01 |12.68 | + %- | 45 |55 |2d | 12.68 | 1.27e+01 | 12.68 | + %- 0| 45 |55 |2d | 12.68 | 1.27e+01 | 12.68 | + %- #| 45 |055 |0x2d | 12.68 | 1.27e+01 | 12.68 | + %- #0| 45 |055 |0x2d | 12.68 | 1.27e+01 | 12.68 | + %-+|+45 |55 |2d |+12.68 |+1.27e+01 |+12.68 | + %-+0|+45 |55 |2d |+12.68 |+1.27e+01 |+12.68 | + %-+#|+45 |055 |0x2d |+12.68 |+1.27e+01 |+12.68 | + %-+#0|+45 |055 |0x2d |+12.68 |+1.27e+01 |+12.68 | + %-+ |+45 |55 |2d |+12.68 |+1.27e+01 |+12.68 | + %-+ 0|+45 |55 |2d |+12.68 |+1.27e+01 |+12.68 | + %-+ #|+45 |055 |0x2d |+12.68 |+1.27e+01 |+12.68 | +%-+ #0|+45 |055 |0x2d |+12.68 |+1.27e+01 |+12.68 | + + %| zap| *| -3| -3.46| -3.46e+00| -3.457| + %0|00zap|0000*|-000003|-003.46|-03.46e+00|-00003.457| + %#| zap| *| -3.| -3.46| -3.46e+00| -3.457| + %#0|00zap|0000*|-00003.|-003.46|-03.46e+00|-00003.457| + % | zap| *| -3| -3.46| -3.46e+00| -3.457| + % 0|00zap|0000*|-000003|-003.46|-03.46e+00|-00003.457| + % #| zap| *| -3.| -3.46| -3.46e+00| -3.457| + % #0|00zap|0000*|-00003.|-003.46|-03.46e+00|-00003.457| + %+| zap| *| -3| -3.46| -3.46e+00| -3.457| + %+0|00zap|0000*|-000003|-003.46|-03.46e+00|-00003.457| + %+#| zap| *| -3.| -3.46| -3.46e+00| -3.457| + %+#0|00zap|0000*|-00003.|-003.46|-03.46e+00|-00003.457| + %+ | zap| *| -3| -3.46| -3.46e+00| -3.457| + %+ 0|00zap|0000*|-000003|-003.46|-03.46e+00|-00003.457| + %+ #| zap| *| -3.| -3.46| -3.46e+00| -3.457| + %+ #0|00zap|0000*|-00003.|-003.46|-03.46e+00|-00003.457| + %-|zap |* |-3 |-3.46 |-3.46e+00 |-3.457 | + %-0|zap |* |-3 |-3.46 |-3.46e+00 |-3.457 | + %-#|zap |* |-3. |-3.46 |-3.46e+00 |-3.457 | + %-#0|zap |* |-3. |-3.46 |-3.46e+00 |-3.457 | + %- |zap |* |-3 |-3.46 |-3.46e+00 |-3.457 | + %- 0|zap |* |-3 |-3.46 |-3.46e+00 |-3.457 | + %- #|zap |* |-3. |-3.46 |-3.46e+00 |-3.457 | + %- #0|zap |* |-3. |-3.46 |-3.46e+00 |-3.457 | + %-+|zap |* |-3 |-3.46 |-3.46e+00 |-3.457 | + %-+0|zap |* |-3 |-3.46 |-3.46e+00 |-3.457 | + %-+#|zap |* |-3. |-3.46 |-3.46e+00 |-3.457 | + %-+#0|zap |* |-3. |-3.46 |-3.46e+00 |-3.457 | + %-+ |zap |* |-3 |-3.46 |-3.46e+00 |-3.457 | + %-+ 0|zap |* |-3 |-3.46 |-3.46e+00 |-3.457 | + %-+ #|zap |* |-3. |-3.46 |-3.46e+00 |-3.457 | +%-+ #0|zap |* |-3. |-3.46 |-3.46e+00 |-3.457 | + diff --git a/test/icasefs.awk b/test/icasefs.awk new file mode 100644 index 0000000..86481d8 --- /dev/null +++ b/test/icasefs.awk @@ -0,0 +1,43 @@ +BEGIN { + # 1. Should print aCa + IGNORECASE = 1 + FS = "[c]" + IGNORECASE = 0 + $0 = "aCa" + print $1 + + # 2. Should print a + IGNORECASE = 1 + FS = "[c]" + $0 = "aCa" + print $1 + + # 3. Should print a + IGNORECASE = 1 + FS = "C" + IGNORECASE = 0 + $0 = "aCa" + print $1 + + # 4. Should print aCa + IGNORECASE = 1 + FS = "c" + $0 = "aCa" + print $1 + + # 5. Should print aCa + FS = "xy" + IGNORECASE = 0 + FS = "c" + IGNORECASE = 1 + $0 = "aCa" + print $1 + + # 6. Should print aCa + FS = "xy" + IGNORECASE = 0 + FS = "c" + IGNORECASE = 1 + split("aCa",a) + print a[1] +} diff --git a/test/icasefs.ok b/test/icasefs.ok new file mode 100644 index 0000000..658fac7 --- /dev/null +++ b/test/icasefs.ok @@ -0,0 +1,6 @@ +aCa +a +a +aCa +aCa +aCa diff --git a/test/icasers.awk b/test/icasers.awk new file mode 100644 index 0000000..933e3bf --- /dev/null +++ b/test/icasers.awk @@ -0,0 +1,2 @@ +BEGIN { RS = "[[:upper:]]+" } +{ print ; IGNORECASE = ! IGNORECASE } diff --git a/test/icasers.in b/test/icasers.in new file mode 100644 index 0000000..b347699 --- /dev/null +++ b/test/icasers.in @@ -0,0 +1 @@ +1111AAAA2222bbbb
\ No newline at end of file diff --git a/test/icasers.ok b/test/icasers.ok new file mode 100644 index 0000000..4f142ee --- /dev/null +++ b/test/icasers.ok @@ -0,0 +1,2 @@ +1111 +2222 diff --git a/test/igncdym.awk b/test/igncdym.awk new file mode 100644 index 0000000..3119c3e --- /dev/null +++ b/test/igncdym.awk @@ -0,0 +1,56 @@ +#From Jeffrey.B.Woodward@Hitchcock.ORG Mon Feb 21 09:33:32 2000 +#Message-id: <12901034@mailbox2.Hitchcock.ORG> +#Date: 20 Feb 2000 18:14:11 EST +#From: Jeffrey.B.Woodward@Hitchcock.ORG (Jeffrey B. Woodward) +#Subject: gawk 3.0.4 bug +#To: bug-gnu-utils@gnu.org +#Cc: arnold@gnu.org +# +#O/S: Digital UNIX 4.0D +# +#C Compiler: DEC C +# +#gawk version: 3.0.4 +# +#Sample Program: +#gawk ' + BEGIN { + pattern[1] = "bar" ; ignore[1] = 1 + pattern[2] = "foo" ; ignore[2] = 0 + } + + { + for (i = 1 ; i <= 2 ; i++) { + IGNORECASE = ignore[i] + print match($0, pattern[i]) " " pattern[i] ":" $0 + } + } +#' << -EOF- +#This is foo +#This is bar +#-EOF- +# +#Program Output: +#0 bar:This is foo +#0 foo:This is foo +#9 bar:This is bar +#9 foo:This is bar +# +# +#**Expected** Output: +#0 bar:This is foo +#9 foo:This is foo +#9 bar:This is bar +#0 foo:This is bar +# +# +#This problem appears to be directly related to IGNORECASE. If +#IGNORECASE remains constant, the program behaves as expected; +#however, switching IGNORECASE seems to causes problems - it is +#almost as though the pattern stored in the variable is treated +#as a constant and the regexp() is not recompiled(?) - just a +#guess... +# +# +#Thanks, +#-Jeff Woodward diff --git a/test/igncdym.in b/test/igncdym.in new file mode 100644 index 0000000..43e361a --- /dev/null +++ b/test/igncdym.in @@ -0,0 +1,2 @@ +This is foo +This is bar diff --git a/test/igncdym.ok b/test/igncdym.ok new file mode 100644 index 0000000..e715a6d --- /dev/null +++ b/test/igncdym.ok @@ -0,0 +1,4 @@ +0 bar:This is foo +9 foo:This is foo +9 bar:This is bar +0 foo:This is bar diff --git a/test/igncfs.awk b/test/igncfs.awk new file mode 100644 index 0000000..ebb58b2 --- /dev/null +++ b/test/igncfs.awk @@ -0,0 +1,8 @@ +BEGIN { + IGNORECASE=1 + FS="[^a-z]+" +} +{ + for (i=1; i<NF; i++) printf "%s, ", $i + printf "%s\n", $NF +} diff --git a/test/igncfs.in b/test/igncfs.in new file mode 100644 index 0000000..5598017 --- /dev/null +++ b/test/igncfs.in @@ -0,0 +1,2 @@ +this is handled ok +This is Not hanDLed Well diff --git a/test/igncfs.ok b/test/igncfs.ok new file mode 100644 index 0000000..41df9a4 --- /dev/null +++ b/test/igncfs.ok @@ -0,0 +1,2 @@ +this, is, handled, ok +This, is, Not, hanDLed, Well diff --git a/test/ignrcas2.awk b/test/ignrcas2.awk new file mode 100644 index 0000000..b7ef0cd --- /dev/null +++ b/test/ignrcas2.awk @@ -0,0 +1,13 @@ +# Based on test program submitted by: +# Date: Sun, 7 Sep 2003 23:11:51 +0200 +# From: Michael Mauch <michael.mauch@gmx.de> +# To: bug-gawk@gnu.org +# Subject: Internal error in gawk-3.1.3 with character class + +BEGIN { + IGNORECASE = 1 + if ("a" ~ /[[:alnum:]]/) + print "OK" + else + print "NOT OK" +} diff --git a/test/ignrcas2.ok b/test/ignrcas2.ok new file mode 100644 index 0000000..d86bac9 --- /dev/null +++ b/test/ignrcas2.ok @@ -0,0 +1 @@ +OK diff --git a/test/ignrcase.awk b/test/ignrcase.awk new file mode 100644 index 0000000..61d7a83 --- /dev/null +++ b/test/ignrcase.awk @@ -0,0 +1,2 @@ +BEGIN { IGNORECASE = 1 } +{ sub(/y/, ""); print } diff --git a/test/ignrcase.in b/test/ignrcase.in new file mode 100644 index 0000000..aba8e51 --- /dev/null +++ b/test/ignrcase.in @@ -0,0 +1 @@ +xYz diff --git a/test/ignrcase.ok b/test/ignrcase.ok new file mode 100644 index 0000000..d66e95c --- /dev/null +++ b/test/ignrcase.ok @@ -0,0 +1 @@ +xz diff --git a/test/inftest.awk b/test/inftest.awk new file mode 100644 index 0000000..a822617 --- /dev/null +++ b/test/inftest.awk @@ -0,0 +1,8 @@ +BEGIN { + k = 0 + x = 100 + # Added k limit test after finding some systems that didn't terminate + # the loop correctly, sigh... + do { k++; y = x ; x *= 1000; print x,y } while ( y < x && k < 1700) + print "loop terminated" +} diff --git a/test/inftest.ok b/test/inftest.ok new file mode 100644 index 0000000..83a93d0 --- /dev/null +++ b/test/inftest.ok @@ -0,0 +1,105 @@ +100000 100 +100000000 100000 +1e+11 100000000 +1e+14 1e+11 +1e+17 1e+14 +1e+20 1e+17 +1e+23 1e+20 +1e+26 1e+23 +1e+29 1e+26 +1e+32 1e+29 +1e+35 1e+32 +1e+38 1e+35 +1e+41 1e+38 +1e+44 1e+41 +1e+47 1e+44 +1e+50 1e+47 +1e+53 1e+50 +1e+56 1e+53 +1e+59 1e+56 +1e+62 1e+59 +1e+65 1e+62 +1e+68 1e+65 +1e+71 1e+68 +1e+74 1e+71 +1e+77 1e+74 +1e+80 1e+77 +1e+83 1e+80 +1e+86 1e+83 +1e+89 1e+86 +1e+92 1e+89 +1e+95 1e+92 +1e+98 1e+95 +1e+101 1e+98 +1e+104 1e+101 +1e+107 1e+104 +1e+110 1e+107 +1e+113 1e+110 +1e+116 1e+113 +1e+119 1e+116 +1e+122 1e+119 +1e+125 1e+122 +1e+128 1e+125 +1e+131 1e+128 +1e+134 1e+131 +1e+137 1e+134 +1e+140 1e+137 +1e+143 1e+140 +1e+146 1e+143 +1e+149 1e+146 +1e+152 1e+149 +1e+155 1e+152 +1e+158 1e+155 +1e+161 1e+158 +1e+164 1e+161 +1e+167 1e+164 +1e+170 1e+167 +1e+173 1e+170 +1e+176 1e+173 +1e+179 1e+176 +1e+182 1e+179 +1e+185 1e+182 +1e+188 1e+185 +1e+191 1e+188 +1e+194 1e+191 +1e+197 1e+194 +1e+200 1e+197 +1e+203 1e+200 +1e+206 1e+203 +1e+209 1e+206 +1e+212 1e+209 +1e+215 1e+212 +1e+218 1e+215 +1e+221 1e+218 +1e+224 1e+221 +1e+227 1e+224 +1e+230 1e+227 +1e+233 1e+230 +1e+236 1e+233 +1e+239 1e+236 +1e+242 1e+239 +1e+245 1e+242 +1e+248 1e+245 +1e+251 1e+248 +1e+254 1e+251 +1e+257 1e+254 +1e+260 1e+257 +1e+263 1e+260 +1e+266 1e+263 +1e+269 1e+266 +1e+272 1e+269 +1e+275 1e+272 +1e+278 1e+275 +1e+281 1e+278 +1e+284 1e+281 +1e+287 1e+284 +1e+290 1e+287 +1e+293 1e+290 +1e+296 1e+293 +1e+299 1e+296 +1e+302 1e+299 +1e+305 1e+302 +1e+308 1e+305 +Inf 1e+308 +Inf Inf +loop terminated diff --git a/test/inputred.awk b/test/inputred.awk new file mode 100644 index 0000000..6524df6 --- /dev/null +++ b/test/inputred.awk @@ -0,0 +1 @@ +BEGIN { print getline < "file" ".txt" } diff --git a/test/inputred.ok b/test/inputred.ok new file mode 100644 index 0000000..7de4d5d --- /dev/null +++ b/test/inputred.ok @@ -0,0 +1 @@ +-1.txt diff --git a/test/intest.awk b/test/intest.awk new file mode 100644 index 0000000..f030d07 --- /dev/null +++ b/test/intest.awk @@ -0,0 +1,4 @@ +BEGIN { + bool = ((b = 1) in c); + print bool, b # gawk-3.0.1 prints "0 "; should print "0 1" +} diff --git a/test/intest.ok b/test/intest.ok new file mode 100644 index 0000000..6e8183b --- /dev/null +++ b/test/intest.ok @@ -0,0 +1 @@ +0 1 diff --git a/test/intprec.awk b/test/intprec.awk new file mode 100644 index 0000000..978e9ea --- /dev/null +++ b/test/intprec.awk @@ -0,0 +1 @@ +BEGIN { printf "%.10d:%.10x\n", 5, 14 } diff --git a/test/intprec.ok b/test/intprec.ok new file mode 100644 index 0000000..8783fac --- /dev/null +++ b/test/intprec.ok @@ -0,0 +1 @@ +0000000005:000000000e diff --git a/test/iobug1.awk b/test/iobug1.awk new file mode 100644 index 0000000..5606d02 --- /dev/null +++ b/test/iobug1.awk @@ -0,0 +1,53 @@ +# From arnold@f7.net Fri Nov 26 11:53:12 2004 +# X-Envelope-From: james@nocrew.org +# X-Envelope-To: <arnold@skeeve.com> +# To: bug-gawk@gnu.org +# Subject: gawk 3.1.4: reproducible hang, regression from 3.1.3 +# From: James Troup <james@nocrew.org> +# Date: Fri, 26 Nov 2004 03:14:05 +0000 +# Message-ID: <877jo9qp36.fsf@shiri.gloaming.local> +# User-Agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) +# MIME-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# +# +# Hi, +# +# A Debian user reported[0] gawk 3.1.4 broke a (relatively) complex +# program that makes extensive use of awk, called 'apt-move'. I finally +# managed to reduced the problem down to a 3 line test case, enclosed +# below[1]. +# +# I believe the problem comes from the following code, introduced in +# 3.1.4: +# +# [io.c, line 560] +# | for (rp = red_head; rp != NULL; rp = rp->next) { +# | if ((rp->flag & RED_EOF) && tree->type == Node_redirect_pipein) { +# | if (rp->pid != -1) +# | wait_any(0); +# | } +# +# The problem is that, if we have an existing redirect which is a simple +# file redirect[b] and it's hit EOF and we try to create a new '|' +# redirect[c], this new code will try to wait(2) and if there are any +# other redirects which _did_ spawn a child (like [a]) the wait() will +# hang indefinitely waiting for it to exit. +# +# Hope that makes sense :) +# +# -- +# James +# +# [0] http://bugs.debian.org/263964 +# +# [1] +# ================================================================================ +#!/usr/bin/gawk -f + +BEGIN { + printf "" | "cat" # [a] + getline line < "/dev/null" # [b] + "true" | getline line # [c] +} +# ================================================================================ diff --git a/test/iobug1.ok b/test/iobug1.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/iobug1.ok diff --git a/test/leaddig.awk b/test/leaddig.awk new file mode 100644 index 0000000..6c001ba --- /dev/null +++ b/test/leaddig.awk @@ -0,0 +1,7 @@ +# check that values with leading digits get converted the +# right way, based on a note in comp.lang.awk. +# +# run with gawk -v x=2E -f leaddig.awk +BEGIN { + print "x =", x, (x == 2), (x == 2E0), (x == 2E), (x == 2D) +} diff --git a/test/leaddig.ok b/test/leaddig.ok new file mode 100644 index 0000000..7a9d866 --- /dev/null +++ b/test/leaddig.ok @@ -0,0 +1 @@ +x = 2E 0 0 0 0 diff --git a/test/leadnl.awk b/test/leadnl.awk new file mode 100644 index 0000000..0b7d0a9 --- /dev/null +++ b/test/leadnl.awk @@ -0,0 +1,10 @@ +BEGIN { + RS = ""; FS = "\n" +} + +{ + print "Name is: ", $1 + print "Address is: ", $2 + print "City and State are: ", $3 + print "" +} diff --git a/test/leadnl.in b/test/leadnl.in new file mode 100644 index 0000000..67c0239 --- /dev/null +++ b/test/leadnl.in @@ -0,0 +1,9 @@ + +Jane Doe +123 Main Street +Anywhere, SE 12345-6789 + +John Smith +456 Tree-lined Avenue +Smallville, MW 98765-4321 + diff --git a/test/leadnl.ok b/test/leadnl.ok new file mode 100644 index 0000000..19cb299 --- /dev/null +++ b/test/leadnl.ok @@ -0,0 +1,8 @@ +Name is: Jane Doe +Address is: 123 Main Street +City and State are: Anywhere, SE 12345-6789 + +Name is: John Smith +Address is: 456 Tree-lined Avenue +City and State are: Smallville, MW 98765-4321 + diff --git a/test/lib/awkpath.awk b/test/lib/awkpath.awk new file mode 100644 index 0000000..6663ca4 --- /dev/null +++ b/test/lib/awkpath.awk @@ -0,0 +1 @@ +BEGIN { print "Found it." } diff --git a/test/lint.awk b/test/lint.awk new file mode 100644 index 0000000..ea7b8e3 --- /dev/null +++ b/test/lint.awk @@ -0,0 +1,14 @@ +# lint.awk --- test lint variable + +BEGIN { + a[1] = 1 + LINT = 1 + delete a[2] + LINT = "" + delete a[3] + LINT = "true" + delete a[4] + LINT = 0 + delete a[5] + print "done" +} diff --git a/test/lint.ok b/test/lint.ok new file mode 100644 index 0000000..fb6e3df --- /dev/null +++ b/test/lint.ok @@ -0,0 +1,5 @@ +gawk: lint.awk:6: warning: delete: index `2' not in array `a' +gawk: lint.awk:7: warning: turning off `--lint' due to assignment to `LINT' +gawk: lint.awk:10: warning: delete: index `4' not in array `a' +gawk: lint.awk:11: warning: turning off `--lint' due to assignment to `LINT' +done diff --git a/test/litoct.awk b/test/litoct.awk new file mode 100644 index 0000000..5cfc128 --- /dev/null +++ b/test/litoct.awk @@ -0,0 +1 @@ +{ if (/a\52b/) print "match" ; else print "no match" } diff --git a/test/litoct.ok b/test/litoct.ok new file mode 100644 index 0000000..4c0be97 --- /dev/null +++ b/test/litoct.ok @@ -0,0 +1 @@ +no match diff --git a/test/longdbl.awk b/test/longdbl.awk new file mode 100644 index 0000000..bbe8aba --- /dev/null +++ b/test/longdbl.awk @@ -0,0 +1,159 @@ +# From arnold@f7.net Wed Apr 27 09:48:37 2005 +# Return-Path: <arnold@f7.net> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.12.11/8.12.11) with ESMTP id j3R6mZVm015791 +# for <arnold@localhost>; Wed, 27 Apr 2005 09:48:37 +0300 +# Received: from pop.012.net.il [84.95.5.221] +# by localhost with POP3 (fetchmail-6.2.5) +# for arnold@localhost (single-drop); Wed, 27 Apr 2005 09:48:37 +0300 (IDT) +# Received: from mtain3.012.net.il ([10.220.5.7]) +# by i_mss3.012.net.il (HyperSendmail v2004.12) +# with ESMTP id <0IFK00L1DIZ02530@i_mss3.012.net.il> for arobbins@012.net.il; +# Tue, 26 Apr 2005 22:18:36 +0300 (IDT) +# Received: from VScan3 ([10.220.20.3]) +# by i_mtain3.012.net.il (HyperSendmail v2004.12) +# with ESMTP id <0IFK007U1IZ0U980@i_mtain3.012.net.il> for arobbins@012.net.il +# (ORCPT arobbins@012.net.il); Tue, 26 Apr 2005 22:18:36 +0300 (IDT) +# Received: from i_mtain1.012.net.il ([10.220.5.1]) +# by VScan3 with InterScan Messaging Security Suite; Tue, +# 26 Apr 2005 22:15:22 +0300 +# Received: from f7.net ([209.61.216.22]) +# by i_mtain1.012.net.il (HyperSendmail v2004.12) +# with ESMTP id <0IFK009SIIYRN7G0@i_mtain1.012.net.il> for arobbins@012.net.il; +# Tue, 26 Apr 2005 22:18:33 +0300 (IDT) +# Received: (from arnold@localhost) by f7.net (8.11.7-20030920/8.11.7) +# id j3QJFAg18376 for arobbins@012.net.il; Tue, 26 Apr 2005 15:15:10 -0400 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.7-20030920/8.11.7) with ESMTP id j3QJF5J18304 for +# <arnold@skeeve.com>; Tue, 26 Apr 2005 15:15:06 -0400 +# Received: from monty-python.gnu.org ([199.232.76.173]) +# by fencepost.gnu.org with esmtp (Exim 4.34) +# id 1DQVVh-0004gD-CH for bug-gawk@gnu.org; Tue, 26 Apr 2005 15:14:17 -0400 +# Received: from Debian-exim by monty-python.gnu.org with spam-scanned +# (Exim 4.34) id 1DQVYa-0002PR-2b for bug-gawk@gnu.org; Tue, +# 26 Apr 2005 15:17:56 -0400 +# Received: from [129.183.4.8] (helo=ecfrec.frec.bull.fr) +# by monty-python.gnu.org with esmtp (Exim 4.34) +# id 1DQVYZ-0002Lr-EF for bug-gawk@gnu.org; Tue, 26 Apr 2005 15:17:15 -0400 +# Received: from localhost (localhost [127.0.0.1]) +# by ecfrec.frec.bull.fr (Postfix) with ESMTP id 5782819D907 for +# <bug-gawk@gnu.org>; Tue, 26 Apr 2005 21:12:53 +0200 (CEST) +# Received: from ecfrec.frec.bull.fr ([127.0.0.1]) +# by localhost (ecfrec.frec.bull.fr [127.0.0.1]) (amavisd-new, port 10024) +# with ESMTP id 06763-10 for <bug-gawk@gnu.org>; Tue, +# 26 Apr 2005 21:12:51 +0200 (CEST) +# Received: from ecn002.frec.bull.fr (ecn002.frec.bull.fr [129.183.4.6]) +# by ecfrec.frec.bull.fr (Postfix) with ESMTP id 4488B19D906 for +# <bug-gawk@gnu.org>; Tue, 26 Apr 2005 21:12:51 +0200 (CEST) +# Received: from daphne ([129.183.192.6]) +# by ecn002.frec.bull.fr (Lotus Domino Release 5.0.12) +# with ESMTP id 2005042621231613:3312 ; Tue, 26 Apr 2005 21:23:16 +0200 +# Date: Tue, 26 Apr 2005 21:12:49 +0200 (CEST) +# From: Jean-Marc Saffroy <jean-marc.saffroy@ext.bull.net> +# Subject: GNU awk unable to handle 64-bit ints on IA64 +# X-X-Sender: saffroyj@daphne.frec.bull.fr +# To: bug-gawk@gnu.org +# Message-id: <Pine.LNX.4.61.0504261916140.22370@daphne.frec.bull.fr> +# MIME-version: 1.0 +# Content-type: TEXT/PLAIN; charset=US-ASCII; format=flowed +# X-MIMETrack: Itemize by SMTP Server on ECN002/FR/BULL(Release 5.0.12 |February +# 13, 2003) at 26/04/2005 21:23:16, +# Serialize by Router on ECN002/FR/BULL(Release 5.0.12 |February 13, +# 2003) at 26/04/2005 21:23:16, Serialize complete at 26/04/2005 21:23:16 +# X-Virus-Scanned: by amavisd-new at frec.bull.fr +# Original-recipient: rfc822;arobbins@012.net.il +# X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on skeeve.com +# X-Spam-Level: +# X-Spam-Status: No, hits=-4.9 required=5.0 tests=BAYES_00 autolearn=ham +# version=2.63 +# Status: RO +# +# +# Hello, +# +# I have rounding problems when manipulating 64-bit ints (actually they are +# addresses) on Linux/IA64: +# +# $ echo 0xa000000100000813|./gawk '{printf("0x%lx\n",strtonum($1));}' +# 0xa000000100000800 +# $ echo 0xffffffffffffffff|./gawk '{printf("0x%lx\n",strtonum($1));}' +# 0x8000000000000000 +# $ ./gawk --version|head -1 +# GNU Awk 3.1.4 +# +# The problem seems to be that AWKNUM is defined to be a double, which has a +# 53-bit mantissa. On IA64 with gcc 3.2.3 (maybe other compilers as well) +# there is a long double type with a larger mantissa: +# +# $ grep define.*LDBL_MANT_DIG /usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/include/float.h +# #define LDBL_MANT_DIG 64 +# +# So I changed AWKNUM to be a long double; this does not seem to be +# sufficient, because of some dubious casts to double (there may be others +# left, I didn't check), see patch below. Now it's much nicer: +# +# $ echo 0xa000000100000813|./gawk '{printf("0x%lx\n",strtonum($1));}' +# 0xa000000100000813 +# $ echo 0xffffffffffffffff|./gawk '{printf("0x%lx\n",strtonum($1));}' +# 0xffffffffffffffff +# +# Maybe the gawk configure script should set AWKNUM to be a long double on +# Linux/IA64? +# +# +# Regards, +# +# -- +# Jean-Marc Saffroy - jean-marc.saffroy@ext.bull.net +# +# +# diff -ru gawk-3.1.4/awk.h gawk/awk.h +# --- gawk-3.1.4/awk.h 2004-07-26 16:11:05.000000000 +0200 +# +++ gawk/awk.h 2005-04-26 19:19:10.545419273 +0200 +# @@ -273,7 +273,7 @@ +# /* ------------------ Constants, Structures, Typedefs ------------------ */ +# +# #ifndef AWKNUM +# -#define AWKNUM double +# +#define AWKNUM long double +# #endif +# +# #ifndef TRUE +# diff -ru gawk-3.1.4/builtin.c gawk/builtin.c +# --- gawk-3.1.4/builtin.c 2004-07-13 09:55:28.000000000 +0200 +# +++ gawk/builtin.c 2005-04-26 20:53:41.211365432 +0200 +# @@ -578,7 +578,7 @@ +# char *cend = &cpbuf[30];/* chars, we lose, but seems unlikely */ +# char *cp; +# const char *fill; +# - double tmpval; +# + AWKNUM tmpval; +# char signchar = FALSE; +# size_t len; +# int zero_flag = FALSE; +# @@ -2773,16 +2773,16 @@ +# do_strtonum(NODE *tree) +# { +# NODE *tmp; +# - double d; +# + AWKNUM d; +# +# tmp = tree_eval(tree->lnode); +# +# if ((tmp->flags & (NUMBER|NUMCUR)) != 0) +# - d = (double) force_number(tmp); +# + d = (AWKNUM) force_number(tmp); +# else if (isnondecimal(tmp->stptr)) +# d = nondec2awknum(tmp->stptr, tmp->stlen); +# else +# - d = (double) force_number(tmp); +# + d = (AWKNUM) force_number(tmp); +# +# free_temp(tmp); +# return tmp_number((AWKNUM) d); +# +# +# ##################################################################################### +# This Mail Was Scanned by 012.net Anti Virus Service - Powered by TrendMicro Interscan +# +{ printf("0x%lx\n",strtonum($1)); } diff --git a/test/longdbl.in b/test/longdbl.in new file mode 100644 index 0000000..d50f0c4 --- /dev/null +++ b/test/longdbl.in @@ -0,0 +1,2 @@ +0xa000000100000813 +0xffffffffffffffff diff --git a/test/longdbl.ok b/test/longdbl.ok new file mode 100644 index 0000000..d50f0c4 --- /dev/null +++ b/test/longdbl.ok @@ -0,0 +1,2 @@ +0xa000000100000813 +0xffffffffffffffff diff --git a/test/longsub.awk b/test/longsub.awk new file mode 100644 index 0000000..07a4a85 --- /dev/null +++ b/test/longsub.awk @@ -0,0 +1 @@ +{sub( "^.*AA", "BB"); print} diff --git a/test/longsub.in b/test/longsub.in new file mode 100644 index 0000000..ab95ee1 --- /dev/null +++ b/test/longsub.in @@ -0,0 +1 @@ +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/test/longsub.ok b/test/longsub.ok new file mode 100644 index 0000000..a85633e --- /dev/null +++ b/test/longsub.ok @@ -0,0 +1 @@ +BB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/test/longwrds.awk b/test/longwrds.awk new file mode 100644 index 0000000..d4b4d92 --- /dev/null +++ b/test/longwrds.awk @@ -0,0 +1,27 @@ +# From Gawk Manual modified by bug fix and removal of punctuation + +# Invoker can customize sort command if necessary. +BEGIN { + if (!SORT) SORT = "LC_ALL=C sort" +} + +# Record every word which is used at least once +{ + for (i = 1; i <= NF; i++) { + tmp = tolower($i) + if (0 != (pos = match(tmp, /([a-z]|-)+/))) + used[substr(tmp, pos, RLENGTH)] = 1 + } +} + +#Find a number of distinct words longer than 10 characters +END { + num_long_words = 0 + for (x in used) + if (length(x) > 10) { + ++num_long_words + print x | SORT + } + print(num_long_words, "long words") | SORT + close(SORT) +} diff --git a/test/longwrds.in b/test/longwrds.in new file mode 100644 index 0000000..09c3948 --- /dev/null +++ b/test/longwrds.in @@ -0,0 +1,200 @@ +.ds PX \s-1POSIX\s+1 +.ds UX \s-1UNIX\s+1 +.ds AN \s-1ANSI\s+1 +.TH GAWK 1 "May 28 1991" "Free Software Foundation" "Utility Commands" +.SH NAME +gawk \- pattern scanning and processing language +.SH SYNOPSIS +.B gawk +[ +.B \-W +.I gawk-options +] [ +.BI \-F\^ fs +] [ +.B \-v +.IR var = val +] +.B \-f +.I program-file +[ +.B \-\^\- +] file .\^.\^. +.br +.B gawk +[ +.B \-W +.I gawk-options +] [ +.BI \-F\^ fs +] [ +.B \-v +.IR var = val +] [ +.B \-\^\- +] +.I program-text +file .\^.\^. +.SH DESCRIPTION +.I Gawk +is the GNU Project's implementation of the AWK programming language. +It conforms to the definition of the language in +the \*(PX 1003.2 Command Language And Utilities Standard +(draft 11). +This version in turn is based on the description in +.IR "The AWK Programming Language" , +by Aho, Kernighan, and Weinberger, +with the additional features defined in the System V Release 4 version +of \*(UX +.IR awk . +.I Gawk +also provides some GNU-specific extensions. +.PP +The command line consists of options to +.I gawk +itself, the AWK program text (if not supplied via the +.B \-f +option), and values to be made +available in the +.B ARGC +and +.B ARGV +pre-defined AWK variables. +.SH OPTIONS +.PP +.I Gawk +accepts the following options, which should be available on any implementation +of the AWK language. +.TP +.BI \-F fs +Use +.I fs +for the input field separator (the value of the +.B FS +predefined +variable). +.TP +\fB\-v\fI var\fR\^=\^\fIval\fR +Assign the value +.IR val , +to the variable +.IR var , +before execution of the program begins. +Such variable values are available to the +.B BEGIN +block of an AWK program. +.TP +.BI \-f " program-file" +Read the AWK program source from the file +.IR program-file , +instead of from the first command line argument. +Multiple +.B \-f +options may be used. +.TP +.B \-\^\- +Signal the end of options. This is useful to allow further arguments to the +AWK program itself to start with a ``\-''. +This is mainly for consistency with the argument parsing convention used +by most other \*(PX programs. +.PP +Following the \*(PX standard, +.IR gawk -specific +options are supplied via arguments to the +.B \-W +option. Multiple +.B \-W +options may be supplied, or multiple arguments may be supplied together +if they are separated by commas, or enclosed in quotes and separated +by white space. +Case is ignored in arguments to the +.B \-W +option. +.PP +The +.B \-W +option accepts the following arguments: +.TP \w'\fBcopyright\fR'u+1n +.B compat +Run in +.I compatibility +mode. In compatibility mode, +.I gawk +behaves identically to \*(UX +.IR awk ; +none of the GNU-specific extensions are recognized. +.TP +.PD 0 +.B copyleft +.TP +.PD +.B copyright +Print the short version of the GNU copyright information message on +the error output. +.TP +.B lint +Provide warnings about constructs that are +dubious or non-portable to other AWK implementations. +.TP +.B posix +This turns on +.I compatibility +mode, with the following additional restrictions: +.RS +.TP \w'\(bu'u+1n +\(bu +.B \ex +escape sequences are not recognized. +.TP +\(bu +The synonym +.B func +for the keyword +.B function +is not recognized. +.TP +\(bu +The operators +.B ** +and +.B **= +cannot be used in place of +.B ^ +and +.BR ^= . +.RE +.TP +.B version +Print version information for this particular copy of +.I gawk +on the error output. +This is useful mainly for knowing if the current copy of +.I gawk +on your system +is up to date with respect to whatever the Free Software Foundation +is distributing. +.PP +Any other options are flagged as illegal, but are otherwise ignored. +.SH AWK PROGRAM EXECUTION +.PP +An AWK program consists of a sequence of pattern-action statements +and optional function definitions. +.RS +.PP +\fIpattern\fB { \fIaction statements\fB }\fR +.br +\fBfunction \fIname\fB(\fIparameter list\fB) { \fIstatements\fB }\fR +.RE +.PP +.I Gawk +first reads the program source from the +.IR program-file (s) +if specified, or from the first non-option argument on the command line. +The +.B \-f +option may be used multiple times on the command line. +.I Gawk +will read the program text as if all the +.IR program-file s +had been concatenated together. This is useful for building libraries +of AWK functions, without having to include them in each new AWK diff --git a/test/longwrds.ok b/test/longwrds.ok new file mode 100644 index 0000000..01faa84 --- /dev/null +++ b/test/longwrds.ok @@ -0,0 +1,21 @@ +20 long words +compatibility +concatenated +consistency +definitions +description +distributing +fistatements +gawk-options +gnu-specific +identically +implementation +implementations +information +non-portable +pattern-action +pre-defined +program-file +program-text +programming +restrictions diff --git a/test/manglprm.awk b/test/manglprm.awk new file mode 100644 index 0000000..3a4306c --- /dev/null +++ b/test/manglprm.awk @@ -0,0 +1,41 @@ +# From beebe@sunshine.math.utah.edu Thu Jul 10 00:36:16 2003 +# Date: Wed, 9 Jul 2003 06:42:54 -0600 (MDT) +# From: "Nelson H. F. Beebe" <beebe@math.utah.edu> +# To: "Arnold Robbins" <arnold@skeeve.com> +# Cc: beebe@math.utah.edu +# X-US-Mail: "Center for Scientific Computing, Department of Mathematics, 110 +# LCB, University of Utah, 155 S 1400 E RM 233, Salt Lake City, UT +# 84112-0090, USA" +# X-Telephone: +1 801 581 5254 +# X-FAX: +1 801 585 1640, +1 801 581 4148 +# X-URL: http://www.math.utah.edu/~beebe +# Subject: gawk-3.1.3 (and earlier): reproducible core dump +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# +# I have a reproducible core dump in gawk-3.1.3, and recent gawk +# versions. +# +# Consider the following test program, reduced from a much larger one: +# +# % cat gawk-dump.awk + + { process($0) } + + function out_debug(s) + { + print s + } + + function process(s, n,parts) + { + out_debug("Buffer = [" protect(Buffer) "]") + Buffer = Buffer s + n = split(Buffer,parts,"\n") + } + + function protect(s) + { + gsub("\n", "\\n", s) + return (s) + } diff --git a/test/manglprm.in b/test/manglprm.in new file mode 100644 index 0000000..73709ba --- /dev/null +++ b/test/manglprm.in @@ -0,0 +1 @@ +Testing diff --git a/test/manglprm.ok b/test/manglprm.ok new file mode 100644 index 0000000..b13c456 --- /dev/null +++ b/test/manglprm.ok @@ -0,0 +1 @@ +Buffer = [] diff --git a/test/manyfiles.awk b/test/manyfiles.awk new file mode 100644 index 0000000..8651a3a --- /dev/null +++ b/test/manyfiles.awk @@ -0,0 +1 @@ +{ print $2 > ("junk/" $1) } diff --git a/test/manyfiles.ok b/test/manyfiles.ok new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/manyfiles.ok @@ -0,0 +1 @@ +1 diff --git a/test/match1.awk b/test/match1.awk new file mode 100644 index 0000000..6d4791b --- /dev/null +++ b/test/match1.awk @@ -0,0 +1,9 @@ +BEGIN { + data = "foooobazbarrrrr" + match(data, /(fo+).+(bar*)/, arr) + for (i = 0; i in arr; i++) { + printf("arr[%d] = \"%s\"\n", i, arr[i]) + printf("arr[%d, \"start\"] = %s, arr[%d, \"length\"] = %s\n", + i, arr[i, "start"], i, arr[i, "length"]) + } +} diff --git a/test/match1.ok b/test/match1.ok new file mode 100644 index 0000000..4490db2 --- /dev/null +++ b/test/match1.ok @@ -0,0 +1,6 @@ +arr[0] = "foooobazbarrrrr" +arr[0, "start"] = 1, arr[0, "length"] = 15 +arr[1] = "foooo" +arr[1, "start"] = 1, arr[1, "length"] = 5 +arr[2] = "barrrrr" +arr[2, "start"] = 9, arr[2, "length"] = 7 diff --git a/test/match2.awk b/test/match2.awk new file mode 100644 index 0000000..b4d9544 --- /dev/null +++ b/test/match2.awk @@ -0,0 +1,6 @@ +function f(a, b, c) +{ + print match("foo", "bar", f) +} + +BEGIN { f(1, 2, 3) } diff --git a/test/match2.ok b/test/match2.ok new file mode 100644 index 0000000..a4a91e8 --- /dev/null +++ b/test/match2.ok @@ -0,0 +1,2 @@ +gawk: match2.awk:3: fatal: match: third argument is not an array +EXIT CODE: 2 diff --git a/test/math.awk b/test/math.awk new file mode 100644 index 0000000..90a01dd --- /dev/null +++ b/test/math.awk @@ -0,0 +1,10 @@ +BEGIN { + pi = 3.1415927 + printf "cos(%f) = %f\n", pi/4, cos(pi/4) + printf "sin(%f) = %f\n", pi/4, sin(pi/4) + e = exp(1) + printf "e = %f\n", e + printf "log(e) = %f\n", log(e) + printf "sqrt(pi ^ 2) = %f\n", sqrt(pi ^ 2) + printf "atan2(1, 1) = %f\n", atan2(1, 1) +} diff --git a/test/math.ok b/test/math.ok new file mode 100644 index 0000000..a396a5b --- /dev/null +++ b/test/math.ok @@ -0,0 +1,6 @@ +cos(0.785398) = 0.707107 +sin(0.785398) = 0.707107 +e = 2.718282 +log(e) = 1.000000 +sqrt(pi ^ 2) = 3.141593 +atan2(1, 1) = 0.785398 diff --git a/test/membug1.awk b/test/membug1.awk new file mode 100644 index 0000000..cb76958 --- /dev/null +++ b/test/membug1.awk @@ -0,0 +1 @@ +{ one != one = $1 } diff --git a/test/membug1.in b/test/membug1.in new file mode 100644 index 0000000..af7e09d --- /dev/null +++ b/test/membug1.in @@ -0,0 +1,2 @@ +yes +yes diff --git a/test/membug1.ok b/test/membug1.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/membug1.ok diff --git a/test/messages.awk b/test/messages.awk new file mode 100644 index 0000000..555f6e3 --- /dev/null +++ b/test/messages.awk @@ -0,0 +1,9 @@ +# This is a demo of different ways of printing with gawk. Try it +# with and without -c (compatibility) flag, redirecting output +# from gawk to a file or not. Some results can be quite unexpected. +BEGIN { + print "Goes to a file out1" > "out1" + print "Normal print statement" + print "This printed on stdout" > "/dev/stdout" + print "You blew it!" > "/dev/stderr" +} diff --git a/test/minusstr.awk b/test/minusstr.awk new file mode 100644 index 0000000..d427719 --- /dev/null +++ b/test/minusstr.awk @@ -0,0 +1 @@ +BEGIN { print-"6" } diff --git a/test/minusstr.ok b/test/minusstr.ok new file mode 100644 index 0000000..3cfb5ef --- /dev/null +++ b/test/minusstr.ok @@ -0,0 +1 @@ +-6 diff --git a/test/mmap8k.in b/test/mmap8k.in new file mode 100644 index 0000000..0500ddf --- /dev/null +++ b/test/mmap8k.in @@ -0,0 +1,143 @@ +XXXXXXXX.com ALTERNET 9305 930528 1500.00 startup +XXXXXXXX.com ALTERNET 9305 930624 94.38 Line-9305 +XXXXXXXX.com ALTERNET 9306 930624 104.49 Line-9306 +XXXXXXXX.com ALTERNET 9306 930624 649.16 Line-install +XXXXXXXX.com ALTERNET 9306 930624 166.67 TCP-slip +XXXXXXXX.com ALTERNET 9307 930624 104.49 Line-9307 +XXXXXXXX.com ALTERNET 9307 930624 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9308 930701 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9308 930701 104.49 line-9308 +XXXXXXXX.com PAYMENT 9307 930731 1500.00 1870 +XXXXXXXX.com ALTERNET 9309 930801 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9309 930801 104.49 line-9309 +XXXXXXXX.com INTEREST 9307 930801 22.50 +XXXXXXXX.com CREDADJ 9308 930805 22.50 waive interest +XXXXXXXX.com PAYMENT 9308 930820 1723.68 1982 +XXXXXXXX.com ALTERNET 9310 930901 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9310 930901 104.49 line-9310 +XXXXXXXX.com PAYMENT 9310 931001 708.98 2313 +XXXXXXXX.com ALTERNET 9311 931001 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9311 931001 104.49 line-9311 +XXXXXXXX.com INTEREST 9309 931001 5.32 +XXXXXXXX.com CREDADJ 9310 931007 5.32 waive int-9309 +XXXXXXXX.com ALTERNET 9312 931101 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9312 931101 104.49 line-9312 +XXXXXXXX.com PAYMENT 9311 931120 354.49 002701 +XXXXXXXX.com ALTERNET 9401 931201 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9401 931201 104.49 line-9401 +XXXXXXXX.com PAYMENT 9312 931218 354.49 2884 +XXXXXXXX.com ALTERNET 9402 940101 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9402 940101 104.49 line-9402 +XXXXXXXX.com INTEREST 9312 940101 5.32 +XXXXXXXX.com PAYMENT 9401 940122 354.49 3084 +XXXXXXXX.com ALTERNET 9403 940201 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9403 940201 104.49 line-9403 +XXXXXXXX.com INTEREST 9401 940201 5.40 +XXXXXXXX.com PAYMENT 9402 940207 354.49 3140 +XXXXXXXX.com CREDADJ 9402 940211 5.32 interest-9402 +XXXXXXXX.com CREDADJ 9402 940211 5.40 interest-9403 +XXXXXXXX.com ALTERNET 9404 940301 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9404 940301 104.49 line-9404 +XXXXXXXX.com INTEREST 9402 940301 5.32 +XXXXXXXX.com PAYMENT 9403 940310 354.49 003307 +XXXXXXXX.com PAYMENT 9403 940324 354.49 3446 +XXXXXXXX.com ALTERNET 9405 940401 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9405 940401 104.49 line-9405 +XXXXXXXX.com ALTERNET 9406 940501 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9406 940501 104.49 line-9406 +XXXXXXXX.com INTEREST 9404 940501 5.40 +XXXXXXXX.com PAYMENT 9405 940509 359.81 003819 +XXXXXXXX.com ALTERNET 9407 940601 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9407 940601 104.49 line-9407 +XXXXXXXX.com INTEREST 9405 940601 5.40 +XXXXXXXX.com PAYMENT 9406 940603 354.49 004025 +XXXXXXXX.com ALTERNET 9408 940701 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9408 940701 104.49 line-9408 +XXXXXXXX.com INTEREST 9406 940701 5.48 +XXXXXXXX.com PAYMENT 9407 940725 354.49 004350 +XXXXXXXX.com ALTERNET 9409 940801 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9409 940801 104.49 line-9409 +XXXXXXXX.com INTEREST 9407 940801 5.56 +XXXXXXXX.com PAYMENT 9408 940808 354.49 004454 +XXXXXXXX.com ALTERNET 9409 940811 0.00 startup +XXXXXXXX.com EQUIPMENT 9408 940831 399.00 ATL6402-1 +XXXXXXXX.com EQUIPMENT 9408 940831 2295.00 NBClassicPac-1 +XXXXXXXX.com EQUIPMENT 9408 940831 1060.00 Syn35-1+ship +XXXXXXXX.com ALTERNET 9410 940901 250.00 TCP-slip +XXXXXXXX.com ALTERNET 9410 940901 104.49 line-9410 +XXXXXXXX.com INTEREST 9408 940901 5.64 +XXXXXXXX.com PAYMENT 9409 940906 354.49 004677 +XXXXXXXX.com CREDADJ 9409 940921 124.95 TCP-slip-9409 +XXXXXXXX.com CREDADJ 9409 940921 52.20 line-9409 +XXXXXXXX.com CREDADJ 9410 940921 250.00 TCP-slip-9410 +XXXXXXXX.com CREDADJ 9410 940921 104.49 line-9410 +XXXXXXXX.com ALTERNET 9409 940921 397.50 TCP-56k-local recon +XXXXXXXX.com ALTERNET 9409 940921 87.45 line-9409 recon +XXXXXXXX.com ALTERNET 9410 940921 795.00 TCP-56k-local recon +XXXXXXXX.com ALTERNET 9410 940921 174.90 line-9410 recon +XXXXXXXX.com ALTERNET 9411 941001 795.00 TCP-56k-local +XXXXXXXX.com ALTERNET 9411 941001 174.90 line-9411 +XXXXXXXX.com INTEREST 9409 941001 54.06 +XXXXXXXX.com PAYMENT 9410 941017 354.49 5026 +XXXXXXXX.com ALTERNET 9412 941101 795.00 TCP-56k-local +XXXXXXXX.com ALTERNET 9412 941101 174.90 line-9412 +XXXXXXXX.com INTEREST 9410 941101 85.93 +XXXXXXXX.com PAYMENT 9411 941114 969.90 005274 +XXXXXXXX.com ALTERNET 9501 941201 795.00 TCP-56k-local +XXXXXXXX.com ALTERNET 9501 941201 174.90 line-9501 +XXXXXXXX.com INTEREST 9411 941201 87.22 +XXXXXXXX.com PAYMENT 9412 941219 4723.90 5590 +XXXXXXXX.com ALTERNET 9502 950101 795.00 TCP-56k-local +XXXXXXXX.com ALTERNET 9502 950101 174.90 line-9502 +XXXXXXXX.com INTEREST 9412 950101 32.22 +XXXXXXXX.com PAYMENT 9501 950103 1893.11 5766 +XXXXXXXX.com ALTERNET 9503 950201 795.00 TCP-56k-local-old +XXXXXXXX.com ALTERNET 9503 950201 174.90 line-9503 +XXXXXXXX.com INTEREST 9501 950201 18.85 +XXXXXXXX.com PAYMENT 9502 950207 969.90 6044 +XXXXXXXX.com ALTERNET 9504 950301 795.00 TCP-56k-local-old +XXXXXXXX.com ALTERNET 9504 950301 174.90 line-9504 +XXXXXXXX.com INTEREST 9502 950301 19.13 +XXXXXXXX.com PAYMENT 9503 950307 969.90 6408 +XXXXXXXX.com ALTERNET 9504 950316 3000.00 startup TCP-bt1-128k%5 +XXXXXXXX.com PAYMENT 9503 950327 969.90 6594 +XXXXXXXX.com ALTERNET 9505 950401 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9505 950401 556.60 line-9505 +XXXXXXXX.com EQUIPMENT 9504 950410 1595.00 cisco2501-1 +XXXXXXXX.com CREDADJ 9504 950417 503.50 TCP-56k-local +XXXXXXXX.com CREDADJ 9504 950417 116.60 line-9504 +XXXXXXXX.com ALTERNET 9504 950417 448.80 line-install +XXXXXXXX.com ALTERNET 9504 950417 752.02 TCP-bt1-128k%5 recon +XXXXXXXX.com ALTERNET 9504 950417 371.00 line-9504 recon +XXXXXXXX.com PAYMENT 9504 950424 3000.00 6841 +XXXXXXXX.com ALTERNET 9506 950501 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9506 950501 556.60 line-9506 +XXXXXXXX.com PAYMENT 9505 950505 2049.86 6985 +XXXXXXXX.com PAYMENT 9505 950531 3924.22 7179 +XXXXXXXX.com ALTERNET 9507 950601 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9507 950601 556.60 line-9507 +XXXXXXXX.com PAYMENT 9506 950607 1744.10 7232 +XXXXXXXX.com ALTERNET 9508 950701 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9508 950701 556.60 line-9508 +XXXXXXXX.com PAYMENT 9507 950705 1744.10 7641 +XXXXXXXX.com ALTERNET 9509 950801 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9509 950801 556.60 line-9509 +XXXXXXXX.com PAYMENT 9508 950803 1744.10 7914 +XXXXXXXX.com ALTERNET 9510 950901 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9510 950901 556.60 line-9510 +XXXXXXXX.com PAYMENT 9509 950905 1744.10 8203 +XXXXXXXX.com ALTERNET 9511 951001 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9511 951001 556.60 line-9511 +XXXXXXXX.com PAYMENT 9510 951003 1744.10 8508 +XXXXXXXX.com ALTERNET 9512 951101 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9512 951101 556.60 line-9512 +XXXXXXXX.com PAYMENT 9511 951103 2129.83 8837 +XXXXXXXX.com ALTERNET 9601 951201 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9601 951201 556.60 line-9601 +XXXXXXXX.com PAYMENT 9512 951204 2129.83 9131 +XXXXXXXX.com ALTERNET 9602 960101 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9602 960101 556.60 line-9602 +XXXXXXXX.com PAYMENT 9601 960103 1744.10 9456 +XXXXXXXX.com ALTERNET 9603 960201 1187.50 TCP-bt1-128k%5.00 +XXXXXXXX.com ALTERNET 9603 960201 556.60 line-9603 +XXXXXXXX.com PAYMENT 9602 960205 1358.37 9834 diff --git a/test/nasty.awk b/test/nasty.awk new file mode 100644 index 0000000..b9c20c8 --- /dev/null +++ b/test/nasty.awk @@ -0,0 +1,92 @@ +#From hankedr@manatee.dms.auburn.edu Tue Oct 13 22:15:59 1998 +#Return-Path: <hankedr@manatee.dms.auburn.edu> +#Received: from cssun.mathcs.emory.edu (cssun.mathcs.emory.edu [170.140.150.1]) +# by dmx.netvision.net.il (8.9.0.Beta5/8.8.6) with ESMTP id PAA03924 +# for <arobbins@netvision.net.il>; Tue, 13 Oct 1998 15:32:13 +0200 (IST) +#Received: from mescaline.gnu.org (we-refuse-to-spy-on-our-users@mescaline.gnu.org [158.121.106.21]) by cssun.mathcs.emory.edu (8.7.5/8.6.9-940818.01cssun) with ESMTP id KAA11644 for <arnold@mathcs.emory.edu>; Tue, 13 Oct 1998 10:22:32 -0400 (EDT) +#Received: from manatee.dms.auburn.edu (manatee.dms.auburn.edu [131.204.53.104]) +# by mescaline.gnu.org (8.9.1a/8.9.1) with ESMTP id KAA03250 +# for <arnold@gnu.org>; Tue, 13 Oct 1998 10:25:32 -0400 +#Received: (from hankedr@localhost) +# by manatee.dms.auburn.edu (8.9.1a/8.9.1) id JAA13348; +# Tue, 13 Oct 1998 09:22:29 -0500 (CDT) +#Date: Tue, 13 Oct 1998 09:22:29 -0500 (CDT) +#Message-Id: <199810131422.JAA13348@manatee.dms.auburn.edu> +#From: Darrel Hankerson <hankedr@dms.auburn.edu> +#To: arnold@gnu.org +#In-reply-to: <199810131313.QAA31784@alpha.netvision.net.il> (message from +# Aharon Robbins on Tue, 13 Oct 1998 16:10:36 +0200) +#Subject: Re: full text of bug report? +#Mime-Version: 1.0 +#Content-Type: text/plain; charset=US-ASCII +#X-UIDL: bf3fce492dad4ab030c561e7b2f27d0a +#Status: RO +# +# Do you have the full text of the a = a "\n" f() bug report? +# I can't find it.... I'm not sure there really is a bug. +# +#Yes, see below. +# +#His example has unnecessary fragments (in particular, the use of +#gensub is irrelevant). As I wrote to you earlier, the interesting +#question for me is: +# +# Is the concatenation result undefined? If the result is defined or +# implementation-dependent, then gawk has a bug. +# +# +#=== Original report ===================================================== +#From: Attila Torcsvari <arcdev@mail.matav.hu> +#To: "'bug-gnu-utils@prep.ai.mit.edu'" <bug-gnu-utils@gnu.org> +#Subject: gawk 3.0.3 bug +#Date: Thu, 17 Sep 1998 18:12:13 +0200 +#MIME-Version: 1.0 +#Content-Transfer-Encoding: 7bit +#Resent-From: bug-gnu-utils@gnu.org +#X-Mailing-List: <bug-gnu-utils@gnu.org> archive/latest/3396 +#X-Loop: bug-gnu-utils@gnu.org +#Precedence: list +#Resent-Sender: bug-gnu-utils-request@gnu.org +#Content-Transfer-Encoding: 7bit +#Content-Type: text/plain; charset="us-ascii" +#Content-Length: 618 +# +#Bug-gnuers, +#please pass it to the responsible. +# +#The following generates something interesting: +# +BEGIN{ +a="aaaaa" +a=a a #10 +a=a a #20 +a=a a #40 +a=a a #80 +a=a a #160 +a=a a # i.e. a is long enough + +a=a"\n"f() # this causes the trouble +print a # guess the result +} + +function f() +{ +#print "a before: ", a +#a=gensub("a","123,","g",a) # 'a' will be just a bit longer (4 times, but still should fit: 4*160=640) +gsub(/a/, "123", a) +#print "a after: ", a +return "X" +} +# +#Possible reason: +#during f the a is modified, +#it can be even freed, because gensub modifies its size +#the printout contains trash. +# +#Used version: VC compiled WinNT 32 bit Intel. +# +#Regards, +# +#Attila Torcsvari +#Arcanum Development +# diff --git a/test/nasty.ok b/test/nasty.ok new file mode 100644 index 0000000..0ee1a73 --- /dev/null +++ b/test/nasty.ok @@ -0,0 +1,2 @@ +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +X diff --git a/test/nasty2.awk b/test/nasty2.awk new file mode 100644 index 0000000..cb0bd6d --- /dev/null +++ b/test/nasty2.awk @@ -0,0 +1,20 @@ +# Based on nasty.awk, test same thing for printf +# +BEGIN { +a="aaaaa" +a=a a #10 +a=a a #20 +a=a a #40 +a=a a #80 +a=a a #160 +a=a a # i.e. a is long enough + +printf("a = %s, f() = %s\n", a, f()) +print a +} + +function f() +{ +gsub(/a/, "123", a) +return "X" +} diff --git a/test/nasty2.ok b/test/nasty2.ok new file mode 100644 index 0000000..9b62bf0 --- /dev/null +++ b/test/nasty2.ok @@ -0,0 +1,2 @@ +a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, f() = X +123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123 diff --git a/test/negexp.awk b/test/negexp.awk new file mode 100644 index 0000000..3b3a3c0 --- /dev/null +++ b/test/negexp.awk @@ -0,0 +1 @@ +BEGIN { a = -2; print 10^a } diff --git a/test/negexp.ok b/test/negexp.ok new file mode 100644 index 0000000..6e6566c --- /dev/null +++ b/test/negexp.ok @@ -0,0 +1 @@ +0.01 diff --git a/test/nested.awk b/test/nested.awk new file mode 100644 index 0000000..5284b55 --- /dev/null +++ b/test/nested.awk @@ -0,0 +1,123 @@ +# From james@ruari-quinn.demon.co.uk Thu Jun 5 11:43:58 2003 +# Return-Path: <james@ruari-quinn.demon.co.uk> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h558eVui012655 +# for <arnold@localhost>; Thu, 5 Jun 2003 11:43:58 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Thu, 05 Jun 2003 11:43:58 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Thu Jun 5 11:43:29 2003) +# X-From_: james@ruari-quinn.demon.co.uk Wed Jun 4 20:09:54 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h54H9oY05088 for <arobbins@actcom.co.il>; +# Wed, 4 Jun 2003 20:09:52 +0300 (EET DST) +# (rfc931-sender: smtp.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h54HB8To002721 +# for <arobbins@actcom.co.il>; Wed, 4 Jun 2003 20:11:09 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.7/8.11.6) with ESMTP id h54H9li15411 +# for <arnold@skeeve.com>; Wed, 4 Jun 2003 13:09:47 -0400 +# Received: from monty-python.gnu.org ([199.232.76.173]) +# by fencepost.gnu.org with esmtp (Exim 4.20) +# id 19Nbli-0001kD-BL +# for bug-gawk@gnu.org; Wed, 04 Jun 2003 13:09:46 -0400 +# Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.20) +# id 19NbZ5-0004V2-71 +# for bug-gawk@gnu.org; Wed, 04 Jun 2003 12:56:43 -0400 +# Received: from cicero.e-mis.co.uk ([212.240.194.162]) +# by monty-python.gnu.org with esmtp (Exim 4.20) +# id 19NbYK-0003c7-AP +# for bug-gawk@gnu.org; Wed, 04 Jun 2003 12:55:56 -0400 +# Received: from [10.139.58.254] (helo=tacitus) +# by cicero.e-mis.co.uk with esmtp (Exim 3.35 #1 (Debian)) +# id 19NbWO-0007Qv-00 +# for <bug-gawk@gnu.org>; Wed, 04 Jun 2003 17:53:56 +0100 +# Received: from james by tacitus with local (Exim 3.36 #1 (Debian)) +# id 19NbWO-0000cK-00 +# for <bug-gawk@gnu.org>; Wed, 04 Jun 2003 17:53:56 +0100 +# To: bug-gawk@gnu.org +# Subject: 3.1.0 regression +# Mail-Copies-To: never +# From: James Troup <james@nocrew.org> +# User-Agent: Gnus/5.090017 (Oort Gnus v0.17) Emacs/20.7 (gnu/linux) +# Date: Wed, 04 Jun 2003 17:53:56 +0100 +# Message-ID: <874r35wzq3.fsf@nocrew.org> +# MIME-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# Sender: James Troup <james@ruari-quinn.demon.co.uk> +# X-Spam-Status: No, hits=-3.9 required=5.0 +# tests=EMAIL_ATTRIBUTION,SIGNATURE_SHORT_DENSE,SPAM_PHRASE_00_01, +# USER_AGENT +# version=2.41 +# X-Spam-Level: +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: R +# +# Hi Aharon, +# +# This bug report comes from the Debian bug tracking system. You can +# view the full log at: +# +# http://bugs.debian.org/188345 +# +# Like my other bug, this is a regression from 3.1.0 and I've reproduced +# this problem with 3.1.2d. +# +# "Nikita V. Youshchenko" <yoush@cs.msu.su> writes: +# +# | Package: gawk +# | Version: 1:3.1.2-2 +# | Severity: normal +# | Tags: sid +# | +# | After upgrading gawk from woody to sid, I found one of my scripts not +# | working. I explored this a little and found minimal script to reproduce +# | the problem. +# | +# | File bug.awk is the following: +# | +BEGIN { + WI_total = 0 +} +{ + WI_total++ + { + split ( $1, sws, "_" ) + a = sws[1] + } + print(sws[1]) + print(a) +} +# | +# | The second print should output the same what first print poutputs, but +# | with gawk 3.1.2-2 it outputs nothing: +# | > echo a_b | gawk -f bug.awk +# | a +# | +# | > +# | +# | With gawk from stable I get what expexted: +# | > echo a_b | gawk -f bug.awk +# | a +# | a +# | > +# | +# | If I remove "WI_total++" line, bug disapperas +# | +# | -- System Information: +# | Debian Release: 3.0 +# | Architecture: i386 +# | Kernel: Linux zigzag 2.4.19 16:49:13 MSK 2003 i686 +# | Locale: LANG=ru_RU.KOI8-R, LC_CTYPE=ru_RU.KOI8-R +# | +# | Versions of packages gawk depends on: +# | ii libc6 2.3.1-16 GNU C Library: Shared libraries an +# | +# | -- no debconf information +# +# -- +# James +# diff --git a/test/nested.in b/test/nested.in new file mode 100644 index 0000000..31b658b --- /dev/null +++ b/test/nested.in @@ -0,0 +1 @@ +a_b diff --git a/test/nested.ok b/test/nested.ok new file mode 100644 index 0000000..7e8a165 --- /dev/null +++ b/test/nested.ok @@ -0,0 +1,2 @@ +a +a diff --git a/test/nfldstr.awk b/test/nfldstr.awk new file mode 100644 index 0000000..09b4a2b --- /dev/null +++ b/test/nfldstr.awk @@ -0,0 +1,13 @@ +$1 == 0 { + print "bug" +} +{ + $0 = "0" + if (!$0) + print "another bug" + $0 = a = "0" + if (!$0) + print "yet another bug" + if ($1) + print "a buggie" +} diff --git a/test/nfldstr.in b/test/nfldstr.in new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/test/nfldstr.in @@ -0,0 +1 @@ + diff --git a/test/nfldstr.ok b/test/nfldstr.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/nfldstr.ok diff --git a/test/nfneg.awk b/test/nfneg.awk new file mode 100644 index 0000000..6d54ee0 --- /dev/null +++ b/test/nfneg.awk @@ -0,0 +1 @@ +BEGIN { NF -= 2 ; print } diff --git a/test/nfneg.ok b/test/nfneg.ok new file mode 100644 index 0000000..bcdb037 --- /dev/null +++ b/test/nfneg.ok @@ -0,0 +1,2 @@ +gawk: nfneg.awk:1: fatal: NF set to negative value +EXIT CODE: 2 diff --git a/test/nfset.awk b/test/nfset.awk new file mode 100644 index 0000000..09ebd08 --- /dev/null +++ b/test/nfset.awk @@ -0,0 +1 @@ +{ NF = 5 ; print } diff --git a/test/nfset.in b/test/nfset.in new file mode 100644 index 0000000..43329b5 --- /dev/null +++ b/test/nfset.in @@ -0,0 +1,5 @@ +1 2 +1 2 3 4 +1 2 3 4 5 +1 2 3 4 5 6 7 8 +1 diff --git a/test/nfset.ok b/test/nfset.ok new file mode 100644 index 0000000..3ba48ae --- /dev/null +++ b/test/nfset.ok @@ -0,0 +1,5 @@ +1 2 +1 2 3 4 +1 2 3 4 5 +1 2 3 4 5 +1 diff --git a/test/nlfldsep.awk b/test/nlfldsep.awk new file mode 100644 index 0000000..4fac81d --- /dev/null +++ b/test/nlfldsep.awk @@ -0,0 +1,2 @@ +BEGIN { RS = "A" } +{print NF; for (i = 1; i <= NF; i++) print $i ; print ""} diff --git a/test/nlfldsep.in b/test/nlfldsep.in new file mode 100644 index 0000000..7b2317f --- /dev/null +++ b/test/nlfldsep.in @@ -0,0 +1,5 @@ +some stuff +more stuffA +junk +stuffA +final diff --git a/test/nlfldsep.ok b/test/nlfldsep.ok new file mode 100644 index 0000000..6684916 --- /dev/null +++ b/test/nlfldsep.ok @@ -0,0 +1,13 @@ +4 +some +stuff +more +stuff + +2 +junk +stuff + +1 +final + diff --git a/test/nlinstr.awk b/test/nlinstr.awk new file mode 100644 index 0000000..f403715 --- /dev/null +++ b/test/nlinstr.awk @@ -0,0 +1,8 @@ +BEGIN { RS = "" } + +{ + if (/^@/) + print "not ok" + else + print "ok" +} diff --git a/test/nlinstr.in b/test/nlinstr.in new file mode 100644 index 0000000..65aaaf9 --- /dev/null +++ b/test/nlinstr.in @@ -0,0 +1,2 @@ +line 1 +@line 2 diff --git a/test/nlinstr.ok b/test/nlinstr.ok new file mode 100644 index 0000000..9766475 --- /dev/null +++ b/test/nlinstr.ok @@ -0,0 +1 @@ +ok diff --git a/test/nlstrina.awk b/test/nlstrina.awk new file mode 100644 index 0000000..41dbd5f --- /dev/null +++ b/test/nlstrina.awk @@ -0,0 +1,77 @@ +# From E.Ab@chem.rug.nl Wed Aug 2 13:16:53 2000 +# Received: from mail.actcom.co.il +# by localhost with POP3 (fetchmail-5.1.2) +# for arnold@localhost (single-drop); Wed, 02 Aug 2000 13:16:53 -0400 (EDT) +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.9.1a/actcom-0.2) id MAA21699 for <arobbins@actcom.co.il>; +# Wed, 2 Aug 2000 12:20:38 +0300 (EET DST) +# (rfc931-sender: lmail.actcom.co.il [192.114.47.13]) +# Received: from freefriends.org (freefriends.org [63.85.55.109]) +# by lmail.actcom.co.il (8.9.3/8.9.1) with ESMTP id LAA22723 +# for <arobbins@actcom.co.il>; Wed, 2 Aug 2000 11:23:22 +0300 +# Received: from mescaline.gnu.org (mescaline.gnu.org [158.121.106.21]) +# by freefriends.org (8.9.3/8.9.3) with ESMTP id FAA23582 +# for <arnold@skeeve.com>; Wed, 2 Aug 2000 05:18:59 -0400 +# Received: from dep.chem.rug.nl (dep.chem.rug.nl [129.125.7.81]) +# by mescaline.gnu.org (8.9.1a/8.9.1) with ESMTP id FAA30670; +# Wed, 2 Aug 2000 05:20:24 -0400 +# Received: from rugmd34.chem.rug.nl (rugmd34.chem.rug.nl [129.125.42.34]) +# by dep.chem.rug.nl (8.9.3/8.9.3/Debian 8.9.3-21) with ESMTP id LAA17089; +# Wed, 2 Aug 2000 11:20:23 +0200 +# Received: from chem.rug.nl (localhost [127.0.0.1]) by rugmd34.chem.rug.nl (980427.SGI.8.8.8/980728.SGI.AUTOCF) via ESMTP id LAA25392; Wed, 2 Aug 2000 11:20:22 +0200 (MDT) +# Sender: E.Ab@chem.rug.nl +# Message-ID: <3987E7D5.2BDC5FD3@chem.rug.nl> +# Date: Wed, 02 Aug 2000 11:20:21 +0200 +# From: Eiso AB <E.Ab@chem.rug.nl> +# X-Mailer: Mozilla 4.72C-SGI [en] (X11; I; IRIX 6.5 IP32) +# X-Accept-Language: en +# MIME-Version: 1.0 +# To: bug-gnu-utils@gnu.org, arnold@gnu.org +# Subject: bug? [GNU Awk 3.0.5] +# +# Content-Type: text/plain; charset=us-ascii +# Content-Transfer-Encoding: 7bit +# X-UIDL: \f8"!(8G!!ZL$#!h>X!! +# Status: R +# +# hi Arnold, +# +# +# Please try the script beneath... +# I'm not sure if this is a bug or not, but I would expect +# the empty string as an array index just to be treated +# like any other string +# +# so if ("" in ta) would be true, and for ( i in ta ) should loop only once. +# +BEGIN { + v="" + ta[v]++ + if ( v in ta) print "a",v,++ta[v],ta[v] + print "b",v,++ta[v],ta[v] + for( i in ta) print "c",++c,i,ta[i] +} +# +# goodluck, Eiso +# +# -- +# _________ +# _______________________________/ Eiso AB \_________________________ +# +# o +# +# o Dept. of Biochemistry +# University of Groningen +# The Netherlands +# o +# . . +# o ^ mailto:eiso@chem.rug.nl +# | - _ mailto:eiso@dds.nl +# \__|__/ http://md.chem.rug.nl/~eiso +# | tel 4326 +# | +# / \ +# / \ +# | | +# ________ ._| |_. ________________________________________________ +# diff --git a/test/nlstrina.ok b/test/nlstrina.ok new file mode 100644 index 0000000..690f1a2 --- /dev/null +++ b/test/nlstrina.ok @@ -0,0 +1,3 @@ +a 2 2 +b 3 3 +c 1 3 diff --git a/test/noeffect.awk b/test/noeffect.awk new file mode 100644 index 0000000..b67a5c5 --- /dev/null +++ b/test/noeffect.awk @@ -0,0 +1,5 @@ +BEGIN { + s == "hello, world"; + s + 1 + ;; +} diff --git a/test/noeffect.ok b/test/noeffect.ok new file mode 100644 index 0000000..d2da47a --- /dev/null +++ b/test/noeffect.ok @@ -0,0 +1,4 @@ +gawk: noeffect.awk:3: warning: statement may have no effect +gawk: noeffect.awk:4: warning: statement may have no effect +gawk: noeffect.awk:2: warning: reference to uninitialized variable `s' +gawk: noeffect.awk:3: warning: reference to uninitialized variable `s' diff --git a/test/nofmtch.awk b/test/nofmtch.awk new file mode 100644 index 0000000..2ea2249 --- /dev/null +++ b/test/nofmtch.awk @@ -0,0 +1 @@ +BEGIN { printf "%3\n" } diff --git a/test/nofmtch.ok b/test/nofmtch.ok new file mode 100644 index 0000000..297d159 --- /dev/null +++ b/test/nofmtch.ok @@ -0,0 +1,2 @@ +gawk: nofmtch.awk:1: warning: [s]printf: format specifier does not have control letter +%3 diff --git a/test/noloop1.awk b/test/noloop1.awk new file mode 100644 index 0000000..ae461e3 --- /dev/null +++ b/test/noloop1.awk @@ -0,0 +1,70 @@ +# From jhart@avcnet.bates.edu Sun Oct 6 16:05:21 2002 +# Return-Path: <jhart@avcnet.bates.edu> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.11.6/8.11.6) with ESMTP id g96D5Jf28053 +# for <arnold@localhost>; Sun, 6 Oct 2002 16:05:21 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Sun, 06 Oct 2002 16:05:21 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Sun Oct 6 16:06:39 2002) +# X-From_: jhart@avcnet.bates.edu Sun Oct 6 15:31:59 2002 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id g96CVrS27315 for <arobbins@actcom.co.il>; +# Sun, 6 Oct 2002 15:31:54 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by lmail.actcom.co.il (8.11.6/8.11.6) with ESMTP id g96CVqY01629 +# for <arobbins@actcom.co.il>; Sun, 6 Oct 2002 15:31:52 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.6/8.11.6) with ESMTP id g96CVp418974 +# for <arnold@skeeve.com>; Sun, 6 Oct 2002 08:31:51 -0400 +# Received: from monty-python.gnu.org ([199.232.76.173]) +# by fencepost.gnu.org with esmtp (Exim 4.10) +# id 17yAZa-00055o-00 +# for bug-gawk@gnu.org; Sun, 06 Oct 2002 08:31:50 -0400 +# Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.10) +# id 17yAZE-0007eB-00 +# for bug-gawk@gnu.org; Sun, 06 Oct 2002 08:31:29 -0400 +# Received: from avcnet.bates.edu ([134.181.128.62]) +# by monty-python.gnu.org with esmtp (Exim 4.10) +# id 17yAZ9-0007X3-00 +# for bug-gawk@gnu.org; Sun, 06 Oct 2002 08:31:23 -0400 +# Received: from a5514a.bates.edu (www.bates.edu [134.181.128.62]) +# by avcnet.bates.edu (8.9.3/8.9.3) with ESMTP id IAA05400 +# for <bug-gawk@gnu.org>; Sun, 6 Oct 2002 08:31:20 -0400 +# Date: Sun, 6 Oct 2002 08:36:54 -0400 +# Mime-Version: 1.0 (Apple Message framework v482) +# Content-Type: text/plain; charset=US-ASCII; format=flowed +# Subject: Infinite loop in sub/gsub +# From: jhart@avcnet.bates.edu +# To: bug-gawk@gnu.org +# Content-Transfer-Encoding: 7bit +# Message-Id: <4BC4A4F0-D928-11D6-8E78-00039384A9CC@mail.avcnet.org> +# X-Mailer: Apple Mail (2.482) +# X-Spam-Status: No, hits=0.3 required=5.0 +# tests=NO_REAL_NAME,SPAM_PHRASE_00_01,USER_AGENT_APPLEMAIL +# version=2.41 +# X-Spam-Level: +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: RO +# +# This command line: +# +# echo "''Italics with an apostrophe'' embedded''"|gawk -f test.awk +# +# where test.awk contains this instruction: +# +/''/ { sub(/''(.?[^']+)*''/, "<em>&</em>"); } +# +# puts gawk 3.11 into an infinite loop. Whereas, this command works: +# +# echo "''Italics with an apostrophe' embedded''"|gawk -f test.awk +# +# +# +# Platform: Mac OS X 10.1.5/Darwin Kernel Version 5.5: Thu May 30 14:51:26 +# PDT 2002; root:xnu/xnu-201.42.3.obj~1/RELEASE_PPC +# +# diff --git a/test/noloop1.in b/test/noloop1.in new file mode 100644 index 0000000..da2c2f2 --- /dev/null +++ b/test/noloop1.in @@ -0,0 +1 @@ +''Italics with an apostrophe'' embedded'' diff --git a/test/noloop1.ok b/test/noloop1.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/noloop1.ok diff --git a/test/noloop2.awk b/test/noloop2.awk new file mode 100644 index 0000000..ae461e3 --- /dev/null +++ b/test/noloop2.awk @@ -0,0 +1,70 @@ +# From jhart@avcnet.bates.edu Sun Oct 6 16:05:21 2002 +# Return-Path: <jhart@avcnet.bates.edu> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.11.6/8.11.6) with ESMTP id g96D5Jf28053 +# for <arnold@localhost>; Sun, 6 Oct 2002 16:05:21 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Sun, 06 Oct 2002 16:05:21 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Sun Oct 6 16:06:39 2002) +# X-From_: jhart@avcnet.bates.edu Sun Oct 6 15:31:59 2002 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id g96CVrS27315 for <arobbins@actcom.co.il>; +# Sun, 6 Oct 2002 15:31:54 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by lmail.actcom.co.il (8.11.6/8.11.6) with ESMTP id g96CVqY01629 +# for <arobbins@actcom.co.il>; Sun, 6 Oct 2002 15:31:52 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.6/8.11.6) with ESMTP id g96CVp418974 +# for <arnold@skeeve.com>; Sun, 6 Oct 2002 08:31:51 -0400 +# Received: from monty-python.gnu.org ([199.232.76.173]) +# by fencepost.gnu.org with esmtp (Exim 4.10) +# id 17yAZa-00055o-00 +# for bug-gawk@gnu.org; Sun, 06 Oct 2002 08:31:50 -0400 +# Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.10) +# id 17yAZE-0007eB-00 +# for bug-gawk@gnu.org; Sun, 06 Oct 2002 08:31:29 -0400 +# Received: from avcnet.bates.edu ([134.181.128.62]) +# by monty-python.gnu.org with esmtp (Exim 4.10) +# id 17yAZ9-0007X3-00 +# for bug-gawk@gnu.org; Sun, 06 Oct 2002 08:31:23 -0400 +# Received: from a5514a.bates.edu (www.bates.edu [134.181.128.62]) +# by avcnet.bates.edu (8.9.3/8.9.3) with ESMTP id IAA05400 +# for <bug-gawk@gnu.org>; Sun, 6 Oct 2002 08:31:20 -0400 +# Date: Sun, 6 Oct 2002 08:36:54 -0400 +# Mime-Version: 1.0 (Apple Message framework v482) +# Content-Type: text/plain; charset=US-ASCII; format=flowed +# Subject: Infinite loop in sub/gsub +# From: jhart@avcnet.bates.edu +# To: bug-gawk@gnu.org +# Content-Transfer-Encoding: 7bit +# Message-Id: <4BC4A4F0-D928-11D6-8E78-00039384A9CC@mail.avcnet.org> +# X-Mailer: Apple Mail (2.482) +# X-Spam-Status: No, hits=0.3 required=5.0 +# tests=NO_REAL_NAME,SPAM_PHRASE_00_01,USER_AGENT_APPLEMAIL +# version=2.41 +# X-Spam-Level: +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: RO +# +# This command line: +# +# echo "''Italics with an apostrophe'' embedded''"|gawk -f test.awk +# +# where test.awk contains this instruction: +# +/''/ { sub(/''(.?[^']+)*''/, "<em>&</em>"); } +# +# puts gawk 3.11 into an infinite loop. Whereas, this command works: +# +# echo "''Italics with an apostrophe' embedded''"|gawk -f test.awk +# +# +# +# Platform: Mac OS X 10.1.5/Darwin Kernel Version 5.5: Thu May 30 14:51:26 +# PDT 2002; root:xnu/xnu-201.42.3.obj~1/RELEASE_PPC +# +# diff --git a/test/noloop2.in b/test/noloop2.in new file mode 100644 index 0000000..b5cb226 --- /dev/null +++ b/test/noloop2.in @@ -0,0 +1 @@ +''Italics with an apostrophe' embedded'' diff --git a/test/noloop2.ok b/test/noloop2.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/noloop2.ok diff --git a/test/nondec.awk b/test/nondec.awk new file mode 100644 index 0000000..a070c91 --- /dev/null +++ b/test/nondec.awk @@ -0,0 +1 @@ +BEGIN { print 0x81c3e8, 0x744018, 00.34 } diff --git a/test/nondec.ok b/test/nondec.ok new file mode 100644 index 0000000..8f0404a --- /dev/null +++ b/test/nondec.ok @@ -0,0 +1 @@ +8504296 7618584 0.34 diff --git a/test/nondec2.awk b/test/nondec2.awk new file mode 100644 index 0000000..681d283 --- /dev/null +++ b/test/nondec2.awk @@ -0,0 +1,104 @@ +# From arnold@f7.net Wed Jun 15 08:25:21 2005 +# Return-Path: <arnold@f7.net> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.12.11/8.12.11) with ESMTP id j5F5P3VC014658 +# for <arnold@localhost>; Wed, 15 Jun 2005 08:25:21 +0300 +# Received: from pop.012.net.il [84.95.5.221] +# by localhost with POP3 (fetchmail-6.2.5) +# for arnold@localhost (single-drop); Wed, 15 Jun 2005 08:25:21 +0300 (IDT) +# Received: from mtain2.012.net.il ([10.220.5.4]) +# by i_mss3.012.net.il (HyperSendmail v2004.12) +# with ESMTP id <0II300LQOPS7DA10@i_mss3.012.net.il> for arobbins@012.net.il; +# Wed, 15 Jun 2005 04:07:19 +0300 (IDT) +# Received: from VSCAN1 ([10.220.20.1]) +# by i_mtain2.012.net.il (HyperSendmail v2004.12) +# with ESMTP id <0II300ETQPS7IEZ4@i_mtain2.012.net.il> for arobbins@012.net.il +# (ORCPT arobbins@012.net.il); Wed, 15 Jun 2005 04:07:19 +0300 (IDT) +# Received: from i_mtain2.012.net.il ([10.220.5.4]) +# by VSCAN1 with InterScan Messaging Security Suite; Wed, +# 15 Jun 2005 04:03:15 +0300 +# Received: from f7.net ([209.61.216.22]) +# by i_mtain2.012.net.il (HyperSendmail v2004.12) +# with ESMTP id <0II300H7VPS5P1O2@i_mtain2.012.net.il> for arobbins@012.net.il; +# Wed, 15 Jun 2005 04:07:18 +0300 (IDT) +# Received: (from arnold@localhost) by f7.net (8.11.7-20030920/8.11.7) +# id j5F13DT21530 for arobbins@012.net.il; Tue, 14 Jun 2005 21:03:14 -0400 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.7-20030920/8.11.7) with ESMTP id j5F136p21454 for +# <arnold@skeeve.com>; Tue, 14 Jun 2005 21:03:06 -0400 +# Received: from monty-python.gnu.org ([199.232.76.173]) +# by fencepost.gnu.org with esmtp (Exim 4.34) +# id 1DiMJ6-0002fe-Av for bug-gawk@gnu.org; Tue, 14 Jun 2005 21:03:04 -0400 +# Received: from Debian-exim by monty-python.gnu.org with spam-scanned +# (Exim 4.34) id 1DiMIp-0003lM-I4 for bug-gawk@gnu.org; Tue, +# 14 Jun 2005 21:02:47 -0400 +# Received: from [66.187.233.31] (helo=mx1.redhat.com) +# by monty-python.gnu.org with esmtp (TLS-1.0:DHE_RSA_3DES_EDE_CBC_SHA:24) +# (Exim 4.34) id 1DiMIp-0003l4-8g for bug-gawk@gnu.org; Tue, +# 14 Jun 2005 21:02:47 -0400 +# Received: from int-mx1.corp.redhat.com +# (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.11/8.12.11) +# with ESMTP id j5F11EGn027669 for <bug-gawk@gnu.org>; Tue, +# 14 Jun 2005 21:01:14 -0400 +# Received: from lacrosse.corp.redhat.com +# (lacrosse.corp.redhat.com [172.16.52.154]) by int-mx1.corp.redhat.com +# (8.11.6/8.11.6) with ESMTP id j5F11Eu01536 for <bug-gawk@gnu.org>; Tue, +# 14 Jun 2005 21:01:14 -0400 +# Received: from [192.168.7.71] (vpn50-10.rdu.redhat.com [172.16.50.10]) +# by lacrosse.corp.redhat.com (8.11.6/8.11.6) with ESMTP id j5F118s03225 for +# <bug-gawk@gnu.org>; Tue, 14 Jun 2005 21:01:09 -0400 +# Date: Tue, 14 Jun 2005 17:57:55 -0700 +# From: Ulrich Drepper <drepper@redhat.com> +# Subject: non-decimal variable parameters cause crashes +# To: bug-gawk@gnu.org +# Message-id: <42AF7D13.5010901@redhat.com> +# Organization: Red Hat, Inc. +# MIME-version: 1.0 +# Content-type: multipart/signed; micalg=pgp-sha1; +# protocol="application/pgp-signature"; +# boundary=------------enig9DEC74140126C224E7DE3E54 +# X-Accept-Language: en-us, en +# X-Enigmail-Version: 0.91.0.0 +# User-Agent: Mozilla Thunderbird 1.0.2-6 (X11/20050513) +# Original-recipient: rfc822;arobbins@012.net.il +# X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on skeeve.com +# X-Spam-Level: +# X-Spam-Status: No, hits=-4.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham +# version=2.63 +# Status: R +# +# This is an OpenPGP/MIME signed message (RFC 2440 and 3156) +# --------------enig9DEC74140126C224E7DE3E54 +# Content-Type: text/plain; charset=UTF-8 +# Content-Transfer-Encoding: quoted-printable +# +# Running +# +# gawk --non-decimal-data -v a=3D0x1 'BEGIN { print a+0 }' +# +# currently crashes. More details including a patch at +# +# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=3D160421 +# +# --=20 +# =E2=9E=A7 Ulrich Drepper =E2=9E=A7 Red Hat, Inc. =E2=9E=A7 444 Castro St = +# =E2=9E=A7 Mountain View, CA =E2=9D=96 +# +# +# --------------enig9DEC74140126C224E7DE3E54 +# Content-Type: application/pgp-signature; name="signature.asc" +# Content-Description: OpenPGP digital signature +# Content-Disposition: attachment; filename="signature.asc" +# +# -----BEGIN PGP SIGNATURE----- +# Version: GnuPG v1.4.1 (GNU/Linux) +# Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org +# +# iD8DBQFCr30T2ijCOnn/RHQRAp9LAKC+w/vhXW73ps1Pxcy+VGPrT1Su+ACguPnV +# VstZcFJgJ5GZ1YvDExsOZZI= +# =xmXh +# -----END PGP SIGNATURE----- +# +# --------------enig9DEC74140126C224E7DE3E54-- +# +BEGIN { print a+0 } diff --git a/test/nondec2.ok b/test/nondec2.ok new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/nondec2.ok @@ -0,0 +1 @@ +1 diff --git a/test/nonl.awk b/test/nonl.awk new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/test/nonl.awk @@ -0,0 +1 @@ +0
\ No newline at end of file diff --git a/test/nonl.ok b/test/nonl.ok new file mode 100644 index 0000000..24bd9b7 --- /dev/null +++ b/test/nonl.ok @@ -0,0 +1 @@ +gawk: nonl.awk:1: warning: source file does not end in newline diff --git a/test/noparms.awk b/test/noparms.awk new file mode 100644 index 0000000..2c7ccc7 --- /dev/null +++ b/test/noparms.awk @@ -0,0 +1 @@ +function x(a, b, c , ,) {} diff --git a/test/noparms.ok b/test/noparms.ok new file mode 100644 index 0000000..504c4e4 --- /dev/null +++ b/test/noparms.ok @@ -0,0 +1,5 @@ +gawk: noparms.awk:1: function x(a, b, c , ,) {} +gawk: noparms.awk:1: ^ syntax error +gawk: noparms.awk:1: function x(a, b, c , ,) {} +gawk: noparms.awk:1: ^ syntax error +EXIT CODE: 1 diff --git a/test/nors.in b/test/nors.in new file mode 100644 index 0000000..f90d9ec --- /dev/null +++ b/test/nors.in @@ -0,0 +1 @@ +A B C D E
\ No newline at end of file diff --git a/test/nors.ok b/test/nors.ok new file mode 100644 index 0000000..54d5aab --- /dev/null +++ b/test/nors.ok @@ -0,0 +1,2 @@ +E +E diff --git a/test/nulrsend.awk b/test/nulrsend.awk new file mode 100644 index 0000000..6b8cb8c --- /dev/null +++ b/test/nulrsend.awk @@ -0,0 +1,112 @@ +# From murata@nips.ac.jp Tue Aug 6 08:02:14 2002 +# Return-Path: <murata@nips.ac.jp> +# Received: from localhost (aahz [127.0.0.1]) +# by skeeve.com (8.11.2/8.11.2) with ESMTP id g7652Ej01784 +# for <arnold@localhost>; Tue, 6 Aug 2002 08:02:14 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.7.4) +# for arnold@localhost (single-drop); Mon, 05 Aug 2002 22:02:14 -0700 (PDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Tue Aug 6 08:13:06 2002) +# X-From_: murata@nips.ac.jp Tue Aug 6 07:26:32 2002 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id g764QTu27770 for <arobbins@actcom.co.il>; +# Tue, 6 Aug 2002 07:26:30 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by lmail.actcom.co.il (8.11.6/8.11.6) with ESMTP id g764QRi04673 +# for <arobbins@actcom.co.il>; Tue, 6 Aug 2002 07:26:28 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.6/8.11.6) with ESMTP id g764QQ920486 +# for <arnold@skeeve.com>; Tue, 6 Aug 2002 00:26:26 -0400 +# Received: from ccms.nips.ac.jp ([133.48.72.2]) +# by fencepost.gnu.org with smtp (Exim 3.35 #1 (Debian)) +# id 17bvvL-00011b-00 +# for <bug-gawk@gnu.org>; Tue, 06 Aug 2002 00:26:23 -0400 +# Received: (from murata@localhost) +# by ccms.nips.ac.jp (8.9.3+3.2W/3.7W) id NAA01026; +# Tue, 6 Aug 2002 13:26:21 +0900 +# Date: Tue, 6 Aug 2002 13:26:21 +0900 +# Message-Id: <200208060426.NAA01026@ccms.nips.ac.jp> +# To: bug-gawk@gnu.org +# Cc: murata@nips.ac.jp +# Subject: Bug Report (gawk) +# From: murata@nips.ac.jp (MURATA Yasuhisa) +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=US-ASCII +# X-Mailer: mnews [version 1.21PL5] 1999-04/04(Sun) +# +# Hello, I report a bug. +# +# +# == PROGRAM (filename: atest.awk) == +BEGIN { + RS="" +} + +NR==1 { + print 1 + RS="\n" + next +} + +NR==2 { + print 2 + RS="" + next +} + +NR==3 { + print 3 + RS="\n" + next +} +# ==== +# +# == DATA (filename: atest.txt) == +# 1111 +# +# 2222 +# +# ==== +# note: last line is "\n". +# +# +# == RUN (gawk) == +# > gawk -f atest.awk atest.txt +# 1 +# 2 +# (no stop!) +# ==== +# +# == RUN (nawk) == +# > nawk -f atest.awk atest.txt +# 1 +# 2 +# 3 +# ==== +# +# == VERSION == +# > gawk --version +# GNU Awk 3.1.1 +# Copyright (C) 1989, 1991-2002 Free Software Foundation. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# == +# +# -- +# MURATA Yasuhisa, Technical Staff +# National Institute for Physiological Sciences +# E-mail: murata@nips.ac.jp diff --git a/test/nulrsend.in b/test/nulrsend.in new file mode 100644 index 0000000..af3eba1 --- /dev/null +++ b/test/nulrsend.in @@ -0,0 +1,4 @@ +1111 + +2222 + diff --git a/test/nulrsend.ok b/test/nulrsend.ok new file mode 100644 index 0000000..1191247 --- /dev/null +++ b/test/nulrsend.ok @@ -0,0 +1,2 @@ +1 +2 diff --git a/test/numindex.awk b/test/numindex.awk new file mode 100644 index 0000000..1762e45 --- /dev/null +++ b/test/numindex.awk @@ -0,0 +1,55 @@ +#To: bug-gnu-utils@gnu.org +#cc: arnold@gnu.org +#Subject: Possible bug in GNU Awk 3.0.4 +#Date: Wed, 24 Nov 1999 21:47:24 +0000 +#From: Daniel Elphick <de397@ecs.soton.ac.uk> +#Message-Id: <E11qkG4-0000l0-00@cameron> +# +#This is a multipart MIME message. +# +#--==_Exmh_-11192982200 +#Content-Type: text/plain; charset=us-ascii +# +# +#When I use the attached awk script unique on the attached data file, it +#reports that all 4 lines of the data are the same. Using mawk it correctly +#reports that there are no repeats. +# +#I don't know if there are limits on the size of associative array keys for the +#purposes of reliable indexing but if there is then it is not (obviously) +#documented. +# +# +#--==_Exmh_-11192982200 +#Content-Type: text/plain ; name="data"; charset=us-ascii +#Content-Description: data +#Content-Disposition: attachment; filename="data" +# +#322322111111112232231111 +#322322111111112213223111 +#322322111111112211132231 +#322322111111112211113223 +# +#--==_Exmh_-11192982200 +#Content-Type: text/plain ; name="unique"; charset=us-ascii +#Content-Description: unique +#Content-Disposition: attachment; filename="unique" +# +{ + if($0 in a) + { + printf("line %d has been seen before at line %d\n", NR, a[$0]) + repeat_count += 1 + } + else + { + a[$0] = NR + } + count += 1 +} +END { +# printf("%d %f%%\n", repeat_count, (float)repeat_count / count * 100) + printf("%d %f%%\n", repeat_count, repeat_count / count * 100) +} +# +#--==_Exmh_-11192982200-- diff --git a/test/numindex.in b/test/numindex.in new file mode 100644 index 0000000..3852058 --- /dev/null +++ b/test/numindex.in @@ -0,0 +1,4 @@ +322322111111112232231111 +322322111111112213223111 +322322111111112211132231 +322322111111112211113223 diff --git a/test/numindex.ok b/test/numindex.ok new file mode 100644 index 0000000..8e086f6 --- /dev/null +++ b/test/numindex.ok @@ -0,0 +1 @@ +0 0.000000% diff --git a/test/numsubstr.awk b/test/numsubstr.awk new file mode 100644 index 0000000..7a30993 --- /dev/null +++ b/test/numsubstr.awk @@ -0,0 +1 @@ +{ print substr(1000+$1, 2) } diff --git a/test/numsubstr.in b/test/numsubstr.in new file mode 100644 index 0000000..ac65c36 --- /dev/null +++ b/test/numsubstr.in @@ -0,0 +1,3 @@ +5000 +10000 +5000 diff --git a/test/numsubstr.ok b/test/numsubstr.ok new file mode 100644 index 0000000..86ec13c --- /dev/null +++ b/test/numsubstr.ok @@ -0,0 +1,3 @@ +000 +1000 +000 diff --git a/test/octsub.awk b/test/octsub.awk new file mode 100644 index 0000000..65e9689 --- /dev/null +++ b/test/octsub.awk @@ -0,0 +1 @@ +BEGIN{ ++x[03]; print "/" x[0] "/" x[3] "/"} diff --git a/test/octsub.ok b/test/octsub.ok new file mode 100644 index 0000000..95cbdc7 --- /dev/null +++ b/test/octsub.ok @@ -0,0 +1 @@ +//1/ diff --git a/test/ofmt.awk b/test/ofmt.awk new file mode 100644 index 0000000..a7b63d6 --- /dev/null +++ b/test/ofmt.awk @@ -0,0 +1,53 @@ +# From dragon!knorke.saar.de!florian Wed Jul 16 10:47:27 1997 +# Return-Path: <dragon!knorke.saar.de!florian> +# Message-ID: <19970716164451.63610@knorke.saar.de> +# Date: Wed, 16 Jul 1997 16:44:51 +0200 +# From: Florian La Roche <florian@knorke.saar.de> +# To: bug-gnu-utils@prep.ai.mit.edu +# CC: arnold@gnu.ai.mit.edu +# Subject: bug in gawk 3.0.3 +# MIME-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# X-Mailer: Mutt 0.76 +# Status: R +# Content-Length: 1725 +# X-Lines: 177 +# X-Display-Position: 0 +# +# I have a problem with gawk 3.0.3 on linux with libc 5.4.33. +# The memory is corrupted, if I use OFMT = "%.12g". +# With OFMT = "%.6g" evrything works fine, but I don't have enough +# digits for the computation. +# +# Thanks a lot, +# Florian La Roche +# +# Here is the sample awk-Script together with sample data: +# +BEGIN { + OFMT = "%.12g" + big = 99999999999 + lowest = big + small = 0 + highest = small + dir = "" + } +$0 ~ /^[0-9]+$/ { + # some old awks do not think $0 is numeric, so use $1 + if ($1 < lowest) + lowest = $1 + if ($1 > highest) + highest = $1 + next +} +$0 ~ /\/\.:$/ { + if (dir != "") { + if (highest != small) + print dir, highest, lowest + else + print dir, "-", "-" + } + dir = substr($0, 1, length($0)-3) # trim off /.: + lowest = big + highest = small +} diff --git a/test/ofmt.in b/test/ofmt.in new file mode 100644 index 0000000..6fffdfe --- /dev/null +++ b/test/ofmt.in @@ -0,0 +1,136 @@ +alt/binaries/warez/crypto/.: +.. +... + +alt/fan/douglas-adams/.: +.. +... +7478 +7479 +7480 +7481 +7482 +7483 +7484 +7485 +7486 +7490 +7488 +7489 +7491 +7407 +7408 +7409 +7410 +7411 +7412 +7413 +7414 +7415 +7416 +7417 +7418 +7419 +7420 +7421 +7422 +7423 +7424 +7425 +7426 +7427 +7428 +7429 +7430 +7431 +7432 +7433 +7434 +7435 +7436 +7437 +7438 +7439 +7440 +7441 +7442 +7443 +7444 +7445 +7446 +7447 +7455 +7449 +7450 +7451 +7452 +7453 +7454 +7456 +7457 +7458 +7459 +7460 +7461 +7462 +7463 +7464 +7465 +7466 +7467 +7468 +7469 +7470 +7471 +7472 +7473 +7475 +7477 + +alt/os/linux/.: +.. +... + + +alt/security/.: +.. +... +pgp +ripem +keydist +index +9617 +9618 +9619 +9620 +9625 +9621 +9626 +9622 +9623 +9624 +9627 +9628 +9629 +9630 +9631 +9632 +9633 +9634 +9636 +9637 +9638 +9639 +9640 +9641 + +alt/security/index/.: +.. +... + +alt/security/keydist/.: +.. +... +253 + +/.: diff --git a/test/ofmt.ok b/test/ofmt.ok new file mode 100644 index 0000000..389c1ef --- /dev/null +++ b/test/ofmt.ok @@ -0,0 +1,6 @@ +alt/binaries/warez/crypto - - +alt/fan/douglas-adams 7491 7407 +alt/os/linux - - +alt/security 9641 9617 +alt/security/index - - +alt/security/keydist 253 253 diff --git a/test/ofmtbig.awk b/test/ofmtbig.awk new file mode 100644 index 0000000..f1b2384 --- /dev/null +++ b/test/ofmtbig.awk @@ -0,0 +1,125 @@ +# +# [USEMAP] +# +# Problem Report gnu/7821 +# +# awk in free(): warning: chunk is already free. +# +# Confidential +# no +# +# Severity +# serious +# +# Priority +# medium +# +# Responsible +# freebsd-bugs@freebsd.org +# +# State +# suspended +# +# Class +# sw-bug +# +# Submitter-Id +# current-users +# +# Arrival-Date +# Thu Sep 3 10:30:00 PDT 1998 +# +# Last-Modified +# Thu Sep 17 02:04:26 PDT 1998 +# +# Originator +# Alexander Litvin archer@lucky.net +# +# Organization +# +# +#Lucky Net ltd. +# +# Release +# FreeBSD 3.0-CURRENT i386 +# +# Environment +# +# +#FreeBSD grape.carrier.kiev.ua 3.0-CURRENT FreeBSD 3.0-CURRENT #121: Thu Sep 3 +#1 +#1:21:44 EEST 1998 archer@grape.carrier.kiev.ua:/usr/src/sys/compile/GRAPE +#i +#386 +# +# Description +# +# +#The problem first appeared when GNU awk in 3.0-CURRENT was apgraded to +#3.0.3. I run C-News, which uses awk extensively. After awk apgrade C-News +#expire stopped to work. It appeared that some GNU awk 3.0.3 programms when +#given absolutely legitimate input fail, giving out a number of messages: +# +#awk in free(): warning: chunk is already free. +# +# How-To-Repeat +# +# +#Run the following awk program (it is cut out of C-News expire scripts). +#I was not able to cut it down more -- omitting some portions of the +#code (e.g. OFMT line), make error go away in this case, though it +#certainly does not fix awk. +# +#----------------cut-here---------------- +#!/usr/bin/awk -f +BEGIN { + OFMT = "%.12g" + big = 99999999999 + lowest = big + small = 0 + highest = small +} + +$0 ~ /^[0-9]+$/ { + if ($1 < lowest) + lowest = $1 + if ($1 > highest) + highest = $1 + next +} + +$0 ~ /^[a-z]+/ { + print dir, highest, lowest + dir = $0 + lowest = big + highest = small +} +#----------------cut-here---------------- +# +#To get the error, just give this script the following input: +#----------------cut-here---------------- +#a +#1 +#b +#----------------cut-here---------------- +# +# Fix +# +# +#I was not able to track the error in awk sources. As a workaround, +#I just reverted to GNU awk 2.15.5. +# +# Audit-Trail +# +# +#State-Changed-From-To: open-suspended +#State-Changed-By: phk +#State-Changed-When: Thu Sep 17 02:04:08 PDT 1998 +#State-Changed-Why: +#reported to GNU maintainer. +# +# Submit Followup +# _________________________________________________________________ +# +# +# www@freebsd.org diff --git a/test/ofmtbig.in b/test/ofmtbig.in new file mode 100644 index 0000000..f1e80ce --- /dev/null +++ b/test/ofmtbig.in @@ -0,0 +1,3 @@ +a +1 +b diff --git a/test/ofmtbig.ok b/test/ofmtbig.ok new file mode 100644 index 0000000..0fe9251 --- /dev/null +++ b/test/ofmtbig.ok @@ -0,0 +1,2 @@ + 0 99999999999 +a 1 1 diff --git a/test/ofmtfidl.awk b/test/ofmtfidl.awk new file mode 100644 index 0000000..181e071 --- /dev/null +++ b/test/ofmtfidl.awk @@ -0,0 +1,85 @@ +# From djones@zoonami.com Wed Jun 13 17:46:27 2001 +# Received: from mail.actcom.co.il [192.114.47.13] +# by localhost with POP3 (fetchmail-5.5.0) +# for arnold@localhost (single-drop); Wed, 13 Jun 2001 17:46:27 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Wed Jun 13 17:47:09 2001) +# X-From_: djones@zoonami.com Wed Jun 13 17:45:40 2001 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.9.1a/actcom-0.2) id RAA07057 for <arobbins@actcom.co.il>; +# Wed, 13 Jun 2001 17:45:34 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from billohost.com (www.billohost.com [209.196.35.10]) +# by lmail.actcom.co.il (8.11.2/8.11.2) with ESMTP id f5DEjSO24028 +# for <arobbins@actcom.co.il>; Wed, 13 Jun 2001 17:45:33 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by billohost.com (8.9.3/8.9.3) with ESMTP id KAA24625 +# for <arnold@skeeve.com>; Wed, 13 Jun 2001 10:44:43 -0400 +# Received: from topcat.zoonami.com ([193.112.141.198]) +# by fencepost.gnu.org with esmtp (Exim 3.16 #1 (Debian)) +# id 15ABtZ-0000FQ-00 +# for <bug-gawk@gnu.org>; Wed, 13 Jun 2001 10:45:21 -0400 +# Received: from topcat.zoonami.com (localhost [127.0.0.1]) +# by topcat.zoonami.com (8.9.3/8.9.3) with ESMTP id OAA28329; +# Wed, 13 Jun 2001 14:45:54 GMT +# (envelope-from djones@topcat.zoonami.com) +# Message-Id: <200106131445.OAA28329@topcat.zoonami.com> +# To: bug-gawk@gnu.org +# cc: David Jones <drj@pobox.com> +# Subject: 3.1.0 core dumps. Fiddling with OFMT? +# Date: Wed, 13 Jun 2001 14:45:54 +0000 +# From: David Jones <djones@zoonami.com> +# Status: R +# +# The following program causes gawk to dump core: +# +# jot 10|./gawk '{OFMT="%."NR"f";print NR}' +# +# 'jot 10', if you didn't know, produces the numbers 1 to 10 each on its +# own line (ie it's like awk 'BEGIN{for(i=1;i<=10;++i)print i}') +# +# Here's an example run: +# +# -- run being +# 1 +# 2 +# 3 +# 4 +# gawk: cmd. line:1: (FILENAME=- FNR=5) fatal error: internal error +# Abort trap - core dumped +# -- run end +# +# Ah. print NR appears to be not interesting. The following program also +# has the same problem: +# +# jot 10|./gawk '{OFMT="%."NR"f"}' +# +# Cheers, +# djones +# (version info follows) +# +# I'm running on FreeBSD 4.1, here's the output of uname -a +# +# FreeBSD topcat.zoonami.com 4.1-RELEASE FreeBSD 4.1-RELEASE #0: Fri Jul 28 14:30:31 GMT 2000 jkh@ref4.freebsd.org:/usr/src/sys/compile/GENERIC i386 +# +# And ./gnu --version +# +# GNU Awk 3.1.0 +# Copyright (C) 1989, 1991-2001 Free Software Foundation. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# +{ OFMT="%."NR"f"; print NR } diff --git a/test/ofmtfidl.in b/test/ofmtfidl.in new file mode 100644 index 0000000..f00c965 --- /dev/null +++ b/test/ofmtfidl.in @@ -0,0 +1,10 @@ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 diff --git a/test/ofmtfidl.ok b/test/ofmtfidl.ok new file mode 100644 index 0000000..f00c965 --- /dev/null +++ b/test/ofmtfidl.ok @@ -0,0 +1,10 @@ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 diff --git a/test/ofmts.awk b/test/ofmts.awk new file mode 100644 index 0000000..6ee3705 --- /dev/null +++ b/test/ofmts.awk @@ -0,0 +1,2 @@ +BEGIN { OFMT= "%s" } +{ $1 + $2; print $1, $2 } diff --git a/test/ofmts.in b/test/ofmts.in new file mode 100644 index 0000000..50c37ec --- /dev/null +++ b/test/ofmts.in @@ -0,0 +1 @@ +1.2 2.2 diff --git a/test/ofmts.ok b/test/ofmts.ok new file mode 100644 index 0000000..50c37ec --- /dev/null +++ b/test/ofmts.ok @@ -0,0 +1 @@ +1.2 2.2 diff --git a/test/onlynl.awk b/test/onlynl.awk new file mode 100644 index 0000000..97a8d94 --- /dev/null +++ b/test/onlynl.awk @@ -0,0 +1,2 @@ +BEGIN { RS = "" } +{ print "got", $0 } diff --git a/test/onlynl.in b/test/onlynl.in new file mode 100644 index 0000000..fd40910 --- /dev/null +++ b/test/onlynl.in @@ -0,0 +1,4 @@ + + + + diff --git a/test/onlynl.ok b/test/onlynl.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/onlynl.ok diff --git a/test/opasnidx.awk b/test/opasnidx.awk new file mode 100644 index 0000000..e398860 --- /dev/null +++ b/test/opasnidx.awk @@ -0,0 +1 @@ +BEGIN { b = 1; a[b] = 2; a[b++] += 1; print b,a[1] } diff --git a/test/opasnidx.ok b/test/opasnidx.ok new file mode 100644 index 0000000..654d526 --- /dev/null +++ b/test/opasnidx.ok @@ -0,0 +1 @@ +2 3 diff --git a/test/opasnslf.awk b/test/opasnslf.awk new file mode 100644 index 0000000..46cd2b8 --- /dev/null +++ b/test/opasnslf.awk @@ -0,0 +1,6 @@ +BEGIN { + print b += b += 1 + b = 6 + print b += b++ + print b +} diff --git a/test/opasnslf.ok b/test/opasnslf.ok new file mode 100644 index 0000000..2fa9fd5 --- /dev/null +++ b/test/opasnslf.ok @@ -0,0 +1,3 @@ +2 +13 +13 diff --git a/test/out1.ok b/test/out1.ok new file mode 100644 index 0000000..f54b2b4 --- /dev/null +++ b/test/out1.ok @@ -0,0 +1 @@ +Goes to a file out1 diff --git a/test/out2.ok b/test/out2.ok new file mode 100644 index 0000000..66b7d2f --- /dev/null +++ b/test/out2.ok @@ -0,0 +1,2 @@ +Normal print statement +This printed on stdout diff --git a/test/out3.ok b/test/out3.ok new file mode 100644 index 0000000..7eb822f --- /dev/null +++ b/test/out3.ok @@ -0,0 +1 @@ +You blew it! diff --git a/test/paramdup.awk b/test/paramdup.awk new file mode 100644 index 0000000..1f1cc7a --- /dev/null +++ b/test/paramdup.awk @@ -0,0 +1,8 @@ +BEGIN { foo(0, 1, 2) } + +function foo(a, b, c, b, a) +{ + print "a =", a + print "b =", b + print "c =", c +} diff --git a/test/paramdup.ok b/test/paramdup.ok new file mode 100644 index 0000000..9a9df80 --- /dev/null +++ b/test/paramdup.ok @@ -0,0 +1,3 @@ +gawk: paramdup.awk:4: error: function `foo': parameter #4, `b', duplicates parameter #2 +gawk: paramdup.awk:4: error: function `foo': parameter #5, `a', duplicates parameter #1 +EXIT CODE: 1 diff --git a/test/paramtyp.awk b/test/paramtyp.awk new file mode 100644 index 0000000..58848bb --- /dev/null +++ b/test/paramtyp.awk @@ -0,0 +1,20 @@ +# Sun Apr 25 13:28:58 IDT 1999 +# from Juegen Khars. This program should not core dump. + function ReadPGM(f, d) { +print "ReadPGM" + d[1] = 1 + } + + function WritePGM(f, d) { +print "WritePGM" + d[1] = 0 + } + + BEGIN { +print "before ReadPGM" + ReadPGM("", d) +print "after ReadPGM" +print "before WritePGM" + WritePGM("", d) +print "after WritePGM" + } diff --git a/test/paramtyp.ok b/test/paramtyp.ok new file mode 100644 index 0000000..793f857 --- /dev/null +++ b/test/paramtyp.ok @@ -0,0 +1,6 @@ +before ReadPGM +ReadPGM +after ReadPGM +before WritePGM +WritePGM +after WritePGM diff --git a/test/parseme.awk b/test/parseme.awk new file mode 100644 index 0000000..4d6ba94 --- /dev/null +++ b/test/parseme.awk @@ -0,0 +1 @@ +BEGIN { toupper(substr*line,1,12)) } diff --git a/test/parseme.ok b/test/parseme.ok new file mode 100644 index 0000000..5e6552a --- /dev/null +++ b/test/parseme.ok @@ -0,0 +1,4 @@ +gawk: parseme.awk:1: BEGIN { toupper(substr*line,1,12)) } +gawk: parseme.awk:1: ^ syntax error +gawk: parseme.awk:1: fatal: 0 is invalid as number of arguments for toupper +EXIT CODE: 2 diff --git a/test/pcntplus.awk b/test/pcntplus.awk new file mode 100644 index 0000000..13999ac --- /dev/null +++ b/test/pcntplus.awk @@ -0,0 +1 @@ +BEGIN { printf "%+d %d\n", 3, 4 } diff --git a/test/pcntplus.ok b/test/pcntplus.ok new file mode 100644 index 0000000..b790269 --- /dev/null +++ b/test/pcntplus.ok @@ -0,0 +1 @@ ++3 4 diff --git a/test/pid.awk b/test/pid.awk new file mode 100644 index 0000000..9b47d90 --- /dev/null +++ b/test/pid.awk @@ -0,0 +1,44 @@ +# From: John C. Oppenheimer <jco@slinky.convex.com> +# Subject: gawk-3.0.2 pid test +# To: arnold@skeeve.atl.ga.us +# Date: Mon, 10 Feb 1997 08:31:55 -0600 (CST) +# +# Thanks for the very quick reply. +# +# This all started when I was looking for how to do the equivalent of +# "nextfile." I was after documentation and found our gawk down a few +# revs. +# +# Looks like the nextfile functionality was added somewhere around +# 2.15.5. There wasn't a way to do it, until now! Thanks for the +# functionality! +# +# Saw the /dev/xxx capability and just tried it. +# +# Anyway, I wrote a pid test. I hope that it is portable. Wanted to +# make a user test, but looks like id(1) is not very portable. But a +# little test is better than none. +# +# John +# +# pid.ok is a zero length file +# +# ================== pid.awk ============ +BEGIN { + getline pid <"/dev/pid" + getline ppid <"/dev/ppid" +} +NR == 1 { + if (pid != $0) { + printf "Bad pid %d, wanted %d\n", $0, pid + } +} +NR == 2 { + if (ppid != $0) { + printf "Bad ppid %d, wanted %d\n", $0, ppid + } +} +END { # ADR --- added + close("/dev/pid") + close("/dev/ppid") +} diff --git a/test/pid.ok b/test/pid.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/pid.ok diff --git a/test/pid.sh b/test/pid.sh new file mode 100755 index 0000000..901637a --- /dev/null +++ b/test/pid.sh @@ -0,0 +1,5 @@ +#! /bin/sh +AWK=${AWK-../gawk} +echo $$ > _pid.in +echo $1 >> _pid.in +exec $AWK -f pid.awk _pid.in 2>/dev/null diff --git a/test/pipeio1.awk b/test/pipeio1.awk new file mode 100644 index 0000000..66f50ad --- /dev/null +++ b/test/pipeio1.awk @@ -0,0 +1,31 @@ +# From dragon!gamgee.acad.emich.edu!dhw Tue Mar 18 01:12:15 1997 +# Return-Path: <dragon!gamgee.acad.emich.edu!dhw> +# Message-ID: <m0w6owW-000IDSC@gamgee.acad.emich.edu> +# Date: Mon, 17 Mar 97 20:48 CST +# From: dhw@gamgee.acad.emich.edu (David H. West) +# To: arnold@gnu.ai.mit.edu +# Subject: gawk 3.0.2 bug report (cc of msg to bug-gnu-utils) +# Status: OR +# Content-Length: 869 +# X-Lines: 20 +# X-Display-Position: 2 +# +# Nature of bug: operation on a pipe side-effects a different pipe. +# Observed-With: gawk 3.0.2, Linux kernel 2.0.28 +# Reproduce-By: running the following script, without and with the "close" +# statement uncommented. +# -----------------cut here-------------------------- +BEGIN {FILE1="test1"; FILE2="test2"; + print "1\n" > FILE1; close(FILE1); + print "2\n" > FILE2; close(FILE2); + cmd1="cat " FILE1; cmd2="cat " FILE2; + #end of preparing commands which give easily-predictable output + + while( (cmd1 | getline)==1) { #terminates as file has only 1 line + #and we never close cmd1 + cmd2 | getline L; + #BUG: uncommenting the following line causes an infinite loop + close(cmd2); + print $0,L; + } + } diff --git a/test/pipeio1.ok b/test/pipeio1.ok new file mode 100644 index 0000000..706b09e --- /dev/null +++ b/test/pipeio1.ok @@ -0,0 +1,2 @@ +1 2 + 2 diff --git a/test/pipeio2.awk b/test/pipeio2.awk new file mode 100644 index 0000000..dbf354b --- /dev/null +++ b/test/pipeio2.awk @@ -0,0 +1,70 @@ +# From: megaadm@rina.quantum.de +# Subject: Bug report - closing down pipes which read from shell com +# To: bug-gnu-utils@prep.ai.mit.edu +# Date: Thu, 27 Feb 1997 23:19:16 +0100 (CET) +# CC: arnold@gnu.ai.mit.edu +# +# Hello people, +# +# i think i found a bug or something mysterious behaviour in +# gawk Version 3.0 patchlevel 0. +# +# I am running on linux 2.0.25 under bash. +# +# Could you please have a look at the following awk program +# an let me please know, if this is what i expect it to, +# namely a bug. +# +# ----------- cut here -------------------------------------------- +BEGIN { + # OS is linux 2.0.25 + # shell is bash + # Gnu Awk (gawk) 3.0, patchlevel 0 + # The command i typed on the shell was "gawk -f <this_prog> -" + + #com = "cal 01 1997" + com = ("cat " SRCDIR "/pipeio2.in") + + while ((com | getline fnam) > 0) { + +# com_tr = "echo " fnam " | tr [0-9]. ..........." +# com_tr = "echo " fnam " | sed 's/[0-9]/./g'" + com_tr = "echo " fnam " | sed \"s/[0-9]/./g\"" + # print "\'" com_tr "\'" + print "'" com_tr "'" + + com_tr | getline nam + print nam + + # please run that program and take a look at the + # output. I think this is what was expected. + + # Then comment in the following 4 lines and see + # what happens. I expect the first pipe "com | getline" + # not to be close, but i think this is exactly what happens + # So, is this ok ? + + if (close(com_tr) < 0) { + print ERRNO + break + } + } + + close(com) + } +# ----------- cut here -------------------------------------------- +# +# There is another thing i do not understand. +# Why doesn't the awk - command "close" reports an +# error, if i would say close("abc") which i had never +# openend ? +# +# Regards, +# Ulrich Gvbel +# -- +# /********************************************************\ +# * Ulrich Gvbel, goebel@quantum.de * +# * Quantum Gesellschaft f|r Software mbH, Dortmund * +# * phone : +49-231-9749-201 fax: +49-231-9749-3 * +# * private: +49-231-803994 fax: +49-231-803994 * +# \********************************************************/ diff --git a/test/pipeio2.in b/test/pipeio2.in new file mode 100644 index 0000000..2652b0e --- /dev/null +++ b/test/pipeio2.in @@ -0,0 +1,8 @@ + January 1997 + S M Tu W Th F S + 1 2 3 4 + 5 6 7 8 9 10 11 +12 13 14 15 16 17 18 +19 20 21 22 23 24 25 +26 27 28 29 30 31 + diff --git a/test/pipeio2.ok b/test/pipeio2.ok new file mode 100644 index 0000000..13b0b9b --- /dev/null +++ b/test/pipeio2.ok @@ -0,0 +1,16 @@ +'echo January 1997 | sed "s/[0-9]/./g"' +January .... +'echo S M Tu W Th F S | sed "s/[0-9]/./g"' +S M Tu W Th F S +'echo 1 2 3 4 | sed "s/[0-9]/./g"' +. . . . +'echo 5 6 7 8 9 10 11 | sed "s/[0-9]/./g"' +. . . . . .. .. +'echo 12 13 14 15 16 17 18 | sed "s/[0-9]/./g"' +.. .. .. .. .. .. .. +'echo 19 20 21 22 23 24 25 | sed "s/[0-9]/./g"' +.. .. .. .. .. .. .. +'echo 26 27 28 29 30 31 | sed "s/[0-9]/./g"' +.. .. .. .. .. .. +'echo | sed "s/[0-9]/./g"' + diff --git a/test/posix.awk b/test/posix.awk new file mode 100644 index 0000000..79474f3 --- /dev/null +++ b/test/posix.awk @@ -0,0 +1,69 @@ +BEGIN { + a = "+2"; b = 2; c = "+2a"; d = "+2 "; e = " 2" + + printf "Test #1: " + if (b == a) print "\"" a "\"" " compares as a number" + else print "\"" a "\"" " compares as a string" + + printf "Test #2: " + if (b == c) print "\"" c "\"" " compares as a number" + else print "\"" c "\"" " compares as a string" + + printf "Test #3: " + if (b == d) print "\"" d "\"" " compares as a number" + else print "\"" d "\"" " compares as a string" + + printf "Test #4: " + if (b == e) print "\"" e "\"" " compares as a number" + else print "\"" e "\"" " compares as a string" + + f = a + b + c + d + e + print "after addition" + + printf "Test #5: " + if (b == a) print "\"" a "\"" " compares as a number" + else print "\"" a "\"" " compares as a string" + + printf "Test #6: " + if (b == c) print "\"" c "\"" " compares as a number" + else print "\"" c "\"" " compares as a string" + + printf "Test #7: " + if (b == d) print "\"" d "\"" " compares as a number" + else print "\"" d "\"" " compares as a string" + + printf "Test #8: " + if (b == e) print "\"" e "\"" " compares as a number" + else print "\"" e "\"" " compares as a string" + + printf "Test #9: " + if ("3e5" > "5") print "\"3e5\" > \"5\"" + else print "\"3e5\" <= \"5\"" + + printf "Test #10: " + x = 32.14 + y[x] = "test" + OFMT = "%e" + print y[x] + + printf "Test #11: " + x = x + 0 + print y[x] + + printf "Test #12: " + OFMT="%f" + CONVFMT="%e" + print 1.5, 1.5 "" + + printf "Test #13: " + if ( 1000000 "" == 1000001 "") print "match" + else print "nomatch" +} +{ + printf "Test #14: " + FS = ":" + print $1 + FS = "," + printf "Test #15: " + print $2 +} diff --git a/test/posix.in b/test/posix.in new file mode 100644 index 0000000..c16777b --- /dev/null +++ b/test/posix.in @@ -0,0 +1 @@ +1:2,3 4 diff --git a/test/posix.ok b/test/posix.ok new file mode 100644 index 0000000..100b150 --- /dev/null +++ b/test/posix.ok @@ -0,0 +1,16 @@ +Test #1: "+2" compares as a string +Test #2: "+2a" compares as a string +Test #3: "+2 " compares as a string +Test #4: " 2" compares as a string +after addition +Test #5: "+2" compares as a string +Test #6: "+2a" compares as a string +Test #7: "+2 " compares as a string +Test #8: " 2" compares as a string +Test #9: "3e5" <= "5" +Test #10: test +Test #11: test +Test #12: 1.500000 1.500000e+00 +Test #13: nomatch +Test #14: 1:2,3 +Test #15: 4 diff --git a/test/poundbang.awk b/test/poundbang.awk new file mode 100755 index 0000000..a6440ff --- /dev/null +++ b/test/poundbang.awk @@ -0,0 +1,2 @@ +#! /tmp/gawk -f +{ print } diff --git a/test/prdupval.awk b/test/prdupval.awk new file mode 100644 index 0000000..32c67dc --- /dev/null +++ b/test/prdupval.awk @@ -0,0 +1 @@ +{ print NF, $NF, "abc" $NF } diff --git a/test/prdupval.in b/test/prdupval.in new file mode 100644 index 0000000..5626abf --- /dev/null +++ b/test/prdupval.in @@ -0,0 +1 @@ +one diff --git a/test/prdupval.ok b/test/prdupval.ok new file mode 100644 index 0000000..6253616 --- /dev/null +++ b/test/prdupval.ok @@ -0,0 +1 @@ +1 one abcone diff --git a/test/prec.awk b/test/prec.awk new file mode 100644 index 0000000..8b37734 --- /dev/null +++ b/test/prec.awk @@ -0,0 +1,7 @@ +# check the precedence of operators: +BEGIN { + $1 = i = 1 + $+i++ + $- -i++ + print +} diff --git a/test/prec.ok b/test/prec.ok new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/prec.ok @@ -0,0 +1 @@ +1 diff --git a/test/printf0.awk b/test/printf0.awk new file mode 100644 index 0000000..ac8ad3c --- /dev/null +++ b/test/printf0.awk @@ -0,0 +1,5 @@ +BEGIN { + # bwk accepts this silently: + printf + print "X" +} diff --git a/test/printf0.ok b/test/printf0.ok new file mode 100644 index 0000000..62d8fe9 --- /dev/null +++ b/test/printf0.ok @@ -0,0 +1 @@ +X diff --git a/test/printf1.awk b/test/printf1.awk new file mode 100644 index 0000000..1cd7b99 --- /dev/null +++ b/test/printf1.awk @@ -0,0 +1,19 @@ +# Tue May 25 16:36:16 IDT 1999 +# +# Test cases based on email from Andreas Schwab, schwab@gnu.org + +BEGIN { + fmt[1] = "%8.5d"; data[1] = 100 + fmt[2] = "%#o"; data[2] = 0 + fmt[3] = "%#.1o"; data[3] = 0 + fmt[4] = "%#.0o"; data[4] = 0 + fmt[5] = "%#x"; data[5] = 0 + fmt[6] = "%.0d"; data[6] = 0 + fmt[7] = "%5.0d"; data[7] = 0 + + for (i = 1; i <= 7; i++) { + format = "%s, %d --- |" fmt[i] "|\n" + printf(format, fmt[i], data[i], data[i]) + } + +} diff --git a/test/printf1.ok b/test/printf1.ok new file mode 100644 index 0000000..32b3a7d --- /dev/null +++ b/test/printf1.ok @@ -0,0 +1,7 @@ +%8.5d, 100 --- | 00100| +%#o, 0 --- |0| +%#.1o, 0 --- |0| +%#.0o, 0 --- |0| +%#x, 0 --- |0| +%.0d, 0 --- || +%5.0d, 0 --- | | diff --git a/test/printfbad1.awk b/test/printfbad1.awk new file mode 100644 index 0000000..1b478df --- /dev/null +++ b/test/printfbad1.awk @@ -0,0 +1,65 @@ +#Date: Mon, 7 Jun 2004 10:40:28 -0500 +#From: mary1john8@earthlink.net +#To: arnold@skeeve.com +#Subject: gawk internal errors +#Message-ID: <20040607154028.GA2457@apollo> +# +#Hello, +# +# gawk-3.1.3i internal errors: +# +#[1] +# +#$> ./gawk 'BEGIN { for (i in a) delete a; }' +#gawk: fatal error: internal error +#Aborted +# +#------------------------------------------------------------------ +#--- awkgram.y.orig 2004-06-07 09:42:14.000000000 -0500 +#+++ awkgram.y 2004-06-07 09:45:58.000000000 -0500 +#@@ -387,7 +387,7 @@ +# * Check that the body is a `delete a[i]' statement, +# * and that both the loop var and array names match. +# */ +#- if ($8 != NULL && $8->type == Node_K_delete) { +#+ if ($8 != NULL && $8->type == Node_K_delete && $8->rnode != NULL) { +# NODE *arr, *sub; +# +# assert($8->rnode->type == Node_expression_list); +#------------------------------------------------------------------ +# +# +#[2] +# +#$> ./gawk 'BEGIN { printf("%3$*10$.*1$s\n", 20, 10, "hello"); }' +BEGIN { printf("%3$*10$.*1$s\n", 20, 10, "hello"); } +#gawk: fatal error: internal error +#Aborted +# +#------------------------------------------------------------------ +#--- builtin.c.orig 2004-06-07 10:04:20.000000000 -0500 +#+++ builtin.c 2004-06-07 10:06:08.000000000 -0500 +#@@ -780,7 +780,10 @@ +# s1++; +# n0--; +# } +#- +#+ if (val >= num_args) { +#+ toofew = TRUE; +#+ break; +#+ } +# arg = the_args[val]; +# } else { +# parse_next_arg(); +#------------------------------------------------------------------ +# +# +# Finally, a test for the rewritten get_src_buf(): +# +#$> AWKBUFSIZE=2 make check +# +#I get 3 failed tests. Not sure this is of any interest. +# +# +#Thanks, +#John diff --git a/test/printfbad1.ok b/test/printfbad1.ok new file mode 100644 index 0000000..d02140a --- /dev/null +++ b/test/printfbad1.ok @@ -0,0 +1,5 @@ +gawk: printfbad1.awk:35: fatal: not enough arguments to satisfy format string + `%3$*10$.*1$s +' + ^ ran out for this one +EXIT CODE: 2 diff --git a/test/printfloat.awk b/test/printfloat.awk new file mode 100644 index 0000000..1cb4066 --- /dev/null +++ b/test/printfloat.awk @@ -0,0 +1,62 @@ +# Test program for checking sprintf operation with various floating +# point formats +# +# Watch out - full output of this program will have 3000 * tot lines, +# which will take a chunk of space if you will write it to your disk. +# --mj + +BEGIN { + just = "-" + plus = "+ " + alt = "#" + zero = "0" + spec = "feEgG" + fw[1] = "" + fw[2] = "1" + fw[3] = "5" + fw[4] = "10" + fw[5] = "15" + prec[1] = ".-1" + prec[2] = "" + prec[3] = ".2" + prec[4] = ".5" + prec[5] = ".10" + + num = 123.6 + factor = 1.0e-12 + tot = 8 + data[1] = 0 + data[2] = 1 + for (i = 3; i <= tot; i++) { + data[i] = num * factor + factor *= 1000 + } + + for (j = 1; j <= 2; j++) { + for (p = 1; p <= 3; p++) { + for (a = 1; a <= 2; a++) { + for (z = 1; z <= 2; z++) { + for (s = 1; s <= 5; s++) { + for (w = 1; w <= 5; w++) { + for (r = 1; r <= 5; r++) { + frmt = "|%" substr(just, j, 1) + frmt = frmt substr(plus, p, 1) + frmt = frmt substr(alt, a, 1) + frmt = frmt substr(zero, z, 1) + frmt = frmt fw[w] prec[r] + frmt = frmt substr(spec, s, 1) "|" + for (i = 1; i <= tot; i++) { + result = sprintf(frmt, data[i]) +# "normalize" if you must +# sub(/\|\./, "|0.", result) + printf("%-16s %-25s\t%g\n", frmt, + result,data[i]) + } + } + } + } + } + } + } + } +} diff --git a/test/printlang.awk b/test/printlang.awk new file mode 100644 index 0000000..03e06c0 --- /dev/null +++ b/test/printlang.awk @@ -0,0 +1,4 @@ +BEGIN { + printf "\nLocale environment:\n\tLC_ALL=\"%s\" LANG=\"%s\"\n\n", + ENVIRON["LC_ALL"], ENVIRON["LANG"] +} diff --git a/test/prmarscl.awk b/test/prmarscl.awk new file mode 100644 index 0000000..3caf3d9 --- /dev/null +++ b/test/prmarscl.awk @@ -0,0 +1,6 @@ +function test(a) +{ + print a[1] +} + +BEGIN { j = 4; test(j) } diff --git a/test/prmarscl.ok b/test/prmarscl.ok new file mode 100644 index 0000000..a0f7ab8 --- /dev/null +++ b/test/prmarscl.ok @@ -0,0 +1,2 @@ +gawk: prmarscl.awk:3: fatal: attempt to use scalar parameter `a' as an array +EXIT CODE: 2 diff --git a/test/prmreuse.awk b/test/prmreuse.awk new file mode 100644 index 0000000..c1ffa17 --- /dev/null +++ b/test/prmreuse.awk @@ -0,0 +1,14 @@ +# from Pat Rankin, rankin@eql.caltech.edu, now rankin@pactechdata.com + +BEGIN { dummy(1); legit(); exit } + +function dummy(arg) +{ + return arg +} + +function legit( scratch) +{ + split("1 2 3", scratch) + return "" +} diff --git a/test/prmreuse.ok b/test/prmreuse.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/prmreuse.ok diff --git a/test/procinfs.awk b/test/procinfs.awk new file mode 100644 index 0000000..53cfa97 --- /dev/null +++ b/test/procinfs.awk @@ -0,0 +1,7 @@ +BEGIN { + printf "Initially, PROCINFO[\"FS\"] = %s\n", PROCINFO["FS"] + FIELDWIDTHS = "3 4 5 6" + printf "After assign to FIELDWIDTHS, PROCINFO[\"FS\"] = %s\n", PROCINFO["FS"] + FS = FS + printf "After assign to FS, PROCINFO[\"FS\"] = %s\n", PROCINFO["FS"] +} diff --git a/test/procinfs.ok b/test/procinfs.ok new file mode 100644 index 0000000..23aaeff --- /dev/null +++ b/test/procinfs.ok @@ -0,0 +1,3 @@ +Initially, PROCINFO["FS"] = FS +After assign to FIELDWIDTHS, PROCINFO["FS"] = FIELDWIDTHS +After assign to FS, PROCINFO["FS"] = FS diff --git a/test/prt1eval.awk b/test/prt1eval.awk new file mode 100644 index 0000000..4ecd368 --- /dev/null +++ b/test/prt1eval.awk @@ -0,0 +1,6 @@ +function tst () { + sum += 1 + return sum +} + +BEGIN { OFMT = "%.0f" ; print tst() } diff --git a/test/prt1eval.ok b/test/prt1eval.ok new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/prt1eval.ok @@ -0,0 +1 @@ +1 diff --git a/test/prtoeval.awk b/test/prtoeval.awk new file mode 100644 index 0000000..77880d8 --- /dev/null +++ b/test/prtoeval.awk @@ -0,0 +1,4 @@ +function returns_a_str() { print "<in function>" ; return "'A STRING'" } +BEGIN { + print "partial line:", returns_a_str() +} diff --git a/test/prtoeval.ok b/test/prtoeval.ok new file mode 100644 index 0000000..13e122b --- /dev/null +++ b/test/prtoeval.ok @@ -0,0 +1,2 @@ +<in function> +partial line: 'A STRING' diff --git a/test/psx96sub.awk b/test/psx96sub.awk new file mode 100644 index 0000000..3c7c9b7 --- /dev/null +++ b/test/psx96sub.awk @@ -0,0 +1,7 @@ +BEGIN { + text = "here is some text" + repl = "<FOO&BAR \\q \\ \\\\ \\& \\\\& \\\\\\&>" + printf "orig = \"%s\", repl = \"%s\"\n", text, repl + sub(/some/, repl, text) + printf "result is \"%s\"\n", text +} diff --git a/test/psx96sub.ok b/test/psx96sub.ok new file mode 100644 index 0000000..d6b89ee --- /dev/null +++ b/test/psx96sub.ok @@ -0,0 +1,2 @@ +orig = "here is some text", repl = "<FOO&BAR \q \ \\ \& \\& \\\&>" +result is "here is <FOOsomeBAR \q \ \\ & \some \&> text" diff --git a/test/rand.awk b/test/rand.awk new file mode 100644 index 0000000..6378f3d --- /dev/null +++ b/test/rand.awk @@ -0,0 +1,6 @@ +BEGIN { + srand(2) + for (i = 0; i < 19; i++) + printf "%3d ", (1 + int(100 * rand())) + print "" +} diff --git a/test/rand.ok b/test/rand.ok new file mode 100644 index 0000000..60432b9 --- /dev/null +++ b/test/rand.ok @@ -0,0 +1 @@ + 62 67 88 6 35 77 3 68 30 96 90 26 35 8 88 93 49 53 37 diff --git a/test/rebt8b1.awk b/test/rebt8b1.awk new file mode 100644 index 0000000..8fa43fb --- /dev/null +++ b/test/rebt8b1.awk @@ -0,0 +1,138 @@ +# From hankedr@dms.auburn.edu Sun Jan 28 12:25:43 2001 +# Received: from mail.actcom.co.il [192.114.47.13] +# by localhost with POP3 (fetchmail-5.5.0) +# for arnold@localhost (single-drop); Sun, 28 Jan 2001 12:25:43 +0200 (IST) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Sun Jan 28 12:27:08 2001) +# X-From_: hankedr@dms.auburn.edu Sat Jan 27 15:15:57 2001 +# Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.9.1a/actcom-0.2) id PAA23801 for <arobbins@actcom.co.il>; +# Sat, 27 Jan 2001 15:15:55 +0200 (EET) +# (rfc931-sender: lmail.actcom.co.il [192.114.47.13]) +# Received: from billohost.com (www.billohost.com [209.196.35.10]) +# by lmail.actcom.co.il (8.9.3/8.9.1) with ESMTP id PAA15998 +# for <arobbins@actcom.co.il>; Sat, 27 Jan 2001 15:16:27 +0200 +# Received: from yak.dms.auburn.edu (yak.dms.auburn.edu [131.204.53.2]) +# by billohost.com (8.9.3/8.9.3) with ESMTP id IAA00467 +# for <arnold@skeeve.com>; Sat, 27 Jan 2001 08:15:52 -0500 +# Received: (from hankedr@localhost) +# by yak.dms.auburn.edu (8.9.3/8.9.3/Debian/GNU) id HAA24441; +# Sat, 27 Jan 2001 07:15:44 -0600 +# Date: Sat, 27 Jan 2001 07:15:44 -0600 +# Message-Id: <200101271315.HAA24441@yak.dms.auburn.edu> +# From: Darrel Hankerson <hankedr@dms.auburn.edu> +# To: arnold@skeeve.com +# Subject: [stolfi@ic.unicamp.br: Bug in [...]* matching with acute-u] +# Mime-Version: 1.0 (generated by tm-edit 7.106) +# Content-Type: message/rfc822 +# Status: R +# +# From: Jorge Stolfi <stolfi@ic.unicamp.br> +# To: bug-gnu-utils@gnu.org +# Subject: Bug in [...]* matching with acute-u +# MIME-Version: 1.0 +# Reply-To: stolfi@ic.unicamp.br +# X-MIME-Autoconverted: from 8bit to quoted-printable by grande.dcc.unicamp.br id GAA10716 +# Sender: bug-gnu-utils-admin@gnu.org +# Errors-To: bug-gnu-utils-admin@gnu.org +# X-BeenThere: bug-gnu-utils@gnu.org +# X-Mailman-Version: 2.0 +# Precedence: bulk +# List-Help: <mailto:bug-gnu-utils-request@gnu.org?subject=help> +# List-Post: <mailto:bug-gnu-utils@gnu.org> +# List-Subscribe: <http://mail.gnu.org/mailman/listinfo/bug-gnu-utils>, +# <mailto:bug-gnu-utils-request@gnu.org?subject=subscribe> +# List-Id: Bug reports for the GNU utilities <bug-gnu-utils.gnu.org> +# List-Unsubscribe: <http://mail.gnu.org/mailman/listinfo/bug-gnu-utils>, +# <mailto:bug-gnu-utils-request@gnu.org?subject=unsubscribe> +# List-Archive: <http://mail.gnu.org/pipermail/bug-gnu-utils/> +# Date: Sat, 27 Jan 2001 06:46:11 -0200 (EDT) +# Content-Transfer-Encoding: 8bit +# X-MIME-Autoconverted: from quoted-printable to 8bit by manatee.dms.auburn.edu id CAA14936 +# Content-Type: text/plain; charset=iso-8859-1 +# <mailto:bug-gnu-utils-request@gnu.org?subject=subscribe> +# <mailto:bug-gnu-utils-request@gnu.org?subject=uns +# Content-Length: 3137 +# +# +# +# Hi, +# +# I think I have run into a bug in gawk's handling of REs of the +# form [...]* when the bracketed list includes certain 8-bit characters, +# specifically u-acute (octal \372). +# +# The problem occurs in GNU Awk 3.0.4, both under +# Linux 2.2.14-5.0 (intel i686) and SunOS 5.5 (Sun sparc). +# +# Here is a program that illustrates the bug, and its output. +# The first two lines of the output should be equal, shouldn't they? +# +# ---------------------------------------------------------------------- +#! /usr/bin/gawk -f + +BEGIN { + s = "bananas and ananases in canaan"; + t = s; gsub(/[an]*n/, "AN", t); printf "%-8s %s\n", "[an]*n", t; + t = s; gsub(/[anú]*n/, "AN", t); printf "%-8s %s\n", "[anú]*n", t; + print ""; + t = s; gsub(/[aú]*n/, "AN", t); printf "%-8s %s\n", "[aú]*n", t; + print ""; + t = s; gsub(/[an]n/, "AN", t); printf "%-8s %s\n", "[an]n", t; + t = s; gsub(/[aú]n/, "AN", t); printf "%-8s %s\n", "[aú]n", t; + t = s; gsub(/[anú]n/, "AN", t); printf "%-8s %s\n", "[anú]n", t; + print ""; + t = s; gsub(/[an]?n/, "AN", t); printf "%-8s %s\n", "[an]?n", t; + t = s; gsub(/[aú]?n/, "AN", t); printf "%-8s %s\n", "[aú]?n", t; + t = s; gsub(/[anú]?n/, "AN", t); printf "%-8s %s\n", "[anú]?n", t; + print ""; + t = s; gsub(/[an]+n/, "AN", t); printf "%-8s %s\n", "[an]+n", t; + t = s; gsub(/[aú]+n/, "AN", t); printf "%-8s %s\n", "[aú]+n", t; + t = s; gsub(/[anú]+n/, "AN", t); printf "%-8s %s\n", "[anú]+n", t; +} +# ---------------------------------------------------------------------- +# [an]*n bANas ANd ANases iAN cAN +# [anú]*n bananas and ananases in canaan +# +# [aú]*n bANANas ANd ANANases iAN cANAN +# +# [an]n bANANas ANd ANANases in cANaAN +# [aú]n bANANas ANd ANANases in cANaAN +# [anú]n bANANas ANd ANANases in cANaAN +# +# [an]?n bANANas ANd ANANases iAN cANaAN +# [aú]?n bANANas ANd ANANases iAN cANaAN +# [anú]?n bANANas ANd ANANases iAN cANaAN +# +# [an]+n bANas ANd ANases in cAN +# [aú]+n bANANas ANd ANANases in cANAN +# [anú]+n bananas and ananases in canaan +# ---------------------------------------------------------------------- +# +# Apparently the problem is specific to u-acute; I've tried several +# other 8-bit characters and they seem to behave as expected. +# +# By comparing the second and third output lines, it would seem that the +# problem involves backtracking out of a partial match of [...]* in +# order to match the next sub-expression, when the latter begins with +# one of the given characters. +# +# +# All the best, +# +# --stolfi +# +# ------------------------------------------------------------------------ +# Jorge Stolfi | http://www.dcc.unicamp.br/~stolfi | stolfi@dcc.unicamp.br +# Institute of Computing (formerly DCC-IMECC) | Wrk +55 (19)3788-5858 +# Universidade Estadual de Campinas (UNICAMP) | +55 (19)3788-5840 +# Av. Albert Einstein 1251 - Caixa Postal 6176 | Fax +55 (19)3788-5847 +# 13083-970 Campinas, SP -- Brazil | Hom +55 (19)3287-4069 +# ------------------------------------------------------------------------ +# +# _______________________________________________ +# Bug-gnu-utils mailing list +# Bug-gnu-utils@gnu.org +# http://mail.gnu.org/mailman/listinfo/bug-gnu-utils +# +# diff --git a/test/rebt8b1.ok b/test/rebt8b1.ok new file mode 100644 index 0000000..5b8a009 --- /dev/null +++ b/test/rebt8b1.ok @@ -0,0 +1,16 @@ +[an]*n bANas ANd ANases iAN cAN +[anú]*n bANas ANd ANases iAN cAN + +[aú]*n bANANas ANd ANANases iAN cANAN + +[an]n bANANas ANd ANANases in cANaAN +[aú]n bANANas ANd ANANases in cANaAN +[anú]n bANANas ANd ANANases in cANaAN + +[an]?n bANANas ANd ANANases iAN cANaAN +[aú]?n bANANas ANd ANANases iAN cANaAN +[anú]?n bANANas ANd ANANases iAN cANaAN + +[an]+n bANas ANd ANases in cAN +[aú]+n bANANas ANd ANANases in cANAN +[anú]+n bANas ANd ANases in cAN diff --git a/test/rebt8b2.awk b/test/rebt8b2.awk new file mode 100644 index 0000000..4cb8373 --- /dev/null +++ b/test/rebt8b2.awk @@ -0,0 +1,88 @@ +#From stolfi@ic.unicamp.br Sun Jan 28 19:02:09 2001 +#Received: from mail.actcom.co.il [192.114.47.13] +# by localhost with POP3 (fetchmail-5.5.0) +# for arnold@localhost (single-drop); Sun, 28 Jan 2001 19:02:09 +0200 (IST) +#Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Sun Jan 28 19:03:34 2001) +#X-From_: stolfi@ic.unicamp.br Sun Jan 28 18:46:02 2001 +#Received: from lmail.actcom.co.il by actcom.co.il with ESMTP +# (8.9.1a/actcom-0.2) id SAA22932 for <arobbins@actcom.co.il>; +# Sun, 28 Jan 2001 18:46:00 +0200 (EET) +# (rfc931-sender: lmail.actcom.co.il [192.114.47.13]) +#Received: from billohost.com (www.billohost.com [209.196.35.10]) +# by lmail.actcom.co.il (8.9.3/8.9.1) with ESMTP id SAA18523 +# for <arobbins@actcom.co.il>; Sun, 28 Jan 2001 18:46:35 +0200 +#Received: from grande.dcc.unicamp.br (grande.dcc.unicamp.br [143.106.7.8]) +# by billohost.com (8.9.3/8.9.3) with ESMTP id LAA20063 +# for <arnold@skeeve.com>; Sun, 28 Jan 2001 11:45:54 -0500 +#Received: from amazonas.dcc.unicamp.br (amazonas.dcc.unicamp.br [143.106.7.11]) +# by grande.dcc.unicamp.br (8.9.3/8.9.3) with ESMTP id OAA29726; +# Sun, 28 Jan 2001 14:45:47 -0200 (EDT) +#Received: from coruja.dcc.unicamp.br (coruja.dcc.unicamp.br [143.106.24.80]) +# by amazonas.dcc.unicamp.br (8.8.5/8.8.5) with ESMTP id OAA06542; +# Sun, 28 Jan 2001 14:45:45 -0200 (EDT) +#Received: (from stolfi@localhost) +# by coruja.dcc.unicamp.br (8.11.0/8.11.0) id f0SGjib16703; +# Sun, 28 Jan 2001 14:45:44 -0200 (EDT) +#Date: Sun, 28 Jan 2001 14:45:44 -0200 (EDT) +#Message-Id: <200101281645.f0SGjib16703@coruja.dcc.unicamp.br> +#From: Jorge Stolfi <stolfi@ic.unicamp.br> +#To: Michal Jaegermann <michal@ellpspace.math.ualberta.ca> +#Cc: Aharon Robbins <arnold@skeeve.com>, oliva@ic.unicamp.br, +# celio@ic.unicamp.br, ducatte@ic.unicamp.br, machado@ic.unicamp.br +#Subject: Re: a regex.c problem +#MIME-Version: 1.0 +#Content-Transfer-Encoding: 8bit +#Content-Type: text/plain; charset=iso-8859-1 +#In-Reply-To: <20010128090314.A5820@ellpspace.math.ualberta.ca> +#References: <200101281207.f0SC7Un08435@skeeve.com> +# <20010128090314.A5820@ellpspace.math.ualberta.ca> +#Reply-To: stolfi@ic.unicamp.br +#Status: RO +# +# +# > [Michal] Are there any other examples of "certain characters" +# > which would throw this regex engine off? +# +#I now tested [anX]*n for X ranging trough all characters from \000 and +#\377, and got that unexpected result only for the following ones: +# +# \370 | =F8 | ø | Small o, slash +# \371 | =F9 | ù | Small u, grave accent +# \372 | =FA | ú | Small u, acute accent +# \373 | =FB | û | Small u, circumflex accent +# \374 | =FC | ü | Small u, dieresis or umlaut mark +# \375 | =FD | ý | Small y, acute accent +# \376 | =FE | þ | Small thorn, Icelandic +# \377 | =FF | ÿ | Small y, dieresis or umlaut mark +# +#I have also tried those offending REs from inside emacs (20.7.1), with +#query-replace-regexp, and it seems to be working fine. So presumably +#the bug lies in gawk itself, or in the RE parsing code, rather than in +#the matching engine? +# +#Could it be an underdimensioned table somewhere? +# +#Thanks for the help, and all the best +# +#--stolfi +# +# ---------------------------------------------------------------------- + #! /usr/bin/gawk -f + + BEGIN { + for (c = 0; c < 256; c++) + { do_test(c); } + } + + function do_test(char, pat,s,t) + { + if (char == 92) { printf "(error for \\%03o)\n", char; return; } + pat = sprintf("[an\\%03o]*n", char); + s = "bananas and ananases in canaan"; + t = s; gsub(pat, "AN", t); printf "%-8s %s\n", pat, t; +# ADR: Added: + if (s ~ pat) printf "\tmatch\n" ; else printf "\tno-match\n" + } + +# ---------------------------------------------------------------------- diff --git a/test/rebt8b2.ok b/test/rebt8b2.ok new file mode 100644 index 0000000..661109c --- /dev/null +++ b/test/rebt8b2.ok @@ -0,0 +1,511 @@ +[an\000]*n bANas ANd ANases iAN cAN + match +[an\001]*n bANas ANd ANases iAN cAN + match +[an\002]*n bANas ANd ANases iAN cAN + match +[an\003]*n bANas ANd ANases iAN cAN + match +[an\004]*n bANas ANd ANases iAN cAN + match +[an\005]*n bANas ANd ANases iAN cAN + match +[an\006]*n bANas ANd ANases iAN cAN + match +[an\007]*n bANas ANd ANases iAN cAN + match +[an\010]*n bANas ANd ANases iAN cAN + match +[an\011]*n bANas ANd ANases iAN cAN + match +[an\012]*n bANas ANd ANases iAN cAN + match +[an\013]*n bANas ANd ANases iAN cAN + match +[an\014]*n bANas ANd ANases iAN cAN + match +[an\015]*n bANas ANd ANases iAN cAN + match +[an\016]*n bANas ANd ANases iAN cAN + match +[an\017]*n bANas ANd ANases iAN cAN + match +[an\020]*n bANas ANd ANases iAN cAN + match +[an\021]*n bANas ANd ANases iAN cAN + match +[an\022]*n bANas ANd ANases iAN cAN + match +[an\023]*n bANas ANd ANases iAN cAN + match +[an\024]*n bANas ANd ANases iAN cAN + match +[an\025]*n bANas ANd ANases iAN cAN + match +[an\026]*n bANas ANd ANases iAN cAN + match +[an\027]*n bANas ANd ANases iAN cAN + match +[an\030]*n bANas ANd ANases iAN cAN + match +[an\031]*n bANas ANd ANases iAN cAN + match +[an\032]*n bANas ANd ANases iAN cAN + match +[an\033]*n bANas ANd ANases iAN cAN + match +[an\034]*n bANas ANd ANases iAN cAN + match +[an\035]*n bANas ANd ANases iAN cAN + match +[an\036]*n bANas ANd ANases iAN cAN + match +[an\037]*n bANas ANd ANases iAN cAN + match +[an\040]*n bANasANdANases iAN cAN + match +[an\041]*n bANas ANd ANases iAN cAN + match +[an\042]*n bANas ANd ANases iAN cAN + match +[an\043]*n bANas ANd ANases iAN cAN + match +[an\044]*n bANas ANd ANases iAN cAN + match +[an\045]*n bANas ANd ANases iAN cAN + match +[an\046]*n bANas ANd ANases iAN cAN + match +[an\047]*n bANas ANd ANases iAN cAN + match +[an\050]*n bANas ANd ANases iAN cAN + match +[an\051]*n bANas ANd ANases iAN cAN + match +[an\052]*n bANas ANd ANases iAN cAN + match +[an\053]*n bANas ANd ANases iAN cAN + match +[an\054]*n bANas ANd ANases iAN cAN + match +[an\055]*n bANas ANd ANases iAN cAN + match +[an\056]*n bANas ANd ANases iAN cAN + match +[an\057]*n bANas ANd ANases iAN cAN + match +[an\060]*n bANas ANd ANases iAN cAN + match +[an\061]*n bANas ANd ANases iAN cAN + match +[an\062]*n bANas ANd ANases iAN cAN + match +[an\063]*n bANas ANd ANases iAN cAN + match +[an\064]*n bANas ANd ANases iAN cAN + match +[an\065]*n bANas ANd ANases iAN cAN + match +[an\066]*n bANas ANd ANases iAN cAN + match +[an\067]*n bANas ANd ANases iAN cAN + match +[an\070]*n bANas ANd ANases iAN cAN + match +[an\071]*n bANas ANd ANases iAN cAN + match +[an\072]*n bANas ANd ANases iAN cAN + match +[an\073]*n bANas ANd ANases iAN cAN + match +[an\074]*n bANas ANd ANases iAN cAN + match +[an\075]*n bANas ANd ANases iAN cAN + match +[an\076]*n bANas ANd ANases iAN cAN + match +[an\077]*n bANas ANd ANases iAN cAN + match +[an\100]*n bANas ANd ANases iAN cAN + match +[an\101]*n bANas ANd ANases iAN cAN + match +[an\102]*n bANas ANd ANases iAN cAN + match +[an\103]*n bANas ANd ANases iAN cAN + match +[an\104]*n bANas ANd ANases iAN cAN + match +[an\105]*n bANas ANd ANases iAN cAN + match +[an\106]*n bANas ANd ANases iAN cAN + match +[an\107]*n bANas ANd ANases iAN cAN + match +[an\110]*n bANas ANd ANases iAN cAN + match +[an\111]*n bANas ANd ANases iAN cAN + match +[an\112]*n bANas ANd ANases iAN cAN + match +[an\113]*n bANas ANd ANases iAN cAN + match +[an\114]*n bANas ANd ANases iAN cAN + match +[an\115]*n bANas ANd ANases iAN cAN + match +[an\116]*n bANas ANd ANases iAN cAN + match +[an\117]*n bANas ANd ANases iAN cAN + match +[an\120]*n bANas ANd ANases iAN cAN + match +[an\121]*n bANas ANd ANases iAN cAN + match +[an\122]*n bANas ANd ANases iAN cAN + match +[an\123]*n bANas ANd ANases iAN cAN + match +[an\124]*n bANas ANd ANases iAN cAN + match +[an\125]*n bANas ANd ANases iAN cAN + match +[an\126]*n bANas ANd ANases iAN cAN + match +[an\127]*n bANas ANd ANases iAN cAN + match +[an\130]*n bANas ANd ANases iAN cAN + match +[an\131]*n bANas ANd ANases iAN cAN + match +[an\132]*n bANas ANd ANases iAN cAN + match +[an\133]*n bANas ANd ANases iAN cAN + match +(error for \134) +[an\135]*n bANANas ANd ANANases in cANaAN + match +[an\136]*n bANas ANd ANases iAN cAN + match +[an\137]*n bANas ANd ANases iAN cAN + match +[an\140]*n bANas ANd ANases iAN cAN + match +[an\141]*n bANas ANd ANases iAN cAN + match +[an\142]*n ANas ANd ANases iAN cAN + match +[an\143]*n bANas ANd ANases iAN AN + match +[an\144]*n bANas ANd ANases iAN cAN + match +[an\145]*n bANas ANd ANases iAN cAN + match +[an\146]*n bANas ANd ANases iAN cAN + match +[an\147]*n bANas ANd ANases iAN cAN + match +[an\150]*n bANas ANd ANases iAN cAN + match +[an\151]*n bANas ANd ANases AN cAN + match +[an\152]*n bANas ANd ANases iAN cAN + match +[an\153]*n bANas ANd ANases iAN cAN + match +[an\154]*n bANas ANd ANases iAN cAN + match +[an\155]*n bANas ANd ANases iAN cAN + match +[an\156]*n bANas ANd ANases iAN cAN + match +[an\157]*n bANas ANd ANases iAN cAN + match +[an\160]*n bANas ANd ANases iAN cAN + match +[an\161]*n bANas ANd ANases iAN cAN + match +[an\162]*n bANas ANd ANases iAN cAN + match +[an\163]*n bANas ANd ANases iAN cAN + match +[an\164]*n bANas ANd ANases iAN cAN + match +[an\165]*n bANas ANd ANases iAN cAN + match +[an\166]*n bANas ANd ANases iAN cAN + match +[an\167]*n bANas ANd ANases iAN cAN + match +[an\170]*n bANas ANd ANases iAN cAN + match +[an\171]*n bANas ANd ANases iAN cAN + match +[an\172]*n bANas ANd ANases iAN cAN + match +[an\173]*n bANas ANd ANases iAN cAN + match +[an\174]*n bANas ANd ANases iAN cAN + match +[an\175]*n bANas ANd ANases iAN cAN + match +[an\176]*n bANas ANd ANases iAN cAN + match +[an\177]*n bANas ANd ANases iAN cAN + match +[an\200]*n bANas ANd ANases iAN cAN + match +[an\201]*n bANas ANd ANases iAN cAN + match +[an\202]*n bANas ANd ANases iAN cAN + match +[an\203]*n bANas ANd ANases iAN cAN + match +[an\204]*n bANas ANd ANases iAN cAN + match +[an\205]*n bANas ANd ANases iAN cAN + match +[an\206]*n bANas ANd ANases iAN cAN + match +[an\207]*n bANas ANd ANases iAN cAN + match +[an\210]*n bANas ANd ANases iAN cAN + match +[an\211]*n bANas ANd ANases iAN cAN + match +[an\212]*n bANas ANd ANases iAN cAN + match +[an\213]*n bANas ANd ANases iAN cAN + match +[an\214]*n bANas ANd ANases iAN cAN + match +[an\215]*n bANas ANd ANases iAN cAN + match +[an\216]*n bANas ANd ANases iAN cAN + match +[an\217]*n bANas ANd ANases iAN cAN + match +[an\220]*n bANas ANd ANases iAN cAN + match +[an\221]*n bANas ANd ANases iAN cAN + match +[an\222]*n bANas ANd ANases iAN cAN + match +[an\223]*n bANas ANd ANases iAN cAN + match +[an\224]*n bANas ANd ANases iAN cAN + match +[an\225]*n bANas ANd ANases iAN cAN + match +[an\226]*n bANas ANd ANases iAN cAN + match +[an\227]*n bANas ANd ANases iAN cAN + match +[an\230]*n bANas ANd ANases iAN cAN + match +[an\231]*n bANas ANd ANases iAN cAN + match +[an\232]*n bANas ANd ANases iAN cAN + match +[an\233]*n bANas ANd ANases iAN cAN + match +[an\234]*n bANas ANd ANases iAN cAN + match +[an\235]*n bANas ANd ANases iAN cAN + match +[an\236]*n bANas ANd ANases iAN cAN + match +[an\237]*n bANas ANd ANases iAN cAN + match +[an\240]*n bANas ANd ANases iAN cAN + match +[an\241]*n bANas ANd ANases iAN cAN + match +[an\242]*n bANas ANd ANases iAN cAN + match +[an\243]*n bANas ANd ANases iAN cAN + match +[an\244]*n bANas ANd ANases iAN cAN + match +[an\245]*n bANas ANd ANases iAN cAN + match +[an\246]*n bANas ANd ANases iAN cAN + match +[an\247]*n bANas ANd ANases iAN cAN + match +[an\250]*n bANas ANd ANases iAN cAN + match +[an\251]*n bANas ANd ANases iAN cAN + match +[an\252]*n bANas ANd ANases iAN cAN + match +[an\253]*n bANas ANd ANases iAN cAN + match +[an\254]*n bANas ANd ANases iAN cAN + match +[an\255]*n bANas ANd ANases iAN cAN + match +[an\256]*n bANas ANd ANases iAN cAN + match +[an\257]*n bANas ANd ANases iAN cAN + match +[an\260]*n bANas ANd ANases iAN cAN + match +[an\261]*n bANas ANd ANases iAN cAN + match +[an\262]*n bANas ANd ANases iAN cAN + match +[an\263]*n bANas ANd ANases iAN cAN + match +[an\264]*n bANas ANd ANases iAN cAN + match +[an\265]*n bANas ANd ANases iAN cAN + match +[an\266]*n bANas ANd ANases iAN cAN + match +[an\267]*n bANas ANd ANases iAN cAN + match +[an\270]*n bANas ANd ANases iAN cAN + match +[an\271]*n bANas ANd ANases iAN cAN + match +[an\272]*n bANas ANd ANases iAN cAN + match +[an\273]*n bANas ANd ANases iAN cAN + match +[an\274]*n bANas ANd ANases iAN cAN + match +[an\275]*n bANas ANd ANases iAN cAN + match +[an\276]*n bANas ANd ANases iAN cAN + match +[an\277]*n bANas ANd ANases iAN cAN + match +[an\300]*n bANas ANd ANases iAN cAN + match +[an\301]*n bANas ANd ANases iAN cAN + match +[an\302]*n bANas ANd ANases iAN cAN + match +[an\303]*n bANas ANd ANases iAN cAN + match +[an\304]*n bANas ANd ANases iAN cAN + match +[an\305]*n bANas ANd ANases iAN cAN + match +[an\306]*n bANas ANd ANases iAN cAN + match +[an\307]*n bANas ANd ANases iAN cAN + match +[an\310]*n bANas ANd ANases iAN cAN + match +[an\311]*n bANas ANd ANases iAN cAN + match +[an\312]*n bANas ANd ANases iAN cAN + match +[an\313]*n bANas ANd ANases iAN cAN + match +[an\314]*n bANas ANd ANases iAN cAN + match +[an\315]*n bANas ANd ANases iAN cAN + match +[an\316]*n bANas ANd ANases iAN cAN + match +[an\317]*n bANas ANd ANases iAN cAN + match +[an\320]*n bANas ANd ANases iAN cAN + match +[an\321]*n bANas ANd ANases iAN cAN + match +[an\322]*n bANas ANd ANases iAN cAN + match +[an\323]*n bANas ANd ANases iAN cAN + match +[an\324]*n bANas ANd ANases iAN cAN + match +[an\325]*n bANas ANd ANases iAN cAN + match +[an\326]*n bANas ANd ANases iAN cAN + match +[an\327]*n bANas ANd ANases iAN cAN + match +[an\330]*n bANas ANd ANases iAN cAN + match +[an\331]*n bANas ANd ANases iAN cAN + match +[an\332]*n bANas ANd ANases iAN cAN + match +[an\333]*n bANas ANd ANases iAN cAN + match +[an\334]*n bANas ANd ANases iAN cAN + match +[an\335]*n bANas ANd ANases iAN cAN + match +[an\336]*n bANas ANd ANases iAN cAN + match +[an\337]*n bANas ANd ANases iAN cAN + match +[an\340]*n bANas ANd ANases iAN cAN + match +[an\341]*n bANas ANd ANases iAN cAN + match +[an\342]*n bANas ANd ANases iAN cAN + match +[an\343]*n bANas ANd ANases iAN cAN + match +[an\344]*n bANas ANd ANases iAN cAN + match +[an\345]*n bANas ANd ANases iAN cAN + match +[an\346]*n bANas ANd ANases iAN cAN + match +[an\347]*n bANas ANd ANases iAN cAN + match +[an\350]*n bANas ANd ANases iAN cAN + match +[an\351]*n bANas ANd ANases iAN cAN + match +[an\352]*n bANas ANd ANases iAN cAN + match +[an\353]*n bANas ANd ANases iAN cAN + match +[an\354]*n bANas ANd ANases iAN cAN + match +[an\355]*n bANas ANd ANases iAN cAN + match +[an\356]*n bANas ANd ANases iAN cAN + match +[an\357]*n bANas ANd ANases iAN cAN + match +[an\360]*n bANas ANd ANases iAN cAN + match +[an\361]*n bANas ANd ANases iAN cAN + match +[an\362]*n bANas ANd ANases iAN cAN + match +[an\363]*n bANas ANd ANases iAN cAN + match +[an\364]*n bANas ANd ANases iAN cAN + match +[an\365]*n bANas ANd ANases iAN cAN + match +[an\366]*n bANas ANd ANases iAN cAN + match +[an\367]*n bANas ANd ANases iAN cAN + match +[an\370]*n bANas ANd ANases iAN cAN + match +[an\371]*n bANas ANd ANases iAN cAN + match +[an\372]*n bANas ANd ANases iAN cAN + match +[an\373]*n bANas ANd ANases iAN cAN + match +[an\374]*n bANas ANd ANases iAN cAN + match +[an\375]*n bANas ANd ANases iAN cAN + match +[an\376]*n bANas ANd ANases iAN cAN + match +[an\377]*n bANas ANd ANases iAN cAN + match diff --git a/test/rebuf.awk b/test/rebuf.awk new file mode 100644 index 0000000..69b5f05 --- /dev/null +++ b/test/rebuf.awk @@ -0,0 +1,73 @@ +# From lole@epost.de Wed Sep 4 09:54:19 IDT 2002 +# Article: 14288 of comp.lang.awk +# Path: iad-read.news.verio.net!dfw-artgen!iad-peer.news.verio.net!news.verio.net!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!213.70.124.113!not-for-mail +# From: LorenzAtWork <familie.lenhardt@epost.de> +# Newsgroups: comp.lang.awk +# Subject: bug in gawk 3.1.1? +# Date: Wed, 28 Aug 2002 10:34:50 +0200 +# Lines: 45 +# Message-ID: <7g1pmukv07c56ep3qav3uebnipdaohqh2l@4ax.com> +# Reply-To: lole@epost.de +# NNTP-Posting-Host: 213.70.124.113 +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# Content-Transfer-Encoding: 7bit +# X-Trace: fu-berlin.de 1030523788 53278293 213.70.124.113 (16 [68559]) +# X-Newsreader: Forte Agent 1.91/32.564 +# Xref: dfw-artgen comp.lang.awk:14288 +# +# hello all, +# +# I'm using the following script +# +BEGIN { + RS="ti1\n(dwv,)?" + s = 0 + i = 0 +} +{ + if ($1 != "") + s = $1 + print ++i, s +} +# +# to extract values from a file of the form +# +# ti1 +# dwv,98.22 +# ti1 +# dwv,103.08 +# ti1 +# ti1 +# dwv,196.25 +# ti1 +# dwv,210.62 +# ti1 +# dwv,223.53 +# +# The desired result for this example looks like +# +# 1 0 +# 2 98.22 +# 3 103.08 +# 4 103.08 +# 5 196.25 +# 6 210.62 +# 7 223.53 +# +# The script work fine the most time, but when run on the attached file +# (sorry for the size, but the error would not appear with less data) I +# get some (three with the attached file) lines that look like +# +# 1262 dwv,212.97 +# 1277 dwv,174.33 +# 1279 dwv,151.79 +# +# I can't think of a other reason for this than a bug in gawk! +# +# I'm running gawk 3.1.1 on winnt 4.0 +# +# best regards +# Lorenz +# +# diff --git a/test/rebuf.in b/test/rebuf.in new file mode 100644 index 0000000..46d2210 --- /dev/null +++ b/test/rebuf.in @@ -0,0 +1,2350 @@ +ti1 +dwv,214.59 +ti1 +dwv,230.31 +ti1 +dwv,242.64 +ti1 +dwv,253.94 +ti1 +dwv,264.33 +ti1 +dwv,270.94 +ti1 +dwv,273.52 +ti1 +dwv,270.08 +ti1 +dwv,263.19 +ti1 +dwv,254.45 +ti1 +dwv,244.91 +ti1 +dwv,234.55 +ti1 +dwv,222.49 +ti1 +dwv,209.94 +ti1 +dwv,197.17 +ti1 +dwv,182.89 +ti1 +dwv,169.76 +ti1 +dwv,158.59 +ti1 +dwv,145.37 +ti1 +dwv,135.46 +ti1 +dwv,124.77 +ti1 +dwv,115.98 +ti1 +dwv,108.77 +ti1 +dwv,101.12 +ti1 +dwv,94.45 +ti1 +dwv,89.08 +ti1 +dwv,84.63 +ti1 +dwv,81.05 +ti1 +dwv,78.93 +ti1 +dwv,76.65 +ti1 +dwv,75.59 +ti1 +ti1 +ti1 +dwv,77.47 +ti1 +dwv,80.17 +ti1 +dwv,83.90 +ti1 +dwv,88.56 +ti1 +dwv,95.69 +ti1 +dwv,97.48 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,203.08 +ti1 +dwv,218.22 +ti1 +dwv,229.37 +ti1 +dwv,238.49 +ti1 +dwv,247.43 +ti1 +dwv,255.22 +ti1 +dwv,261.31 +ti1 +dwv,262.36 +ti1 +dwv,260.66 +ti1 +dwv,256.33 +ti1 +dwv,249.34 +ti1 +dwv,240.03 +ti1 +dwv,228.55 +ti1 +dwv,215.42 +ti1 +dwv,203.37 +ti1 +dwv,190.01 +ti1 +dwv,177.81 +ti1 +dwv,165.44 +ti1 +dwv,152.92 +ti1 +dwv,142.03 +ti1 +dwv,132.91 +ti1 +dwv,124.48 +ti1 +dwv,116.45 +ti1 +dwv,109.06 +ti1 +dwv,103.27 +ti1 +dwv,98.87 +ti1 +dwv,94.95 +ti1 +dwv,92.56 +ti1 +dwv,90.47 +ti1 +dwv,89.48 +ti1 +ti1 +dwv,90.53 +ti1 +dwv,93.07 +ti1 +dwv,97.12 +ti1 +dwv,101.82 +ti1 +dwv,108.18 +ti1 +dwv,109.73 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,202.97 +ti1 +dwv,217.38 +ti1 +dwv,231.73 +ti1 +dwv,243.11 +ti1 +dwv,255.37 +ti1 +dwv,264.12 +ti1 +dwv,269.64 +ti1 +dwv,270.98 +ti1 +dwv,269.65 +ti1 +dwv,264.55 +ti1 +dwv,257.16 +ti1 +dwv,246.01 +ti1 +dwv,232.88 +ti1 +dwv,219.85 +ti1 +dwv,208.79 +ti1 +dwv,197.00 +ti1 +dwv,183.93 +ti1 +dwv,172.00 +ti1 +dwv,160.55 +ti1 +dwv,150.59 +ti1 +dwv,141.47 +ti1 +dwv,133.02 +ti1 +dwv,126.21 +ti1 +dwv,120.64 +ti1 +dwv,115.79 +ti1 +dwv,111.62 +ti1 +dwv,108.41 +ti1 +dwv,106.41 +ti1 +ti1 +ti1 +dwv,109.08 +ti1 +dwv,113.23 +ti1 +dwv,118.57 +ti1 +dwv,122.57 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,208.07 +ti1 +dwv,224.14 +ti1 +dwv,236.28 +ti1 +dwv,248.12 +ti1 +dwv,258.97 +ti1 +dwv,267.74 +ti1 +dwv,272.47 +ti1 +dwv,271.52 +ti1 +dwv,266.80 +ti1 +dwv,258.61 +ti1 +dwv,249.30 +ti1 +dwv,239.19 +ti1 +dwv,228.28 +ti1 +dwv,215.79 +ti1 +dwv,203.86 +ti1 +dwv,190.08 +ti1 +dwv,177.40 +ti1 +dwv,163.81 +ti1 +dwv,152.60 +ti1 +dwv,141.33 +ti1 +dwv,130.98 +ti1 +dwv,121.98 +ti1 +dwv,114.08 +ti1 +dwv,106.61 +ti1 +dwv,99.75 +ti1 +dwv,93.10 +ti1 +dwv,86.57 +ti1 +dwv,80.62 +ti1 +dwv,76.05 +ti1 +dwv,71.52 +ti1 +dwv,68.85 +ti1 +dwv,67.46 +ti1 +dwv,66.86 +ti1 +dwv,67.51 +ti1 +dwv,69.75 +ti1 +dwv,72.85 +ti1 +dwv,76.23 +ti1 +dwv,82.85 +ti1 +dwv,89.33 +ti1 +dwv,93.39 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,188.37 +ti1 +dwv,204.42 +ti1 +dwv,217.16 +ti1 +dwv,228.89 +ti1 +dwv,238.83 +ti1 +dwv,247.70 +ti1 +dwv,253.59 +ti1 +dwv,257.17 +ti1 +ti1 +dwv,254.00 +ti1 +dwv,248.24 +ti1 +dwv,240.14 +ti1 +dwv,229.42 +ti1 +dwv,218.97 +ti1 +dwv,205.09 +ti1 +dwv,192.61 +ti1 +dwv,179.74 +ti1 +dwv,166.76 +ti1 +dwv,155.36 +ti1 +dwv,143.58 +ti1 +dwv,131.40 +ti1 +dwv,121.84 +ti1 +dwv,112.46 +ti1 +dwv,105.41 +ti1 +dwv,97.15 +ti1 +dwv,90.09 +ti1 +dwv,84.79 +ti1 +dwv,80.52 +ti1 +dwv,75.58 +ti1 +dwv,72.59 +ti1 +dwv,69.39 +ti1 +dwv,67.51 +ti1 +dwv,66.42 +ti1 +ti1 +ti1 +dwv,67.82 +ti1 +dwv,69.76 +ti1 +dwv,73.19 +ti1 +dwv,77.35 +ti1 +dwv,82.36 +ti1 +dwv,87.82 +ti1 +dwv,93.30 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,190.58 +ti1 +dwv,203.43 +ti1 +dwv,216.48 +ti1 +dwv,228.89 +ti1 +dwv,241.91 +ti1 +dwv,251.60 +ti1 +dwv,257.78 +ti1 +dwv,262.18 +ti1 +dwv,263.13 +ti1 +dwv,260.91 +ti1 +dwv,255.34 +ti1 +dwv,247.17 +ti1 +dwv,236.85 +ti1 +dwv,225.24 +ti1 +dwv,213.39 +ti1 +dwv,201.46 +ti1 +dwv,187.77 +ti1 +dwv,175.31 +ti1 +dwv,162.95 +ti1 +dwv,152.55 +ti1 +dwv,142.56 +ti1 +dwv,132.94 +ti1 +dwv,125.00 +ti1 +dwv,117.69 +ti1 +dwv,110.96 +ti1 +dwv,105.02 +ti1 +dwv,101.78 +ti1 +dwv,98.48 +ti1 +dwv,97.06 +ti1 +dwv,96.50 +ti1 +ti1 +dwv,98.48 +ti1 +dwv,101.18 +ti1 +dwv,104.56 +ti1 +dwv,109.67 +ti1 +dwv,115.86 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,200.02 +ti1 +dwv,217.51 +ti1 +dwv,233.21 +ti1 +dwv,245.72 +ti1 +dwv,258.21 +ti1 +dwv,267.24 +ti1 +dwv,273.79 +ti1 +dwv,273.20 +ti1 +dwv,270.38 +ti1 +dwv,260.76 +ti1 +dwv,250.05 +ti1 +dwv,241.32 +ti1 +dwv,231.14 +ti1 +dwv,219.83 +ti1 +dwv,206.13 +ti1 +dwv,193.24 +ti1 +dwv,180.73 +ti1 +dwv,167.82 +ti1 +dwv,156.94 +ti1 +dwv,144.13 +ti1 +dwv,134.40 +ti1 +dwv,125.23 +ti1 +dwv,116.13 +ti1 +dwv,107.34 +ti1 +dwv,99.71 +ti1 +dwv,94.11 +ti1 +dwv,88.91 +ti1 +dwv,84.51 +ti1 +dwv,81.50 +ti1 +dwv,78.66 +ti1 +dwv,76.57 +ti1 +dwv,75.82 +ti1 +ti1 +dwv,76.88 +ti1 +dwv,79.03 +ti1 +dwv,82.12 +ti1 +dwv,85.73 +ti1 +dwv,91.05 +ti1 +dwv,96.31 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,184.18 +ti1 +dwv,201.10 +ti1 +dwv,214.21 +ti1 +dwv,226.18 +ti1 +dwv,237.72 +ti1 +dwv,247.57 +ti1 +dwv,254.36 +ti1 +dwv,258.34 +ti1 +dwv,259.80 +ti1 +dwv,257.76 +ti1 +dwv,253.17 +ti1 +dwv,246.51 +ti1 +dwv,237.92 +ti1 +dwv,227.09 +ti1 +dwv,214.13 +ti1 +dwv,202.20 +ti1 +dwv,189.21 +ti1 +dwv,177.65 +ti1 +dwv,166.18 +ti1 +dwv,154.03 +ti1 +dwv,142.21 +ti1 +dwv,131.51 +ti1 +dwv,121.28 +ti1 +dwv,111.80 +ti1 +dwv,104.47 +ti1 +dwv,98.80 +ti1 +dwv,94.76 +ti1 +dwv,91.81 +ti1 +dwv,89.17 +ti1 +dwv,88.00 +ti1 +ti1 +ti1 +dwv,89.20 +ti1 +dwv,91.17 +ti1 +dwv,94.35 +ti1 +dwv,99.00 +ti1 +dwv,105.43 +ti1 +dwv,109.34 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,194.84 +ti1 +dwv,212.05 +ti1 +dwv,226.30 +ti1 +dwv,239.03 +ti1 +dwv,250.94 +ti1 +dwv,259.73 +ti1 +dwv,266.64 +ti1 +dwv,269.67 +ti1 +dwv,269.03 +ti1 +dwv,265.03 +ti1 +dwv,258.23 +ti1 +dwv,249.32 +ti1 +dwv,238.03 +ti1 +dwv,226.20 +ti1 +dwv,213.46 +ti1 +dwv,200.53 +ti1 +dwv,187.65 +ti1 +dwv,174.89 +ti1 +dwv,163.22 +ti1 +dwv,152.47 +ti1 +dwv,142.65 +ti1 +dwv,133.97 +ti1 +dwv,126.59 +ti1 +dwv,120.52 +ti1 +dwv,115.57 +ti1 +dwv,111.49 +ti1 +dwv,108.03 +ti1 +dwv,106.01 +ti1 +dwv,105.28 +ti1 +ti1 +dwv,106.91 +ti1 +dwv,109.73 +ti1 +dwv,114.91 +ti1 +dwv,120.66 +ti1 +dwv,123.74 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,211.57 +ti1 +dwv,227.06 +ti1 +dwv,240.57 +ti1 +dwv,252.26 +ti1 +dwv,262.67 +ti1 +dwv,270.66 +ti1 +dwv,273.40 +ti1 +dwv,270.25 +ti1 +dwv,263.76 +ti1 +dwv,256.03 +ti1 +dwv,246.87 +ti1 +dwv,237.10 +ti1 +dwv,225.11 +ti1 +dwv,211.53 +ti1 +dwv,197.77 +ti1 +dwv,185.75 +ti1 +dwv,173.00 +ti1 +dwv,159.31 +ti1 +dwv,147.18 +ti1 +dwv,134.84 +ti1 +dwv,125.07 +ti1 +dwv,115.82 +ti1 +dwv,107.33 +ti1 +dwv,100.07 +ti1 +dwv,93.55 +ti1 +dwv,87.60 +ti1 +dwv,81.75 +ti1 +dwv,77.03 +ti1 +dwv,73.39 +ti1 +dwv,70.97 +ti1 +dwv,67.94 +ti1 +dwv,66.64 +ti1 +dwv,65.80 +ti1 +ti1 +dwv,66.85 +ti1 +dwv,68.78 +ti1 +dwv,71.47 +ti1 +dwv,74.20 +ti1 +dwv,78.68 +ti1 +dwv,85.08 +ti1 +dwv,87.47 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,185.81 +ti1 +dwv,201.66 +ti1 +dwv,215.07 +ti1 +dwv,227.26 +ti1 +dwv,238.00 +ti1 +dwv,247.64 +ti1 +dwv,255.03 +ti1 +dwv,257.12 +ti1 +dwv,256.17 +ti1 +dwv,253.47 +ti1 +dwv,248.93 +ti1 +dwv,241.39 +ti1 +dwv,231.45 +ti1 +dwv,220.49 +ti1 +dwv,208.48 +ti1 +dwv,196.04 +ti1 +dwv,182.73 +ti1 +dwv,169.40 +ti1 +dwv,157.24 +ti1 +dwv,145.56 +ti1 +dwv,133.54 +ti1 +dwv,124.01 +ti1 +dwv,114.55 +ti1 +dwv,105.75 +ti1 +dwv,98.32 +ti1 +dwv,91.91 +ti1 +dwv,86.08 +ti1 +dwv,81.35 +ti1 +dwv,77.78 +ti1 +dwv,73.85 +ti1 +dwv,71.12 +ti1 +dwv,68.53 +ti1 +dwv,67.09 +ti1 +dwv,66.34 +ti1 +ti1 +ti1 +dwv,67.92 +ti1 +dwv,70.08 +ti1 +dwv,73.78 +ti1 +dwv,78.68 +ti1 +dwv,84.33 +ti1 +dwv,90.25 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,183.19 +ti1 +dwv,198.96 +ti1 +dwv,213.55 +ti1 +dwv,225.91 +ti1 +dwv,237.33 +ti1 +dwv,246.66 +ti1 +dwv,254.98 +ti1 +dwv,259.46 +ti1 +dwv,261.02 +ti1 +dwv,260.02 +ti1 +dwv,255.96 +ti1 +dwv,249.08 +ti1 +dwv,240.15 +ti1 +dwv,229.51 +ti1 +dwv,217.21 +ti1 +dwv,205.06 +ti1 +dwv,192.62 +ti1 +dwv,177.43 +ti1 +dwv,165.06 +ti1 +dwv,152.36 +ti1 +dwv,142.35 +ti1 +dwv,134.58 +ti1 +dwv,126.20 +ti1 +dwv,119.86 +ti1 +dwv,113.67 +ti1 +dwv,108.20 +ti1 +dwv,104.71 +ti1 +dwv,100.83 +ti1 +dwv,98.96 +ti1 +dwv,98.38 +ti1 +ti1 +dwv,100.29 +ti1 +dwv,103.47 +ti1 +dwv,107.73 +ti1 +dwv,113.04 +ti1 +dwv,118.90 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,200.70 +ti1 +dwv,217.77 +ti1 +dwv,232.45 +ti1 +dwv,244.28 +ti1 +dwv,256.61 +ti1 +dwv,265.93 +ti1 +dwv,272.01 +ti1 +ti1 +dwv,268.67 +ti1 +dwv,260.53 +ti1 +dwv,252.09 +ti1 +dwv,243.72 +ti1 +dwv,232.68 +ti1 +dwv,220.49 +ti1 +dwv,206.88 +ti1 +dwv,193.98 +ti1 +dwv,181.33 +ti1 +dwv,168.61 +ti1 +dwv,156.50 +ti1 +dwv,145.54 +ti1 +dwv,136.43 +ti1 +dwv,125.95 +ti1 +dwv,117.26 +ti1 +dwv,109.81 +ti1 +dwv,103.36 +ti1 +dwv,97.15 +ti1 +dwv,92.86 +ti1 +dwv,89.02 +ti1 +dwv,86.39 +ti1 +dwv,84.44 +ti1 +dwv,83.72 +ti1 +ti1 +dwv,85.89 +ti1 +dwv,88.39 +ti1 +dwv,92.31 +ti1 +dwv,96.00 +ti1 +dwv,100.24 +ti1 +dwv,102.55 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,197.15 +ti1 +dwv,212.33 +ti1 +dwv,225.48 +ti1 +dwv,236.75 +ti1 +dwv,247.52 +ti1 +dwv,255.21 +ti1 +dwv,260.74 +ti1 +dwv,262.81 +ti1 +dwv,262.09 +ti1 +dwv,258.08 +ti1 +dwv,250.83 +ti1 +dwv,242.39 +ti1 +dwv,230.86 +ti1 +dwv,219.62 +ti1 +dwv,206.80 +ti1 +dwv,193.41 +ti1 +dwv,180.60 +ti1 +dwv,168.20 +ti1 +dwv,157.77 +ti1 +dwv,145.25 +ti1 +dwv,136.23 +ti1 +dwv,126.28 +ti1 +dwv,118.10 +ti1 +dwv,110.74 +ti1 +dwv,105.29 +ti1 +dwv,99.75 +ti1 +dwv,95.61 +ti1 +dwv,92.16 +ti1 +dwv,89.93 +ti1 +dwv,88.45 +ti1 +ti1 +dwv,89.11 +ti1 +dwv,90.87 +ti1 +dwv,94.21 +ti1 +dwv,98.16 +ti1 +dwv,104.24 +ti1 +dwv,108.98 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,195.81 +ti1 +dwv,211.95 +ti1 +dwv,226.36 +ti1 +dwv,240.61 +ti1 +dwv,251.93 +ti1 +dwv,259.13 +ti1 +dwv,265.36 +ti1 +dwv,269.71 +ti1 +dwv,270.27 +ti1 +dwv,266.44 +ti1 +dwv,260.44 +ti1 +dwv,251.94 +ti1 +dwv,240.79 +ti1 +dwv,228.95 +ti1 +dwv,215.90 +ti1 +dwv,203.25 +ti1 +dwv,190.01 +ti1 +dwv,177.92 +ti1 +dwv,165.60 +ti1 +dwv,155.49 +ti1 +dwv,144.32 +ti1 +dwv,136.07 +ti1 +dwv,127.64 +ti1 +dwv,120.28 +ti1 +dwv,114.57 +ti1 +dwv,109.99 +ti1 +dwv,106.36 +ti1 +dwv,104.49 +ti1 +dwv,103.84 +ti1 +ti1 +dwv,105.77 +ti1 +dwv,107.83 +ti1 +dwv,112.41 +ti1 +dwv,117.71 +ti1 +dwv,120.66 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,210.13 +ti1 +dwv,225.03 +ti1 +dwv,238.76 +ti1 +dwv,250.50 +ti1 +dwv,261.18 +ti1 +dwv,269.22 +ti1 +dwv,274.18 +ti1 +dwv,272.28 +ti1 +dwv,266.66 +ti1 +dwv,258.68 +ti1 +dwv,249.88 +ti1 +dwv,239.94 +ti1 +dwv,227.14 +ti1 +dwv,213.22 +ti1 +dwv,197.58 +ti1 +dwv,184.86 +ti1 +dwv,172.52 +ti1 +dwv,160.19 +ti1 +dwv,149.20 +ti1 +dwv,137.49 +ti1 +dwv,127.86 +ti1 +dwv,118.91 +ti1 +dwv,110.49 +ti1 +dwv,102.73 +ti1 +dwv,96.33 +ti1 +dwv,90.95 +ti1 +dwv,86.38 +ti1 +dwv,82.72 +ti1 +dwv,79.65 +ti1 +dwv,77.61 +ti1 +dwv,75.70 +ti1 +dwv,74.49 +ti1 +ti1 +ti1 +dwv,76.48 +ti1 +dwv,79.14 +ti1 +dwv,82.84 +ti1 +dwv,87.86 +ti1 +dwv,92.69 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,181.33 +ti1 +dwv,196.86 +ti1 +dwv,210.98 +ti1 +dwv,223.13 +ti1 +dwv,233.90 +ti1 +dwv,243.19 +ti1 +dwv,250.57 +ti1 +dwv,255.00 +ti1 +dwv,256.36 +ti1 +dwv,255.16 +ti1 +dwv,250.15 +ti1 +dwv,242.80 +ti1 +dwv,233.82 +ti1 +dwv,223.41 +ti1 +dwv,210.81 +ti1 +dwv,199.04 +ti1 +dwv,187.39 +ti1 +dwv,174.14 +ti1 +dwv,162.62 +ti1 +dwv,151.39 +ti1 +dwv,139.59 +ti1 +dwv,128.71 +ti1 +dwv,119.17 +ti1 +dwv,111.02 +ti1 +dwv,103.91 +ti1 +dwv,96.78 +ti1 +dwv,91.56 +ti1 +dwv,87.13 +ti1 +dwv,83.22 +ti1 +dwv,80.50 +ti1 +dwv,76.83 +ti1 +dwv,74.24 +ti1 +dwv,70.80 +ti1 +dwv,69.04 +ti1 +dwv,67.12 +ti1 +dwv,66.51 +ti1 +ti1 +dwv,68.77 +ti1 +dwv,72.19 +ti1 +dwv,77.34 +ti1 +dwv,84.04 +ti1 +dwv,88.55 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,190.51 +ti1 +dwv,207.14 +ti1 +dwv,220.57 +ti1 +dwv,232.51 +ti1 +dwv,243.35 +ti1 +dwv,252.41 +ti1 +dwv,258.62 +ti1 +dwv,262.18 +ti1 +ti1 +dwv,259.10 +ti1 +dwv,253.54 +ti1 +dwv,245.44 +ti1 +dwv,235.55 +ti1 +dwv,223.43 +ti1 +dwv,209.91 +ti1 +dwv,197.52 +ti1 +dwv,185.90 +ti1 +dwv,172.13 +ti1 +dwv,161.09 +ti1 +dwv,150.58 +ti1 +dwv,140.37 +ti1 +dwv,130.27 +ti1 +dwv,122.13 +ti1 +dwv,114.99 +ti1 +dwv,108.76 +ti1 +dwv,104.67 +ti1 +dwv,100.36 +ti1 +dwv,97.61 +ti1 +dwv,95.48 +ti1 +dwv,94.83 +ti1 +dwv,95.45 +ti1 +dwv,97.15 +ti1 +dwv,100.73 +ti1 +dwv,105.10 +ti1 +dwv,111.46 +ti1 +dwv,118.27 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,202.92 +ti1 +dwv,220.25 +ti1 +dwv,233.35 +ti1 +dwv,243.48 +ti1 +dwv,254.85 +ti1 +dwv,265.75 +ti1 +dwv,272.62 +ti1 +ti1 +dwv,269.36 +ti1 +dwv,261.82 +ti1 +dwv,252.85 +ti1 +dwv,244.08 +ti1 +dwv,232.96 +ti1 +dwv,219.59 +ti1 +dwv,207.32 +ti1 +dwv,193.87 +ti1 +dwv,181.77 +ti1 +dwv,168.60 +ti1 +dwv,155.76 +ti1 +dwv,144.03 +ti1 +dwv,134.07 +ti1 +dwv,123.46 +ti1 +dwv,114.47 +ti1 +dwv,107.64 +ti1 +dwv,100.46 +ti1 +dwv,94.53 +ti1 +dwv,89.28 +ti1 +dwv,84.59 +ti1 +dwv,80.96 +ti1 +dwv,78.54 +ti1 +dwv,76.28 +ti1 +dwv,75.51 +ti1 +ti1 +dwv,76.55 +ti1 +dwv,78.55 +ti1 +dwv,81.57 +ti1 +dwv,85.18 +ti1 +dwv,90.61 +ti1 +dwv,96.01 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,184.51 +ti1 +dwv,201.57 +ti1 +dwv,216.33 +ti1 +dwv,228.69 +ti1 +dwv,239.90 +ti1 +dwv,250.41 +ti1 +dwv,257.91 +ti1 +dwv,262.29 +ti1 +dwv,263.41 +ti1 +dwv,261.70 +ti1 +dwv,256.75 +ti1 +dwv,246.82 +ti1 +dwv,236.35 +ti1 +dwv,225.17 +ti1 +dwv,212.90 +ti1 +dwv,201.61 +ti1 +dwv,188.42 +ti1 +dwv,175.92 +ti1 +dwv,163.70 +ti1 +dwv,153.18 +ti1 +dwv,142.89 +ti1 +dwv,132.95 +ti1 +dwv,125.18 +ti1 +dwv,117.61 +ti1 +dwv,110.36 +ti1 +dwv,104.56 +ti1 +dwv,100.13 +ti1 +dwv,96.64 +ti1 +dwv,93.52 +ti1 +dwv,91.91 +ti1 +ti1 +ti1 +dwv,93.84 +ti1 +dwv,97.13 +ti1 +dwv,101.08 +ti1 +dwv,107.19 +ti1 +dwv,111.89 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,195.89 +ti1 +dwv,212.65 +ti1 +dwv,226.60 +ti1 +dwv,239.28 +ti1 +dwv,251.28 +ti1 +dwv,259.92 +ti1 +dwv,266.03 +ti1 +dwv,269.76 +ti1 +ti1 +dwv,265.55 +ti1 +dwv,258.92 +ti1 +dwv,250.42 +ti1 +dwv,240.04 +ti1 +dwv,229.03 +ti1 +dwv,216.69 +ti1 +dwv,204.21 +ti1 +dwv,191.25 +ti1 +dwv,178.40 +ti1 +dwv,168.31 +ti1 +dwv,157.47 +ti1 +dwv,148.62 +ti1 +dwv,139.12 +ti1 +dwv,129.54 +ti1 +dwv,121.65 +ti1 +dwv,114.59 +ti1 +dwv,109.30 +ti1 +dwv,106.39 +ti1 +dwv,104.71 +ti1 +ti1 +dwv,106.41 +ti1 +dwv,109.22 +ti1 +dwv,113.62 +ti1 +dwv,118.31 +ti1 +dwv,124.34 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,205.67 +ti1 +dwv,221.25 +ti1 +dwv,235.02 +ti1 +dwv,247.47 +ti1 +dwv,258.37 +ti1 +dwv,267.42 +ti1 +dwv,272.60 +ti1 +dwv,272.00 +ti1 +dwv,267.91 +ti1 +dwv,260.38 +ti1 +dwv,251.10 +ti1 +dwv,241.32 +ti1 +dwv,230.96 +ti1 +dwv,217.34 +ti1 +dwv,204.99 +ti1 +dwv,191.24 +ti1 +dwv,178.58 +ti1 +dwv,164.79 +ti1 +dwv,153.07 +ti1 +dwv,141.06 +ti1 +dwv,129.86 +ti1 +dwv,119.79 +ti1 +dwv,111.13 +ti1 +dwv,103.53 +ti1 +dwv,96.95 +ti1 +dwv,89.42 +ti1 +dwv,85.22 +ti1 +dwv,80.54 +ti1 +dwv,76.85 +ti1 +dwv,74.41 +ti1 +dwv,72.12 +ti1 +dwv,71.21 +ti1 +ti1 +ti1 +dwv,72.13 +ti1 +dwv,74.22 +ti1 +dwv,76.95 +ti1 +dwv,80.65 +ti1 +dwv,85.36 +ti1 +dwv,90.60 +ti1 +dwv,92.36 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,191.27 +ti1 +dwv,205.03 +ti1 +dwv,218.89 +ti1 +dwv,230.87 +ti1 +dwv,241.63 +ti1 +dwv,249.83 +ti1 +dwv,255.42 +ti1 +dwv,257.98 +ti1 +dwv,257.33 +ti1 +dwv,252.87 +ti1 +dwv,245.90 +ti1 +dwv,237.78 +ti1 +dwv,227.14 +ti1 +dwv,214.67 +ti1 +dwv,202.31 +ti1 +dwv,188.68 +ti1 +dwv,175.96 +ti1 +dwv,163.25 +ti1 +dwv,151.43 +ti1 +dwv,139.79 +ti1 +dwv,130.40 +ti1 +dwv,118.92 +ti1 +dwv,110.88 +ti1 +dwv,101.92 +ti1 +dwv,94.45 +ti1 +dwv,88.13 +ti1 +dwv,83.19 +ti1 +dwv,79.11 +ti1 +dwv,74.60 +ti1 +dwv,71.86 +ti1 +dwv,68.77 +ti1 +dwv,66.57 +ti1 +dwv,65.24 +ti1 +dwv,64.41 +ti1 +ti1 +dwv,64.92 +ti1 +dwv,66.62 +ti1 +dwv,68.93 +ti1 +dwv,72.77 +ti1 +dwv,77.76 +ti1 +dwv,83.41 +ti1 +dwv,89.19 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,182.68 +ti1 +dwv,199.88 +ti1 +dwv,214.62 +ti1 +dwv,227.29 +ti1 +dwv,238.62 +ti1 +dwv,249.01 +ti1 +dwv,256.68 +ti1 +dwv,262.71 +ti1 +dwv,263.44 +ti1 +dwv,259.87 +ti1 +dwv,254.66 +ti1 +dwv,248.11 +ti1 +dwv,240.01 +ti1 +dwv,229.30 +ti1 +dwv,216.52 +ti1 +dwv,205.15 +ti1 +dwv,192.49 +ti1 +dwv,179.70 +ti1 +dwv,167.51 +ti1 +dwv,156.31 +ti1 +dwv,145.97 +ti1 +dwv,135.93 +ti1 +dwv,128.06 +ti1 +dwv,119.45 +ti1 +dwv,113.01 +ti1 +dwv,108.31 +ti1 +dwv,103.79 +ti1 +dwv,100.92 +ti1 +dwv,98.90 +ti1 +dwv,98.28 +ti1 +ti1 +dwv,100.12 +ti1 +dwv,102.38 +ti1 +dwv,106.07 +ti1 +dwv,111.06 +ti1 +dwv,117.00 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,202.42 +ti1 +dwv,217.46 +ti1 +dwv,232.83 +ti1 +dwv,245.05 +ti1 +dwv,256.39 +ti1 +dwv,265.28 +ti1 +dwv,271.80 +ti1 +ti1 +dwv,268.63 +ti1 +dwv,261.21 +ti1 +dwv,253.57 +ti1 +dwv,244.41 +ti1 +dwv,233.79 +ti1 +dwv,220.80 +ti1 +dwv,209.24 +ti1 +dwv,196.54 +ti1 +dwv,183.38 +ti1 +dwv,170.14 +ti1 +dwv,157.79 +ti1 +dwv,144.31 +ti1 +dwv,131.53 +ti1 +dwv,122.20 +ti1 +dwv,113.46 +ti1 +dwv,106.57 +ti1 +dwv,100.93 +ti1 +dwv,96.80 +ti1 +dwv,92.10 +ti1 +dwv,88.77 +ti1 +dwv,86.07 +ti1 +dwv,83.75 +ti1 +dwv,82.40 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,84.82 +ti1 +dwv,88.34 +ti1 +dwv,92.06 +ti1 +dwv,98.22 +ti1 +dwv,103.08 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,196.25 +ti1 +dwv,210.62 +ti1 +dwv,223.53 +ti1 +dwv,235.01 +ti1 +dwv,245.30 +ti1 +dwv,253.56 +ti1 +dwv,259.86 +ti1 +dwv,261.87 +ti1 +ti1 +dwv,257.71 +ti1 +dwv,251.10 +ti1 +dwv,242.25 +ti1 +dwv,232.00 +ti1 +dwv,219.62 +ti1 +dwv,207.54 +ti1 +dwv,194.54 +ti1 +dwv,182.85 +ti1 +dwv,170.49 +ti1 +dwv,158.24 +ti1 +dwv,147.54 +ti1 +dwv,137.40 +ti1 +dwv,129.81 +ti1 +dwv,121.07 +ti1 +dwv,114.39 +ti1 +dwv,109.32 +ti1 +dwv,103.67 +ti1 +dwv,99.51 +ti1 +dwv,96.53 +ti1 +dwv,94.67 +ti1 +dwv,93.79 +ti1 +ti1 +dwv,95.31 +ti1 +dwv,98.43 +ti1 +dwv,102.95 +ti1 +dwv,109.01 +ti1 +dwv,115.86 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,209.63 +ti1 +dwv,224.03 +ti1 +dwv,236.93 +ti1 +dwv,249.17 +ti1 +dwv,259.34 +ti1 +dwv,267.41 +ti1 +dwv,271.07 +ti1 +dwv,270.51 +ti1 +dwv,263.93 +ti1 +dwv,255.80 +ti1 +dwv,246.03 +ti1 +dwv,235.96 +ti1 +dwv,223.79 +ti1 +dwv,209.68 +ti1 +dwv,196.98 +ti1 +dwv,184.70 +ti1 +dwv,171.16 +ti1 +dwv,157.06 +ti1 +dwv,145.05 +ti1 +dwv,133.80 +ti1 +dwv,123.45 +ti1 +dwv,114.06 +ti1 +dwv,106.78 +ti1 +dwv,98.12 +ti1 +dwv,91.19 +ti1 +dwv,84.78 +ti1 +dwv,80.10 +ti1 +dwv,74.95 +ti1 +dwv,71.88 +ti1 +dwv,68.51 +ti1 +dwv,66.13 +ti1 +dwv,64.64 +ti1 +dwv,63.65 +ti1 +dwv,63.06 +ti1 +ti1 +dwv,64.29 +ti1 +dwv,66.41 +ti1 +dwv,68.95 +ti1 +dwv,73.12 +ti1 +dwv,78.00 +ti1 +dwv,83.67 +ti1 +dwv,85.55 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,187.86 +ti1 +dwv,202.65 +ti1 +dwv,216.23 +ti1 +dwv,228.24 +ti1 +dwv,239.81 +ti1 +dwv,248.77 +ti1 +dwv,252.97 +ti1 +dwv,254.72 +ti1 +ti1 +dwv,253.22 +ti1 +dwv,247.80 +ti1 +dwv,239.99 +ti1 +dwv,229.87 +ti1 +dwv,218.26 +ti1 +dwv,205.99 +ti1 +dwv,193.09 +ti1 +dwv,180.59 +ti1 +dwv,167.42 +ti1 +dwv,154.33 +ti1 +dwv,142.32 +ti1 +dwv,131.88 +ti1 +dwv,122.32 +ti1 +dwv,112.84 +ti1 +dwv,104.07 +ti1 +dwv,96.62 +ti1 +dwv,90.02 +ti1 +dwv,84.43 +ti1 +dwv,79.90 +ti1 +dwv,74.59 +ti1 +dwv,71.27 +ti1 +dwv,67.37 +ti1 +dwv,64.97 +ti1 +dwv,62.82 +ti1 +dwv,61.60 +ti1 +ti1 +ti1 +dwv,62.99 +ti1 +dwv,64.80 +ti1 +dwv,68.51 +ti1 +dwv,72.70 +ti1 +dwv,77.97 +ti1 +dwv,84.10 +ti1 +dwv,88.07 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +ti1 +dwv,184.25 +ti1 +dwv,199.56 +ti1 +dwv,212.97 +ti1 +dwv,226.37 +ti1 +dwv,237.23 +ti1 +dwv,247.66 +ti1 +dwv,254.97 +ti1 +dwv,259.77 +ti1 +dwv,261.89 +ti1 +dwv,260.39 +ti1 +dwv,255.67 +ti1 +dwv,248.49 +ti1 +dwv,238.75 +ti1 +dwv,228.34 +ti1 +dwv,215.95 +ti1 +dwv,201.71 +ti1 +dwv,187.12 +ti1 +dwv,174.33 +ti1 +dwv,162.05 +ti1 +dwv,151.79 +ti1 +dwv,142.67 +ti1 +dwv,134.03 +ti1 +dwv,126.03 +ti1 +dwv,118.64 +ti1 +dwv,112.00 +ti1 +dwv,107.16 +ti1 +dwv,103.71 +ti1 +dwv,100.06 +ti1 +dwv,98.59 +ti1 +dwv,97.68 +ti1 +ti1 diff --git a/test/rebuf.ok b/test/rebuf.ok new file mode 100644 index 0000000..f452f55 --- /dev/null +++ b/test/rebuf.ok @@ -0,0 +1,1290 @@ +1 0 +2 214.59 +3 230.31 +4 242.64 +5 253.94 +6 264.33 +7 270.94 +8 273.52 +9 270.08 +10 263.19 +11 254.45 +12 244.91 +13 234.55 +14 222.49 +15 209.94 +16 197.17 +17 182.89 +18 169.76 +19 158.59 +20 145.37 +21 135.46 +22 124.77 +23 115.98 +24 108.77 +25 101.12 +26 94.45 +27 89.08 +28 84.63 +29 81.05 +30 78.93 +31 76.65 +32 75.59 +33 75.59 +34 75.59 +35 77.47 +36 80.17 +37 83.90 +38 88.56 +39 95.69 +40 97.48 +41 97.48 +42 97.48 +43 97.48 +44 97.48 +45 97.48 +46 97.48 +47 97.48 +48 203.08 +49 218.22 +50 229.37 +51 238.49 +52 247.43 +53 255.22 +54 261.31 +55 262.36 +56 260.66 +57 256.33 +58 249.34 +59 240.03 +60 228.55 +61 215.42 +62 203.37 +63 190.01 +64 177.81 +65 165.44 +66 152.92 +67 142.03 +68 132.91 +69 124.48 +70 116.45 +71 109.06 +72 103.27 +73 98.87 +74 94.95 +75 92.56 +76 90.47 +77 89.48 +78 89.48 +79 90.53 +80 93.07 +81 97.12 +82 101.82 +83 108.18 +84 109.73 +85 109.73 +86 109.73 +87 109.73 +88 109.73 +89 109.73 +90 109.73 +91 202.97 +92 217.38 +93 231.73 +94 243.11 +95 255.37 +96 264.12 +97 269.64 +98 270.98 +99 269.65 +100 264.55 +101 257.16 +102 246.01 +103 232.88 +104 219.85 +105 208.79 +106 197.00 +107 183.93 +108 172.00 +109 160.55 +110 150.59 +111 141.47 +112 133.02 +113 126.21 +114 120.64 +115 115.79 +116 111.62 +117 108.41 +118 106.41 +119 106.41 +120 106.41 +121 109.08 +122 113.23 +123 118.57 +124 122.57 +125 122.57 +126 122.57 +127 122.57 +128 122.57 +129 122.57 +130 122.57 +131 208.07 +132 224.14 +133 236.28 +134 248.12 +135 258.97 +136 267.74 +137 272.47 +138 271.52 +139 266.80 +140 258.61 +141 249.30 +142 239.19 +143 228.28 +144 215.79 +145 203.86 +146 190.08 +147 177.40 +148 163.81 +149 152.60 +150 141.33 +151 130.98 +152 121.98 +153 114.08 +154 106.61 +155 99.75 +156 93.10 +157 86.57 +158 80.62 +159 76.05 +160 71.52 +161 68.85 +162 67.46 +163 66.86 +164 67.51 +165 69.75 +166 72.85 +167 76.23 +168 82.85 +169 89.33 +170 93.39 +171 93.39 +172 93.39 +173 93.39 +174 93.39 +175 93.39 +176 93.39 +177 93.39 +178 188.37 +179 204.42 +180 217.16 +181 228.89 +182 238.83 +183 247.70 +184 253.59 +185 257.17 +186 257.17 +187 254.00 +188 248.24 +189 240.14 +190 229.42 +191 218.97 +192 205.09 +193 192.61 +194 179.74 +195 166.76 +196 155.36 +197 143.58 +198 131.40 +199 121.84 +200 112.46 +201 105.41 +202 97.15 +203 90.09 +204 84.79 +205 80.52 +206 75.58 +207 72.59 +208 69.39 +209 67.51 +210 66.42 +211 66.42 +212 66.42 +213 67.82 +214 69.76 +215 73.19 +216 77.35 +217 82.36 +218 87.82 +219 93.30 +220 93.30 +221 93.30 +222 93.30 +223 93.30 +224 93.30 +225 93.30 +226 93.30 +227 190.58 +228 203.43 +229 216.48 +230 228.89 +231 241.91 +232 251.60 +233 257.78 +234 262.18 +235 263.13 +236 260.91 +237 255.34 +238 247.17 +239 236.85 +240 225.24 +241 213.39 +242 201.46 +243 187.77 +244 175.31 +245 162.95 +246 152.55 +247 142.56 +248 132.94 +249 125.00 +250 117.69 +251 110.96 +252 105.02 +253 101.78 +254 98.48 +255 97.06 +256 96.50 +257 96.50 +258 98.48 +259 101.18 +260 104.56 +261 109.67 +262 115.86 +263 115.86 +264 115.86 +265 115.86 +266 115.86 +267 115.86 +268 115.86 +269 200.02 +270 217.51 +271 233.21 +272 245.72 +273 258.21 +274 267.24 +275 273.79 +276 273.20 +277 270.38 +278 260.76 +279 250.05 +280 241.32 +281 231.14 +282 219.83 +283 206.13 +284 193.24 +285 180.73 +286 167.82 +287 156.94 +288 144.13 +289 134.40 +290 125.23 +291 116.13 +292 107.34 +293 99.71 +294 94.11 +295 88.91 +296 84.51 +297 81.50 +298 78.66 +299 76.57 +300 75.82 +301 75.82 +302 76.88 +303 79.03 +304 82.12 +305 85.73 +306 91.05 +307 96.31 +308 96.31 +309 96.31 +310 96.31 +311 96.31 +312 96.31 +313 96.31 +314 96.31 +315 184.18 +316 201.10 +317 214.21 +318 226.18 +319 237.72 +320 247.57 +321 254.36 +322 258.34 +323 259.80 +324 257.76 +325 253.17 +326 246.51 +327 237.92 +328 227.09 +329 214.13 +330 202.20 +331 189.21 +332 177.65 +333 166.18 +334 154.03 +335 142.21 +336 131.51 +337 121.28 +338 111.80 +339 104.47 +340 98.80 +341 94.76 +342 91.81 +343 89.17 +344 88.00 +345 88.00 +346 88.00 +347 89.20 +348 91.17 +349 94.35 +350 99.00 +351 105.43 +352 109.34 +353 109.34 +354 109.34 +355 109.34 +356 109.34 +357 109.34 +358 109.34 +359 194.84 +360 212.05 +361 226.30 +362 239.03 +363 250.94 +364 259.73 +365 266.64 +366 269.67 +367 269.03 +368 265.03 +369 258.23 +370 249.32 +371 238.03 +372 226.20 +373 213.46 +374 200.53 +375 187.65 +376 174.89 +377 163.22 +378 152.47 +379 142.65 +380 133.97 +381 126.59 +382 120.52 +383 115.57 +384 111.49 +385 108.03 +386 106.01 +387 105.28 +388 105.28 +389 106.91 +390 109.73 +391 114.91 +392 120.66 +393 123.74 +394 123.74 +395 123.74 +396 123.74 +397 123.74 +398 123.74 +399 123.74 +400 211.57 +401 227.06 +402 240.57 +403 252.26 +404 262.67 +405 270.66 +406 273.40 +407 270.25 +408 263.76 +409 256.03 +410 246.87 +411 237.10 +412 225.11 +413 211.53 +414 197.77 +415 185.75 +416 173.00 +417 159.31 +418 147.18 +419 134.84 +420 125.07 +421 115.82 +422 107.33 +423 100.07 +424 93.55 +425 87.60 +426 81.75 +427 77.03 +428 73.39 +429 70.97 +430 67.94 +431 66.64 +432 65.80 +433 65.80 +434 66.85 +435 68.78 +436 71.47 +437 74.20 +438 78.68 +439 85.08 +440 87.47 +441 87.47 +442 87.47 +443 87.47 +444 87.47 +445 87.47 +446 87.47 +447 87.47 +448 185.81 +449 201.66 +450 215.07 +451 227.26 +452 238.00 +453 247.64 +454 255.03 +455 257.12 +456 256.17 +457 253.47 +458 248.93 +459 241.39 +460 231.45 +461 220.49 +462 208.48 +463 196.04 +464 182.73 +465 169.40 +466 157.24 +467 145.56 +468 133.54 +469 124.01 +470 114.55 +471 105.75 +472 98.32 +473 91.91 +474 86.08 +475 81.35 +476 77.78 +477 73.85 +478 71.12 +479 68.53 +480 67.09 +481 66.34 +482 66.34 +483 66.34 +484 67.92 +485 70.08 +486 73.78 +487 78.68 +488 84.33 +489 90.25 +490 90.25 +491 90.25 +492 90.25 +493 90.25 +494 90.25 +495 90.25 +496 90.25 +497 183.19 +498 198.96 +499 213.55 +500 225.91 +501 237.33 +502 246.66 +503 254.98 +504 259.46 +505 261.02 +506 260.02 +507 255.96 +508 249.08 +509 240.15 +510 229.51 +511 217.21 +512 205.06 +513 192.62 +514 177.43 +515 165.06 +516 152.36 +517 142.35 +518 134.58 +519 126.20 +520 119.86 +521 113.67 +522 108.20 +523 104.71 +524 100.83 +525 98.96 +526 98.38 +527 98.38 +528 100.29 +529 103.47 +530 107.73 +531 113.04 +532 118.90 +533 118.90 +534 118.90 +535 118.90 +536 118.90 +537 118.90 +538 118.90 +539 200.70 +540 217.77 +541 232.45 +542 244.28 +543 256.61 +544 265.93 +545 272.01 +546 272.01 +547 268.67 +548 260.53 +549 252.09 +550 243.72 +551 232.68 +552 220.49 +553 206.88 +554 193.98 +555 181.33 +556 168.61 +557 156.50 +558 145.54 +559 136.43 +560 125.95 +561 117.26 +562 109.81 +563 103.36 +564 97.15 +565 92.86 +566 89.02 +567 86.39 +568 84.44 +569 83.72 +570 83.72 +571 85.89 +572 88.39 +573 92.31 +574 96.00 +575 100.24 +576 102.55 +577 102.55 +578 102.55 +579 102.55 +580 102.55 +581 102.55 +582 102.55 +583 102.55 +584 197.15 +585 212.33 +586 225.48 +587 236.75 +588 247.52 +589 255.21 +590 260.74 +591 262.81 +592 262.09 +593 258.08 +594 250.83 +595 242.39 +596 230.86 +597 219.62 +598 206.80 +599 193.41 +600 180.60 +601 168.20 +602 157.77 +603 145.25 +604 136.23 +605 126.28 +606 118.10 +607 110.74 +608 105.29 +609 99.75 +610 95.61 +611 92.16 +612 89.93 +613 88.45 +614 88.45 +615 89.11 +616 90.87 +617 94.21 +618 98.16 +619 104.24 +620 108.98 +621 108.98 +622 108.98 +623 108.98 +624 108.98 +625 108.98 +626 108.98 +627 195.81 +628 211.95 +629 226.36 +630 240.61 +631 251.93 +632 259.13 +633 265.36 +634 269.71 +635 270.27 +636 266.44 +637 260.44 +638 251.94 +639 240.79 +640 228.95 +641 215.90 +642 203.25 +643 190.01 +644 177.92 +645 165.60 +646 155.49 +647 144.32 +648 136.07 +649 127.64 +650 120.28 +651 114.57 +652 109.99 +653 106.36 +654 104.49 +655 103.84 +656 103.84 +657 105.77 +658 107.83 +659 112.41 +660 117.71 +661 120.66 +662 120.66 +663 120.66 +664 120.66 +665 120.66 +666 120.66 +667 120.66 +668 210.13 +669 225.03 +670 238.76 +671 250.50 +672 261.18 +673 269.22 +674 274.18 +675 272.28 +676 266.66 +677 258.68 +678 249.88 +679 239.94 +680 227.14 +681 213.22 +682 197.58 +683 184.86 +684 172.52 +685 160.19 +686 149.20 +687 137.49 +688 127.86 +689 118.91 +690 110.49 +691 102.73 +692 96.33 +693 90.95 +694 86.38 +695 82.72 +696 79.65 +697 77.61 +698 75.70 +699 74.49 +700 74.49 +701 74.49 +702 76.48 +703 79.14 +704 82.84 +705 87.86 +706 92.69 +707 92.69 +708 92.69 +709 92.69 +710 92.69 +711 92.69 +712 92.69 +713 92.69 +714 181.33 +715 196.86 +716 210.98 +717 223.13 +718 233.90 +719 243.19 +720 250.57 +721 255.00 +722 256.36 +723 255.16 +724 250.15 +725 242.80 +726 233.82 +727 223.41 +728 210.81 +729 199.04 +730 187.39 +731 174.14 +732 162.62 +733 151.39 +734 139.59 +735 128.71 +736 119.17 +737 111.02 +738 103.91 +739 96.78 +740 91.56 +741 87.13 +742 83.22 +743 80.50 +744 76.83 +745 74.24 +746 70.80 +747 69.04 +748 67.12 +749 66.51 +750 66.51 +751 68.77 +752 72.19 +753 77.34 +754 84.04 +755 88.55 +756 88.55 +757 88.55 +758 88.55 +759 88.55 +760 88.55 +761 88.55 +762 88.55 +763 190.51 +764 207.14 +765 220.57 +766 232.51 +767 243.35 +768 252.41 +769 258.62 +770 262.18 +771 262.18 +772 259.10 +773 253.54 +774 245.44 +775 235.55 +776 223.43 +777 209.91 +778 197.52 +779 185.90 +780 172.13 +781 161.09 +782 150.58 +783 140.37 +784 130.27 +785 122.13 +786 114.99 +787 108.76 +788 104.67 +789 100.36 +790 97.61 +791 95.48 +792 94.83 +793 95.45 +794 97.15 +795 100.73 +796 105.10 +797 111.46 +798 118.27 +799 118.27 +800 118.27 +801 118.27 +802 118.27 +803 118.27 +804 118.27 +805 202.92 +806 220.25 +807 233.35 +808 243.48 +809 254.85 +810 265.75 +811 272.62 +812 272.62 +813 269.36 +814 261.82 +815 252.85 +816 244.08 +817 232.96 +818 219.59 +819 207.32 +820 193.87 +821 181.77 +822 168.60 +823 155.76 +824 144.03 +825 134.07 +826 123.46 +827 114.47 +828 107.64 +829 100.46 +830 94.53 +831 89.28 +832 84.59 +833 80.96 +834 78.54 +835 76.28 +836 75.51 +837 75.51 +838 76.55 +839 78.55 +840 81.57 +841 85.18 +842 90.61 +843 96.01 +844 96.01 +845 96.01 +846 96.01 +847 96.01 +848 96.01 +849 96.01 +850 96.01 +851 184.51 +852 201.57 +853 216.33 +854 228.69 +855 239.90 +856 250.41 +857 257.91 +858 262.29 +859 263.41 +860 261.70 +861 256.75 +862 246.82 +863 236.35 +864 225.17 +865 212.90 +866 201.61 +867 188.42 +868 175.92 +869 163.70 +870 153.18 +871 142.89 +872 132.95 +873 125.18 +874 117.61 +875 110.36 +876 104.56 +877 100.13 +878 96.64 +879 93.52 +880 91.91 +881 91.91 +882 91.91 +883 93.84 +884 97.13 +885 101.08 +886 107.19 +887 111.89 +888 111.89 +889 111.89 +890 111.89 +891 111.89 +892 111.89 +893 111.89 +894 195.89 +895 212.65 +896 226.60 +897 239.28 +898 251.28 +899 259.92 +900 266.03 +901 269.76 +902 269.76 +903 265.55 +904 258.92 +905 250.42 +906 240.04 +907 229.03 +908 216.69 +909 204.21 +910 191.25 +911 178.40 +912 168.31 +913 157.47 +914 148.62 +915 139.12 +916 129.54 +917 121.65 +918 114.59 +919 109.30 +920 106.39 +921 104.71 +922 104.71 +923 106.41 +924 109.22 +925 113.62 +926 118.31 +927 124.34 +928 124.34 +929 124.34 +930 124.34 +931 124.34 +932 124.34 +933 124.34 +934 205.67 +935 221.25 +936 235.02 +937 247.47 +938 258.37 +939 267.42 +940 272.60 +941 272.00 +942 267.91 +943 260.38 +944 251.10 +945 241.32 +946 230.96 +947 217.34 +948 204.99 +949 191.24 +950 178.58 +951 164.79 +952 153.07 +953 141.06 +954 129.86 +955 119.79 +956 111.13 +957 103.53 +958 96.95 +959 89.42 +960 85.22 +961 80.54 +962 76.85 +963 74.41 +964 72.12 +965 71.21 +966 71.21 +967 71.21 +968 72.13 +969 74.22 +970 76.95 +971 80.65 +972 85.36 +973 90.60 +974 92.36 +975 92.36 +976 92.36 +977 92.36 +978 92.36 +979 92.36 +980 92.36 +981 92.36 +982 191.27 +983 205.03 +984 218.89 +985 230.87 +986 241.63 +987 249.83 +988 255.42 +989 257.98 +990 257.33 +991 252.87 +992 245.90 +993 237.78 +994 227.14 +995 214.67 +996 202.31 +997 188.68 +998 175.96 +999 163.25 +1000 151.43 +1001 139.79 +1002 130.40 +1003 118.92 +1004 110.88 +1005 101.92 +1006 94.45 +1007 88.13 +1008 83.19 +1009 79.11 +1010 74.60 +1011 71.86 +1012 68.77 +1013 66.57 +1014 65.24 +1015 64.41 +1016 64.41 +1017 64.92 +1018 66.62 +1019 68.93 +1020 72.77 +1021 77.76 +1022 83.41 +1023 89.19 +1024 89.19 +1025 89.19 +1026 89.19 +1027 89.19 +1028 89.19 +1029 89.19 +1030 89.19 +1031 182.68 +1032 199.88 +1033 214.62 +1034 227.29 +1035 238.62 +1036 249.01 +1037 256.68 +1038 262.71 +1039 263.44 +1040 259.87 +1041 254.66 +1042 248.11 +1043 240.01 +1044 229.30 +1045 216.52 +1046 205.15 +1047 192.49 +1048 179.70 +1049 167.51 +1050 156.31 +1051 145.97 +1052 135.93 +1053 128.06 +1054 119.45 +1055 113.01 +1056 108.31 +1057 103.79 +1058 100.92 +1059 98.90 +1060 98.28 +1061 98.28 +1062 100.12 +1063 102.38 +1064 106.07 +1065 111.06 +1066 117.00 +1067 117.00 +1068 117.00 +1069 117.00 +1070 117.00 +1071 117.00 +1072 117.00 +1073 202.42 +1074 217.46 +1075 232.83 +1076 245.05 +1077 256.39 +1078 265.28 +1079 271.80 +1080 271.80 +1081 268.63 +1082 261.21 +1083 253.57 +1084 244.41 +1085 233.79 +1086 220.80 +1087 209.24 +1088 196.54 +1089 183.38 +1090 170.14 +1091 157.79 +1092 144.31 +1093 131.53 +1094 122.20 +1095 113.46 +1096 106.57 +1097 100.93 +1098 96.80 +1099 92.10 +1100 88.77 +1101 86.07 +1102 83.75 +1103 82.40 +1104 82.40 +1105 82.40 +1106 82.40 +1107 82.40 +1108 84.82 +1109 88.34 +1110 92.06 +1111 98.22 +1112 103.08 +1113 103.08 +1114 103.08 +1115 103.08 +1116 103.08 +1117 103.08 +1118 196.25 +1119 210.62 +1120 223.53 +1121 235.01 +1122 245.30 +1123 253.56 +1124 259.86 +1125 261.87 +1126 261.87 +1127 257.71 +1128 251.10 +1129 242.25 +1130 232.00 +1131 219.62 +1132 207.54 +1133 194.54 +1134 182.85 +1135 170.49 +1136 158.24 +1137 147.54 +1138 137.40 +1139 129.81 +1140 121.07 +1141 114.39 +1142 109.32 +1143 103.67 +1144 99.51 +1145 96.53 +1146 94.67 +1147 93.79 +1148 93.79 +1149 95.31 +1150 98.43 +1151 102.95 +1152 109.01 +1153 115.86 +1154 115.86 +1155 115.86 +1156 115.86 +1157 115.86 +1158 115.86 +1159 115.86 +1160 115.86 +1161 209.63 +1162 224.03 +1163 236.93 +1164 249.17 +1165 259.34 +1166 267.41 +1167 271.07 +1168 270.51 +1169 263.93 +1170 255.80 +1171 246.03 +1172 235.96 +1173 223.79 +1174 209.68 +1175 196.98 +1176 184.70 +1177 171.16 +1178 157.06 +1179 145.05 +1180 133.80 +1181 123.45 +1182 114.06 +1183 106.78 +1184 98.12 +1185 91.19 +1186 84.78 +1187 80.10 +1188 74.95 +1189 71.88 +1190 68.51 +1191 66.13 +1192 64.64 +1193 63.65 +1194 63.06 +1195 63.06 +1196 64.29 +1197 66.41 +1198 68.95 +1199 73.12 +1200 78.00 +1201 83.67 +1202 85.55 +1203 85.55 +1204 85.55 +1205 85.55 +1206 85.55 +1207 85.55 +1208 85.55 +1209 85.55 +1210 187.86 +1211 202.65 +1212 216.23 +1213 228.24 +1214 239.81 +1215 248.77 +1216 252.97 +1217 254.72 +1218 254.72 +1219 253.22 +1220 247.80 +1221 239.99 +1222 229.87 +1223 218.26 +1224 205.99 +1225 193.09 +1226 180.59 +1227 167.42 +1228 154.33 +1229 142.32 +1230 131.88 +1231 122.32 +1232 112.84 +1233 104.07 +1234 96.62 +1235 90.02 +1236 84.43 +1237 79.90 +1238 74.59 +1239 71.27 +1240 67.37 +1241 64.97 +1242 62.82 +1243 61.60 +1244 61.60 +1245 61.60 +1246 62.99 +1247 64.80 +1248 68.51 +1249 72.70 +1250 77.97 +1251 84.10 +1252 88.07 +1253 88.07 +1254 88.07 +1255 88.07 +1256 88.07 +1257 88.07 +1258 88.07 +1259 88.07 +1260 184.25 +1261 199.56 +1262 212.97 +1263 226.37 +1264 237.23 +1265 247.66 +1266 254.97 +1267 259.77 +1268 261.89 +1269 260.39 +1270 255.67 +1271 248.49 +1272 238.75 +1273 228.34 +1274 215.95 +1275 201.71 +1276 187.12 +1277 174.33 +1278 162.05 +1279 151.79 +1280 142.67 +1281 134.03 +1282 126.03 +1283 118.64 +1284 112.00 +1285 107.16 +1286 103.71 +1287 100.06 +1288 98.59 +1289 97.68 +1290 97.68 diff --git a/test/redfilnm.awk b/test/redfilnm.awk new file mode 100644 index 0000000..83cb6aa --- /dev/null +++ b/test/redfilnm.awk @@ -0,0 +1,98 @@ +#Date: Tue, 18 May 1999 12:48:07 -0500 (CDT) +#From: Darrel Hankerson <hankedr@dms.auburn.edu> +#To: arnold@gnu.org +#Subject: [christopher.procter@bt.com: RE: Getline bug in Gawk 3.0.3] +# +#Here's a reply that came directly to me. --darrel +# +# +#From: christopher.procter@bt.com +#To: hankedr@dms.auburn.edu +#Subject: RE: Getline bug in Gawk 3.0.3 +#Date: Tue, 18 May 1999 18:42:28 +0100 +# +#Sorry that was me getting carried away and cut and pasting the wrong thing +#into my email +# +#The real problem seems to be that : +#BEGIN { +#for (i=1;i<10;i++){ +# while((getline < "hello.txt")>0){ +# print $0 +# } +# close("hello.txt") +# } +#} +#works (printing the contents of hello.txt 9 times), where as:- +# +#END{ +#for (i=1;i<10;i++){ +# while((getline < "hello.txt")>0){ +# print $0 +# } +# close("hello.txt") +# } +#} +# +#doesn't, (it prints out hello.txt once followed by the iteration numbers +#from 1 to 9). +#The only difference is that one is in the BEGIN block and one in the END +#block. +# +#Sorry about the first post, I'm not a bad awk programmer, just a tired one +#:) +# +#chris +# +#> -----Original Message----- +#> From: Darrel Hankerson [SMTP:hankedr@dms.auburn.edu] +#> Sent: 18 May 1999 18:28 +#> To: christopher.procter@bt.com +#> Subject: Re: Getline bug in Gawk 3.0.3 +#> +#> Could you clarify? Your first script uses an apparently undefined +#> variable f. +#> +#> +#> christopher.procter@bt.com writes: +#> +#> BEGIN { +#> for (i=1;i<10;i++){ +#> while((getline < "hello.txt")>0){ +#> print $0 +#> } +#> close(f) +#> } +#> } +#> +#> refuses to close the file and so prints the contents of hello.txt just +#> once. +#> However:- +#> +#> BEGIN { +#> f="hello.txt" +#> for (i=1;i<10;i++){ +#> while((getline < f)>0){ +#> print $0 +#> } +#> close(f) +#> } +#> } +#> +#> works as advertised (printing the contents of hello.txt 9 times) +#> It seems like a bug in the close statement. +#> +#> -- +#> --Darrel Hankerson hankedr@mail.auburn.edu +# + +# srcdir is assigned on command line --- ADR +END { + f = srcdir "/redfilnm.in" + for (i = 1; i < 10; i++){ + while((getline < f) > 0){ + print $0 + } + close(f) + } +} diff --git a/test/redfilnm.in b/test/redfilnm.in new file mode 100644 index 0000000..4b5fa63 --- /dev/null +++ b/test/redfilnm.in @@ -0,0 +1 @@ +hello, world diff --git a/test/redfilnm.ok b/test/redfilnm.ok new file mode 100644 index 0000000..f9e095a --- /dev/null +++ b/test/redfilnm.ok @@ -0,0 +1,9 @@ +hello, world +hello, world +hello, world +hello, world +hello, world +hello, world +hello, world +hello, world +hello, world diff --git a/test/reg/Obsolete/exp.awk b/test/reg/Obsolete/exp.awk new file mode 100644 index 0000000..4e707f8 --- /dev/null +++ b/test/reg/Obsolete/exp.awk @@ -0,0 +1 @@ +BEGIN { print exp(0), exp(1000000), exp(0.5) } diff --git a/test/reg/Obsolete/exp.good b/test/reg/Obsolete/exp.good new file mode 100644 index 0000000..07b8853 --- /dev/null +++ b/test/reg/Obsolete/exp.good @@ -0,0 +1,2 @@ +1 gawk: reg/exp.awk:1: warning: exp argument 1e+06 is out of range +Inf 1.64872 diff --git a/test/reg/Obsolete/exp.in b/test/reg/Obsolete/exp.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/reg/Obsolete/exp.in diff --git a/test/reg/Obsolete/log.awk b/test/reg/Obsolete/log.awk new file mode 100644 index 0000000..bcae90b --- /dev/null +++ b/test/reg/Obsolete/log.awk @@ -0,0 +1 @@ +BEGIN { print log(0), log(-1), log(100) } diff --git a/test/reg/Obsolete/log.good b/test/reg/Obsolete/log.good new file mode 100644 index 0000000..857ab77 --- /dev/null +++ b/test/reg/Obsolete/log.good @@ -0,0 +1,4 @@ +log: SING error +-Inf gawk: reg/log.awk:1: warning: log called with negative argument -1 +log: DOMAIN error +NaN 4.60517 diff --git a/test/reg/Obsolete/log.in b/test/reg/Obsolete/log.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/reg/Obsolete/log.in diff --git a/test/reg/exp-eq.awk b/test/reg/exp-eq.awk new file mode 100644 index 0000000..fed6a69 --- /dev/null +++ b/test/reg/exp-eq.awk @@ -0,0 +1 @@ +{ $0 ^= 3 ; print $1} diff --git a/test/reg/exp-eq.good b/test/reg/exp-eq.good new file mode 100644 index 0000000..d8d59aa --- /dev/null +++ b/test/reg/exp-eq.good @@ -0,0 +1,3 @@ +1 +8 +27 diff --git a/test/reg/exp-eq.in b/test/reg/exp-eq.in new file mode 100644 index 0000000..01e79c3 --- /dev/null +++ b/test/reg/exp-eq.in @@ -0,0 +1,3 @@ +1 +2 +3 diff --git a/test/reg/func.awk b/test/reg/func.awk new file mode 100644 index 0000000..e32cd4e --- /dev/null +++ b/test/reg/func.awk @@ -0,0 +1 @@ +BEGIN { print dummy(1) } diff --git a/test/reg/func.good b/test/reg/func.good new file mode 100644 index 0000000..d3c7c71 --- /dev/null +++ b/test/reg/func.good @@ -0,0 +1 @@ +gawk: reg/func.awk:1: fatal: function `dummy' not defined diff --git a/test/reg/func.in b/test/reg/func.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/reg/func.in diff --git a/test/reg/func2.awk b/test/reg/func2.awk new file mode 100644 index 0000000..2abf2c1 --- /dev/null +++ b/test/reg/func2.awk @@ -0,0 +1,2 @@ +function dummy() { ; } +BEGIN { print dummy (1) } diff --git a/test/reg/func2.good b/test/reg/func2.good new file mode 100644 index 0000000..3d7b5ba --- /dev/null +++ b/test/reg/func2.good @@ -0,0 +1,2 @@ +gawk: reg/func2.awk:2: fatal: function `dummy' called with space between name and `(', +or used in other expression context diff --git a/test/reg/func2.in b/test/reg/func2.in new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/reg/func2.in diff --git a/test/reg/func2.out b/test/reg/func2.out new file mode 100644 index 0000000..a6515c9 --- /dev/null +++ b/test/reg/func2.out @@ -0,0 +1,2 @@ +gawk: reg/func2.awk:2: fatal: function `dummy' called with space between name and `(', +or used as a variable or an array diff --git a/test/regeq.awk b/test/regeq.awk new file mode 100644 index 0000000..0208eb2 --- /dev/null +++ b/test/regeq.awk @@ -0,0 +1,29 @@ +#Date: Sat, 8 May 1999 17:42:20 +0200 +#From: Iva Cabric <ivac@fly.srk.fer.hr> +#To: bug-gnu-utils@gnu.org +#Cc: arnold@gnu.org +#Subject: Problem in gawk with match +# +#Hello, +# +#gawk reports fatal error in match when first character in regexp is "=" : +# +#$ gawk '{ where = match($0, /=a/); print where}' +#gawk: cmd. line:1: { where = match($0, /=a/); print where} +#gawk: cmd. line:1: ^ parse error +#gawk: cmd. line:1: fatal: match() cannot have 0 arguments +# +#Using "\=" instead "=" works without problems : +# +#$ gawk '{ where = match($0, /\=a/); print where}' +#sdgfa +#0 +#asdfds=a +#7 +# +#Other versions of awk have no problems with "/=/" (except oawk on SunOS). +# +#-- +# @ +# +{ where = match($0, /=a/); print where} diff --git a/test/regeq.in b/test/regeq.in new file mode 100644 index 0000000..2428df3 --- /dev/null +++ b/test/regeq.in @@ -0,0 +1,2 @@ +sdgfa +asdfds=a diff --git a/test/regeq.ok b/test/regeq.ok new file mode 100644 index 0000000..4596f88 --- /dev/null +++ b/test/regeq.ok @@ -0,0 +1,2 @@ +0 +7 diff --git a/test/regtest.sh b/test/regtest.sh new file mode 100755 index 0000000..37472b1 --- /dev/null +++ b/test/regtest.sh @@ -0,0 +1,18 @@ +#! /bin/sh + +case "$AWK" in +"") AWK=../gawk ;; +esac +#AWK=${AWK:-../gawk} + +for i in reg/*.awk +do + it=`basename $i .awk` + $AWK -f $i <reg/$it.in >reg/$it.out 2>&1 + if diff reg/$it.out reg/$it.good + then + rm -f reg/$it.out + else + echo "regtest: $it fails" + fi +done diff --git a/test/regx8bit.awk b/test/regx8bit.awk new file mode 100644 index 0000000..5ecd7eb --- /dev/null +++ b/test/regx8bit.awk @@ -0,0 +1,26 @@ +# The full test will only work in a Swedish localte +# Try things that should work across the board +# BEGIN { +# s = "så är det" +# print match(s,/\yså\y/), s ~ /\yså\y/, "å" ~ /\w/ +# } +BEGIN { + printf "\"å\" = %c\n", "å" + printf "\"ä\" = %c\n", "ä" + s = "så är det" + printf "s = \"%s\"\n", s + printf "match(s,/\\yså/) = %d\n", match(s, /\yså/) +# printf "match(s,/så\\y/) = %d\n", match(s, /så\y/) +# printf "match(s,/\\yså\\y/) = %d\n", match(s, /\yså\y/) + printf "s ~ /å/ = %d\n", s ~ /å/ + printf "s ~ /så/ = %d\n", s ~ /så/ + printf "s ~ /\\yså/ = %d\n", s ~ /\yså/ +# printf "s ~ /så\\y/ = %d\n", s ~ /så\y/ +# printf "s ~ /\\yså\\y/ = %d\n", s ~ /\yså\y/ +# printf "\"å\" ~ /\\w/ = %d\n", "å" ~ /\w/ +# printf "\"ä\" ~ /\\w/ = %d\n", "ä" ~ /\w/ +# printf "\"å\" ~ /\\yä\\y/ = %d\n", "å" ~ /\yå\y/ +# printf "\"ä\" ~ /\\yä\\y/ = %d\n", "ä" ~ /\yä\y/ +# printf "\"å\" ~ /[[:alpha:]]/ = %d\n", "å" ~ /[[:alpha:]]/ +# printf "\"ä\" ~ /[[:alpha:]]/ = %d\n", "ä" ~ /[[:alpha:]]/ +} diff --git a/test/regx8bit.ok b/test/regx8bit.ok new file mode 100644 index 0000000..76e1c0b --- /dev/null +++ b/test/regx8bit.ok @@ -0,0 +1,7 @@ +"å" = å +"ä" = ä +s = "så är det" +match(s,/\yså/) = 1 +s ~ /å/ = 1 +s ~ /så/ = 1 +s ~ /\yså/ = 1 diff --git a/test/reindops.awk b/test/reindops.awk new file mode 100644 index 0000000..13ae657 --- /dev/null +++ b/test/reindops.awk @@ -0,0 +1,6 @@ +{ + if ($1 !~ /^+[2-9]/) + print "gawk is broken" + else + print "gawk is ok" +} diff --git a/test/reindops.in b/test/reindops.in new file mode 100644 index 0000000..b1e5435 --- /dev/null +++ b/test/reindops.in @@ -0,0 +1 @@ ++44 123 456 diff --git a/test/reindops.ok b/test/reindops.ok new file mode 100644 index 0000000..f9605fd --- /dev/null +++ b/test/reindops.ok @@ -0,0 +1 @@ +gawk is ok diff --git a/test/reint.awk b/test/reint.awk new file mode 100644 index 0000000..add0f2a --- /dev/null +++ b/test/reint.awk @@ -0,0 +1 @@ +{ print match($0, /a{3}/) } diff --git a/test/reint.in b/test/reint.in new file mode 100644 index 0000000..43caa2a --- /dev/null +++ b/test/reint.in @@ -0,0 +1 @@ +match this: aaa diff --git a/test/reint.ok b/test/reint.ok new file mode 100644 index 0000000..b1bd38b --- /dev/null +++ b/test/reint.ok @@ -0,0 +1 @@ +13 diff --git a/test/reparse.awk b/test/reparse.awk new file mode 100644 index 0000000..433ecbb --- /dev/null +++ b/test/reparse.awk @@ -0,0 +1,7 @@ +{ + gsub(/x/, " ") + $0 = $0 + print $1 + print $0 + print $1, $2, $3 +} diff --git a/test/reparse.in b/test/reparse.in new file mode 100644 index 0000000..6f31cde --- /dev/null +++ b/test/reparse.in @@ -0,0 +1 @@ +1 axbxc 2 diff --git a/test/reparse.ok b/test/reparse.ok new file mode 100644 index 0000000..6bdfacf --- /dev/null +++ b/test/reparse.ok @@ -0,0 +1,3 @@ +1 +1 a b c 2 +1 a b diff --git a/test/resplit.awk b/test/resplit.awk new file mode 100644 index 0000000..f75fe39 --- /dev/null +++ b/test/resplit.awk @@ -0,0 +1 @@ +{ FS = ":"; $0 = $0; print $2 } diff --git a/test/resplit.in b/test/resplit.in new file mode 100644 index 0000000..5f06f10 --- /dev/null +++ b/test/resplit.in @@ -0,0 +1 @@ +a:b:c d:e:f diff --git a/test/resplit.ok b/test/resplit.ok new file mode 100644 index 0000000..6178079 --- /dev/null +++ b/test/resplit.ok @@ -0,0 +1 @@ +b diff --git a/test/rs.awk b/test/rs.awk new file mode 100644 index 0000000..d3a3cf0 --- /dev/null +++ b/test/rs.awk @@ -0,0 +1,2 @@ +BEGIN { RS = "" } +{ print $1, $2 } diff --git a/test/rs.in b/test/rs.in new file mode 100644 index 0000000..edef835 --- /dev/null +++ b/test/rs.in @@ -0,0 +1,15 @@ + + +a +b + + +c d + + + +e + + + + diff --git a/test/rs.ok b/test/rs.ok new file mode 100644 index 0000000..9dd6bd3 --- /dev/null +++ b/test/rs.ok @@ -0,0 +1,3 @@ +a b +c d +e diff --git a/test/rsnul1nl.awk b/test/rsnul1nl.awk new file mode 100644 index 0000000..d8da7a6 --- /dev/null +++ b/test/rsnul1nl.awk @@ -0,0 +1,2 @@ +BEGIN { RS = "" } +{ print } diff --git a/test/rsnul1nl.in b/test/rsnul1nl.in new file mode 100644 index 0000000..76de96f --- /dev/null +++ b/test/rsnul1nl.in @@ -0,0 +1,3 @@ + +This is... +the first record. diff --git a/test/rsnul1nl.ok b/test/rsnul1nl.ok new file mode 100644 index 0000000..7ce0957 --- /dev/null +++ b/test/rsnul1nl.ok @@ -0,0 +1,2 @@ +This is... +the first record. diff --git a/test/rsnulbig.ok b/test/rsnulbig.ok new file mode 100644 index 0000000..10a5209 --- /dev/null +++ b/test/rsnulbig.ok @@ -0,0 +1 @@ +16386 diff --git a/test/rsnulbig2.ok b/test/rsnulbig2.ok new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/test/rsnulbig2.ok @@ -0,0 +1 @@ +2 diff --git a/test/rsstart1.awk b/test/rsstart1.awk new file mode 100644 index 0000000..53e5b42 --- /dev/null +++ b/test/rsstart1.awk @@ -0,0 +1,32 @@ +# From arnold@f7.net Wed Dec 15 11:32:46 2004 +# Date: Tue, 14 Dec 2004 14:48:58 +0100 +# From: Stepan Kasal <kasal@ucw.cz> +# Subject: gawk bug with RS="^..." +# To: bug-gawk@gnu.org +# Message-id: <20041214134858.GA15490@matsrv.math.cas.cz> +# +# Hello, +# I've noticed a problem with "^" in RS in gawk. In most cases, it seems +# to match only the beginning of the file. But in fact it matches the +# beginning of gawk's internal buffer. +# +# Observe the following example: +# +# $ gawk 'BEGIN{for(i=1;i<=100;i++) print "Axxxxxx"}' >file +# $ gawk 'BEGIN{RS="^A"} END{print NR}' file +# 2 +# $ gawk 'BEGIN{RS="^Ax*\n"} END{print NR}' file +# 100 +# $ head file | gawk 'BEGIN{RS="^Ax*\n"} END{print NR}' +# 10 +# $ +# +# I think this calls for some clarification/fix. But I don't have any +# fixed opinion how the solution should look like. +# +# Have a nice day, +# Stepan Kasal +# +# PS: See also the discussion of the issue in the comp.lang.awk newsgroup. +BEGIN { RS = "^A" } +END { print NR } diff --git a/test/rsstart1.in b/test/rsstart1.in new file mode 100644 index 0000000..aabdf02 --- /dev/null +++ b/test/rsstart1.in @@ -0,0 +1,10000 @@ +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx +Axxxxxx diff --git a/test/rsstart1.ok b/test/rsstart1.ok new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/test/rsstart1.ok @@ -0,0 +1 @@ +2 diff --git a/test/rsstart2.awk b/test/rsstart2.awk new file mode 100644 index 0000000..14c1415 --- /dev/null +++ b/test/rsstart2.awk @@ -0,0 +1,2 @@ +BEGIN { RS = "^Ax*\n" } +END { print NR } diff --git a/test/rsstart2.ok b/test/rsstart2.ok new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/test/rsstart2.ok @@ -0,0 +1 @@ +2 diff --git a/test/rsstart3.ok b/test/rsstart3.ok new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/test/rsstart3.ok @@ -0,0 +1 @@ +2 diff --git a/test/rstest1.awk b/test/rstest1.awk new file mode 100644 index 0000000..3eb8836 --- /dev/null +++ b/test/rstest1.awk @@ -0,0 +1,7 @@ +BEGIN { + RS = "" + FS = ":" + s = "a:b\nc:d" + print split(s,a) + print length(a[2]) +} diff --git a/test/rstest1.ok b/test/rstest1.ok new file mode 100644 index 0000000..a5c8806 --- /dev/null +++ b/test/rstest1.ok @@ -0,0 +1,2 @@ +3 +3 diff --git a/test/rstest2.awk b/test/rstest2.awk new file mode 100644 index 0000000..5ed4701 --- /dev/null +++ b/test/rstest2.awk @@ -0,0 +1,6 @@ +BEGIN { + RS = "" + FS = "\\" + $0 = "a\\b" + print $1 +} diff --git a/test/rstest2.ok b/test/rstest2.ok new file mode 100644 index 0000000..7898192 --- /dev/null +++ b/test/rstest2.ok @@ -0,0 +1 @@ +a diff --git a/test/rstest3.awk b/test/rstest3.awk new file mode 100644 index 0000000..3238ffa --- /dev/null +++ b/test/rstest3.awk @@ -0,0 +1,73 @@ +# From spcecdt@armory.com Tue Apr 15 17:35:01 2003 +# Return-Path: <spcecdt@armory.com> +# Received: from localhost (aahz [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h3FEYA6o001541 +# for <arnold@localhost>; Tue, 15 Apr 2003 17:35:01 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Tue, 15 Apr 2003 17:35:01 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Tue Apr 15 17:38:46 2003) +# X-From_: spcecdt@armory.com Tue Apr 15 11:09:12 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h3F88uC19825 for <arobbins@actcom.co.il>; +# Tue, 15 Apr 2003 11:09:04 +0300 (EET DST) +# (rfc931-sender: smtp.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h3F8CgQ7019081 +# for <arobbins@actcom.co.il>; Tue, 15 Apr 2003 11:12:47 +0300 +# Received: from fencepost.gnu.org (fencepost.gnu.org [199.232.76.164]) +# by f7.net (8.11.7/8.11.6) with ESMTP id h3F88oW23381 +# for <arnold@skeeve.com>; Tue, 15 Apr 2003 04:08:50 -0400 +# Received: from monty-python.gnu.org ([199.232.76.173]) +# by fencepost.gnu.org with esmtp (Exim 4.10) +# id 195LUo-0001cv-00 +# for bug-gawk@gnu.org; Tue, 15 Apr 2003 04:08:50 -0400 +# Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.10.13) +# id 195LUh-0006n0-00 +# for bug-gawk@gnu.org; Tue, 15 Apr 2003 04:08:44 -0400 +# Received: from deepthought.armory.com ([192.122.209.42] helo=armory.com) +# by monty-python.gnu.org with smtp (Exim 4.10.13) +# id 195LUC-0006JM-00 +# for bug-gawk@gnu.org; Tue, 15 Apr 2003 04:08:13 -0400 +# Date: Tue, 15 Apr 2003 01:08:11 -0700 +# From: "John H. DuBois III" <spcecdt@armory.com> +# To: bug-gawk@gnu.org +# Subject: gawk 3.1.2 fatal bug +# Message-ID: <20030415080811.GA14963@armory.com> +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# Content-Disposition: inline +# User-Agent: Mutt/1.3.28i +# X-Www: http://www.armory.com./~spcecdt/ +# Sender: spcecdt@armory.com +# X-Spam-Status: No, hits=-7.9 required=5.0 +# tests=SIGNATURE_SHORT_DENSE,SPAM_PHRASE_01_02,USER_AGENT, +# USER_AGENT_MUTT +# version=2.41 +# X-Spam-Level: +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: RO +# +# This program: +# +# BEGIN { RS = ""; "/bin/echo -n x" | getline } +# +# fails in exactly the same way under SCO OpenServer 5.0.6a using gawk 3.1.2 +# built with gcc 2.95.3 and linux using gawk 3.1.2 built with gcc 3.2.2: +# +# gawk: gawktest:1: fatal error: internal error +# Abort +# +# The same program does not fail with gawk 3.1.1. +# +# John +# -- +# John DuBois spcecdt@armory.com KC6QKZ/AE http://www.armory.com/~spcecdt/ +# +# +BEGIN { + RS = "" + "echo x | tr -d '\\12'" | getline +} diff --git a/test/rstest3.ok b/test/rstest3.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/rstest3.ok diff --git a/test/rstest4.awk b/test/rstest4.awk new file mode 100644 index 0000000..ddf0691 --- /dev/null +++ b/test/rstest4.awk @@ -0,0 +1,67 @@ +# From spcecdt@armory.com Mon May 5 14:37:09 2003 +# Return-Path: <spcecdt@armory.com> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h45B1GvT031993 +# for <arnold@localhost>; Mon, 5 May 2003 14:37:09 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Mon, 05 May 2003 14:37:09 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Mon May 5 14:35:11 2003) +# X-From_: spcecdt@armory.com Mon May 5 12:20:20 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h459KC529186 for <arobbins@actcom.co.il>; +# Mon, 5 May 2003 12:20:15 +0300 (EET DST) +# (rfc931-sender: smtp.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h459LMfl025854 +# for <arobbins@actcom.co.il>; Mon, 5 May 2003 12:21:24 +0300 +# Received: from armory.com (deepthought.armory.com [192.122.209.42]) +# by f7.net (8.11.7/8.11.6) with SMTP id h459K9I26841 +# for <arnold@skeeve.com>; Mon, 5 May 2003 05:20:09 -0400 +# Date: Mon, 5 May 2003 02:20:08 -0700 +# From: "John H. DuBois III" <spcecdt@armory.com> +# To: Aharon Robbins <arnold@skeeve.com> +# Subject: Re: gawk 3.1.2b now available +# Message-ID: <20030505092008.GA15970@armory.com> +# References: <200305041149.h44BnLcm005484@localhost.localdomain> +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# Content-Disposition: inline +# In-Reply-To: <200305041149.h44BnLcm005484@localhost.localdomain> +# User-Agent: Mutt/1.3.28i +# X-Www: http://www.armory.com./~spcecdt/ +# Sender: spcecdt@armory.com +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: RO +# +# This is a curious one: +# +# gawk-3.1.2b 'BEGIN { +# while (("echo" | getline) == 1) +# ; +# RS = "" +# "echo \"a\n\nb\"" | getline y +# print x +# }' | hd +# +# The output is: +# +# 0000 00 13 0a ... +# 0003 +# +# (the uninitialized variable 'x' is somehow getting the value <null><control-S>) +# +# John +# -- +# John DuBois spcecdt@armory.com KC6QKZ/AE http://www.armory.com/~spcecdt/ +# +BEGIN { + while (("echo" | getline) == 1) + ; + RS = "" + "echo \"a\n\nb\"" | getline y + printf "y = <%s>\n", y # ADR + printf "x = <%s>\n", x # ADR +} diff --git a/test/rstest4.ok b/test/rstest4.ok new file mode 100644 index 0000000..430442f --- /dev/null +++ b/test/rstest4.ok @@ -0,0 +1,2 @@ +y = <a> +x = <> diff --git a/test/rstest5.awk b/test/rstest5.awk new file mode 100644 index 0000000..09abb4a --- /dev/null +++ b/test/rstest5.awk @@ -0,0 +1,60 @@ +# From spcecdt@armory.com Tue May 6 13:42:34 2003 +# Return-Path: <spcecdt@armory.com> +# Received: from localhost (aahz [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h46AgG53003519 +# for <arnold@localhost>; Tue, 6 May 2003 13:42:34 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Tue, 06 May 2003 13:42:34 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Tue May 6 13:48:46 2003) +# X-From_: spcecdt@armory.com Tue May 6 13:26:09 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h46AQ6520133 for <arobbins@actcom.co.il>; +# Tue, 6 May 2003 13:26:07 +0300 (EET DST) +# (rfc931-sender: lmail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h46ARSfl010998 +# for <arobbins@actcom.co.il>; Tue, 6 May 2003 13:27:31 +0300 +# Received: from armory.com (deepthought.armory.com [192.122.209.42]) +# by f7.net (8.11.7/8.11.6) with SMTP id h46AQ1I18183 +# for <arnold@skeeve.com>; Tue, 6 May 2003 06:26:01 -0400 +# Date: Tue, 6 May 2003 03:25:59 -0700 +# From: "John H. DuBois III" <spcecdt@armory.com> +# To: Aharon Robbins <arnold@skeeve.com> +# Subject: Re: gawk 3.1.2b now available +# Message-ID: <20030506102559.GA16105@armory.com> +# References: <200305051157.h45Bv4XO003106@localhost.localdomain> +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# Content-Disposition: inline +# In-Reply-To: <200305051157.h45Bv4XO003106@localhost.localdomain> +# User-Agent: Mutt/1.3.28i +# X-Www: http://www.armory.com./~spcecdt/ +# Sender: spcecdt@armory.com +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: RO +# +# The patch fixed the previous case, but here's another one - this prints +# <null><control-S>: +# +# BEGIN { +# RS = "" +# "echo 'foo\n\nbaz'" | getline +# "echo 'foo\n\nbaz'" | getline +# "echo 'bar\n\nbaz'" | getline +# print x +# } +# +# John +# -- +# John DuBois spcecdt@armory.com KC6QKZ/AE http://www.armory.com/~spcecdt/ +# +BEGIN { + RS = "" + "echo 'foo\n\nbaz'" | getline ; print + "echo 'foo\n\nbaz'" | getline ; print + "echo 'bar\n\nbaz'" | getline ; print + printf "x = <%s>\n", x +} diff --git a/test/rstest5.ok b/test/rstest5.ok new file mode 100644 index 0000000..bf45151 --- /dev/null +++ b/test/rstest5.ok @@ -0,0 +1,4 @@ +foo +baz +bar +x = <> diff --git a/test/rstest6.awk b/test/rstest6.awk new file mode 100644 index 0000000..3481c0a --- /dev/null +++ b/test/rstest6.awk @@ -0,0 +1,6 @@ +# Wed Jul 14 16:02:45 IDT 2004 +# Test case from John Haque mary1john8@earthlink.net + +BEGIN { RS = "XYZ" } + +{ print } diff --git a/test/rstest6.in b/test/rstest6.in new file mode 100644 index 0000000..a6bddc4 --- /dev/null +++ b/test/rstest6.in @@ -0,0 +1 @@ +ABCD
\ No newline at end of file diff --git a/test/rstest6.ok b/test/rstest6.ok new file mode 100644 index 0000000..9ed4614 --- /dev/null +++ b/test/rstest6.ok @@ -0,0 +1 @@ +ABCD diff --git a/test/rswhite.awk b/test/rswhite.awk new file mode 100644 index 0000000..0048765 --- /dev/null +++ b/test/rswhite.awk @@ -0,0 +1,2 @@ +BEGIN { RS = "" } +{ printf("<%s>\n", $0) } diff --git a/test/rswhite.in b/test/rswhite.in new file mode 100644 index 0000000..39f7756 --- /dev/null +++ b/test/rswhite.in @@ -0,0 +1,2 @@ + a b +c d diff --git a/test/rswhite.ok b/test/rswhite.ok new file mode 100644 index 0000000..a029e47 --- /dev/null +++ b/test/rswhite.ok @@ -0,0 +1,2 @@ +< a b +c d> diff --git a/test/scalar.awk b/test/scalar.awk new file mode 100644 index 0000000..9027389 --- /dev/null +++ b/test/scalar.awk @@ -0,0 +1,4 @@ +BEGIN{ + sub(/x/,"",a) + a[1] +} diff --git a/test/scalar.ok b/test/scalar.ok new file mode 100644 index 0000000..6aea31a --- /dev/null +++ b/test/scalar.ok @@ -0,0 +1,2 @@ +gawk: scalar.awk:3: fatal: attempt to use scalar `a' as array +EXIT CODE: 2 diff --git a/test/sclforin.awk b/test/sclforin.awk new file mode 100644 index 0000000..335e854 --- /dev/null +++ b/test/sclforin.awk @@ -0,0 +1 @@ +BEGIN { j = 4; for (i in j) print j[i] } diff --git a/test/sclforin.ok b/test/sclforin.ok new file mode 100644 index 0000000..948df43 --- /dev/null +++ b/test/sclforin.ok @@ -0,0 +1,2 @@ +gawk: sclforin.awk:1: fatal: attempt to use scalar `j' as array +EXIT CODE: 2 diff --git a/test/sclifin.awk b/test/sclifin.awk new file mode 100644 index 0000000..64f5d0d --- /dev/null +++ b/test/sclifin.awk @@ -0,0 +1,7 @@ +BEGIN { + j = 4 + if ("foo" in j) + print "ouch" + else + print "ok" +} diff --git a/test/sclifin.ok b/test/sclifin.ok new file mode 100644 index 0000000..5bc9301 --- /dev/null +++ b/test/sclifin.ok @@ -0,0 +1,2 @@ +gawk: sclifin.awk:7: fatal: attempt to use scalar `j' as array +EXIT CODE: 2 diff --git a/test/shadow.awk b/test/shadow.awk new file mode 100644 index 0000000..9a58720 --- /dev/null +++ b/test/shadow.awk @@ -0,0 +1,21 @@ +function foo() +{ + print "foo" +} + +function bar(A, Z, q) +{ + print "bar" +} + +function baz(C, D) +{ + print "baz" +} + +BEGIN { + A = C = D = Z = y = 1 + foo() + bar() + baz() +} diff --git a/test/shadow.ok b/test/shadow.ok new file mode 100644 index 0000000..f543a88 --- /dev/null +++ b/test/shadow.ok @@ -0,0 +1,7 @@ +gawk: shadow.awk:22: warning: function `bar': parameter `A' shadows global variable +gawk: shadow.awk:22: warning: function `bar': parameter `Z' shadows global variable +gawk: shadow.awk:22: warning: function `baz': parameter `C' shadows global variable +gawk: shadow.awk:22: warning: function `baz': parameter `D' shadows global variable +foo +bar +baz diff --git a/test/sort1.awk b/test/sort1.awk new file mode 100644 index 0000000..3800c40 --- /dev/null +++ b/test/sort1.awk @@ -0,0 +1,31 @@ +BEGIN{ + a[1] = "barz"; + a[2] = "blattt"; + a[3] = "Zebra"; + a[4] = 1234; + + testit1(a) + + delete a + + a[1] = "barz"; + a[2] = "blattt"; + a[3] = "Zebra"; + a[4] = 1234; + + n = asort(a, b); + + print "N = ", n; + + for(i=1; i <= n; i++) + print i, a[i], b[i]; +} + +function testit1(a, count, j) +{ + print "start testit" + count = asort(a) + for (j = 1; j <= count; j++) + print j, a[j] + print "end testit" +} diff --git a/test/sort1.ok b/test/sort1.ok new file mode 100644 index 0000000..4838dab --- /dev/null +++ b/test/sort1.ok @@ -0,0 +1,11 @@ +start testit +1 1234 +2 Zebra +3 barz +4 blattt +end testit +N = 4 +1 barz 1234 +2 blattt Zebra +3 Zebra barz +4 1234 blattt diff --git a/test/sortempty.awk b/test/sortempty.awk new file mode 100644 index 0000000..6848d95 --- /dev/null +++ b/test/sortempty.awk @@ -0,0 +1 @@ +BEGIN { print asort(a) } diff --git a/test/sortempty.ok b/test/sortempty.ok new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/sortempty.ok @@ -0,0 +1 @@ +0 diff --git a/test/space.ok b/test/space.ok new file mode 100644 index 0000000..0f76956 --- /dev/null +++ b/test/space.ok @@ -0,0 +1,2 @@ +gawk: fatal: can't open source file ` ' for reading (No such file or directory) +EXIT CODE: 2 diff --git a/test/splitargv.awk b/test/splitargv.awk new file mode 100644 index 0000000..10886ef --- /dev/null +++ b/test/splitargv.awk @@ -0,0 +1,7 @@ +BEGIN { + for (idx = 1; idx < ARGC; idx++) + split(ARGV[idx], temp, "."); + } + { + print $0; + } diff --git a/test/splitargv.in b/test/splitargv.in new file mode 100644 index 0000000..10886ef --- /dev/null +++ b/test/splitargv.in @@ -0,0 +1,7 @@ +BEGIN { + for (idx = 1; idx < ARGC; idx++) + split(ARGV[idx], temp, "."); + } + { + print $0; + } diff --git a/test/splitargv.ok b/test/splitargv.ok new file mode 100644 index 0000000..10886ef --- /dev/null +++ b/test/splitargv.ok @@ -0,0 +1,7 @@ +BEGIN { + for (idx = 1; idx < ARGC; idx++) + split(ARGV[idx], temp, "."); + } + { + print $0; + } diff --git a/test/splitarr.awk b/test/splitarr.awk new file mode 100644 index 0000000..c1185a4 --- /dev/null +++ b/test/splitarr.awk @@ -0,0 +1,5 @@ +BEGIN { + a[1] = "elephantie" + a[2] = "e" + print split(a[1],a,a[2]), a[2], a[3], split(a[2],a,a[2]) +} diff --git a/test/splitarr.ok b/test/splitarr.ok new file mode 100644 index 0000000..9402b94 --- /dev/null +++ b/test/splitarr.ok @@ -0,0 +1 @@ +4 l phanti 2 diff --git a/test/splitdef.awk b/test/splitdef.awk new file mode 100644 index 0000000..694db80 --- /dev/null +++ b/test/splitdef.awk @@ -0,0 +1,7 @@ +BEGIN { + data = "abc:easy:as:one:two:three" + FS = ":" + FIELDWIDTHS = "3 1 4 1 2 1 3 1 3 1 5" + n = split(data, a) + printf "n = %d, a[3] = %s\n", n, a[3] +} diff --git a/test/splitdef.ok b/test/splitdef.ok new file mode 100644 index 0000000..5f13505 --- /dev/null +++ b/test/splitdef.ok @@ -0,0 +1 @@ +n = 6, a[3] = as diff --git a/test/splitvar.awk b/test/splitvar.awk new file mode 100644 index 0000000..9e1ac79 --- /dev/null +++ b/test/splitvar.awk @@ -0,0 +1,5 @@ +{ + sep = "=+" + n = split($0, a, sep) + print n +} diff --git a/test/splitvar.in b/test/splitvar.in new file mode 100644 index 0000000..85be8ee --- /dev/null +++ b/test/splitvar.in @@ -0,0 +1 @@ +Here===Is=Some=====Data diff --git a/test/splitvar.ok b/test/splitvar.ok new file mode 100644 index 0000000..b8626c4 --- /dev/null +++ b/test/splitvar.ok @@ -0,0 +1 @@ +4 diff --git a/test/splitwht.awk b/test/splitwht.awk new file mode 100644 index 0000000..6163d72 --- /dev/null +++ b/test/splitwht.awk @@ -0,0 +1,7 @@ +BEGIN { + str = "a b\t\tc d" + n = split(str, a, " ") + print n + m = split(str, b, / /) + print m +} diff --git a/test/splitwht.ok b/test/splitwht.ok new file mode 100644 index 0000000..61c83cb --- /dev/null +++ b/test/splitwht.ok @@ -0,0 +1,2 @@ +4 +5 diff --git a/test/sprintfc.awk b/test/sprintfc.awk new file mode 100644 index 0000000..ee1e5a7 --- /dev/null +++ b/test/sprintfc.awk @@ -0,0 +1 @@ +{ print sprintf("%c", $1), $1 } diff --git a/test/sprintfc.in b/test/sprintfc.in new file mode 100644 index 0000000..4602d28 --- /dev/null +++ b/test/sprintfc.in @@ -0,0 +1,3 @@ +65 +66 +foo diff --git a/test/sprintfc.ok b/test/sprintfc.ok new file mode 100644 index 0000000..33769a8 --- /dev/null +++ b/test/sprintfc.ok @@ -0,0 +1,3 @@ +A 65 +B 66 +f foo diff --git a/test/strcat1.awk b/test/strcat1.awk new file mode 100644 index 0000000..0d28017 --- /dev/null +++ b/test/strcat1.awk @@ -0,0 +1,6 @@ + +function f1(b) { b = b "c"; print f(b); } + +function f(a) { a = a "b"; return a; } + +BEGIN { A = "a"; f1(A); } diff --git a/test/strcat1.ok b/test/strcat1.ok new file mode 100644 index 0000000..66a2f4b --- /dev/null +++ b/test/strcat1.ok @@ -0,0 +1 @@ +acb diff --git a/test/strftime.awk b/test/strftime.awk new file mode 100644 index 0000000..775cd4e --- /dev/null +++ b/test/strftime.awk @@ -0,0 +1,19 @@ +# strftime.awk ; test the strftime code +# +# input is the output of `date', see Makefile.in +# +# The mucking about with $0 and $N is to avoid problems +# on cygwin, where the timezone field is empty and there +# are two consecutive blanks. + +# Additional mucking about to lop off the seconds field; +# helps decrease chance of difference due to a second boundary + +{ + $3 = sprintf("%02d", $3 + 0) + $4 = substr($4, 1, 5) + print > "strftime.ok" + $0 = strftime("%a %b %d %H:%M %Z %Y") + $NF = $NF + print > OUTPUT +} diff --git a/test/strftlng.awk b/test/strftlng.awk new file mode 100644 index 0000000..0ef8195 --- /dev/null +++ b/test/strftlng.awk @@ -0,0 +1,11 @@ +# test file from Paul Eggert, eggert@twinsun.com +# modified for portability (%c doesn't cut it) + +BEGIN { + BUFSIZ = 1024 + simpleformat = format = "%m/%d/%y %H:%M:%S\n" + clen = length(strftime(format, 0)) + for (i = 1; i < BUFSIZ / clen + 1; i++) + format = format simpleformat + printf "%s", strftime(format, 0) +} diff --git a/test/strftlng.ok b/test/strftlng.ok new file mode 100644 index 0000000..3008aa2 --- /dev/null +++ b/test/strftlng.ok @@ -0,0 +1,58 @@ +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 +01/01/70 00:00:00 diff --git a/test/strtod.awk b/test/strtod.awk new file mode 100644 index 0000000..3326478 --- /dev/null +++ b/test/strtod.awk @@ -0,0 +1,5 @@ +{ + x = "0x" $1 ; print x, x + 0 + for (i=1; i<=NF; i++) + if ($i) print $i, "is not zero" +} diff --git a/test/strtod.in b/test/strtod.in new file mode 100644 index 0000000..d7f71aa --- /dev/null +++ b/test/strtod.in @@ -0,0 +1 @@ +345 0 00 0e0 0E1 00E0 000e-5 .0e+0 diff --git a/test/strtod.ok b/test/strtod.ok new file mode 100644 index 0000000..a47a9b1 --- /dev/null +++ b/test/strtod.ok @@ -0,0 +1,2 @@ +0x345 0 +345 is not zero diff --git a/test/strtonum.awk b/test/strtonum.awk new file mode 100644 index 0000000..22ad41e --- /dev/null +++ b/test/strtonum.awk @@ -0,0 +1,6 @@ +BEGIN { + print strtonum("0x13") + print strtonum("013") + print strtonum("13") + print strtonum(13) +} diff --git a/test/strtonum.ok b/test/strtonum.ok new file mode 100644 index 0000000..9d1e557 --- /dev/null +++ b/test/strtonum.ok @@ -0,0 +1,4 @@ +19 +11 +13 +13 diff --git a/test/subamp.awk b/test/subamp.awk new file mode 100644 index 0000000..2638e6e --- /dev/null +++ b/test/subamp.awk @@ -0,0 +1 @@ +{ sub(/[a-z]/, "&") ; print } diff --git a/test/subamp.in b/test/subamp.in new file mode 100644 index 0000000..72943a1 --- /dev/null +++ b/test/subamp.in @@ -0,0 +1 @@ +aaa diff --git a/test/subamp.ok b/test/subamp.ok new file mode 100644 index 0000000..72943a1 --- /dev/null +++ b/test/subamp.ok @@ -0,0 +1 @@ +aaa diff --git a/test/subsepnm.awk b/test/subsepnm.awk new file mode 100644 index 0000000..976eef9 --- /dev/null +++ b/test/subsepnm.awk @@ -0,0 +1 @@ +BEGIN { SUBSEP = 10; a[1, 1] = 100 ; print a[1 SUBSEP 1] } diff --git a/test/subsepnm.ok b/test/subsepnm.ok new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/test/subsepnm.ok @@ -0,0 +1 @@ +100 diff --git a/test/subslash.awk b/test/subslash.awk new file mode 100644 index 0000000..87ab029 --- /dev/null +++ b/test/subslash.awk @@ -0,0 +1,6 @@ +BEGIN { + i = 2 + a[i] = 5 + a[i] /= 2 + printf "a[%s] = %f\n", i, a[i] +} diff --git a/test/subslash.ok b/test/subslash.ok new file mode 100644 index 0000000..4f3beff --- /dev/null +++ b/test/subslash.ok @@ -0,0 +1 @@ +a[2] = 2.500000 diff --git a/test/substr.awk b/test/substr.awk new file mode 100644 index 0000000..6016369 --- /dev/null +++ b/test/substr.awk @@ -0,0 +1,14 @@ +BEGIN { + x = "A" + printf("%-39s\n", substr(x,1,39)) + print substr("abcdef", 0, 2) + print substr("abcdef", 2.3, 2) + print substr("abcdef", -1, 2) + print substr("abcdef", 1, 0) + print substr("abcdef", 1, -3) + print substr("abcdef", 1, 2.3) + print substr("", 1, 2) + print substr("abcdef", 5, 5) + print substr("abcdef", 7, 2) + exit (0) +} diff --git a/test/substr.ok b/test/substr.ok new file mode 100644 index 0000000..be6889d --- /dev/null +++ b/test/substr.ok @@ -0,0 +1,10 @@ +A +ab +bc +ab + + +ab + +ef + diff --git a/test/swaplns.awk b/test/swaplns.awk new file mode 100644 index 0000000..6bf2240 --- /dev/null +++ b/test/swaplns.awk @@ -0,0 +1,7 @@ +{ + if ((getline tmp) > 0) { + print tmp + print + } else + print +} diff --git a/test/swaplns.in b/test/swaplns.in new file mode 100644 index 0000000..71fb162 --- /dev/null +++ b/test/swaplns.in @@ -0,0 +1,9 @@ +This directory contains some examples/test-cases for different +features of gawk - mostly not present in an old awk. Some are from +"The GAWK Manual", some are original, and some are mixture of the two. +Read header comments before attempting to use. Have fun and remember +that program which consists only of BEGIN block does not need an input +file. + + --mj + diff --git a/test/swaplns.ok b/test/swaplns.ok new file mode 100644 index 0000000..d38b7ca --- /dev/null +++ b/test/swaplns.ok @@ -0,0 +1,9 @@ +features of gawk - mostly not present in an old awk. Some are from +This directory contains some examples/test-cases for different +Read header comments before attempting to use. Have fun and remember +"The GAWK Manual", some are original, and some are mixture of the two. +file. +that program which consists only of BEGIN block does not need an input + --mj + + diff --git a/test/switch2.awk b/test/switch2.awk new file mode 100644 index 0000000..f788edb --- /dev/null +++ b/test/switch2.awk @@ -0,0 +1,59 @@ +# From spcecdt@armory.com Tue Jun 3 11:41:49 2003 +# Return-Path: <spcecdt@armory.com> +# Received: from localhost (skeeve [127.0.0.1]) +# by skeeve.com (8.12.5/8.12.5) with ESMTP id h538fVuW018115 +# for <arnold@localhost>; Tue, 3 Jun 2003 11:41:49 +0300 +# Received: from actcom.co.il [192.114.47.1] +# by localhost with POP3 (fetchmail-5.9.0) +# for arnold@localhost (single-drop); Tue, 03 Jun 2003 11:41:49 +0300 (IDT) +# Received: by actcom.co.il (mbox arobbins) +# (with Cubic Circle's cucipop (v1.31 1998/05/13) Tue Jun 3 11:41:37 2003) +# X-From_: spcecdt@armory.com Mon Jun 2 20:17:30 2003 +# Received: from smtp1.actcom.net.il by actcom.co.il with ESMTP +# (8.11.6/actcom-0.2) id h52HHNY23516 for <arobbins@actcom.co.il>; +# Mon, 2 Jun 2003 20:17:24 +0300 (EET DST) +# (rfc931-sender: mail.actcom.co.il [192.114.47.13]) +# Received: from f7.net (consort.superb.net [209.61.216.22]) +# by smtp1.actcom.net.il (8.12.8/8.12.8) with ESMTP id h52HIHqv028728 +# for <arobbins@actcom.co.il>; Mon, 2 Jun 2003 20:18:18 +0300 +# Received: from armory.com (deepthought.armory.com [192.122.209.42]) +# by f7.net (8.11.7/8.11.6) with SMTP id h52HHKl31637 +# for <arnold@skeeve.com>; Mon, 2 Jun 2003 13:17:20 -0400 +# Date: Mon, 2 Jun 2003 10:17:11 -0700 +# From: "John H. DuBois III" <spcecdt@armory.com> +# To: arnold@skeeve.com +# Subject: gawk 3.1.2c coredump +# Message-ID: <20030602171711.GA3958@armory.com> +# Mime-Version: 1.0 +# Content-Type: text/plain; charset=us-ascii +# Content-Disposition: inline +# User-Agent: Mutt/1.3.28i +# X-Www: http://www.armory.com./~spcecdt/ +# Sender: spcecdt@armory.com +# X-SpamBouncer: 1.4 (10/07/01) +# X-SBClass: OK +# Status: R +# +#!/usr/local/bin/gawk -f +BEGIN { + switch (substr("x",1,1)) { + case /ask.com/: + break + case "google": + break + } +} +# +# The stack says: +# +# #0 0x0806fac2 in r_tree_eval (tree=0x8092000, iscond=0) at eval.c:813 +# #1 0x08070413 in r_tree_eval (tree=0x0, iscond=0) at eval.c:1071 +# #2 0x08070413 in r_tree_eval (tree=0x8092000, iscond=0) at eval.c:1071 +# #3 0x08070413 in r_tree_eval (tree=0x8092000, iscond=0) at eval.c:1071 +# [ this continues on indefinitely - I suppose it ran out of stack eventually ] +# +# John +# -- +# John DuBois spcecdt@armory.com KC6QKZ/AE http://www.armory.com/~spcecdt/ +# +# diff --git a/test/synerr1.awk b/test/synerr1.awk new file mode 100644 index 0000000..131708d --- /dev/null +++ b/test/synerr1.awk @@ -0,0 +1,4 @@ +# program to make sure we don't infinite +# syntax errors + +print "hi" diff --git a/test/synerr1.ok b/test/synerr1.ok new file mode 100644 index 0000000..e180f13 --- /dev/null +++ b/test/synerr1.ok @@ -0,0 +1,3 @@ +gawk: synerr1.awk:4: print "hi" +gawk: synerr1.awk:4: ^ syntax error +EXIT CODE: 1 diff --git a/test/tradanch.awk b/test/tradanch.awk new file mode 100644 index 0000000..0cd45d1 --- /dev/null +++ b/test/tradanch.awk @@ -0,0 +1,2 @@ +/foo^bar/ +/foo$bar/ diff --git a/test/tradanch.in b/test/tradanch.in new file mode 100644 index 0000000..e5c8a09 --- /dev/null +++ b/test/tradanch.in @@ -0,0 +1,2 @@ +foo^bar +foo$bar diff --git a/test/tradanch.ok b/test/tradanch.ok new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/tradanch.ok diff --git a/test/tweakfld.awk b/test/tweakfld.awk new file mode 100644 index 0000000..e7b538f --- /dev/null +++ b/test/tweakfld.awk @@ -0,0 +1,296 @@ +# To: bug-gnu-utils@prep.ai.mit.edu +# Cc: arnold@gnu.ai.mit.edu +# Date: Mon, 20 Nov 1995 11:39:29 -0500 +# From: "R. Hank Donnelly" <emory!head-cfa.harvard.edu!donnelly> +# +# Operating system: Linux1.2.13 (Slackware distrib) +# GAWK version: 2.15 (?) +# compiler: GCC (?) +# +# The following enclosed script does not want to fully process the input data +# file. It correctly executes the operations on the first record, and then dies +# on the second one. My true data file is much longer but this is +# representative and it does fail on a file even as short as this one. +# The failure appears to occur in the declared function add2output. Between the +# steps of incrementing NF by one and setting $NF to the passed variable +# the passed variable appears to vanish (i.e. NF does go from 68 to 69 +# and before incrementing it "variable" equals what it should but after +# "variable" has no value at all.) +# +# The scripts have been developed using nawk on a Sun (where they run fine) +# I have tried gawk there but get a different crash which I have not yet traced +# down. Ideally I would like to keep the script the same so that it would run +# on either gawk or nawk (that way I can step back and forth between laptop and +# workstation. +# +# Any ideas why the laptop installation is having problems? +# Hank +# +# +# #!/usr/bin/gawk -f + +BEGIN { + # set a few values + FS = "\t" + OFS = "\t" + pi = atan2(0, -1) +# distance from HRMA to focal plane in mm + fullradius = 10260.54 + + # set locations of parameters on input line + nf_nrg = 1 + nf_order = 3 + nf_item = 4 + nf_suite = 5 + nf_grating = 8 + nf_shutter = 9 + nf_type = 13 + nf_src = 14 + nf_target = 15 + nf_voltage = 16 + nf_flux = 17 + nf_filt1 = 20 + nf_filt1_th = 21 + nf_filt2 = 22 + nf_filt2_th = 23 + nf_bnd = 24 + nf_hrma_polar = 27 + nf_hrma_az = 28 + nf_detector = 30 + nf_acis_read = 32 + nf_acis_proc = 33 + nf_acis_frame = 34 + nf_hxda_aplist = 36 + nf_hxda_y_range = 37 + nf_hxda_z_range = 38 + nf_hxda_y_step = 39 + nf_hxda_z_step = 40 + nf_sim_z = 41 + nf_fam_polar = 43 + nf_fam_az = 44 + nf_fam_dither_type = 45 + nf_mono_init = 51 + nf_mono_range = 52 + nf_mono_step = 53 + nf_defocus = 54 + nf_acis_temp = 55 + nf_tight = 59 + nf_offset_y = 64 + nf_offset_z = 65 + + while( getline < "xrcf_mnemonics.dat" > 0 ) { + mnemonic[$1] = $2 + } + +# "date" | getline date_line +# ADR: use a fixed date so that testing will work + date_line = "Sun Mar 10 23:00:27 EST 1996" + split(date_line, in_date, " ") + out_date = in_date[2] " " in_date[3] ", " in_date[6] +} + +function add2output( variable ) { +#print("hi1") >> "debug" + NF++ +#print("hi2") >> "debug" + $NF = variable +#print("hi3") >> "debug" +} + +function error( ekey, message ) { + print "Error at input line " NR ", anode " ekey >> "errors.cleanup" + print " " message "." >> "errors.cleanup" +} + +function hxda_na() { + $nf_hxda_aplist = $nf_hxda_y_range = $nf_hxda_z_range = "N/A" + $nf_hxda_y_step = $nf_hxda_z_step = "N/A" +} + +function acis_na() { + $nf_acis_read = $nf_acis_proc = $nf_acis_frame = $nf_acis_temp = "N/A" +} + +function hrc_na() { +# print ("hi") >> "debug" +} + +function fpsi_na() { + acis_na() + hrc_na() + $nf_sim_z = $nf_fam_polar = $nf_fam_az = $nf_fam_dither_type = "N/A" +} + +function mono_na() { + $nf_mono_init = $nf_mono_range = $nf_mono_step = "N/A" +} + +# this gives the pitch and yaw of the HRMA and FAM +# positive pitch is facing the source "looking down" +# positive yaw is looking left +# 0 az is north 90 is up +# this also adds in the FAM X,Y,Z positions + +function polaz2yawpitch(polar, az) { + theta = az * pi / 180 + phi = polar * pi / 180 / 60 + + + if( polar == 0 ) { + add2output( 0 ) + add2output( 0 ) + } else { + if(az == 0 || az == 180) + add2output( 0 ) + else + add2output( - polar * sin(theta) ) + + +# x = cos (phi) +# y = sin (phi) * cos (theta) +# add2output( atan2(y,x)*180 / pi * 60 ) + + if(az == 90 || az ==270 ) + add2output( 0 ) + else + add2output( - polar * cos(theta) ) + + } +# x = cos (phi) +# z= sin (phi) * sin (theta) +# add2output( atan2(z,x)*180 / pi * 60 ) + + if(config !~ /HXDA/) { +# negative values of defocus move us farther from the source thus +# increasing radius + radius = fullradius - defocus + +# FAM_x; FAM_y; FAM_z + if((offset_y == 0) && (offset_z == 0)){ + add2output( fullradius - radius * cos (phi) ) + + if (az == 90 || az ==270) + add2output( 0 ) + else + add2output( radius * sin (phi) * cos (theta) ) + + if (az == 0 || az == 180) + add2output( 0 ) + else + add2output( - radius * sin (phi) * sin (theta) ) + } else { +# ******* THIS SEGMENT OF CODE IS NOT MATHEMATICALLY CORRECT FOR **** +# OFF AXIS ANGLES AND IS SUPPLIED AS A WORKAROUND SINCE IT WILL +# PROBABLY ONLY BE USED ON AXIS. + add2output( defocus ) + add2output( offset_y ) + add2output( offset_z ) + } + + } else { + add2output( "N/A" ) + add2output( "N/A" ) + add2output( "N/A" ) + } +} + +# set TIGHT/LOOSE to N/A if it is not one of the two allowed values +function tight_na() { + if( $nf_tight !~ /TIGHT|LOOSE/ ) { + $nf_tight == "N/A" + } +} + +# this entry is used to give certain entries names +{ + type = $nf_type + item = $nf_item + suite = $nf_suite + order = $nf_order + detector = $nf_detector + grating = $nf_grating + offset_y= $nf_offset_y + offset_z= $nf_offset_z + bnd = $nf_bnd + defocus = $nf_defocus +} + +{ + # make configuration parameter + # as well as setting configuration-dependent N/A values + + if( $nf_bnd ~ "SCAN" ) { + # BND is scanning beam + config = "BND" + hxda_na() + fpsi_na() + } else { + if( grating == "NONE" ) { + config = "HRMA" + } else { + if( grating == "HETG" ) { + if( order != "Both" ) { + $nf_shutter = order substr($nf_shutter, \ + index($nf_shutter, ",") ) + } + } else { + order = "N/A" + } + config = "HRMA/" grating + } + + if( detector ~ /ACIS|HRC/ ) { + detsys = detector + nsub = sub("-", ",", detsys) + config = config "/" detsys + hxda_na() + } else { + config = config "/HXDA" + fpsi_na() + if( detector == "HSI" ) { + hxda_na() + } + } + } + + add2output( config ) + + if( $nf_src ~ /EIPS|Penning/ ) mono_na() + + if( $nf_src == "Penning" ) $nf_voltage = "N/A" + + itm = sprintf("%03d", item) + + if(config in mnemonic) { + if( type in mnemonic ) { + ID = mnemonic[config] "-" mnemonic[type] "-" suite "." itm + add2output( ID ) + } else { + error(type, "measurement type not in list") + } + } else { + error(config, "measurement configuration not in list") + } + + # add date to output line + add2output( out_date ) + + # Convert HRMA polar and azimuthal angles to yaw and pitch + polaz2yawpitch($nf_hrma_polar, $nf_hrma_az) + + # set TIGHT/LOOSE to N/A if it is not one of the two allowed values + tight_na() + + # compute number of HXDA apertures + if( config ~ /HXDA/ && $nf_hxda_aplist != "N/A") + add2output( split( $nf_hxda_aplist, dummy, "," ) ) + else + add2output( "N/A" ) + + # make sure the BND value is properly set + if($nf_bnd == "FIXED" && detector ~ /ACIS/) + $nf_bnd =bnd"-SYNC" + else + $nf_bnd = bnd"-FREE" + print +} diff --git a/test/tweakfld.in b/test/tweakfld.in new file mode 100644 index 0000000..e27a9dd --- /dev/null +++ b/test/tweakfld.in @@ -0,0 +1,3 @@ +0.277 N/A N/A 1 1 ASC/Hank Donnelly N/A NONE ALL,ALL N/A N/A N/A Count Rate Linearity EIPS C-Ka 1.108 0.13484 N/A N/A C8H8 10.32 C8H8 20.64 FIXED 1000 NO 0 0 0 HRC,I 1000 N/A N/A N/A N/A N/A N/A N/A N/A N/A 0 N/A APT APT LISSAJOUS 44.7175 44.7175 1 N/A N/A N/A N/A N/A 0 N/A HRCCTRTLIN 0 N/A N/A N/A 10 N/A 180 0 0 N/A N/A FPSI rate +1.486 N/A N/A 2 1 ASC/Hank Donnelly N/A NONE ALL,ALL N/A N/A N/A Count Rate Linearity EIPS Al-Ka 4.458 0.642119 N/A N/A Al 18.38 Al 36.76 FIXED 1000 NO 0 0 0 HRC,I 1000 N/A N/A N/A N/A N/A N/A N/A N/A N/A 0 N/A APT APT LISSAJOUS 5.55556 5.55556 1 N/A N/A N/A N/A N/A 0 N/A HRCCTRTLIN 0 N/A N/A N/A 10 N/A 180 0 0 N/A N/A FPSI rate +4.51 N/A N/A 3 1 ASC/Hank Donnelly N/A NONE ALL,ALL N/A N/A N/A Count Rate Linearity EIPS Ti-Ka 22.55 3.02894 N/A N/A Ti 40.6 N/A N/A FIXED 1000 NO 0 0 0 HRC,I 1000 N/A N/A N/A N/A N/A N/A N/A N/A N/A 0 N/A APT APT LISSAJOUS 5.55556 5.55556 1 N/A N/A N/A N/A N/A 0 N/A HRCCTRTLIN 0 N/A N/A N/A 10 N/A 180 0 0 N/A N/A FPSI rate diff --git a/test/tweakfld.ok b/test/tweakfld.ok new file mode 100644 index 0000000..3c4d894 --- /dev/null +++ b/test/tweakfld.ok @@ -0,0 +1,3 @@ +0.277 N/A N/A 1 1 ASC/Hank Donnelly N/A NONE ALL,ALL N/A N/A N/A Count Rate Linearity EIPS C-Ka 1.108 0.13484 N/A N/A C8H8 10.32 C8H8 20.64 FIXED-FREE 1000 NO 0 0 0 HRC,I 1000 N/A N/A N/A N/A N/A N/A N/A N/A N/A 0 N/A APT APT LISSAJOUS 44.7175 44.7175 1 N/A N/A N/A N/A N/A 0 N/A HRCCTRTLIN 0 N/A N/A N/A 10 N/A 180 0 0 N/A N/A FPSI rate HRMA/HRC,I Mar 10, 1996 0 0 0 0 0 N/A +1.486 N/A N/A 2 1 ASC/Hank Donnelly N/A NONE ALL,ALL N/A N/A N/A Count Rate Linearity EIPS Al-Ka 4.458 0.642119 N/A N/A Al 18.38 Al 36.76 FIXED-FREE 1000 NO 0 0 0 HRC,I 1000 N/A N/A N/A N/A N/A N/A N/A N/A N/A 0 N/A APT APT LISSAJOUS 5.55556 5.55556 1 N/A N/A N/A N/A N/A 0 N/A HRCCTRTLIN 0 N/A N/A N/A 10 N/A 180 0 0 N/A N/A FPSI rate HRMA/HRC,I Mar 10, 1996 0 0 0 0 0 N/A +4.51 N/A N/A 3 1 ASC/Hank Donnelly N/A NONE ALL,ALL N/A N/A N/A Count Rate Linearity EIPS Ti-Ka 22.55 3.02894 N/A N/A Ti 40.6 N/A N/A FIXED-FREE 1000 NO 0 0 0 HRC,I 1000 N/A N/A N/A N/A N/A N/A N/A N/A N/A 0 N/A APT APT LISSAJOUS 5.55556 5.55556 1 N/A N/A N/A N/A N/A 0 N/A HRCCTRTLIN 0 N/A N/A N/A 10 N/A 180 0 0 N/A N/A FPSI rate HRMA/HRC,I Mar 10, 1996 0 0 0 0 0 N/A diff --git a/test/uninit2.awk b/test/uninit2.awk new file mode 100644 index 0000000..9ded557 --- /dev/null +++ b/test/uninit2.awk @@ -0,0 +1,2 @@ +BEGIN { a = a + 1; x = a; print a} +BEGIN { ++b; x = b; print b} diff --git a/test/uninit2.ok b/test/uninit2.ok new file mode 100644 index 0000000..2001a39 --- /dev/null +++ b/test/uninit2.ok @@ -0,0 +1,4 @@ +gawk: uninit2.awk:1: warning: reference to uninitialized variable `a' +1 +gawk: uninit2.awk:2: warning: reference to uninitialized variable `b' +1 diff --git a/test/uninit3.awk b/test/uninit3.awk new file mode 100644 index 0000000..d0140d5 --- /dev/null +++ b/test/uninit3.awk @@ -0,0 +1,7 @@ +function f(x){ + print x +} + +BEGIN { + f(x) +} diff --git a/test/uninit3.ok b/test/uninit3.ok new file mode 100644 index 0000000..a98ddb0 --- /dev/null +++ b/test/uninit3.ok @@ -0,0 +1,3 @@ +gawk: uninit3.awk:8: warning: function `f': parameter `x' shadows global variable +gawk: uninit3.awk:2: warning: reference to uninitialized variable `x' + diff --git a/test/uninit4.awk b/test/uninit4.awk new file mode 100644 index 0000000..89de732 --- /dev/null +++ b/test/uninit4.awk @@ -0,0 +1,13 @@ +# test whether --lint catches uninitialized fields: +function pr() +{ + print +} + +BEGIN { + pr() + print $0 + print $(1-1) + print $1 + NF=3; print $2 +} diff --git a/test/uninit4.ok b/test/uninit4.ok new file mode 100644 index 0000000..3ea4da3 --- /dev/null +++ b/test/uninit4.ok @@ -0,0 +1,10 @@ +gawk: uninit4.awk:4: warning: reference to uninitialized field `$0' + +gawk: uninit4.awk:9: warning: reference to uninitialized field `$0' + +gawk: uninit4.awk:10: warning: reference to uninitialized field `$0' + +gawk: uninit4.awk:11: warning: reference to uninitialized field `$1' + +gawk: uninit4.awk:12: warning: reference to uninitialized field `$2' + diff --git a/test/uninitialized.awk b/test/uninitialized.awk new file mode 100644 index 0000000..09bb643 --- /dev/null +++ b/test/uninitialized.awk @@ -0,0 +1,3 @@ +BEGIN { + a += 2 +} diff --git a/test/uninitialized.ok b/test/uninitialized.ok new file mode 100644 index 0000000..86ab474 --- /dev/null +++ b/test/uninitialized.ok @@ -0,0 +1 @@ +gawk: uninitialized.awk:2: warning: reference to uninitialized variable `a' diff --git a/test/unterm.awk b/test/unterm.awk new file mode 100644 index 0000000..c420c47 --- /dev/null +++ b/test/unterm.awk @@ -0,0 +1 @@ +BEGIN{x=".........................................................................................................................................................................................................................................................}
\ No newline at end of file diff --git a/test/unterm.ok b/test/unterm.ok new file mode 100644 index 0000000..a8e7e59 --- /dev/null +++ b/test/unterm.ok @@ -0,0 +1,3 @@ +gawk: unterm.awk:1: BEGIN{x=".........................................................................................................................................................................................................................................................} +gawk: unterm.awk:1: ^ unterminated string +EXIT CODE: 1 diff --git a/test/whiny.awk b/test/whiny.awk new file mode 100644 index 0000000..dc86694 --- /dev/null +++ b/test/whiny.awk @@ -0,0 +1,5 @@ +{ word[$0]++ } +END { + for (i in word) + print i +} diff --git a/test/whiny.in b/test/whiny.in new file mode 100644 index 0000000..6c8a2e3 --- /dev/null +++ b/test/whiny.in @@ -0,0 +1,178 @@ +gawk +pattern +scanning +and +processing +language +or +style +options +file +or +style +options +file +or +style +options +file +or +style +options +file +is +the +Project's +implementation +of +the +programming +language. +It +conforms +to +the +definition +of +the +language +in +the +Command +Language +And +Utilities +Standard. +This +version +in +turn +is +based +on +the +description +in +by +Aho, +Kernighan, +and +Weinberger, +with +the +additional +features +found +in +the +System +V +Release +version +of +also +provides +more +recent +Bell +Laboratories +extensions, +and +a +number +of +extensions. +is +the +profiling +version +of +It +is +identical +in +every +way +to +except +that +programs +run +more +slowly, +and +it +automatically +produces +an +execution +profile +in +the +file +when +done. +See +the +option, +below. +The +command +line +consists +of +options +to +itself, +the +program +text +not +supplied +via +the +or +options), +and +values +to +be +made +available +in +the +and +pre-defined +variables. +options +may +be +either +traditional +one +letter +options, +or +style +long +options. +options +start +with +a +single +while +long +options +start +with +Long +options +are +provided +for +both +features +and +for +features. diff --git a/test/whiny.ok b/test/whiny.ok new file mode 100644 index 0000000..973aa5d --- /dev/null +++ b/test/whiny.ok @@ -0,0 +1,108 @@ +Aho, +And +Bell +Command +It +Kernighan, +Laboratories +Language +Long +Project's +Release +See +Standard. +System +The +This +Utilities +V +Weinberger, +a +additional +also +an +and +are +automatically +available +based +be +below. +both +by +command +conforms +consists +definition +description +done. +either +every +except +execution +extensions, +extensions. +features +features. +file +for +found +gawk +identical +implementation +in +is +it +itself, +language +language. +letter +line +long +made +may +more +not +number +of +on +one +option, +options +options), +options, +options. +or +pattern +pre-defined +processing +produces +profile +profiling +program +programming +programs +provided +provides +recent +run +scanning +single +slowly, +start +style +supplied +text +that +the +to +traditional +turn +values +variables. +version +via +way +when +while +with diff --git a/test/wjposer1.awk b/test/wjposer1.awk new file mode 100644 index 0000000..396089b --- /dev/null +++ b/test/wjposer1.awk @@ -0,0 +1,75 @@ +# From arnold@f7.net Sun Sep 5 12:30:53 2004 +# Date: Fri, 3 Sep 2004 00:54:32 -0400 (EDT) +# From: William J Poser <wjposer@ldc.upenn.edu> +# To: arnold@skeeve.com +# Subject: gawk bug +# Message-ID: <20040903004347.W80049@lorax.ldc.upenn.edu> +# +# Here is a revised version of my previous message, modified to describe +# the accompanying files. +# +# IhSplit.awk should replicate every record with exactly one entry in the +# IH field, delete records lacking an IH field, and produce as many copies +# of records with two or more entries in the IH field as there are entries. +# In the latter case, the original IH field should be relabelled OIH and +# a new IH field be added at the beginning of the record. +# +# This has worked properly for many years, since at least 1997. It worked properly with gawk 3.0.5 +# and possibly later versions. Unfortunately I didn't keep track of exactly what version it +# broke on, but it was whatever came with Mandrake Linux 9.0. It continued to fail with version +# 3.1.2. However, the problem was eliminated with version 3.1.3 and remains +# eliminated in version 3.1.4. +# +# The problem was that an apparently random subset of records would loose some +# or all of their fields. Running the script on the same input always produces +# the same output with the same errors. +# +# The file Input is a subset of a real lexicon that produces errors using +# gawk 3.1.2. GoodOutput is the expected output. BadOutput is the erroneous +# output. A diff will show that there are actually two errors. One record +# has fields stripped as described above. Another is omitted in its entirety. +# +# +# Bill Poser, Linguistics, University of Pennsylvania +# http://www.ling.upenn.edu/~wjposer/ billposer@alum.mit.edu +# ---------------------------------------------------------------------------- +#For each record that contains multiple items in its inverse headword (IH) +#field, generate a set of new records each containing exactly one item +#in the inverse headword field, otherwise copies of the original. + +function CleanUp() #Clean up for next input record. +{ + for(i in rec) delete rec[i]; +} + +BEGIN { +RS = ""; +FS = "\n?%" +} +{ + +# First, create an associative array with the tags as indices. + for(i = 2; i <= NF; i++) { # The leading FS creates an initial empty field + split($i, f, ":"); + rec[f[1]]=substr($i,index($i,":")+1); + } + + if(!("IH" in rec)) next; + +# Parse out the inverse headwords + + items = split(rec["IH"],ihs,"/"); + +# Replace the old IH field. + + sub(/%IH:/,"%OIH:",$0); + +# Generate a new copy of the record for each inverse headword + + for(i = 1; i <= items; i++){ + entries+=1; + printf("%%IH:%s\n",ihs[i]); + printf("%s\n\n",$0); + } + CleanUp(); + } diff --git a/test/wjposer1.in b/test/wjposer1.in new file mode 100644 index 0000000..bdcd4a8 --- /dev/null +++ b/test/wjposer1.in @@ -0,0 +1,1527 @@ +%P:nut'i +%G:exertion +%IH:exertion +%C:N +%SF:abstractions-misc +%S:JOPA/EDFR/VESE +%ES:000088 +%UID:002463 +%MD:1999/03/15 + +%P:ts'iyantsuk t'eooninzun +%G:information +%IH:information +%C:N +%SF:abstractions-misc +%S:JOPA/BRBI +%UID:000986 +%MD:1997/12/17 + +%P:k'et'uk +%G:interval +%IH:interval +%C:N +%SF:abstractions-misc +%S:MAGO +%ES:001077 +%UID:000873 +%MD:1997/12/11 + +%P:khunek +%G:language, word, message +%IH:language/word/message +%POSS:ghunek +%P1p:neghunek +%C:N +%SF:abstractions-misc +%S:MAGO/BRBI/JOPA/EDFR/VESE/JEKO +%UID:000928 +%MD:2001/02/10 + +%P:gal +%G:running +%IH:running +%C:N +%R:Dugal ndesda. He got hurt while running. +%SF:abstractions-misc +%S:JOPA +%ES:000535 +%UID:002462 +%MD:1999/03/15 + +%P:t'en +%G:work +%IH:work +%C:N +%SF:abstractions-misc +%S:VESE/PEJO +%ES:000672 +%UID:003028 +%POCKET:N +%MD:2000/10/04 + +%P:'ut'en +%G:work +%IH:work +%C:N +%SF:abstractions-misc +%P1p:neye'ut'en +%S:JOPA +%ES:001041 +%UID:004264 +%POCKET:Y +%MD:2001/03/15 + +%P:dulkw'ah +%G:Spotted Frog +%IH:Spotted Frog/Frog, Spotted +%SN:Rana pretiosa +%MN:Lives in water and has red markings on the belly. +%PICTURE:/home/poser/Research/Dakelh/Pictures/psfiles/SpottedFrog.ps +%CAPTION:{\qc Tsasdli} --- Spotted Frog +%PICPERMISSION:N +%PICCREDIT:Drawing of Spotted Frog from {\it The Amphibians of British Columbia\/}. +%C:N +%SF:amphibiansandreptiles +%S:EDFR +%UID:004111 +%POCKET:Y +%MD:2001/03/07 + +%P:chunlai +%G:salamander, lizard +%IH:lizard/salamander +%MN:The only species of salamander found in the region is the + Long-toed Salamander {\it Ambystoma macrodactylum\/}. No lizards + are found in the region. However, this term is applied to other + varieties of salamander and to lizards, such as the gekkos sold as + pets. +%FGREF:Corkran \& Thoms (1996;39) +%SN:Ambystoma macrodactylum +%C:N +%SF:amphibiansandreptiles +%S:LITM/JOPA/BRBI +%UID:000157 +%MD:1998/05/16 + +%P:tl'ughus +%G:snake +%IH:snake +%C:N +%MN:The only snake found in the region is the Common Garter Snake + {\it Thamnophis sirtalis\/}. However, the term is applied to all snakes. +%SN:Thamnophis sirtalis +%SF:amphibiansandreptiles +%S:LITM/JOPA/BRBI/MAGO +%UID:000250 +%MD:1998/12/07 + +%P:tsasdli +%G:Western Toad +%SN:Bufo boreas +%IH:Western Toad/Toad, Western +%MN:Lives on land. +%SF:amphibiansandreptiles +%C:N +%S:LITM/JOPA/BRBI/MAGO/STJA/EDFR +%UID:000059 +%MD:2001/03/07 + +%P:lhits'e +%G:bitch, female dog +%IH:bitch/dog, female +%C:N +%SF:animals-domestic +%S:JOPA/EDFR/VESE +%UID:002446 +%MD:1999/03/15 + +%P:musdus +%G:cow +%IH:cow +%C:N +%P2s:nmusdus +%ETYM:Loan from Cree {\qf mostos} ``buffalo''. +%LOANSOURCE:Cree +%SF:animals-domestic +%S:LITM/JOPA/BRBI/MAGO +%UID:000036 +%MD:1997/06/12 + +%P:lhi +%G:dog +%IH:dog +%C:N +%DUOPLURAL:lhike +%SF:animals-domestic +%POSS:lik +%P1s:slik +%P1p:nelik +%DUOPLURAL:lhike +%S:LITM/JOPA/BRBI/STJA/VESE/EDFR/JEKO +%UID:000270 +%MD:2001/02/15 + +%P:budzocho +%G:donkey, mule +%IH:donkey/mule +%SF:animals-domestic +%ETYM:``big ears''. +%C:N +%S:JOPA/BRBI +%UID:000376 +%MD:1997/11/14 + +%P:yeztli +%G:horse +%IH:horse +%SF:animals-domestic +%ETYM:A contraction of {\qc yezihlhi} ``elk dog''. +%C:N +%S:LITM/JOPA/BRBI/PEJO +%UID:000042 +%MD:2000/10/21 + +%P:lhike +%G:Irregular plural of {\qc lhi}, q.v. +%IH:dogs +%C:N +%SF:animals-domestic +%S:LITM/BRBI/JOPA/STJA +%UID:000293 +%MD:1999/01/26 + +%P:sbaiyaz +%G:lamb +%IH:lamb +%C:N +%SF:animals-domestic +%S:LITM +%UID:000254 +%MD:1997/06/16 + +%P:gugoos +%G:pig +%IH:pig +%C:N +%ETYM:Ultimately borrowed from French {\qf coche}, probably via Cree. +%LOANSOURCE:Cree +%SF:animals-domestic +%S:LITM/JOPA/BRBI +%UID:000133 +%MD:1997/06/16 + +%P:'ut'az +%G:bat +%IH:bat +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000390 +%MD:1997/11/14 + +%P:liyabdut'ai +%G:bat +%MN:The only kind of bat found in the region is the Little Brown Myotis. +%IH:bat +%SF:animals-land +%SN:Myotis lucifugus +%ETYM:Literally, ``devil bird'', a compound of {\qc liyab} ``devil'', a loan from + French {\qf le diable}, and {\qc dut'ai} ``bird''. +%LOANSOURCE:French +%C:N +%S:JOPA/BRBI +%UID:000215 +%MD:1997/06/16 + +%P:sus +%G:black bear +%IH:black bear +%C:N +%SF:animals-land +%SN:Ursus americanus +%S:LITM/JOPA/BRBI/STJA/EDFR/VESE/JEKO +%UID:000048 +%MD:1998/12/19 + +%P:musduscho dughai +%G:buffalo +%IH:buffalo +%SF:animals-land +%C:N +%ETYM:``big hairy cow''. +%S:JOPA/EDFR +%UID:003478 +%POCKET:Y +%MD:2000/11/04 + +%P:tl'ok'umusdus +%G:buffalo +%IH:buffalo +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000374 +%MD:2000/11/01 + +%P:jenyo +%G:bull moose +%IH:bull moose/moose, bull +%SF:animals-land +%C:N +%S:MAGO/JOPA/VESE/EDFR/JEKO +%UID:000474 +%MD:1999/05/11 + +%P:denyo +%G:bull moose +%IH:moose, bull +%SF:animals-land +%C:N +%S:LITM/JOPA +%UID:000348 +%MD:1997/06/18 + +%P:tsiyeyaz +%G:calf moose +%IH:calf moose/moose, calf +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000380 +%MD:1997/11/14 + +%P:duniyaz +%G:calf moose +%IH:calf moose/moose, calf +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI +%UID:000245 +%MD:1997/06/16 + +%P:whudzih +%G:caribou +%IH:caribou +%C:N +%SF:animals-land +%SN:Rangifer tarandus +%S:JOPA/BRBI/MAGO/EDFR/VESE/JEKO +%UID:000274 +%MD:1999/05/11 + +%P:boos +%G:cat +%IH:cat +%C:N +%SN:Felis domesticus +%ETYM:Loan from English {\qf puss}, possibly via Chinook Jargon. +%LOANSOURCE:English +%SF:animals-land +%S:LITM/JOPA/BRBI +%UID:000137 +%MD:1997/12/17 + +%P:ts'uwhuljos +%G:chipmunk +%IH:chipmunk +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI +%UID:000146 +%MD:1997/06/16 + +%P:booscho +%G:cougar +%IH:cougar +%SF:animals-land +%SN:Felis concolor +%C:N +%ETYM:Literally, ``big cat'', where {\qc boos} ``cat'' is a loan from English + {\qf puss}, possibly via Chinook Jargon. +%S:JOPA/BRBI +%UID:000050 +%MD:1997/11/14 + +%P:duni'at +%G:cow moose +%IH:cow moose/moose, cow +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000377 +%MD:1997/11/14 + +%P:tintulhi +%G:coyote +%IH:coyote +%C:N +%SF:animals-land +%SN:Canis latrans +%S:JOPA/BRBI +%R:LITM has chuntulhi. +%UID:000155 +%MD:1997/06/16 + +%P:yests'e +%G:deer +%IH:deer +%SF:animals-land +%C:N +%S:LITM/JOPA/BRBI/EDFR +%UID:000132 +%MD:1998/12/16 + +%P:dets'it +%G:dry cow moose +%IH:dry cow moose/moose, dry cow +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000378 +%MD:1997/11/14 + +%P:yezih +%G:elk +%IH:elk +%SF:animals-land +%C:N +%R:STJA doesn't use this. +%S:JOPA/BRBI +%UID:000382 +%MD:1997/11/14 + +%P:tsa'at +%G:female beaver +%IH:beaver, female +%C:N +%SF:animals-land +%S:STJA +%UID:001295 +%MD:1998/12/08 + +%P:chunihcho +%G:fisher +%IH:fisher +%ETYM:``big marten''. +%SF:animals-land +%SN:Martes pennanti +%C:N +%S:JOPA/BRBI/MAGO +%UID:000385 +%MD:2000/06/18 + +%P:ts'unalhbuz +%G:flying squirrel +%IH:flying squirrel +%SF:animals-land +%SN:Glaucomys sabrinus alpinus +%PICTURE:/home/poser/Research/Dakelh/Pictures/psfiles/FlyingSquirrel.ps +%CAPTION:{\qc ts'unulhbuz} --- Flying Squirrel +%PICPERMISSION:N +%PICCREDIT:Drawing of Flying Squirrel from {\it The Mammals of British Columbia\/}. +%C:N +%S:JOPA/BRBI +%UID:000389 +%MD:1997/11/14 + +%P:nanguz +%G:fox +%IH:fox +%C:N +%SF:animals-land +%S:MAGO +%UID:000139 +%MD:2001/02/26 + +%P:shas +%G:grizzly bear +%IH:grizzly bear +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI/VESE/EDFR/JEKO +%UID:000039 +%MD:1997/06/12 + +%P:shasyaz +%G:grizzly bear cub +%IH:grizzly bear cub/cub, grizzly bear +%C:N +%SF:animals-land +%S:STJA +%UID:002114 +%MD:1999/02/20 + +%P:shas'at +%G:grizzly bear sow +%IH:grizzly bear sow/sow, grizzly bear +%C:N +%SF:animals-land +%ETYM:``grizzly bear's wife''. +%S:STJA +%UID:002113 +%MD:1999/02/20 + +%P:-lik +%G:irregular possessed stem of {\qc lhi}, q.v. +%C:N +%SF:animals-land +%S:MAGO +%UID:000564 +%MD:1997/12/11 + +%P:wasi +%G:lynx +%IH:lynx +%C:N +%SF:animals-land +%SN:Felis lynx +%ETYM:Loan from Gitksan {\qf wish}. +%LOANSOURCE:Gitksan +%S:JOPA/BRBI/STJA/EDFR/VESE/JEKO/MAGO +%UID:000049 +%MD:2001/04/20 + +%P:k'ani +%G:woodchuck +%IH:woodchuck +%C:N +%SF:animals-land +%SN:Marmota monax +%S:JOPA/BRBI/PEJO +%R:Clarified with Josie and Peter 2001/05/28. +%UID:000391 +%POCKET:Y +%MD:2001/05/28 + +%P:dutni +%G:marmot +%IH:marmot +%SF:animals-land +%C:N +%SN:Marmota caligata +%R:Josie and Peter are not really familiar with marmots but have heard older + people talk about them. +%S:JOPA/PEJO +%UID:000143 +%MD:1998/02/10 + +%P:chunih +%G:marten +%IH:marten +%SF:animals-land +%SN:Martes americana +%C:N +%S:JOPA/BRBI/VESE/EDFR/JEKO/MAGO +%UID:000016 +%MD:2001/04/20 + +%P:telhjoos +%G:mink +%IH:mink +%C:N +%SF:animals-land +%SN:Mustela vison +%S:LITM/JOPA/BRBI +%UID:000167 +%MD:1997/06/16 + +%P:duni +%G:moose +%IH:moose +%C:N +%SF:animals-land +%SN:Alces alces andersoni +%S:LITM-EDFR/JOPA/BRBI +%UID:000346 +%MD:1997/06/18 + +%P:dats'ooz +%G:mouse +%IH:mouse +%SF:animals-land +%C:N +%S:LITM/JOPA/MAGO/VESE/JEKO +%UID:000156 +%MD:2001/01/22 + +%P:tsek'et +%G:muskrat +%IH:muskrat +%C:N +%SF:animals-land +%SN:Ondatra zibethicus +%S:JOPA/BRBI/STJA/MAGO +%UID:000335 +%MD:1998/12/08 + +%P:chanjo +%G:newly sexually mature cow moose +%IH:moose, newly sexually mature cow +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000379 +%MD:1997/11/14 + +%P:looncho +%G:pack rat +%IH:pack rat +%C:N +%SF:animals-land +%S:VESE/JEKO/MAGO +%UID:000149 +%MD:1999/05/10 + +%P:dlooncho +%G:packrat +%IH:packrat +%C:N +%SF:animals-land +%S:JOPA +%UID:002701 +%MD:1999/05/11 + +%P:duneza +%G:porcupine +%IH:porcupine +%SF:animals-land +%C:N +%S:JOPA/BRBI/MAGO +%UID:000388 +%MD:2001/03/06 + +%P:ts'it +%G:porcupine +%IH:porcupine +%SF:animals-land +%SN:Erethizon dorsatum +%C:N +%ETYM:Perhaps derived from the interjection {\qc ts'it} ``don't touch it!''. +%S:JOPA/BRBI/MAGO/BEMC/STJA +%UID:000387 +%MD:1998/12/08 + +%P:lhiyaz +%G:puppy +%IH:puppy +%C:N +%SF:animals-land +%DUOPLURAL:lhiyazke +%DUOPLURAL:lhikeyaz +%R:Josie prefers {\qc lhikeyaz}. +%S:LITM/BRBI/JOPA/EDFR/MAGO-JEKO +%UID:000182 +%MD:2001/05/26 + +%P:nats'ildelh +%G:Red Squirrel +%IH:squirrel/Red Squirrel +%SN:Tamiasciurus hudsonicus colum. +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI/STJA +%UID:000034 +%MD:1999/02/17 + +%P:goh +%G:rabbit +%IH:rabbit +%C:N +%SF:animals-land +%S:LITM/JOPA/VESE/EDFR/JEKO +%UID:000023 +%MD:1999/05/11 + +%P:ooch'ainischoot +%G:recently weaned calf moose +%IH:moose, recently weaned calf +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000381 +%MD:1997/11/14 + +%P:sbai +%G:sheep +%IH:sheep +%C:N +%SF:animals-land +%S:MAGO +%UID:001131 +%MD:1998/02/10 + +%P:'usbai +%G:sheep +%IH:sheep +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000375 +%MD:1997/11/14 + +%P:'ulhguk +%G:shrew +%IH:shrew +%SF:animals-land +%C:N +%S:MAGO/VESE/JEKO +%UID:000526 +%MD:2001/01/22 + +%P:hoonliz +%G:skunk +%IH:skunk +%C:N +%P2s:unhoonliz +%SF:animals-land +%S:LITM/JOPA/BRBI/MAGO/VESE/EDFR/JEKO +%UID:000052 +%MD:1997/06/12 + +%P:nohbai +%G:weasel +%IH:weasel +%C:N +%SF:animals-land +%S:JOPA/BRBI/MAGO +%UID:000141 +%MD:1997/06/16 + +%P:yus +%G:wolf +%IH:wolf +%C:N +%SF:animals-land +%SN:Canis lupus +%S:LITM/JOPA/BRBI +%UID:000051 +%MD:1997/06/12 + +%P:noostel +%G:wolverine +%IH:wolverine +%C:N +%SF:animals-land +%SN:Gulo gulo +%S:JOPA/BRBI/MAGO/VESE/EDFR/JEKO +%UID:000140 +%MD:2001/04/20 + +%P:tsatsul +%G:young beaver +%IH:beaver, young +%SF:animals-land +%C:N +%S:JOPA/BRBI/STJA +%UID:000384 +%MD:1998/12/08 + +%P:lht'at +%G:beaver dam +%IH:beaver dam/dam, beaver +%C:N +%SF:animals-misc +%S:STJA +%UID:001287 +%MD:1998/12/08 + +%P:'ulh +%G:beaver dam +%IH:beaver dam/dam, beaver +%C:N +%SF:animals-misc +%S:STJA +%UID:001288 +%MD:1998/12/08 + +%P:tsaken +%G:beaver lodge +%IH:beaver lodge +%C:N +%SF:animals-misc +%S:JOPA/BRBI/STJA +%UID:000405 +%MD:1998/12/08 + +%P:tunyohtsati +%G:beaver path under the ice +%IH:beaver path under the ice +%C:N +%SF:animals-misc +%S:JOPA/EDFR +%UID:003769 +%POCKET:Y +%MD:2001/02/13 + +%P:sus'an +%G:black bear den +%IH:black bear den +%C:N +%SF:animals-misc +%S:LITM/STJA +%UID:000131 +%MD:1998/12/08 + +%P:shask'oh +%G:grizzly bear tracks +%IH:tracks, grizzly bear +%C:N +%SF:animals-misc +%S:MAGO +%UID:001132 +%MD:1998/02/10 + +%P:hoolht'ukw +%G:leech +%IH:leech +%SF:animals-misc +%C:N +%S:JOPA/PEJO/EDFR +%UID:003410 +%POCKET:Y +%MD:2000/11/01 + +%P:hoot'ub +%G:leech +%IH:leech +%SF:bugs +%C:N +%S:JOPA/BRBI/MAGO +%UID:000370 +%MD:2000/11/01 + +%P:dunik'oh +%G:moose tracks +%IH:moose tracks +%C:N +%SF:animals-misc +%S:PEJO/JOPA +%ES:000491 +%UID:003121 +%POCKET:Y +%MD:2000/09/28 + +%P:gohk'oh +%G:rabbit tracks +%IH:tracks, rabbit +%C:N +%SF:animals-misc +%S:LITM +%UID:000073 +%MD:1997/06/12 + +%P:tsa +%G:beaver +%IH:beaver +%C:N +%SN:Castor canadensis +%UID:000044 +%SF:animals-water +%S:JOPA/BRBI/STJA/EDFR/VESE/JEKO/MAGO +%MD:2001/04/18 + +%P:tsayaz +%G:beaver kit +%IH:kit, beaver/beaver, baby +%SF:animals-water +%C:N +%S:STJA +%UID:001294 +%MD:2000/06/18 + +%P:tsati +%G:big beaver, old beaver +%IH:beaver, big/beaver, old +%C:N +%SF:animals-water +%S:LITM/JOPA/BRBI/STJA +%UID:000206 +%MD:1998/12/08 + +%P:tsis +%G:otter +%IH:otter +%SF:animals-water +%SN:Lutra canadensis +%C:N +%S:JOPA/BRBI +%UID:000386 +%MD:1997/11/14 + +%P:datsan +%G:American Crow +%C:N +%SF:bird-gen +%SN:Corvus brachyrhynchos +%IH:crow/American Crow +%S:LITM/PEJO +%UID:000158 +%MD:2000/10/21 + +%P:sewh +%G:American Robin +%IH:Robin, American +%SN:Turdus migratorius +%C:N +%SF:bird-gen +%S:LITM/JOPA/BRBI/PEJO +%UID:000181 +%MD:2000/10/21 + +%P:tsebalyan +%G:Bald Eagle +%IH:Bald Eagle +%C:N +%SF:bird-gen +%SN:Haliaeetus leucocephalus +%S:LITM/JOPA/BRBI +%UID:000150 +%MD:1997/06/16 + +%P:dut'ai +%G:bird, duck +%IH:bird/duck +%C:N +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO/STJA/PEJO +%UID:000081 +%MD:2000/09/28 + +%P:delh +%G:crane +%IH:crane +%C:N +%SF:bird-gen +%S:LITM +%UID:000255 +%MD:1997/06/16 + +%P:khoh +%G:goose +%IH:goose +%C:N +%P1s:skhoh +%P2s:nkhoh +%P1p:nekhoh +%POSS:khoh +%SF:bird-gen +%S:JOPA/BRBI/MAGO/VESE/EDFR/JEKO +%UID:000031 +%MD:2001/02/15 + +%P:ts'unalhduz +%G:hummingbird +%IH:hummingbird +%C:N +%SF:bird-gen +%S:LITM/BRBI/JOPA +%UID:000242 +%MD:1997/06/16 + +%P:gagiyaz +%G:little bird +%IH:bird, little +%C:N +%QCHECK:Any little bird? +%SF:bird-gen +%S:PEJO +%UID:003115 +%POCKET:Y +%MD:2000/09/28 + +%P:dut'aiyaz +%G:little bird +%IH:bird, little +%C:N +%SF:bird-gen +%S:STJA/JOPA/EDFR/VESE/PEJO +%UID:001818 +%MD:2000/09/28 + +%P:dadzi +%G:loon +%IH:loon +%SF:bird-gen +%SN:Gavia immer +%C:N +%S:LITM/JOPA/BRBI +%UID:000020 +%MD:1997/06/12 + +%P:t'ugicho +%G:Mallard Duck +%IH:Mallard Duck +%C:N +%SN:Anas platyrhynchos +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO/VESE/EDFR/JEKO +%UID:000041 +%MD:1999/05/11 + +%P:musdzoon +%G:owl +%IH:owl +%C:N +%SF:bird-gen +%S:LITM/BRBI/JOPA/MAGO +%UID:000135 +%MD:1997/12/11 + +%P:ts'olh +%G:Red-necked Grebe +%MN:A variety of duck locally known as the Helldiver. +%IH:Red-Necked Grebe/Helldiver/Grebe, Red-Necked +%SN:Podiceps grisegena +%SF:bird-gen +%C:N +%S:BRBI/JOPA +%UID:000263 +%MD:2001/03/08 + +%P:'utsut +%G:Ruffed grouse +%IH:Ruffed grouse +%C:N +%SF:bird-gen +%S:LITM +%UID:000218 +%MD:1997/06/16 + +%P:nat'oh +%G:Spruce Grouse, Fool Hen +%IH:Spruce Grouse/Grouse, Spruce/Fool Hen +%SF:bird-gen +%SN:Dendragapus canadensis +%C:N +%S:MAGO/LITM +%UID:000539 +%MD:1997/12/04 + +%P:tehgwuzeh +%G:Steller's Jay, commonly known locally as ``bluejay''. +%IH:Steller's Jay/jay, Steller's/Bluejay (Steller's Jay) +%SF:bird-gen +%SN:Cyanocitta stelleri +%C:N +%S:JOPA/BRBI +%UID:000356 +%MD:1997/11/14 + +%P:wedlew +%G:sandpiper +%IH:sandpiper +%C:N +%SN:Eremophila alpestris et sim. +%SF:bird-gen +%S:LITM +%UID:000237 +%MD:2002/07/19 + +%P:besk'i +%G:seagull +%IH:seagull +%C:N +%SN:Larus species +%SF:bird-gen +%S:LITM +%UID:000136 +%MD:2002/07/19 + +%P:ts'incho +%G:swan +%IH:swan +%C:N +%SF:bird-gen +%S:LITM +%UID:000222 +%MD:1997/06/16 + +%P:'uschas +%G:Tree Swallow +%IH:Tree Swallow +%SF:bird-gen +%SN:Tachycineta bicolor +%C:N +%S:MAGO +%UID:000535 +%MD:1997/11/22 + +%P:gwuzeh +%G:Whiskey Jack, Gray Jay, Canadian Jay +%IH:Whiskey Jack/Jay, Gray/Jay, Canadian +%C:N +%SN:Perisoreus canadensis +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO +%UID:000148 +%MD:1997/11/22 + +%P:chundulkw'uz +%G:woodpecker +%IH:woodpecker +%C:N +%SF:bird-gen +%S:JOPA/BRBI/STJA +%UID:000138 +%MD:1999/03/31 + +%P:-t'o +%G:nest +%IH:nest +%C:N +%Pind:'ut'o +%P3s:but'o +%Pref:dut'o +%SF:bird-misc/bugs +%S:STJA/PEJO/JOPA/BRBI/EDFR +%ES:001353 +%UID:000226 +%MD:2001/03/07 + +%P:-nak'uz +%G:a single eye +%IH:eye, a single +%C:N +%SF:body-ext +%S:JOPA/EDFR +%ES:000457 +%UID:003770 +%POCKET:Y +%MD:2001/02/13 + +%P:-kechunoh +%G:ankle +%IH:ankle +%P1s:skechunoh +%P2s:nkechunoh +%C:N +%S:MAGO/STJA +%SF:body-ext +%UID:000865 +%MD:1999/03/03 + +%P:-de +%G:antler, horn +%IH:antler/horn +%C:N +%SF:body-ext +%P3s:bude +%S:STJA +%UID:002266 +%MD:1999/03/02 + +%P:-de_zu_s +%G:antler velvet +%IH:velvet, antler +%C:N +%SF:body-ext +%P3s:bude_zu_s +%S:STJA +%UID:002267 +%MD:1999/03/02 + +%P:-tsul +%G:anus, asshole +%IH:anus/asshole +%C:N +%P1s:stsul +%SF:body-ext +%S:STJA +%UID:002171 +%MD:1999/02/23 + +%P:-gan +%G:arm +%IH:arm +%P1s:sgan +%P2s:ngan +%Pref:dugan +%C:N +%S:LITM/MAGO/STJA/JOPA/VESE/EDFR/JEKO +%SF:body-ext +%UID:000863 +%MD:1999/02/22 + +%P:-chak'ests'oh +%G:armpit +%IH:armpit +%P1s:schak'ests'oh +%C:N +%S:MAGO +%UID:000859 +%SF:body-ext +%MD:1997/12/11 + +%P:-t'ak +%G:back (of body) +%IH:back (of body) +%P1s:st'ak +%P3s:but'ak +%C:N +%S:MAGO/EDFR/VESE/JEKO +%SF:body-ext +%UID:000899 +%MD:1997/12/11 + +%P:-lat'ak +%G:back of hand +%IH:back of hand +%P1s:slat'ak +%C:N +%S:MAGO +%SF:body-ext +%UID:000871 +%MD:1997/12/11 + +%P:tsake +%G:beaver paws +%IH:beaver paws +%C:N +%SF:body-ext +%S:LITM-EDFR +%UID:000329 +%MD:1997/06/18 + +%P:tsache +%G:beaver tail +%IH:beaver tail +%C:N +%SF:body-ext +%S:LITM +%UID:000207 +%MD:1997/06/16 + +%P:-but +%G:belly +%IH:belly +%P1s:sbut +%C:N +%S:MAGO +%SF:body-ext +%UID:000937 +%MD:1997/12/11 + +%P:-ts'oo +%G:breast +%IH:breast +%P1s:sts'oo +%C:N +%S:MAGO +%UID:000855 +%SF:body-ext +%MD:1997/12/11 + +%P:-tl'a +%G:bum, buttocks +%IH:bum/buttocks +%P1s:stl'a +%C:N +%S:MAGO +%SF:body-ext +%UID:000936 +%MD:1997/12/11 + +%P:-kechunch'ooz +%G:calf of leg +%IH:calf of leg +%C:N +%SF:body-ext +%S:JOPA/EDFR +%UID:004458 +%POCKET:Y +%MD:2001/04/20 + +%P:-nembus +%G:cheek +%IH:cheek +%P1s:snimbus +%C:N +%S:MAGO/JOPA/BRBI +%SF:body-ext +%UID:000889 +%MD:1997/12/11 + +%P:-yoh +%G:chest +%IH:chest +%C:N +%SF:body-ext +%S:JOPA/EDFR +%ES:000660 +%UID:003777 +%POCKET:Y +%MD:2001/02/13 + +%P:-yeda' +%G:chin +%IH:chin +%P1s:syeda' +%C:N +%S:MAGO +%SF:body-ext +%UID:000882 +%MD:1997/12/11 + +%P:-tsidakwhudutle +%G:cranial fontanelle, baby's soft spot +%IH:cranial fontanelle/baby's soft spot +%C:N +%P3s:butsidakwhudutle +%S:MAGO +%SF:body-ext +%UID:000898 +%MD:1997/12/11 + +%P:-dzo +%G:ear +%IH:ear +%MN:This refers to the ear considered as a whole, especially the exterior. + When the canal in particular is referred to, one uses {\qc -dzek}, q.v. +%C:N +%P1s:sdzo +%S:MAGO +%SF:body-ext +%UID:000879 +%MD:1997/12/11 + +%P:-dzobal +%G:earlobe +%IH:earlobe +%C:N +%P1s:sdzobal +%SF:body-ext +%S:BRBI/MAGO +%UID:000641 +%MD:1997/12/17 + +%P:-nints'uzti +%G:elbow +%IH:elbow +%P1s:snints'uzti +%C:N +%S:MAGO +%SF:body-ext +%UID:000916 +%MD:1997/12/11 + +%P:-na +%G:eye +%IH:eye +%P1s:sna +%P3s:buna +%C:N +%S:MAGO/JOPA/EDFR +%SF:body-ext +%UID:000891 +%MD:1998/12/18 + +%P:-nak'et +%G:eye socket +%IH:eye socket +%P1s:snak'et +%C:N +%S:MAGO +%SF:body-ext +%UID:000892 +%MD:1997/12/11 + +%P:-nach'usdooz +%G:eyebrow +%IH:eyebrow +%P1s:snach'usdooz +%C:N +%S:MAGO +%SF:body-ext +%UID:000896 +%MD:1997/12/11 + +%P:-nalusgha +%G:eyelash +%IH:eyelash +%P1s:snalusgha +%C:N +%S:MAGO +%SF:body-ext +%UID:000895 +%MD:1997/12/11 + +%P:-nalus +%G:eyelid +%IH:eyelid +%P1s:snalus +%C:N +%S:MAGO +%SF:body-ext +%UID:000894 +%MD:1997/12/11 + +%P:-nen +%G:face +%IH:face +%P1s:snen +%P2s:nyunen +%P3s:bunen +%C:N +%S:MAGO/PEJO/STJA/JOPA/VESE/EDFR +%SF:body-ext +%ES:000369 +%UID:000890 +%MD:2001/04/20 + +%P:ts'uz +%G:feather, down +%IH:feather/down +%C:N +%SF:body-ext +%S:LITM/STJA/PEJO +%UID:000271 +%MD:2000/10/16 + +%P:dut'aits'uz +%G:feathers, down +%IH:feathers/down +%C:N +%SF:body-ext +%S:STJA +%UID:002647 +%MD:2001/02/27 + +%P:-lasge +%G:finger other than thumb or pinkie +%IH:finger other than thumb or pinkie +%P1s:slasge +%C:N +%S:MAGO/STJA/JOPA/PEJO/EDFR +%SF:body-ext +%UID:000869 +%MD:2000/11/01 + +%P:-lagui +%G:fingernails, claws of forepaws +%IH:fingernails/claws of forepaws +%P1s:slagui +%C:N +%S:MAGO +%SF:body-ext +%UID:000875 +%MD:1997/12/11 + +%P:-ke +%G:foot +%IH:foot +%C:N +%P1s:ske +%Pref:duke +%S:MAGO/STJA/JOPA/VESE/EDFR/JEKO +%UID:000851 +%SF:body-ext +%MD:1999/05/11 + +%P:-gha +%G:hair +%MN:This refers to hair in general and where no more specific term exists, as on the + arms and chest. It is not used to refer to the hair of the head, for which the + more specific term {\qc -tsigha} is always used. +%IH:hair +%C:N +%S:MAGO +%SF:body-ext +%UID:000888 +%MD:1997/12/11 + +%P:-tsigha +%G:hair of the head +%IH:hair of the head +%P1s:stsigha +%P2s:ntsigha +%P3s:butsigha +%C:N +%S:MAGO/LITM/PEJO +%SF:body-ext +%UID:000887 +%MD:2000/10/20 + +%P:-la +%G:hand +%IH:hand +%P1s:sla +%P2s:nla +%C:N +%S:MAGO/STJA +%SF:body-ext +%POCKET:Y +%UID:000866 +%MD:1999/02/17 + +%P:-tsi +%G:head +%IH:head +%Pref:dutsi +%C:N +%SF:body-ext +%S:STJA +%UID:002965 +%POCKET:Y +%MD:1999/06/24 + +%P:-kelatsul +%G:heel +%IH:heel +%P1s:skelatsul +%C:N +%S:MAGO +%SF:body-ext +%UID:000917 +%MD:1997/12/11 + +%P:-k'ui +%G:hip +%IH:hip +%P1s:sk'ui +%C:N +%S:MAGO/JOPA +%SF:body-ext +%UID:000923 +%MD:2001/03/15 + +%P:-gwut +%G:knee +%IH:knee +%P1s:sgwut +%C:N +%S:MAGO +%SF:body-ext +%UID:000933 +%MD:1997/12/11 + +%P:-gwutlasi'ai +%G:kneecap +%IH:kneecap +%P1s:sgwutlasi'ai +%R:has something to do with floating at tip of knee +%C:N +%S:MAGO +%SF:body-ext +%UID:000925 +%MD:1997/12/11 + +%P:-langwut +%G:knuckles at boundary between hand and fingers +%IH:knuckles at boundary between hand and fingers +%P1s:slangwut +%SF:body-ext +%C:N +%S:JOPA/BRBI +%UID:000967 +%MD:1997/12/17 + +%P:-kechun +%G:leg +%IH:leg +%P1s:skechun +%C:N +%S:MAGO +%UID:000852 +%SF:body-ext +%MD:1997/12/11 diff --git a/test/wjposer1.ok b/test/wjposer1.ok new file mode 100644 index 0000000..16cde6a --- /dev/null +++ b/test/wjposer1.ok @@ -0,0 +1,2068 @@ +%IH:exertion +%P:nut'i +%G:exertion +%OIH:exertion +%C:N +%SF:abstractions-misc +%S:JOPA/EDFR/VESE +%ES:000088 +%UID:002463 +%MD:1999/03/15 + +%IH:information +%P:ts'iyantsuk t'eooninzun +%G:information +%OIH:information +%C:N +%SF:abstractions-misc +%S:JOPA/BRBI +%UID:000986 +%MD:1997/12/17 + +%IH:interval +%P:k'et'uk +%G:interval +%OIH:interval +%C:N +%SF:abstractions-misc +%S:MAGO +%ES:001077 +%UID:000873 +%MD:1997/12/11 + +%IH:language +%P:khunek +%G:language, word, message +%OIH:language/word/message +%POSS:ghunek +%P1p:neghunek +%C:N +%SF:abstractions-misc +%S:MAGO/BRBI/JOPA/EDFR/VESE/JEKO +%UID:000928 +%MD:2001/02/10 + +%IH:word +%P:khunek +%G:language, word, message +%OIH:language/word/message +%POSS:ghunek +%P1p:neghunek +%C:N +%SF:abstractions-misc +%S:MAGO/BRBI/JOPA/EDFR/VESE/JEKO +%UID:000928 +%MD:2001/02/10 + +%IH:message +%P:khunek +%G:language, word, message +%OIH:language/word/message +%POSS:ghunek +%P1p:neghunek +%C:N +%SF:abstractions-misc +%S:MAGO/BRBI/JOPA/EDFR/VESE/JEKO +%UID:000928 +%MD:2001/02/10 + +%IH:running +%P:gal +%G:running +%OIH:running +%C:N +%R:Dugal ndesda. He got hurt while running. +%SF:abstractions-misc +%S:JOPA +%ES:000535 +%UID:002462 +%MD:1999/03/15 + +%IH:work +%P:t'en +%G:work +%OIH:work +%C:N +%SF:abstractions-misc +%S:VESE/PEJO +%ES:000672 +%UID:003028 +%POCKET:N +%MD:2000/10/04 + +%IH:work +%P:'ut'en +%G:work +%OIH:work +%C:N +%SF:abstractions-misc +%P1p:neye'ut'en +%S:JOPA +%ES:001041 +%UID:004264 +%POCKET:Y +%MD:2001/03/15 + +%IH:Spotted Frog +%P:dulkw'ah +%G:Spotted Frog +%OIH:Spotted Frog/Frog, Spotted +%SN:Rana pretiosa +%MN:Lives in water and has red markings on the belly. +%PICTURE:/home/poser/Research/Dakelh/Pictures/psfiles/SpottedFrog.ps +%CAPTION:{\qc Tsasdli} --- Spotted Frog +%PICPERMISSION:N +%PICCREDIT:Drawing of Spotted Frog from {\it The Amphibians of British Columbia\/}. +%C:N +%SF:amphibiansandreptiles +%S:EDFR +%UID:004111 +%POCKET:Y +%MD:2001/03/07 + +%IH:Frog, Spotted +%P:dulkw'ah +%G:Spotted Frog +%OIH:Spotted Frog/Frog, Spotted +%SN:Rana pretiosa +%MN:Lives in water and has red markings on the belly. +%PICTURE:/home/poser/Research/Dakelh/Pictures/psfiles/SpottedFrog.ps +%CAPTION:{\qc Tsasdli} --- Spotted Frog +%PICPERMISSION:N +%PICCREDIT:Drawing of Spotted Frog from {\it The Amphibians of British Columbia\/}. +%C:N +%SF:amphibiansandreptiles +%S:EDFR +%UID:004111 +%POCKET:Y +%MD:2001/03/07 + +%IH:lizard +%P:chunlai +%G:salamander, lizard +%OIH:lizard/salamander +%MN:The only species of salamander found in the region is the + Long-toed Salamander {\it Ambystoma macrodactylum\/}. No lizards + are found in the region. However, this term is applied to other + varieties of salamander and to lizards, such as the gekkos sold as + pets. +%FGREF:Corkran \& Thoms (1996;39) +%SN:Ambystoma macrodactylum +%C:N +%SF:amphibiansandreptiles +%S:LITM/JOPA/BRBI +%UID:000157 +%MD:1998/05/16 + +%IH:salamander +%P:chunlai +%G:salamander, lizard +%OIH:lizard/salamander +%MN:The only species of salamander found in the region is the + Long-toed Salamander {\it Ambystoma macrodactylum\/}. No lizards + are found in the region. However, this term is applied to other + varieties of salamander and to lizards, such as the gekkos sold as + pets. +%FGREF:Corkran \& Thoms (1996;39) +%SN:Ambystoma macrodactylum +%C:N +%SF:amphibiansandreptiles +%S:LITM/JOPA/BRBI +%UID:000157 +%MD:1998/05/16 + +%IH:snake +%P:tl'ughus +%G:snake +%OIH:snake +%C:N +%MN:The only snake found in the region is the Common Garter Snake + {\it Thamnophis sirtalis\/}. However, the term is applied to all snakes. +%SN:Thamnophis sirtalis +%SF:amphibiansandreptiles +%S:LITM/JOPA/BRBI/MAGO +%UID:000250 +%MD:1998/12/07 + +%IH:Western Toad +%P:tsasdli +%G:Western Toad +%SN:Bufo boreas +%OIH:Western Toad/Toad, Western +%MN:Lives on land. +%SF:amphibiansandreptiles +%C:N +%S:LITM/JOPA/BRBI/MAGO/STJA/EDFR +%UID:000059 +%MD:2001/03/07 + +%IH:Toad, Western +%P:tsasdli +%G:Western Toad +%SN:Bufo boreas +%OIH:Western Toad/Toad, Western +%MN:Lives on land. +%SF:amphibiansandreptiles +%C:N +%S:LITM/JOPA/BRBI/MAGO/STJA/EDFR +%UID:000059 +%MD:2001/03/07 + +%IH:bitch +%P:lhits'e +%G:bitch, female dog +%OIH:bitch/dog, female +%C:N +%SF:animals-domestic +%S:JOPA/EDFR/VESE +%UID:002446 +%MD:1999/03/15 + +%IH:dog, female +%P:lhits'e +%G:bitch, female dog +%OIH:bitch/dog, female +%C:N +%SF:animals-domestic +%S:JOPA/EDFR/VESE +%UID:002446 +%MD:1999/03/15 + +%IH:cow +%P:musdus +%G:cow +%OIH:cow +%C:N +%P2s:nmusdus +%ETYM:Loan from Cree {\qf mostos} ``buffalo''. +%LOANSOURCE:Cree +%SF:animals-domestic +%S:LITM/JOPA/BRBI/MAGO +%UID:000036 +%MD:1997/06/12 + +%IH:dog +%P:lhi +%G:dog +%OIH:dog +%C:N +%DUOPLURAL:lhike +%SF:animals-domestic +%POSS:lik +%P1s:slik +%P1p:nelik +%DUOPLURAL:lhike +%S:LITM/JOPA/BRBI/STJA/VESE/EDFR/JEKO +%UID:000270 +%MD:2001/02/15 + +%IH:donkey +%P:budzocho +%G:donkey, mule +%OIH:donkey/mule +%SF:animals-domestic +%ETYM:``big ears''. +%C:N +%S:JOPA/BRBI +%UID:000376 +%MD:1997/11/14 + +%IH:mule +%P:budzocho +%G:donkey, mule +%OIH:donkey/mule +%SF:animals-domestic +%ETYM:``big ears''. +%C:N +%S:JOPA/BRBI +%UID:000376 +%MD:1997/11/14 + +%IH:horse +%P:yeztli +%G:horse +%OIH:horse +%SF:animals-domestic +%ETYM:A contraction of {\qc yezihlhi} ``elk dog''. +%C:N +%S:LITM/JOPA/BRBI/PEJO +%UID:000042 +%MD:2000/10/21 + +%IH:dogs +%P:lhike +%G:Irregular plural of {\qc lhi}, q.v. +%OIH:dogs +%C:N +%SF:animals-domestic +%S:LITM/BRBI/JOPA/STJA +%UID:000293 +%MD:1999/01/26 + +%IH:lamb +%P:sbaiyaz +%G:lamb +%OIH:lamb +%C:N +%SF:animals-domestic +%S:LITM +%UID:000254 +%MD:1997/06/16 + +%IH:pig +%P:gugoos +%G:pig +%OIH:pig +%C:N +%ETYM:Ultimately borrowed from French {\qf coche}, probably via Cree. +%LOANSOURCE:Cree +%SF:animals-domestic +%S:LITM/JOPA/BRBI +%UID:000133 +%MD:1997/06/16 + +%IH:bat +%P:'ut'az +%G:bat +%OIH:bat +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000390 +%MD:1997/11/14 + +%IH:bat +%P:liyabdut'ai +%G:bat +%MN:The only kind of bat found in the region is the Little Brown Myotis. +%OIH:bat +%SF:animals-land +%SN:Myotis lucifugus +%ETYM:Literally, ``devil bird'', a compound of {\qc liyab} ``devil'', a loan from + French {\qf le diable}, and {\qc dut'ai} ``bird''. +%LOANSOURCE:French +%C:N +%S:JOPA/BRBI +%UID:000215 +%MD:1997/06/16 + +%IH:black bear +%P:sus +%G:black bear +%OIH:black bear +%C:N +%SF:animals-land +%SN:Ursus americanus +%S:LITM/JOPA/BRBI/STJA/EDFR/VESE/JEKO +%UID:000048 +%MD:1998/12/19 + +%IH:buffalo +%P:musduscho dughai +%G:buffalo +%OIH:buffalo +%SF:animals-land +%C:N +%ETYM:``big hairy cow''. +%S:JOPA/EDFR +%UID:003478 +%POCKET:Y +%MD:2000/11/04 + +%IH:buffalo +%P:tl'ok'umusdus +%G:buffalo +%OIH:buffalo +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000374 +%MD:2000/11/01 + +%IH:bull moose +%P:jenyo +%G:bull moose +%OIH:bull moose/moose, bull +%SF:animals-land +%C:N +%S:MAGO/JOPA/VESE/EDFR/JEKO +%UID:000474 +%MD:1999/05/11 + +%IH:moose, bull +%P:jenyo +%G:bull moose +%OIH:bull moose/moose, bull +%SF:animals-land +%C:N +%S:MAGO/JOPA/VESE/EDFR/JEKO +%UID:000474 +%MD:1999/05/11 + +%IH:moose, bull +%P:denyo +%G:bull moose +%OIH:moose, bull +%SF:animals-land +%C:N +%S:LITM/JOPA +%UID:000348 +%MD:1997/06/18 + +%IH:calf moose +%P:tsiyeyaz +%G:calf moose +%OIH:calf moose/moose, calf +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000380 +%MD:1997/11/14 + +%IH:moose, calf +%P:tsiyeyaz +%G:calf moose +%OIH:calf moose/moose, calf +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000380 +%MD:1997/11/14 + +%IH:calf moose +%P:duniyaz +%G:calf moose +%OIH:calf moose/moose, calf +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI +%UID:000245 +%MD:1997/06/16 + +%IH:moose, calf +%P:duniyaz +%G:calf moose +%OIH:calf moose/moose, calf +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI +%UID:000245 +%MD:1997/06/16 + +%IH:caribou +%P:whudzih +%G:caribou +%OIH:caribou +%C:N +%SF:animals-land +%SN:Rangifer tarandus +%S:JOPA/BRBI/MAGO/EDFR/VESE/JEKO +%UID:000274 +%MD:1999/05/11 + +%IH:cat +%P:boos +%G:cat +%OIH:cat +%C:N +%SN:Felis domesticus +%ETYM:Loan from English {\qf puss}, possibly via Chinook Jargon. +%LOANSOURCE:English +%SF:animals-land +%S:LITM/JOPA/BRBI +%UID:000137 +%MD:1997/12/17 + +%IH:chipmunk +%P:ts'uwhuljos +%G:chipmunk +%OIH:chipmunk +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI +%UID:000146 +%MD:1997/06/16 + +%IH:cougar +%P:booscho +%G:cougar +%OIH:cougar +%SF:animals-land +%SN:Felis concolor +%C:N +%ETYM:Literally, ``big cat'', where {\qc boos} ``cat'' is a loan from English + {\qf puss}, possibly via Chinook Jargon. +%S:JOPA/BRBI +%UID:000050 +%MD:1997/11/14 + +%IH:cow moose +%P:duni'at +%G:cow moose +%OIH:cow moose/moose, cow +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000377 +%MD:1997/11/14 + +%IH:moose, cow +%P:duni'at +%G:cow moose +%OIH:cow moose/moose, cow +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000377 +%MD:1997/11/14 + +%IH:coyote +%P:tintulhi +%G:coyote +%OIH:coyote +%C:N +%SF:animals-land +%SN:Canis latrans +%S:JOPA/BRBI +%R:LITM has chuntulhi. +%UID:000155 +%MD:1997/06/16 + +%IH:deer +%P:yests'e +%G:deer +%OIH:deer +%SF:animals-land +%C:N +%S:LITM/JOPA/BRBI/EDFR +%UID:000132 +%MD:1998/12/16 + +%IH:dry cow moose +%P:dets'it +%G:dry cow moose +%OIH:dry cow moose/moose, dry cow +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000378 +%MD:1997/11/14 + +%IH:moose, dry cow +%P:dets'it +%G:dry cow moose +%OIH:dry cow moose/moose, dry cow +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000378 +%MD:1997/11/14 + +%IH:elk +%P:yezih +%G:elk +%OIH:elk +%SF:animals-land +%C:N +%R:STJA doesn't use this. +%S:JOPA/BRBI +%UID:000382 +%MD:1997/11/14 + +%IH:beaver, female +%P:tsa'at +%G:female beaver +%OIH:beaver, female +%C:N +%SF:animals-land +%S:STJA +%UID:001295 +%MD:1998/12/08 + +%IH:fisher +%P:chunihcho +%G:fisher +%OIH:fisher +%ETYM:``big marten''. +%SF:animals-land +%SN:Martes pennanti +%C:N +%S:JOPA/BRBI/MAGO +%UID:000385 +%MD:2000/06/18 + +%IH:flying squirrel +%P:ts'unalhbuz +%G:flying squirrel +%OIH:flying squirrel +%SF:animals-land +%SN:Glaucomys sabrinus alpinus +%PICTURE:/home/poser/Research/Dakelh/Pictures/psfiles/FlyingSquirrel.ps +%CAPTION:{\qc ts'unulhbuz} --- Flying Squirrel +%PICPERMISSION:N +%PICCREDIT:Drawing of Flying Squirrel from {\it The Mammals of British Columbia\/}. +%C:N +%S:JOPA/BRBI +%UID:000389 +%MD:1997/11/14 + +%IH:fox +%P:nanguz +%G:fox +%OIH:fox +%C:N +%SF:animals-land +%S:MAGO +%UID:000139 +%MD:2001/02/26 + +%IH:grizzly bear +%P:shas +%G:grizzly bear +%OIH:grizzly bear +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI/VESE/EDFR/JEKO +%UID:000039 +%MD:1997/06/12 + +%IH:grizzly bear cub +%P:shasyaz +%G:grizzly bear cub +%OIH:grizzly bear cub/cub, grizzly bear +%C:N +%SF:animals-land +%S:STJA +%UID:002114 +%MD:1999/02/20 + +%IH:cub, grizzly bear +%P:shasyaz +%G:grizzly bear cub +%OIH:grizzly bear cub/cub, grizzly bear +%C:N +%SF:animals-land +%S:STJA +%UID:002114 +%MD:1999/02/20 + +%IH:grizzly bear sow +%P:shas'at +%G:grizzly bear sow +%OIH:grizzly bear sow/sow, grizzly bear +%C:N +%SF:animals-land +%ETYM:``grizzly bear's wife''. +%S:STJA +%UID:002113 +%MD:1999/02/20 + +%IH:sow, grizzly bear +%P:shas'at +%G:grizzly bear sow +%OIH:grizzly bear sow/sow, grizzly bear +%C:N +%SF:animals-land +%ETYM:``grizzly bear's wife''. +%S:STJA +%UID:002113 +%MD:1999/02/20 + +%IH:lynx +%P:wasi +%G:lynx +%OIH:lynx +%C:N +%SF:animals-land +%SN:Felis lynx +%ETYM:Loan from Gitksan {\qf wish}. +%LOANSOURCE:Gitksan +%S:JOPA/BRBI/STJA/EDFR/VESE/JEKO/MAGO +%UID:000049 +%MD:2001/04/20 + +%IH:woodchuck +%P:k'ani +%G:woodchuck +%OIH:woodchuck +%C:N +%SF:animals-land +%SN:Marmota monax +%S:JOPA/BRBI/PEJO +%R:Clarified with Josie and Peter 2001/05/28. +%UID:000391 +%POCKET:Y +%MD:2001/05/28 + +%IH:marmot +%P:dutni +%G:marmot +%OIH:marmot +%SF:animals-land +%C:N +%SN:Marmota caligata +%R:Josie and Peter are not really familiar with marmots but have heard older + people talk about them. +%S:JOPA/PEJO +%UID:000143 +%MD:1998/02/10 + +%IH:marten +%P:chunih +%G:marten +%OIH:marten +%SF:animals-land +%SN:Martes americana +%C:N +%S:JOPA/BRBI/VESE/EDFR/JEKO/MAGO +%UID:000016 +%MD:2001/04/20 + +%IH:mink +%P:telhjoos +%G:mink +%OIH:mink +%C:N +%SF:animals-land +%SN:Mustela vison +%S:LITM/JOPA/BRBI +%UID:000167 +%MD:1997/06/16 + +%IH:moose +%P:duni +%G:moose +%OIH:moose +%C:N +%SF:animals-land +%SN:Alces alces andersoni +%S:LITM-EDFR/JOPA/BRBI +%UID:000346 +%MD:1997/06/18 + +%IH:mouse +%P:dats'ooz +%G:mouse +%OIH:mouse +%SF:animals-land +%C:N +%S:LITM/JOPA/MAGO/VESE/JEKO +%UID:000156 +%MD:2001/01/22 + +%IH:muskrat +%P:tsek'et +%G:muskrat +%OIH:muskrat +%C:N +%SF:animals-land +%SN:Ondatra zibethicus +%S:JOPA/BRBI/STJA/MAGO +%UID:000335 +%MD:1998/12/08 + +%IH:moose, newly sexually mature cow +%P:chanjo +%G:newly sexually mature cow moose +%OIH:moose, newly sexually mature cow +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000379 +%MD:1997/11/14 + +%IH:pack rat +%P:looncho +%G:pack rat +%OIH:pack rat +%C:N +%SF:animals-land +%S:VESE/JEKO/MAGO +%UID:000149 +%MD:1999/05/10 + +%IH:packrat +%P:dlooncho +%G:packrat +%OIH:packrat +%C:N +%SF:animals-land +%S:JOPA +%UID:002701 +%MD:1999/05/11 + +%IH:porcupine +%P:duneza +%G:porcupine +%OIH:porcupine +%SF:animals-land +%C:N +%S:JOPA/BRBI/MAGO +%UID:000388 +%MD:2001/03/06 + +%IH:porcupine +%P:ts'it +%G:porcupine +%OIH:porcupine +%SF:animals-land +%SN:Erethizon dorsatum +%C:N +%ETYM:Perhaps derived from the interjection {\qc ts'it} ``don't touch it!''. +%S:JOPA/BRBI/MAGO/BEMC/STJA +%UID:000387 +%MD:1998/12/08 + +%IH:puppy +%P:lhiyaz +%G:puppy +%OIH:puppy +%C:N +%SF:animals-land +%DUOPLURAL:lhiyazke +%DUOPLURAL:lhikeyaz +%R:Josie prefers {\qc lhikeyaz}. +%S:LITM/BRBI/JOPA/EDFR/MAGO-JEKO +%UID:000182 +%MD:2001/05/26 + +%IH:squirrel +%P:nats'ildelh +%G:Red Squirrel +%OIH:squirrel/Red Squirrel +%SN:Tamiasciurus hudsonicus colum. +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI/STJA +%UID:000034 +%MD:1999/02/17 + +%IH:Red Squirrel +%P:nats'ildelh +%G:Red Squirrel +%OIH:squirrel/Red Squirrel +%SN:Tamiasciurus hudsonicus colum. +%C:N +%SF:animals-land +%S:LITM/JOPA/BRBI/STJA +%UID:000034 +%MD:1999/02/17 + +%IH:rabbit +%P:goh +%G:rabbit +%OIH:rabbit +%C:N +%SF:animals-land +%S:LITM/JOPA/VESE/EDFR/JEKO +%UID:000023 +%MD:1999/05/11 + +%IH:moose, recently weaned calf +%P:ooch'ainischoot +%G:recently weaned calf moose +%OIH:moose, recently weaned calf +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000381 +%MD:1997/11/14 + +%IH:sheep +%P:sbai +%G:sheep +%OIH:sheep +%C:N +%SF:animals-land +%S:MAGO +%UID:001131 +%MD:1998/02/10 + +%IH:sheep +%P:'usbai +%G:sheep +%OIH:sheep +%SF:animals-land +%C:N +%S:JOPA/BRBI +%UID:000375 +%MD:1997/11/14 + +%IH:shrew +%P:'ulhguk +%G:shrew +%OIH:shrew +%SF:animals-land +%C:N +%S:MAGO/VESE/JEKO +%UID:000526 +%MD:2001/01/22 + +%IH:skunk +%P:hoonliz +%G:skunk +%OIH:skunk +%C:N +%P2s:unhoonliz +%SF:animals-land +%S:LITM/JOPA/BRBI/MAGO/VESE/EDFR/JEKO +%UID:000052 +%MD:1997/06/12 + +%IH:weasel +%P:nohbai +%G:weasel +%OIH:weasel +%C:N +%SF:animals-land +%S:JOPA/BRBI/MAGO +%UID:000141 +%MD:1997/06/16 + +%IH:wolf +%P:yus +%G:wolf +%OIH:wolf +%C:N +%SF:animals-land +%SN:Canis lupus +%S:LITM/JOPA/BRBI +%UID:000051 +%MD:1997/06/12 + +%IH:wolverine +%P:noostel +%G:wolverine +%OIH:wolverine +%C:N +%SF:animals-land +%SN:Gulo gulo +%S:JOPA/BRBI/MAGO/VESE/EDFR/JEKO +%UID:000140 +%MD:2001/04/20 + +%IH:beaver, young +%P:tsatsul +%G:young beaver +%OIH:beaver, young +%SF:animals-land +%C:N +%S:JOPA/BRBI/STJA +%UID:000384 +%MD:1998/12/08 + +%IH:beaver dam +%P:lht'at +%G:beaver dam +%OIH:beaver dam/dam, beaver +%C:N +%SF:animals-misc +%S:STJA +%UID:001287 +%MD:1998/12/08 + +%IH:dam, beaver +%P:lht'at +%G:beaver dam +%OIH:beaver dam/dam, beaver +%C:N +%SF:animals-misc +%S:STJA +%UID:001287 +%MD:1998/12/08 + +%IH:beaver dam +%P:'ulh +%G:beaver dam +%OIH:beaver dam/dam, beaver +%C:N +%SF:animals-misc +%S:STJA +%UID:001288 +%MD:1998/12/08 + +%IH:dam, beaver +%P:'ulh +%G:beaver dam +%OIH:beaver dam/dam, beaver +%C:N +%SF:animals-misc +%S:STJA +%UID:001288 +%MD:1998/12/08 + +%IH:beaver lodge +%P:tsaken +%G:beaver lodge +%OIH:beaver lodge +%C:N +%SF:animals-misc +%S:JOPA/BRBI/STJA +%UID:000405 +%MD:1998/12/08 + +%IH:beaver path under the ice +%P:tunyohtsati +%G:beaver path under the ice +%OIH:beaver path under the ice +%C:N +%SF:animals-misc +%S:JOPA/EDFR +%UID:003769 +%POCKET:Y +%MD:2001/02/13 + +%IH:black bear den +%P:sus'an +%G:black bear den +%OIH:black bear den +%C:N +%SF:animals-misc +%S:LITM/STJA +%UID:000131 +%MD:1998/12/08 + +%IH:tracks, grizzly bear +%P:shask'oh +%G:grizzly bear tracks +%OIH:tracks, grizzly bear +%C:N +%SF:animals-misc +%S:MAGO +%UID:001132 +%MD:1998/02/10 + +%IH:leech +%P:hoolht'ukw +%G:leech +%OIH:leech +%SF:animals-misc +%C:N +%S:JOPA/PEJO/EDFR +%UID:003410 +%POCKET:Y +%MD:2000/11/01 + +%IH:leech +%P:hoot'ub +%G:leech +%OIH:leech +%SF:bugs +%C:N +%S:JOPA/BRBI/MAGO +%UID:000370 +%MD:2000/11/01 + +%IH:moose tracks +%P:dunik'oh +%G:moose tracks +%OIH:moose tracks +%C:N +%SF:animals-misc +%S:PEJO/JOPA +%ES:000491 +%UID:003121 +%POCKET:Y +%MD:2000/09/28 + +%IH:tracks, rabbit +%P:gohk'oh +%G:rabbit tracks +%OIH:tracks, rabbit +%C:N +%SF:animals-misc +%S:LITM +%UID:000073 +%MD:1997/06/12 + +%IH:beaver +%P:tsa +%G:beaver +%OIH:beaver +%C:N +%SN:Castor canadensis +%UID:000044 +%SF:animals-water +%S:JOPA/BRBI/STJA/EDFR/VESE/JEKO/MAGO +%MD:2001/04/18 + +%IH:kit, beaver +%P:tsayaz +%G:beaver kit +%OIH:kit, beaver/beaver, baby +%SF:animals-water +%C:N +%S:STJA +%UID:001294 +%MD:2000/06/18 + +%IH:beaver, baby +%P:tsayaz +%G:beaver kit +%OIH:kit, beaver/beaver, baby +%SF:animals-water +%C:N +%S:STJA +%UID:001294 +%MD:2000/06/18 + +%IH:beaver, big +%P:tsati +%G:big beaver, old beaver +%OIH:beaver, big/beaver, old +%C:N +%SF:animals-water +%S:LITM/JOPA/BRBI/STJA +%UID:000206 +%MD:1998/12/08 + +%IH:beaver, old +%P:tsati +%G:big beaver, old beaver +%OIH:beaver, big/beaver, old +%C:N +%SF:animals-water +%S:LITM/JOPA/BRBI/STJA +%UID:000206 +%MD:1998/12/08 + +%IH:otter +%P:tsis +%G:otter +%OIH:otter +%SF:animals-water +%SN:Lutra canadensis +%C:N +%S:JOPA/BRBI +%UID:000386 +%MD:1997/11/14 + +%IH:crow +%P:datsan +%G:American Crow +%C:N +%SF:bird-gen +%SN:Corvus brachyrhynchos +%OIH:crow/American Crow +%S:LITM/PEJO +%UID:000158 +%MD:2000/10/21 + +%IH:American Crow +%P:datsan +%G:American Crow +%C:N +%SF:bird-gen +%SN:Corvus brachyrhynchos +%OIH:crow/American Crow +%S:LITM/PEJO +%UID:000158 +%MD:2000/10/21 + +%IH:Robin, American +%P:sewh +%G:American Robin +%OIH:Robin, American +%SN:Turdus migratorius +%C:N +%SF:bird-gen +%S:LITM/JOPA/BRBI/PEJO +%UID:000181 +%MD:2000/10/21 + +%IH:Bald Eagle +%P:tsebalyan +%G:Bald Eagle +%OIH:Bald Eagle +%C:N +%SF:bird-gen +%SN:Haliaeetus leucocephalus +%S:LITM/JOPA/BRBI +%UID:000150 +%MD:1997/06/16 + +%IH:bird +%P:dut'ai +%G:bird, duck +%OIH:bird/duck +%C:N +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO/STJA/PEJO +%UID:000081 +%MD:2000/09/28 + +%IH:duck +%P:dut'ai +%G:bird, duck +%OIH:bird/duck +%C:N +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO/STJA/PEJO +%UID:000081 +%MD:2000/09/28 + +%IH:crane +%P:delh +%G:crane +%OIH:crane +%C:N +%SF:bird-gen +%S:LITM +%UID:000255 +%MD:1997/06/16 + +%IH:goose +%P:khoh +%G:goose +%OIH:goose +%C:N +%P1s:skhoh +%P2s:nkhoh +%P1p:nekhoh +%POSS:khoh +%SF:bird-gen +%S:JOPA/BRBI/MAGO/VESE/EDFR/JEKO +%UID:000031 +%MD:2001/02/15 + +%IH:hummingbird +%P:ts'unalhduz +%G:hummingbird +%OIH:hummingbird +%C:N +%SF:bird-gen +%S:LITM/BRBI/JOPA +%UID:000242 +%MD:1997/06/16 + +%IH:bird, little +%P:gagiyaz +%G:little bird +%OIH:bird, little +%C:N +%QCHECK:Any little bird? +%SF:bird-gen +%S:PEJO +%UID:003115 +%POCKET:Y +%MD:2000/09/28 + +%IH:bird, little +%P:dut'aiyaz +%G:little bird +%OIH:bird, little +%C:N +%SF:bird-gen +%S:STJA/JOPA/EDFR/VESE/PEJO +%UID:001818 +%MD:2000/09/28 + +%IH:loon +%P:dadzi +%G:loon +%OIH:loon +%SF:bird-gen +%SN:Gavia immer +%C:N +%S:LITM/JOPA/BRBI +%UID:000020 +%MD:1997/06/12 + +%IH:Mallard Duck +%P:t'ugicho +%G:Mallard Duck +%OIH:Mallard Duck +%C:N +%SN:Anas platyrhynchos +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO/VESE/EDFR/JEKO +%UID:000041 +%MD:1999/05/11 + +%IH:owl +%P:musdzoon +%G:owl +%OIH:owl +%C:N +%SF:bird-gen +%S:LITM/BRBI/JOPA/MAGO +%UID:000135 +%MD:1997/12/11 + +%IH:Red-Necked Grebe +%P:ts'olh +%G:Red-necked Grebe +%MN:A variety of duck locally known as the Helldiver. +%OIH:Red-Necked Grebe/Helldiver/Grebe, Red-Necked +%SN:Podiceps grisegena +%SF:bird-gen +%C:N +%S:BRBI/JOPA +%UID:000263 +%MD:2001/03/08 + +%IH:Helldiver +%P:ts'olh +%G:Red-necked Grebe +%MN:A variety of duck locally known as the Helldiver. +%OIH:Red-Necked Grebe/Helldiver/Grebe, Red-Necked +%SN:Podiceps grisegena +%SF:bird-gen +%C:N +%S:BRBI/JOPA +%UID:000263 +%MD:2001/03/08 + +%IH:Grebe, Red-Necked +%P:ts'olh +%G:Red-necked Grebe +%MN:A variety of duck locally known as the Helldiver. +%OIH:Red-Necked Grebe/Helldiver/Grebe, Red-Necked +%SN:Podiceps grisegena +%SF:bird-gen +%C:N +%S:BRBI/JOPA +%UID:000263 +%MD:2001/03/08 + +%IH:Ruffed grouse +%P:'utsut +%G:Ruffed grouse +%OIH:Ruffed grouse +%C:N +%SF:bird-gen +%S:LITM +%UID:000218 +%MD:1997/06/16 + +%IH:Spruce Grouse +%P:nat'oh +%G:Spruce Grouse, Fool Hen +%OIH:Spruce Grouse/Grouse, Spruce/Fool Hen +%SF:bird-gen +%SN:Dendragapus canadensis +%C:N +%S:MAGO/LITM +%UID:000539 +%MD:1997/12/04 + +%IH:Grouse, Spruce +%P:nat'oh +%G:Spruce Grouse, Fool Hen +%OIH:Spruce Grouse/Grouse, Spruce/Fool Hen +%SF:bird-gen +%SN:Dendragapus canadensis +%C:N +%S:MAGO/LITM +%UID:000539 +%MD:1997/12/04 + +%IH:Fool Hen +%P:nat'oh +%G:Spruce Grouse, Fool Hen +%OIH:Spruce Grouse/Grouse, Spruce/Fool Hen +%SF:bird-gen +%SN:Dendragapus canadensis +%C:N +%S:MAGO/LITM +%UID:000539 +%MD:1997/12/04 + +%IH:Steller's Jay +%P:tehgwuzeh +%G:Steller's Jay, commonly known locally as ``bluejay''. +%OIH:Steller's Jay/jay, Steller's/Bluejay (Steller's Jay) +%SF:bird-gen +%SN:Cyanocitta stelleri +%C:N +%S:JOPA/BRBI +%UID:000356 +%MD:1997/11/14 + +%IH:jay, Steller's +%P:tehgwuzeh +%G:Steller's Jay, commonly known locally as ``bluejay''. +%OIH:Steller's Jay/jay, Steller's/Bluejay (Steller's Jay) +%SF:bird-gen +%SN:Cyanocitta stelleri +%C:N +%S:JOPA/BRBI +%UID:000356 +%MD:1997/11/14 + +%IH:Bluejay (Steller's Jay) +%P:tehgwuzeh +%G:Steller's Jay, commonly known locally as ``bluejay''. +%OIH:Steller's Jay/jay, Steller's/Bluejay (Steller's Jay) +%SF:bird-gen +%SN:Cyanocitta stelleri +%C:N +%S:JOPA/BRBI +%UID:000356 +%MD:1997/11/14 + +%IH:sandpiper +%P:wedlew +%G:sandpiper +%OIH:sandpiper +%C:N +%SN:Eremophila alpestris et sim. +%SF:bird-gen +%S:LITM +%UID:000237 +%MD:2002/07/19 + +%IH:seagull +%P:besk'i +%G:seagull +%OIH:seagull +%C:N +%SN:Larus species +%SF:bird-gen +%S:LITM +%UID:000136 +%MD:2002/07/19 + +%IH:swan +%P:ts'incho +%G:swan +%OIH:swan +%C:N +%SF:bird-gen +%S:LITM +%UID:000222 +%MD:1997/06/16 + +%IH:Tree Swallow +%P:'uschas +%G:Tree Swallow +%OIH:Tree Swallow +%SF:bird-gen +%SN:Tachycineta bicolor +%C:N +%S:MAGO +%UID:000535 +%MD:1997/11/22 + +%IH:Whiskey Jack +%P:gwuzeh +%G:Whiskey Jack, Gray Jay, Canadian Jay +%OIH:Whiskey Jack/Jay, Gray/Jay, Canadian +%C:N +%SN:Perisoreus canadensis +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO +%UID:000148 +%MD:1997/11/22 + +%IH:Jay, Gray +%P:gwuzeh +%G:Whiskey Jack, Gray Jay, Canadian Jay +%OIH:Whiskey Jack/Jay, Gray/Jay, Canadian +%C:N +%SN:Perisoreus canadensis +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO +%UID:000148 +%MD:1997/11/22 + +%IH:Jay, Canadian +%P:gwuzeh +%G:Whiskey Jack, Gray Jay, Canadian Jay +%OIH:Whiskey Jack/Jay, Gray/Jay, Canadian +%C:N +%SN:Perisoreus canadensis +%SF:bird-gen +%S:LITM/JOPA/BRBI/MAGO +%UID:000148 +%MD:1997/11/22 + +%IH:woodpecker +%P:chundulkw'uz +%G:woodpecker +%OIH:woodpecker +%C:N +%SF:bird-gen +%S:JOPA/BRBI/STJA +%UID:000138 +%MD:1999/03/31 + +%IH:nest +%P:-t'o +%G:nest +%OIH:nest +%C:N +%Pind:'ut'o +%P3s:but'o +%Pref:dut'o +%SF:bird-misc/bugs +%S:STJA/PEJO/JOPA/BRBI/EDFR +%ES:001353 +%UID:000226 +%MD:2001/03/07 + +%IH:eye, a single +%P:-nak'uz +%G:a single eye +%OIH:eye, a single +%C:N +%SF:body-ext +%S:JOPA/EDFR +%ES:000457 +%UID:003770 +%POCKET:Y +%MD:2001/02/13 + +%IH:ankle +%P:-kechunoh +%G:ankle +%OIH:ankle +%P1s:skechunoh +%P2s:nkechunoh +%C:N +%S:MAGO/STJA +%SF:body-ext +%UID:000865 +%MD:1999/03/03 + +%IH:antler +%P:-de +%G:antler, horn +%OIH:antler/horn +%C:N +%SF:body-ext +%P3s:bude +%S:STJA +%UID:002266 +%MD:1999/03/02 + +%IH:horn +%P:-de +%G:antler, horn +%OIH:antler/horn +%C:N +%SF:body-ext +%P3s:bude +%S:STJA +%UID:002266 +%MD:1999/03/02 + +%IH:velvet, antler +%P:-de_zu_s +%G:antler velvet +%OIH:velvet, antler +%C:N +%SF:body-ext +%P3s:bude_zu_s +%S:STJA +%UID:002267 +%MD:1999/03/02 + +%IH:anus +%P:-tsul +%G:anus, asshole +%OIH:anus/asshole +%C:N +%P1s:stsul +%SF:body-ext +%S:STJA +%UID:002171 +%MD:1999/02/23 + +%IH:asshole +%P:-tsul +%G:anus, asshole +%OIH:anus/asshole +%C:N +%P1s:stsul +%SF:body-ext +%S:STJA +%UID:002171 +%MD:1999/02/23 + +%IH:arm +%P:-gan +%G:arm +%OIH:arm +%P1s:sgan +%P2s:ngan +%Pref:dugan +%C:N +%S:LITM/MAGO/STJA/JOPA/VESE/EDFR/JEKO +%SF:body-ext +%UID:000863 +%MD:1999/02/22 + +%IH:armpit +%P:-chak'ests'oh +%G:armpit +%OIH:armpit +%P1s:schak'ests'oh +%C:N +%S:MAGO +%UID:000859 +%SF:body-ext +%MD:1997/12/11 + +%IH:back (of body) +%P:-t'ak +%G:back (of body) +%OIH:back (of body) +%P1s:st'ak +%P3s:but'ak +%C:N +%S:MAGO/EDFR/VESE/JEKO +%SF:body-ext +%UID:000899 +%MD:1997/12/11 + +%IH:back of hand +%P:-lat'ak +%G:back of hand +%OIH:back of hand +%P1s:slat'ak +%C:N +%S:MAGO +%SF:body-ext +%UID:000871 +%MD:1997/12/11 + +%IH:beaver paws +%P:tsake +%G:beaver paws +%OIH:beaver paws +%C:N +%SF:body-ext +%S:LITM-EDFR +%UID:000329 +%MD:1997/06/18 + +%IH:beaver tail +%P:tsache +%G:beaver tail +%OIH:beaver tail +%C:N +%SF:body-ext +%S:LITM +%UID:000207 +%MD:1997/06/16 + +%IH:belly +%P:-but +%G:belly +%OIH:belly +%P1s:sbut +%C:N +%S:MAGO +%SF:body-ext +%UID:000937 +%MD:1997/12/11 + +%IH:breast +%P:-ts'oo +%G:breast +%OIH:breast +%P1s:sts'oo +%C:N +%S:MAGO +%UID:000855 +%SF:body-ext +%MD:1997/12/11 + +%IH:bum +%P:-tl'a +%G:bum, buttocks +%OIH:bum/buttocks +%P1s:stl'a +%C:N +%S:MAGO +%SF:body-ext +%UID:000936 +%MD:1997/12/11 + +%IH:buttocks +%P:-tl'a +%G:bum, buttocks +%OIH:bum/buttocks +%P1s:stl'a +%C:N +%S:MAGO +%SF:body-ext +%UID:000936 +%MD:1997/12/11 + +%IH:calf of leg +%P:-kechunch'ooz +%G:calf of leg +%OIH:calf of leg +%C:N +%SF:body-ext +%S:JOPA/EDFR +%UID:004458 +%POCKET:Y +%MD:2001/04/20 + +%IH:cheek +%P:-nembus +%G:cheek +%OIH:cheek +%P1s:snimbus +%C:N +%S:MAGO/JOPA/BRBI +%SF:body-ext +%UID:000889 +%MD:1997/12/11 + +%IH:chest +%P:-yoh +%G:chest +%OIH:chest +%C:N +%SF:body-ext +%S:JOPA/EDFR +%ES:000660 +%UID:003777 +%POCKET:Y +%MD:2001/02/13 + +%IH:chin +%P:-yeda' +%G:chin +%OIH:chin +%P1s:syeda' +%C:N +%S:MAGO +%SF:body-ext +%UID:000882 +%MD:1997/12/11 + +%IH:cranial fontanelle +%P:-tsidakwhudutle +%G:cranial fontanelle, baby's soft spot +%OIH:cranial fontanelle/baby's soft spot +%C:N +%P3s:butsidakwhudutle +%S:MAGO +%SF:body-ext +%UID:000898 +%MD:1997/12/11 + +%IH:baby's soft spot +%P:-tsidakwhudutle +%G:cranial fontanelle, baby's soft spot +%OIH:cranial fontanelle/baby's soft spot +%C:N +%P3s:butsidakwhudutle +%S:MAGO +%SF:body-ext +%UID:000898 +%MD:1997/12/11 + +%IH:ear +%P:-dzo +%G:ear +%OIH:ear +%MN:This refers to the ear considered as a whole, especially the exterior. + When the canal in particular is referred to, one uses {\qc -dzek}, q.v. +%C:N +%P1s:sdzo +%S:MAGO +%SF:body-ext +%UID:000879 +%MD:1997/12/11 + +%IH:earlobe +%P:-dzobal +%G:earlobe +%OIH:earlobe +%C:N +%P1s:sdzobal +%SF:body-ext +%S:BRBI/MAGO +%UID:000641 +%MD:1997/12/17 + +%IH:elbow +%P:-nints'uzti +%G:elbow +%OIH:elbow +%P1s:snints'uzti +%C:N +%S:MAGO +%SF:body-ext +%UID:000916 +%MD:1997/12/11 + +%IH:eye +%P:-na +%G:eye +%OIH:eye +%P1s:sna +%P3s:buna +%C:N +%S:MAGO/JOPA/EDFR +%SF:body-ext +%UID:000891 +%MD:1998/12/18 + +%IH:eye socket +%P:-nak'et +%G:eye socket +%OIH:eye socket +%P1s:snak'et +%C:N +%S:MAGO +%SF:body-ext +%UID:000892 +%MD:1997/12/11 + +%IH:eyebrow +%P:-nach'usdooz +%G:eyebrow +%OIH:eyebrow +%P1s:snach'usdooz +%C:N +%S:MAGO +%SF:body-ext +%UID:000896 +%MD:1997/12/11 + +%IH:eyelash +%P:-nalusgha +%G:eyelash +%OIH:eyelash +%P1s:snalusgha +%C:N +%S:MAGO +%SF:body-ext +%UID:000895 +%MD:1997/12/11 + +%IH:eyelid +%P:-nalus +%G:eyelid +%OIH:eyelid +%P1s:snalus +%C:N +%S:MAGO +%SF:body-ext +%UID:000894 +%MD:1997/12/11 + +%IH:face +%P:-nen +%G:face +%OIH:face +%P1s:snen +%P2s:nyunen +%P3s:bunen +%C:N +%S:MAGO/PEJO/STJA/JOPA/VESE/EDFR +%SF:body-ext +%ES:000369 +%UID:000890 +%MD:2001/04/20 + +%IH:feather +%P:ts'uz +%G:feather, down +%OIH:feather/down +%C:N +%SF:body-ext +%S:LITM/STJA/PEJO +%UID:000271 +%MD:2000/10/16 + +%IH:down +%P:ts'uz +%G:feather, down +%OIH:feather/down +%C:N +%SF:body-ext +%S:LITM/STJA/PEJO +%UID:000271 +%MD:2000/10/16 + +%IH:feathers +%P:dut'aits'uz +%G:feathers, down +%OIH:feathers/down +%C:N +%SF:body-ext +%S:STJA +%UID:002647 +%MD:2001/02/27 + +%IH:down +%P:dut'aits'uz +%G:feathers, down +%OIH:feathers/down +%C:N +%SF:body-ext +%S:STJA +%UID:002647 +%MD:2001/02/27 + +%IH:finger other than thumb or pinkie +%P:-lasge +%G:finger other than thumb or pinkie +%OIH:finger other than thumb or pinkie +%P1s:slasge +%C:N +%S:MAGO/STJA/JOPA/PEJO/EDFR +%SF:body-ext +%UID:000869 +%MD:2000/11/01 + +%IH:fingernails +%P:-lagui +%G:fingernails, claws of forepaws +%OIH:fingernails/claws of forepaws +%P1s:slagui +%C:N +%S:MAGO +%SF:body-ext +%UID:000875 +%MD:1997/12/11 + +%IH:claws of forepaws +%P:-lagui +%G:fingernails, claws of forepaws +%OIH:fingernails/claws of forepaws +%P1s:slagui +%C:N +%S:MAGO +%SF:body-ext +%UID:000875 +%MD:1997/12/11 + +%IH:foot +%P:-ke +%G:foot +%OIH:foot +%C:N +%P1s:ske +%Pref:duke +%S:MAGO/STJA/JOPA/VESE/EDFR/JEKO +%UID:000851 +%SF:body-ext +%MD:1999/05/11 + +%IH:hair +%P:-gha +%G:hair +%MN:This refers to hair in general and where no more specific term exists, as on the + arms and chest. It is not used to refer to the hair of the head, for which the + more specific term {\qc -tsigha} is always used. +%OIH:hair +%C:N +%S:MAGO +%SF:body-ext +%UID:000888 +%MD:1997/12/11 + +%IH:hair of the head +%P:-tsigha +%G:hair of the head +%OIH:hair of the head +%P1s:stsigha +%P2s:ntsigha +%P3s:butsigha +%C:N +%S:MAGO/LITM/PEJO +%SF:body-ext +%UID:000887 +%MD:2000/10/20 + +%IH:hand +%P:-la +%G:hand +%OIH:hand +%P1s:sla +%P2s:nla +%C:N +%S:MAGO/STJA +%SF:body-ext +%POCKET:Y +%UID:000866 +%MD:1999/02/17 + +%IH:head +%P:-tsi +%G:head +%OIH:head +%Pref:dutsi +%C:N +%SF:body-ext +%S:STJA +%UID:002965 +%POCKET:Y +%MD:1999/06/24 + +%IH:heel +%P:-kelatsul +%G:heel +%OIH:heel +%P1s:skelatsul +%C:N +%S:MAGO +%SF:body-ext +%UID:000917 +%MD:1997/12/11 + +%IH:hip +%P:-k'ui +%G:hip +%OIH:hip +%P1s:sk'ui +%C:N +%S:MAGO/JOPA +%SF:body-ext +%UID:000923 +%MD:2001/03/15 + +%IH:knee +%P:-gwut +%G:knee +%OIH:knee +%P1s:sgwut +%C:N +%S:MAGO +%SF:body-ext +%UID:000933 +%MD:1997/12/11 + +%IH:kneecap +%P:-gwutlasi'ai +%G:kneecap +%OIH:kneecap +%P1s:sgwutlasi'ai +%R:has something to do with floating at tip of knee +%C:N +%S:MAGO +%SF:body-ext +%UID:000925 +%MD:1997/12/11 + +%IH:knuckles at boundary between hand and fingers +%P:-langwut +%G:knuckles at boundary between hand and fingers +%OIH:knuckles at boundary between hand and fingers +%P1s:slangwut +%SF:body-ext +%C:N +%S:JOPA/BRBI +%UID:000967 +%MD:1997/12/17 + +%IH:leg +%P:-kechun +%G:leg +%OIH:leg +%P1s:skechun +%C:N +%S:MAGO +%UID:000852 +%SF:body-ext +%MD:1997/12/11 + diff --git a/test/zeroe0.awk b/test/zeroe0.awk new file mode 100644 index 0000000..5dc9c6b --- /dev/null +++ b/test/zeroe0.awk @@ -0,0 +1,40 @@ +# From sbohdjal@matrox.com Tue Dec 31 11:41:25 2002 +# Return-Path: <sbohdjal@matrox.com> +# X-From_: sbohdjal@matrox.com Mon Dec 30 17:34:41 2002 +# Message-Id: <4.3.1.1.20021230101824.00fc4bd8@mailbox.matrox.com> +# Date: Mon, 30 Dec 2002 10:33:10 -0500 +# To: bug-gawk@gnu.org +# From: Serge Bohdjalian <sbohdjal@matrox.com> +# Subject: GAWK 3.1.1 bug, DJGPP port +# +# When I run the following AWK file... +# +BEGIN { + $0 = "00E0"; + print $0 ", " ($0 && 1) ", " ($0 != ""); + $1 = "00E0"; + print $1 ", " ($1 && 1) ", " ($1 != ""); +} +# +# With the SimTel version of GAWK 3.1.1 for Windows (downloadable from +# ftp://ftp.cdrom.com/pub/simtelnet/gnu/djgpp/v2gnu/), I get the following +# output... +# +# 00E0, 0, 1 +# 00E0, 1, 1 +# +# With the Cygwin version of GAWK 3.1.1 for Windows, I get... +# +# 00E0, 1, 1 +# 00E0, 1, 1 +# +# As far as I know, if "$0" isn't blank, the value of "($0 && 1)" should be +# "1" (true). I get the same problem if I substitute "00E0" with "00E1" to +# "00E9". Other strings don't have have this problem (for example, "00EA"). +# The problem occurs whether I use file input or whether I manually assign +# "$0" (as above). +# +# The problem is also discussed in a comp.lang.awk posting ("Bug in GAWK +# 3.1.1?", Dec. 27, 2002). +# +# -Serge diff --git a/test/zeroe0.ok b/test/zeroe0.ok new file mode 100644 index 0000000..cdf28fb --- /dev/null +++ b/test/zeroe0.ok @@ -0,0 +1,2 @@ +00E0, 1, 1 +00E0, 1, 1 diff --git a/test/zeroflag.awk b/test/zeroflag.awk new file mode 100644 index 0000000..526ed0e --- /dev/null +++ b/test/zeroflag.awk @@ -0,0 +1 @@ +BEGIN { printf("%2.1d---%02.1d\n", 2, 2) } diff --git a/test/zeroflag.ok b/test/zeroflag.ok new file mode 100644 index 0000000..937c0ed --- /dev/null +++ b/test/zeroflag.ok @@ -0,0 +1 @@ + 2--- 2 |