Initial import to Tizen 01/1601/1 1.0 2.0alpha accepted/tizen/ivi/genivi accepted/tizen/ivi/stable accepted/tizen_ivi_panda tizen_3.0.m14.2_ivi tizen_ivi_genivi tizen_ivi_panda 1.0_branch accepted/tizen/20130815.171132 accepted/tizen/ivi/genivi/20140131.070835 accepted/tizen/ivi/panda/20140403.015739 accepted/tizen_ivi_stable/20131116.012022 accepted/trunk/20120904.165830 ivi_oct_m2 submit/tizen/20130815.171421 submit/tizen_ivi_generic/20140131.065509 submit/tizen_ivi_genivi/20140131.070652 submit/tizen_ivi_milestone/20131113.054528 submit/tizen_ivi_panda/20140403.012236 submit/tizen_ivi_stable/20131116.010135 submit/trunk/20120831.214909 tizen_3.0.m14.2_ivi_release
authorJimmy Huang <jimmy.huang@linux.intel.com>
Fri, 31 Aug 2012 21:48:34 +0000 (14:48 -0700)
committerJimmy Huang <jimmy.huang@linux.intel.com>
Fri, 31 Aug 2012 21:48:34 +0000 (14:48 -0700)
Signed-off-by: Jimmy Huang <jimmy.huang@linux.intel.com>
436 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
autogen.sh [new file with mode: 0755]
config.guess [new file with mode: 0755]
config.rpath [new file with mode: 0755]
config.sub [new file with mode: 0755]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
depcomp [new file with mode: 0755]
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/args2man.pl [new file with mode: 0755]
doc/doxyfile.in [new file with mode: 0644]
doc/sphinx_cepview.1.in [new file with mode: 0644]
doc/sphinx_cont_adseg.1 [new file with mode: 0644]
doc/sphinx_cont_fileseg.1 [new file with mode: 0644]
doc/sphinx_fe.1.in [new file with mode: 0644]
doc/sphinx_lm_sort.1 [new file with mode: 0644]
doc/sphinx_pitch.1.in [new file with mode: 0644]
group/ABLD.BAT [new file with mode: 0644]
group/bld.inf [new file with mode: 0644]
group/sphinxbase.mmp [new file with mode: 0644]
include/Makefile.am [new file with mode: 0644]
include/Makefile.in [new file with mode: 0644]
include/android/config.h [new file with mode: 0644]
include/android/sphinx_config.h [new file with mode: 0644]
include/config.h.in [new file with mode: 0644]
include/s60/config.h [new file with mode: 0644]
include/s60/sphinx_config.h [new file with mode: 0644]
include/sphinx_config.h [new file with mode: 0644]
include/sphinx_config.h.in [new file with mode: 0644]
include/sphinxbase/Makefile.am [new file with mode: 0644]
include/sphinxbase/Makefile.in [new file with mode: 0644]
include/sphinxbase/ad.h [new file with mode: 0644]
include/sphinxbase/agc.h [new file with mode: 0644]
include/sphinxbase/bio.h [new file with mode: 0644]
include/sphinxbase/bitvec.h [new file with mode: 0644]
include/sphinxbase/byteorder.h [new file with mode: 0644]
include/sphinxbase/case.h [new file with mode: 0644]
include/sphinxbase/ckd_alloc.h [new file with mode: 0644]
include/sphinxbase/clapack_lite.h [new file with mode: 0644]
include/sphinxbase/cmd_ln.h [new file with mode: 0644]
include/sphinxbase/cmn.h [new file with mode: 0644]
include/sphinxbase/cont_ad.h [new file with mode: 0644]
include/sphinxbase/err.h [new file with mode: 0644]
include/sphinxbase/f2c.h [new file with mode: 0644]
include/sphinxbase/fe.h [new file with mode: 0644]
include/sphinxbase/feat.h [new file with mode: 0644]
include/sphinxbase/filename.h [new file with mode: 0644]
include/sphinxbase/fixpoint.h [new file with mode: 0644]
include/sphinxbase/fsg_model.h [new file with mode: 0644]
include/sphinxbase/genrand.h [new file with mode: 0644]
include/sphinxbase/glist.h [new file with mode: 0644]
include/sphinxbase/hash_table.h [new file with mode: 0644]
include/sphinxbase/heap.h [new file with mode: 0644]
include/sphinxbase/huff_code.h [new file with mode: 0644]
include/sphinxbase/info.h [new file with mode: 0644]
include/sphinxbase/jsgf.h [new file with mode: 0644]
include/sphinxbase/libutil.h [new file with mode: 0644]
include/sphinxbase/listelem_alloc.h [new file with mode: 0644]
include/sphinxbase/logmath.h [new file with mode: 0644]
include/sphinxbase/matrix.h [new file with mode: 0644]
include/sphinxbase/mmio.h [new file with mode: 0644]
include/sphinxbase/mulaw.h [new file with mode: 0644]
include/sphinxbase/ngram_model.h [new file with mode: 0644]
include/sphinxbase/pio.h [new file with mode: 0644]
include/sphinxbase/prim_type.h [new file with mode: 0644]
include/sphinxbase/profile.h [new file with mode: 0644]
include/sphinxbase/sbthread.h [new file with mode: 0644]
include/sphinxbase/sphinxbase_export.h [new file with mode: 0644]
include/sphinxbase/strfuncs.h [new file with mode: 0644]
include/sphinxbase/unlimit.h [new file with mode: 0644]
include/sphinxbase/yin.h [new file with mode: 0644]
include/win32/config.h [new file with mode: 0644]
include/win32/sphinx_config.h [new file with mode: 0644]
include/wince/config.h [new file with mode: 0644]
include/wince/sphinx_config.h [new file with mode: 0644]
install-sh [new file with mode: 0755]
ltmain.sh [new file with mode: 0755]
m4/iconv.m4 [new file with mode: 0644]
m4/lib-ld.m4 [new file with mode: 0644]
m4/lib-link.m4 [new file with mode: 0644]
m4/lib-prefix.m4 [new file with mode: 0644]
m4/libtool.m4 [new file with mode: 0644]
m4/ltoptions.m4 [new file with mode: 0644]
m4/ltsugar.m4 [new file with mode: 0644]
m4/ltversion.m4 [new file with mode: 0644]
m4/lt~obsolete.m4 [new file with mode: 0644]
m4/pkg.m4 [new file with mode: 0644]
missing [new file with mode: 0755]
packaging/sphinxbase.changes [new file with mode: 0644]
packaging/sphinxbase.spec [new file with mode: 0644]
python/Makefile.am [new file with mode: 0644]
python/Makefile.in [new file with mode: 0644]
python/hufftest2.py [new file with mode: 0644]
python/sb_test.py [new file with mode: 0644]
python/setup.py.in [new file with mode: 0644]
python/setup_win32.py [new file with mode: 0644]
python/sphinxbase.c [new file with mode: 0644]
python/sphinxbase.pxd [new file with mode: 0644]
python/sphinxbase.pyx [new file with mode: 0644]
sphinxbase.pc.in [new file with mode: 0644]
sphinxbase.sln [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/libsphinxad/Makefile.am [new file with mode: 0644]
src/libsphinxad/Makefile.in [new file with mode: 0644]
src/libsphinxad/ad_alsa.c [new file with mode: 0644]
src/libsphinxad/ad_base.c [new file with mode: 0644]
src/libsphinxad/ad_oss.c [new file with mode: 0644]
src/libsphinxad/ad_s60.cpp [new file with mode: 0644]
src/libsphinxad/cont_ad_base.c [new file with mode: 0644]
src/libsphinxad/play_win32.c [new file with mode: 0644]
src/libsphinxad/rec_win32.c [new file with mode: 0644]
src/libsphinxbase/Makefile.am [new file with mode: 0644]
src/libsphinxbase/Makefile.in [new file with mode: 0644]
src/libsphinxbase/fe/Makefile.am [new file with mode: 0644]
src/libsphinxbase/fe/Makefile.in [new file with mode: 0644]
src/libsphinxbase/fe/fe_interface.c [new file with mode: 0644]
src/libsphinxbase/fe/fe_internal.h [new file with mode: 0644]
src/libsphinxbase/fe/fe_sigproc.c [new file with mode: 0644]
src/libsphinxbase/fe/fe_warp.c [new file with mode: 0644]
src/libsphinxbase/fe/fe_warp.h [new file with mode: 0644]
src/libsphinxbase/fe/fe_warp_affine.c [new file with mode: 0644]
src/libsphinxbase/fe/fe_warp_affine.h [new file with mode: 0644]
src/libsphinxbase/fe/fe_warp_inverse_linear.c [new file with mode: 0644]
src/libsphinxbase/fe/fe_warp_inverse_linear.h [new file with mode: 0644]
src/libsphinxbase/fe/fe_warp_piecewise_linear.c [new file with mode: 0644]
src/libsphinxbase/fe/fe_warp_piecewise_linear.h [new file with mode: 0644]
src/libsphinxbase/fe/fixlog.c [new file with mode: 0644]
src/libsphinxbase/fe/yin.c [new file with mode: 0644]
src/libsphinxbase/feat/Makefile.am [new file with mode: 0644]
src/libsphinxbase/feat/Makefile.in [new file with mode: 0644]
src/libsphinxbase/feat/agc.c [new file with mode: 0644]
src/libsphinxbase/feat/cmn.c [new file with mode: 0644]
src/libsphinxbase/feat/cmn_prior.c [new file with mode: 0644]
src/libsphinxbase/feat/feat.c [new file with mode: 0644]
src/libsphinxbase/feat/lda.c [new file with mode: 0644]
src/libsphinxbase/lm/Makefile.am [new file with mode: 0644]
src/libsphinxbase/lm/Makefile.in [new file with mode: 0644]
src/libsphinxbase/lm/_jsgf_scanner.l [new file with mode: 0644]
src/libsphinxbase/lm/fsg_model.c [new file with mode: 0644]
src/libsphinxbase/lm/jsgf.c [new file with mode: 0644]
src/libsphinxbase/lm/jsgf_internal.h [new file with mode: 0644]
src/libsphinxbase/lm/jsgf_parser.c [new file with mode: 0644]
src/libsphinxbase/lm/jsgf_parser.h [new file with mode: 0644]
src/libsphinxbase/lm/jsgf_parser.y [new file with mode: 0644]
src/libsphinxbase/lm/jsgf_scanner.c [new file with mode: 0644]
src/libsphinxbase/lm/jsgf_scanner.h [new file with mode: 0644]
src/libsphinxbase/lm/lm3g_model.c [new file with mode: 0644]
src/libsphinxbase/lm/lm3g_model.h [new file with mode: 0644]
src/libsphinxbase/lm/lm3g_templates.c [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model.c [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model_arpa.c [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model_arpa.h [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model_dmp.c [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model_dmp.h [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model_dmp32.c [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model_internal.h [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model_set.c [new file with mode: 0644]
src/libsphinxbase/lm/ngram_model_set.h [new file with mode: 0644]
src/libsphinxbase/util/Makefile.am [new file with mode: 0644]
src/libsphinxbase/util/Makefile.in [new file with mode: 0644]
src/libsphinxbase/util/bio.c [new file with mode: 0644]
src/libsphinxbase/util/bitvec.c [new file with mode: 0644]
src/libsphinxbase/util/blas_lite.c [new file with mode: 0644]
src/libsphinxbase/util/case.c [new file with mode: 0644]
src/libsphinxbase/util/ckd_alloc.c [new file with mode: 0644]
src/libsphinxbase/util/cmd_ln.c [new file with mode: 0644]
src/libsphinxbase/util/dtoa.c [new file with mode: 0644]
src/libsphinxbase/util/err.c [new file with mode: 0644]
src/libsphinxbase/util/err_wince.c [new file with mode: 0644]
src/libsphinxbase/util/errno.c [new file with mode: 0644]
src/libsphinxbase/util/f2c_lite.c [new file with mode: 0644]
src/libsphinxbase/util/filename.c [new file with mode: 0644]
src/libsphinxbase/util/genrand.c [new file with mode: 0644]
src/libsphinxbase/util/glist.c [new file with mode: 0644]
src/libsphinxbase/util/hash_table.c [new file with mode: 0644]
src/libsphinxbase/util/heap.c [new file with mode: 0644]
src/libsphinxbase/util/huff_code.c [new file with mode: 0644]
src/libsphinxbase/util/info.c [new file with mode: 0644]
src/libsphinxbase/util/listelem_alloc.c [new file with mode: 0644]
src/libsphinxbase/util/logmath.c [new file with mode: 0644]
src/libsphinxbase/util/matrix.c [new file with mode: 0644]
src/libsphinxbase/util/mmio.c [new file with mode: 0644]
src/libsphinxbase/util/pio.c [new file with mode: 0644]
src/libsphinxbase/util/profile.c [new file with mode: 0644]
src/libsphinxbase/util/sbthread.c [new file with mode: 0644]
src/libsphinxbase/util/slamch.c [new file with mode: 0644]
src/libsphinxbase/util/slapack_lite.c [new file with mode: 0644]
src/libsphinxbase/util/strfuncs.c [new file with mode: 0644]
src/libsphinxbase/util/string_wce.c [new file with mode: 0644]
src/libsphinxbase/util/unlimit.c [new file with mode: 0644]
src/libsphinxbase/util/utf8.c [new file with mode: 0644]
src/sphinx_adtools/Makefile.am [new file with mode: 0644]
src/sphinx_adtools/Makefile.in [new file with mode: 0644]
src/sphinx_adtools/cont_adseg.c [new file with mode: 0644]
src/sphinx_adtools/cont_fileseg.c [new file with mode: 0644]
src/sphinx_adtools/sphinx_pitch.c [new file with mode: 0644]
src/sphinx_cepview/Makefile.am [new file with mode: 0644]
src/sphinx_cepview/Makefile.in [new file with mode: 0644]
src/sphinx_cepview/main_cepview.c [new file with mode: 0644]
src/sphinx_fe/Makefile.am [new file with mode: 0644]
src/sphinx_fe/Makefile.in [new file with mode: 0644]
src/sphinx_fe/cmd_ln_defn.h [new file with mode: 0644]
src/sphinx_fe/sphinx_fe.c [new file with mode: 0644]
src/sphinx_fe/sphinx_wave2feat.h [new file with mode: 0644]
src/sphinx_jsgf2fsg/Makefile.am [new file with mode: 0644]
src/sphinx_jsgf2fsg/Makefile.in [new file with mode: 0644]
src/sphinx_jsgf2fsg/fsg2dot.pl [new file with mode: 0755]
src/sphinx_jsgf2fsg/main.c [new file with mode: 0644]
src/sphinx_lmtools/Makefile.am [new file with mode: 0644]
src/sphinx_lmtools/Makefile.in [new file with mode: 0644]
src/sphinx_lmtools/sphinx_lm_convert.c [new file with mode: 0644]
src/sphinx_lmtools/sphinx_lm_eval.c [new file with mode: 0644]
src/sphinx_lmtools/sphinx_lm_sort [new file with mode: 0755]
test/Makefile.am [new file with mode: 0644]
test/Makefile.in [new file with mode: 0644]
test/compare_table.pl [new file with mode: 0755]
test/regression/Makefile.am [new file with mode: 0644]
test/regression/Makefile.in [new file with mode: 0644]
test/regression/chan3-dither.cepview [new file with mode: 0644]
test/regression/chan3-logspec.cepview [new file with mode: 0644]
test/regression/chan3-smoothspec.cepview [new file with mode: 0644]
test/regression/chan3.2chan.wav [new file with mode: 0644]
test/regression/chan3.cepview [new file with mode: 0644]
test/regression/chan3.ctl [new file with mode: 0644]
test/regression/chan3.f0 [new file with mode: 0644]
test/regression/chan3.logspec [new file with mode: 0644]
test/regression/chan3.mfc [new file with mode: 0644]
test/regression/chan3.raw [new file with mode: 0644]
test/regression/chan3.sph [new file with mode: 0644]
test/regression/chan3.wav [new file with mode: 0644]
test/regression/crontab [new file with mode: 0644]
test/regression/polite.gram [new file with mode: 0644]
test/regression/test-cepview.sh [new file with mode: 0755]
test/regression/test-sphinx_fe-ctl.sh [new file with mode: 0755]
test/regression/test-sphinx_fe-dct.sh [new file with mode: 0755]
test/regression/test-sphinx_fe-dither-seed.sh [new file with mode: 0755]
test/regression/test-sphinx_fe-logspec.sh [new file with mode: 0755]
test/regression/test-sphinx_fe-logspec2cep.sh [new file with mode: 0755]
test/regression/test-sphinx_fe-smoothspec.sh [new file with mode: 0755]
test/regression/test-sphinx_fe.sh [new file with mode: 0755]
test/regression/test-sphinx_jsgf2fsg.sh [new file with mode: 0755]
test/regression/test-sphinx_pitch.sh [new file with mode: 0755]
test/regression/test.command.fsg [new file with mode: 0644]
test/regression/test.gram [new file with mode: 0644]
test/regression/test.kleene.fsg [new file with mode: 0644]
test/regression/test.nestedRightRecursion.fsg [new file with mode: 0644]
test/regression/test.nulltest.fsg [new file with mode: 0644]
test/regression/test.rightRecursion.fsg [new file with mode: 0644]
test/regression/testfuncs.sh.in [new file with mode: 0644]
test/regression/testfuncs_cygwin.sh [new file with mode: 0644]
test/regression/tutorial-check.sh [new file with mode: 0755]
test/unit/Makefile.am [new file with mode: 0644]
test/unit/Makefile.in [new file with mode: 0644]
test/unit/test_ad/Makefile.am [new file with mode: 0644]
test/unit/test_ad/Makefile.in [new file with mode: 0644]
test/unit/test_ad/test_ad_copy.c [new file with mode: 0644]
test/unit/test_ad/test_ad_read.c [new file with mode: 0644]
test/unit/test_ad/test_macros.h [new file with mode: 0644]
test/unit/test_alloc/Makefile.am [new file with mode: 0644]
test/unit/test_alloc/Makefile.in [new file with mode: 0644]
test/unit/test_alloc/test_ckd_alloc.c [new file with mode: 0644]
test/unit/test_alloc/test_ckd_alloc_abort.c [new file with mode: 0644]
test/unit/test_alloc/test_ckd_alloc_abort.sh [new file with mode: 0755]
test/unit/test_alloc/test_ckd_alloc_catch.c [new file with mode: 0644]
test/unit/test_alloc/test_ckd_alloc_fail.c [new file with mode: 0644]
test/unit/test_alloc/test_ckd_alloc_fail.sh [new file with mode: 0755]
test/unit/test_alloc/test_listelem_alloc.c [new file with mode: 0644]
test/unit/test_alloc/test_macros.h [new file with mode: 0644]
test/unit/test_bitvec/Makefile.am [new file with mode: 0644]
test/unit/test_bitvec/Makefile.in [new file with mode: 0644]
test/unit/test_bitvec/test_bitvec.c [new file with mode: 0644]
test/unit/test_bitvec/test_macros.h [new file with mode: 0644]
test/unit/test_case/Makefile.am [new file with mode: 0644]
test/unit/test_case/Makefile.in [new file with mode: 0644]
test/unit/test_case/_lcase1.test [new file with mode: 0755]
test/unit/test_case/_lcase2.test [new file with mode: 0755]
test/unit/test_case/_lcase3.test [new file with mode: 0755]
test/unit/test_case/_strcmp1.test [new file with mode: 0755]
test/unit/test_case/_strcmp2.test [new file with mode: 0755]
test/unit/test_case/_strcmp3.test [new file with mode: 0755]
test/unit/test_case/_ucase1.test [new file with mode: 0755]
test/unit/test_case/_ucase2.test [new file with mode: 0755]
test/unit/test_case/_ucase3.test [new file with mode: 0755]
test/unit/test_case/chgCase.c [new file with mode: 0644]
test/unit/test_cmdln/Makefile.am [new file with mode: 0644]
test/unit/test_cmdln/Makefile.in [new file with mode: 0644]
test/unit/test_cmdln/_test_parse_badargs.res [new file with mode: 0644]
test/unit/test_cmdln/_test_parse_badargs.test [new file with mode: 0755]
test/unit/test_cmdln/_test_parse_defaults.res [new file with mode: 0644]
test/unit/test_cmdln/_test_parse_defaults.test [new file with mode: 0755]
test/unit/test_cmdln/_test_parse_defaults_r.res [new file with mode: 0644]
test/unit/test_cmdln/_test_parse_defaults_r.test [new file with mode: 0755]
test/unit/test_cmdln/_test_parse_goodargs.res [new file with mode: 0644]
test/unit/test_cmdln/_test_parse_goodargs.test [new file with mode: 0755]
test/unit/test_cmdln/_test_parse_multiple.res [new file with mode: 0644]
test/unit/test_cmdln/_test_parse_multiple.test [new file with mode: 0755]
test/unit/test_cmdln/cmdln_parse.c [new file with mode: 0644]
test/unit/test_cmdln/cmdln_parse_multiple.c [new file with mode: 0644]
test/unit/test_cmdln/cmdln_parse_r.c [new file with mode: 0644]
test/unit/test_fe/Makefile.am [new file with mode: 0644]
test/unit/test_fe/Makefile.in [new file with mode: 0644]
test/unit/test_fe/test_fe.c [new file with mode: 0644]
test/unit/test_fe/test_macros.h [new file with mode: 0644]
test/unit/test_fe/test_pitch.c [new file with mode: 0644]
test/unit/test_feat/Makefile.am [new file with mode: 0644]
test/unit/test_feat/Makefile.in [new file with mode: 0644]
test/unit/test_feat/_test_feat.res [new file with mode: 0644]
test/unit/test_feat/_test_feat.test [new file with mode: 0755]
test/unit/test_feat/test_feat.c [new file with mode: 0644]
test/unit/test_feat/test_feat_fe.c [new file with mode: 0644]
test/unit/test_feat/test_feat_live.c [new file with mode: 0644]
test/unit/test_feat/test_macros.h [new file with mode: 0644]
test/unit/test_feat/test_subvq.c [new file with mode: 0644]
test/unit/test_fsg/Makefile.am [new file with mode: 0644]
test/unit/test_fsg/Makefile.in [new file with mode: 0644]
test/unit/test_fsg/goforward.fsg [new file with mode: 0644]
test/unit/test_fsg/polite.gram [new file with mode: 0644]
test/unit/test_fsg/test_fsg_jsgf.c [new file with mode: 0644]
test/unit/test_fsg/test_fsg_read.c [new file with mode: 0644]
test/unit/test_fsg/test_fsg_write_fsm.c [new file with mode: 0644]
test/unit/test_fsg/test_macros.h [new file with mode: 0644]
test/unit/test_hash/Makefile.am [new file with mode: 0644]
test/unit/test_hash/Makefile.in [new file with mode: 0644]
test/unit/test_hash/_hash_delete1.res [new file with mode: 0644]
test/unit/test_hash/_hash_delete1.test [new file with mode: 0755]
test/unit/test_hash/_hash_delete2.res [new file with mode: 0644]
test/unit/test_hash/_hash_delete2.test [new file with mode: 0755]
test/unit/test_hash/_hash_delete3.res [new file with mode: 0644]
test/unit/test_hash/_hash_delete3.test [new file with mode: 0755]
test/unit/test_hash/_hash_delete4.res [new file with mode: 0644]
test/unit/test_hash/_hash_delete4.test [new file with mode: 0755]
test/unit/test_hash/_hash_delete5.res [new file with mode: 0644]
test/unit/test_hash/_hash_delete5.test [new file with mode: 0755]
test/unit/test_hash/deletehash.c [new file with mode: 0644]
test/unit/test_hash/display.res [new file with mode: 0644]
test/unit/test_hash/displayhash.c [new file with mode: 0644]
test/unit/test_hash/test_hash_iter.c [new file with mode: 0644]
test/unit/test_hash/test_macros.h [new file with mode: 0644]
test/unit/test_logmath/Makefile.am [new file with mode: 0644]
test/unit/test_logmath/Makefile.in [new file with mode: 0644]
test/unit/test_logmath/test_log_int16.c [new file with mode: 0644]
test/unit/test_logmath/test_log_int8.c [new file with mode: 0644]
test/unit/test_logmath/test_log_shifted.c [new file with mode: 0644]
test/unit/test_logmath/test_macros.h [new file with mode: 0644]
test/unit/test_matrix/Makefile.am [new file with mode: 0644]
test/unit/test_matrix/Makefile.in [new file with mode: 0644]
test/unit/test_matrix/_test_determinant.res [new file with mode: 0644]
test/unit/test_matrix/_test_determinant.test [new file with mode: 0755]
test/unit/test_matrix/_test_invert.res [new file with mode: 0644]
test/unit/test_matrix/_test_invert.test [new file with mode: 0755]
test/unit/test_matrix/_test_solve.res [new file with mode: 0644]
test/unit/test_matrix/_test_solve.test [new file with mode: 0755]
test/unit/test_matrix/test_determinant.c [new file with mode: 0644]
test/unit/test_matrix/test_invert.c [new file with mode: 0644]
test/unit/test_matrix/test_solve.c [new file with mode: 0644]
test/unit/test_ngram/100.arpa.DMP [new file with mode: 0644]
test/unit/test_ngram/100.arpa.bz2 [new file with mode: 0644]
test/unit/test_ngram/100.arpa.gz [new file with mode: 0644]
test/unit/test_ngram/100.lmctl [new file with mode: 0644]
test/unit/test_ngram/100.probdef [new file with mode: 0644]
test/unit/test_ngram/100_2.arpa.DMP [new file with mode: 0644]
test/unit/test_ngram/100_2.arpa.gz [new file with mode: 0644]
test/unit/test_ngram/Makefile.am [new file with mode: 0644]
test/unit/test_ngram/Makefile.in [new file with mode: 0644]
test/unit/test_ngram/test_lm_add.c [new file with mode: 0644]
test/unit/test_ngram/test_lm_casefold.c [new file with mode: 0755]
test/unit/test_ngram/test_lm_class.c [new file with mode: 0644]
test/unit/test_ngram/test_lm_iter.c [new file with mode: 0644]
test/unit/test_ngram/test_lm_mmap.c [new file with mode: 0644]
test/unit/test_ngram/test_lm_read.c [new file with mode: 0644]
test/unit/test_ngram/test_lm_recode.c [new file with mode: 0644]
test/unit/test_ngram/test_lm_score.c [new file with mode: 0644]
test/unit/test_ngram/test_lm_set.c [new file with mode: 0644]
test/unit/test_ngram/test_lm_write.c [new file with mode: 0644]
test/unit/test_ngram/test_macros.h [new file with mode: 0644]
test/unit/test_ngram/turtle.lm [new file with mode: 0644]
test/unit/test_ngram/turtle.lm.DMP [new file with mode: 0644]
test/unit/test_ngram/turtle.ug.lm [new file with mode: 0644]
test/unit/test_ngram/turtle.ug.lm.DMP [new file with mode: 0644]
test/unit/test_string/Makefile.am [new file with mode: 0644]
test/unit/test_string/Makefile.in [new file with mode: 0644]
test/unit/test_string/_fread_line.test [new file with mode: 0755]
test/unit/test_string/_fread_line.txt [new file with mode: 0644]
test/unit/test_string/_nextword.test [new file with mode: 0755]
test/unit/test_string/_str2words.test [new file with mode: 0755]
test/unit/test_string/_string_join.test [new file with mode: 0755]
test/unit/test_string/_string_trim.test [new file with mode: 0755]
test/unit/test_string/strtest.c [new file with mode: 0644]
test/unit/test_string/test_atof.c [new file with mode: 0644]
test/unit/test_thread/Makefile.am [new file with mode: 0644]
test/unit/test_thread/Makefile.in [new file with mode: 0644]
test/unit/test_thread/test_event.c [new file with mode: 0644]
test/unit/test_thread/test_macros.h [new file with mode: 0644]
test/unit/test_thread/test_msgq.c [new file with mode: 0644]
test/unit/test_thread/test_thread.c [new file with mode: 0644]
test/unit/test_thread/test_tls_log.c [new file with mode: 0644]
test/unit/test_util/Makefile.am [new file with mode: 0644]
test/unit/test_util/Makefile.in [new file with mode: 0644]
test/unit/test_util/test_bit_encode.c [new file with mode: 0644]
test/unit/test_util/test_build_directory.c [new file with mode: 0644]
test/unit/test_util/test_filename.c [new file with mode: 0644]
test/unit/test_util/test_fopen.c [new file with mode: 0644]
test/unit/test_util/test_heap.c [new file with mode: 0644]
test/unit/test_util/test_huff_code.c [new file with mode: 0644]
test/unit/test_util/test_macros.h [new file with mode: 0644]
test/unit/test_util/test_readfile.c [new file with mode: 0644]
test/unit/testfuncs.sh.in [new file with mode: 0644]
win32/sphinx_cepview/sphinx_cepview.vcxproj [new file with mode: 0755]
win32/sphinx_cepview/sphinx_cepview.vcxproj.filters [new file with mode: 0755]
win32/sphinx_cepview/sphinx_cepview.vcxproj.user [new file with mode: 0755]
win32/sphinx_fe/sphinx_fe.vcxproj [new file with mode: 0755]
win32/sphinx_fe/sphinx_fe.vcxproj.filters [new file with mode: 0755]
win32/sphinx_fe/sphinx_fe.vcxproj.user [new file with mode: 0755]
win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj [new file with mode: 0755]
win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.filters [new file with mode: 0755]
win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.user [new file with mode: 0755]
win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj [new file with mode: 0755]
win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.filters [new file with mode: 0755]
win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.user [new file with mode: 0755]
win32/sphinx_pitch/sphinx_pitch.vcxproj [new file with mode: 0755]
win32/sphinx_pitch/sphinx_pitch.vcxproj.filters [new file with mode: 0755]
win32/sphinx_pitch/sphinx_pitch.vcxproj.user [new file with mode: 0755]
win32/sphinxbase/sphinxbase.vcxproj [new file with mode: 0755]
win32/sphinxbase/sphinxbase.vcxproj.filters [new file with mode: 0755]
win32/sphinxbase/sphinxbase.vcxproj.user [new file with mode: 0755]
ylwrap [new file with mode: 0755]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..3b32e93
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,18 @@
+The current maintainers are:
+
+Evandro Gouvêa <egouvea@cs.cmu.edu>
+Arthur Chan <archan@cs.cmu.edu>
+Mosur Ravishankar <rkm@cs.cmu.edu>
+Yitao Sun <yitao@cs.cmu.edu>
+David Huggins-Daines <dhuggins@cs.cmu.edu>
+
+Major contributors include, but are not limited to:
+
+Ricky Houghton
+Rita Singh
+Bhiksha Raj
+Mike Seltzer
+Kevin Lenzo
+Alex Acero
+Xuedong Huang
+Eric Thayer
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..51fc5a8
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,84 @@
+main copyright:
+
+/* ====================================================================
+ * Copyright (c) 1999-2011 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+dtoa.c:
+/****************************************************************
+ *
+ * The author of this software is David M. Gay.
+ *
+ * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose without fee is hereby granted, provided that this entire notice
+ * is included in all copies of any software which is or includes a copy
+ * or modification of this software and in all copies of the supporting
+ * documentation for such software.
+ *
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ ***************************************************************/
+
+utf8.c:
+
+/**************************************************************
+ *
+ * Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ ***************************************************************/
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..3cf5f75
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,10 @@
+2007-01-26  David Huggins-Daines  <dhuggins@cs.cmu.edu>
+
+       * all: SphinxBase 0.2
+       * all: New feature extraction API needed for PS/S3 merge
+
+2005-11-19  David Huggins-Daines  <dhd@pobox.com>
+
+       * all: Initial refactoring of SphinxTrain, Sphinx2, Sphinx3,
+       PocketSphinx into sphinx-common
+
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..8b82ade
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,291 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008 Free Software Foundation, Inc.
+
+   This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  6. Often, you can also type `make uninstall' to remove the installed
+     files again.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *Note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..c40b6d6
--- /dev/null
@@ -0,0 +1,50 @@
+SUBDIRS = src \
+       doc \
+       include \
+       test \
+       python
+
+EXTRA_DIST = autogen.sh                                                 \
+       sphinxbase.sln                                           \
+       sphinxbase.pc.in                                         \
+       win32/sphinx_fe/sphinx_fe.vcxproj                        \
+       win32/sphinxbase/sphinxbase.vcxproj                      \
+       win32/sphinx_cepview/sphinx_cepview.vcxproj              \
+       win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj            \
+       win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj        \
+       win32/sphinx_pitch/sphinx_pitch.vcxproj                  \
+       win32/sphinx_fe/sphinx_fe.vcxproj.user                   \
+       win32/sphinxbase/sphinxbase.vcxproj.user                 \
+       win32/sphinx_cepview/sphinx_cepview.vcxproj.user         \
+       win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.user       \
+       win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.user   \
+       win32/sphinx_pitch/sphinx_pitch.vcxproj.user             \
+       win32/sphinx_fe/sphinx_fe.vcxproj.filters                \
+       win32/sphinxbase/sphinxbase.vcxproj.filters              \
+       win32/sphinx_cepview/sphinx_cepview.vcxproj.filters      \
+       win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.filters    \
+       win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.filters \
+       win32/sphinx_pitch/sphinx_pitch.vcxproj.filters          \
+       m4/pkg.m4                                                \
+       m4/iconv.m4                                              \
+       m4/lib-ld.m4                                             \
+       m4/lib-link.m4                                           \
+       m4/lib-prefix.m4                                         \
+       group/ABLD.BAT                                           \
+       group/bld.inf                                            \
+       group/sphinxbase.mmp
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = sphinxbase.pc
+CLEANFILES = sphinxbase.pc
+
+ACLOCAL_AMFLAGS = -I m4
+
+etags:
+       etags `find . -name "*.[ch]"`
+
+ctags:
+       ctags `find . -name "*.[ch]"`
+
+doxygen: 
+       doxygen ./doc/doxygen.cfg
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..e790614
--- /dev/null
@@ -0,0 +1,718 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/sphinxbase.pc.in \
+       $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
+       config.guess config.rpath config.sub depcomp install-sh \
+       ltmain.sh missing ylwrap
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES = sphinxbase.pc
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkgconfig_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = src \
+       doc \
+       include \
+       test \
+       python
+
+EXTRA_DIST = autogen.sh                                                 \
+       sphinxbase.sln                                           \
+       sphinxbase.pc.in                                         \
+       win32/sphinx_fe/sphinx_fe.vcxproj                        \
+       win32/sphinxbase/sphinxbase.vcxproj                      \
+       win32/sphinx_cepview/sphinx_cepview.vcxproj              \
+       win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj            \
+       win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj        \
+       win32/sphinx_pitch/sphinx_pitch.vcxproj                  \
+       win32/sphinx_fe/sphinx_fe.vcxproj.user                   \
+       win32/sphinxbase/sphinxbase.vcxproj.user                 \
+       win32/sphinx_cepview/sphinx_cepview.vcxproj.user         \
+       win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.user       \
+       win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.user   \
+       win32/sphinx_pitch/sphinx_pitch.vcxproj.user             \
+       win32/sphinx_fe/sphinx_fe.vcxproj.filters                \
+       win32/sphinxbase/sphinxbase.vcxproj.filters              \
+       win32/sphinx_cepview/sphinx_cepview.vcxproj.filters      \
+       win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.filters    \
+       win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.filters \
+       win32/sphinx_pitch/sphinx_pitch.vcxproj.filters          \
+       m4/pkg.m4                                                \
+       m4/iconv.m4                                              \
+       m4/lib-ld.m4                                             \
+       m4/lib-link.m4                                           \
+       m4/lib-prefix.m4                                         \
+       group/ABLD.BAT                                           \
+       group/bld.inf                                            \
+       group/sphinxbase.mmp
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = sphinxbase.pc
+CLEANFILES = sphinxbase.pc
+ACLOCAL_AMFLAGS = -I m4
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+             cd $(srcdir) && $(AUTOMAKE) --gnu  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+sphinxbase.pc: $(top_builddir)/config.status $(srcdir)/sphinxbase.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool config.lt
+install-pkgconfigDATA: $(pkgconfig_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+       @list='$(pkgconfig_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+         $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+       done
+
+uninstall-pkgconfigDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkgconfig_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d $(distdir) || mkdir $(distdir)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzma: distdir
+       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.lzma*) \
+         unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-pkgconfigDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-am clean clean-generic \
+       clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+       dist-gzip dist-lzma dist-shar dist-tarZ dist-zip distcheck \
+       distclean distclean-generic distclean-libtool distclean-tags \
+       distcleancheck distdir distuninstallcheck dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-pkgconfigDATA install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-recursive uninstall uninstall-am \
+       uninstall-pkgconfigDATA
+
+
+etags:
+       etags `find . -name "*.[ch]"`
+
+ctags:
+       ctags `find . -name "*.[ch]"`
+
+doxygen: 
+       doxygen ./doc/doxygen.cfg
+# 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/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..56d4bce
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,21 @@
+No news is good news.
+
+Sphinxbase-0.7
+^^^^^^^^^^^^^^
+
+Thanks: David Huggins-Daines, Yuri Orlov, Edwin Miguel
+
+Improvements:
+
+    * Symbian fixes
+    * Sphinxtrain also depends on sphinxbase now
+    * Cepwin feature type
+    * Large header structure reorganization for multiplatform compilation
+    * Add libsndfile support, now it can read many formats
+    * Fsg arc iterators for faster FSG decoding
+    * Add support for text and HTK format output of features
+
+Bug fixes:
+
+    * Fixes read/write of unigram dmp models
+    * Fixes issue with linking to iconv on cygwin
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..3ad7008
--- /dev/null
+++ b/README
@@ -0,0 +1,87 @@
+CMU Sphinx common libraries
+---------------------------
+
+This package contains the basic libraries shared by the CMU Sphinx
+trainer and all the Sphinx decoders (Sphinx-II, Sphinx-III, and
+PocketSphinx), as well as some common utilities for manipulating
+acoustic feature and audio files.
+
+Installation Guide: 
+
+This section contains installation for various platforms
+
+Linux/Unix installation
+^^^^^^^^^^^^^^^^^^^^^^^
+
+sphinxbase is used by other modules.  The convention requires the
+physical layout of the code looks like this:
+    package/
+    sphinxbase/
+
+So if you get the file from a distribution, you might want to rename
+sphinxbase-X.X to sphinxbase by typing
+
+    > mv sphinxbase-X.X sphinxbase (where X.X being the version of sphinxbase)
+
+If you downloaded directly from the Subversion repository, you need to 
+create the "configure" file by typing
+
+    > ./autogen.sh
+
+If you downloaded a release version or if you have already run
+"autogen.sh", you can build simply by running
+
+    > ./configure
+    > make
+
+If you are compiling for a platform without floating-point arithmetic,
+you should instead use:
+
+    > ./configure --enable-fixed --without-lapack
+    > make
+
+You can also check the validity of the package by typing
+
+    > make check 
+
+and then install it with 
+
+    > make install
+
+This defaults to installing SphinxBase under /usr/local. You may
+customize it by running ./configure with an argument, as in
+
+    >./configure --prefix=/my/own/installation/directory
+
+XCode Installation (for iPhone):
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Sphinxbase uses the standard unix autogen system, and there's a script
+included, 'build_for_iphone.sh' that will setup configure to create
+binaries that are XCode friendly.
+
+1) ./autogen.sh
+2) ./build_for_iphone.sh simulator
+3) ./build_for_iphone.sh device
+
+Then in XCode, open your project info, and for 'All Configurations', and
+set:
+
+'Header Search Paths' = "$(HOME)$(SDK_DIR)/include/sphinxbase"
+'Library Search Paths' = "$(HOME)$(SDK_DIR)/lib"
+'Other Linker Flags' = "-lsphinxbase"
+
+Windows Installation:
+^^^^^^^^^^^^^^^^^^^^^
+To compile sphinxbase in Visual Studio 2010 Express (or newer):
+1, unzip the file.
+2, rename the directory to sphinxbase
+3, go into the sphinxbase folder and click sphinxbase.sln
+4, in the menu, choose Build -> Rebuild All -> Batch Build -> Build
+
+In Step 4, make sure all projects are selected, preferably the
+"Release" version of each.
+
+If you are using cygwin, the installation procedure is very similar to
+the Unix installation. However, there is no audio driver support in
+cygwin currently so one can only use the batch mode recognzier. 
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..db9b09a
--- /dev/null
@@ -0,0 +1,887 @@
+# generated automatically by aclocal 1.10.2 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This file 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.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
+[m4_warning([this file was generated for autoconf 2.63.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.10.2], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10.2])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+#serial 4
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[# Autoconf 2.62 quotes --file arguments for eval, but not when files
+# are listed without --file.  Let's play safe and only enable the eval
+# if we detect the quoting.
+case $CONFIG_FILES in
+*\'*) eval set x "$CONFIG_FILES" ;;
+*)   set x $CONFIG_FILES ;;
+esac
+shift
+for mf
+do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 13
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                  [_AM_DEPENDENCIES(OBJC)],
+                  [define([AC_PROG_OBJC],
+                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/iconv.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/pkg.m4])
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..3058f91
--- /dev/null
@@ -0,0 +1,152 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+srcdir=`dirname $0`
+PKG_NAME="the package."
+
+DIE=0
+
+(autoconf --version) < /dev/null > /dev/null 2>&1 || {
+  echo
+  echo "**Error**: You must have \`autoconf' installed to."
+  echo "Download the appropriate package for your distribution,"
+  echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
+  DIE=1
+}
+
+(grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && {
+  if libtoolize --version </dev/null >/dev/null 2>&1; then
+       LIBTOOLIZE=libtoolize
+  elif glibtoolize --version </dev/null >/dev/null 2>&1; then
+       LIBTOOLIZE=glibtoolize
+  else
+    echo
+    echo "**Error**: You must have \`libtool' installed."
+    echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz"
+    echo "(or a newer version if it is available)"
+    DIE=1
+  fi 
+}
+
+grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && {
+  grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
+  (gettext --version) < /dev/null > /dev/null 2>&1 || {
+    echo
+    echo "**Error**: You must have \`gettext' installed."
+    echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
+    echo "(or a newer version if it is available)"
+    DIE=1
+  }
+}
+
+grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && {
+  grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \
+  (gettext --version) < /dev/null > /dev/null 2>&1 || {
+    echo
+    echo "**Error**: You must have \`gettext' installed."
+    echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"
+    echo "(or a newer version if it is available)"
+    DIE=1
+  }
+}
+
+(automake --version) < /dev/null > /dev/null 2>&1 || {
+  echo
+  echo "**Error**: You must have \`automake' installed."
+  echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
+  echo "(or a newer version if it is available)"
+  DIE=1
+  NO_AUTOMAKE=yes
+}
+
+
+# if no automake, don't bother testing for aclocal
+test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || {
+  echo
+  echo "**Error**: Missing \`aclocal'.  The version of \`automake'"
+  echo "installed doesn't appear recent enough."
+  echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz"
+  echo "(or a newer version if it is available)"
+  DIE=1
+}
+
+if test "$DIE" -eq 1; then
+  exit 1
+fi
+
+if test -z "$*"; then
+  echo "**Warning**: I am going to run \`configure' with no arguments."
+  echo "If you wish to pass any to it, please specify them on the"
+  echo \`$0\'" command line."
+  echo
+fi
+
+case $CC in
+xlc )
+  am_opt=--include-deps;;
+esac
+
+for coin in `find $srcdir -name configure.in -print`
+do 
+  dr=`dirname $coin`
+  if test -f $dr/NO-AUTO-GEN; then
+    echo skipping $dr -- flagged as no auto-gen
+  else
+    echo processing $dr
+    macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin`
+    ( cd $dr
+      aclocalinclude="$ACLOCAL_FLAGS"
+      for k in $macrodirs; do
+       if test -d $k; then
+          aclocalinclude="$aclocalinclude -I $k"
+       ##else 
+       ##  echo "**Warning**: No such directory \`$k'.  Ignored."
+        fi
+      done
+      if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then
+       if grep "sed.*POTFILES" configure.in >/dev/null; then
+         : do nothing -- we still have an old unmodified configure.in
+       else
+         echo "Creating $dr/aclocal.m4 ..."
+         test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
+         echo "Running gettextize...  Ignore non-fatal messages."
+         echo "no" | gettextize --force --copy
+         echo "Making $dr/aclocal.m4 writable ..."
+         test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
+        fi
+      fi
+      if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then
+       echo "Creating $dr/aclocal.m4 ..."
+       test -r $dr/aclocal.m4 || touch $dr/aclocal.m4
+       echo "Running gettextize...  Ignore non-fatal messages."
+       echo "no" | gettextize --force --copy
+       echo "Making $dr/aclocal.m4 writable ..."
+       test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4
+      fi
+      if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then
+       echo "Running $LIBTOOLIZE..."
+       $LIBTOOLIZE --force --copy
+      fi
+      echo "Running aclocal $aclocalinclude ..."
+      aclocal -I m4 $aclocalinclude
+      if grep "^AC_CONFIG_HEADER" configure.in >/dev/null; then
+       echo "Running autoheader..."
+       autoheader
+      fi
+      echo "Running automake --gnu --copy $am_opt ..."
+      automake --add-missing --gnu --copy $am_opt
+      echo "Running autoconf ..."
+      autoconf
+    )
+  fi
+done
+
+#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
+
+if test x$NOCONFIGURE = x; then
+  echo Running $srcdir/configure $conf_flags "$@" ...
+  $srcdir/configure $conf_flags "$@" \
+  && echo Now type \`make\' to compile $PKG_NAME
+else
+  echo Skipping configure process.
+fi
diff --git a/config.guess b/config.guess
new file mode 100755 (executable)
index 0000000..7b24a87
--- /dev/null
@@ -0,0 +1,1542 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
+
+timestamp='2008-11-15'
+
+# This file 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           sh5el) machine=sh5le-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep __ELF__ >/dev/null
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+       eval $set_cc_for_build
+       SUN_ARCH="i386"
+       # If there is a compiler, see if it is configured for 64-bit objects.
+       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+       # This test works for both compilers.
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if echo '\n#ifdef __amd64\nIS_64BIT_ARCH\n#endif' | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               SUN_ARCH="x86_64"
+           fi
+       fi
+       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[456])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep __LP64__ >/dev/null
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    *:Interix*:[3456]*)
+       case ${UNAME_MACHINE} in
+           x86)
+               echo i586-pc-interix${UNAME_RELEASE}
+               exit ;;
+           EM64T | authenticamd | genuineintel)
+               echo x86_64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+           IA64)
+               echo ia64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+       esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    arm*:Linux:*:*)
+       eval $set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+           echo ${UNAME_MACHINE}-unknown-linux-gnu
+       else
+           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips
+       #undef mipsel
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mipsel
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips64
+       #undef mips64el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mips64el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips64
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-gnu
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       # Set LC_ALL=C to ensure ld outputs messages in English.
+       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+                        | sed -ne '/supported targets:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported targets: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_targets" in
+         elf32-i386)
+               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+               ;;
+         a.out-i386-linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit ;;
+         "")
+               # Either a pre-BFD a.out linker (linux-gnuoldld) or
+               # one that does not give us useful --help.
+               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+               exit ;;
+       esac
+       # Determine whether the default compiler is a.out or elf
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <features.h>
+       #ifdef __ELF__
+       # ifdef __GLIBC__
+       #  if __GLIBC__ >= 2
+       LIBC=gnu
+       #  else
+       LIBC=gnulibc1
+       #  endif
+       # else
+       LIBC=gnulibc1
+       # endif
+       #else
+       #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+       LIBC=gnu
+       #else
+       LIBC=gnuaout
+       #endif
+       #endif
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^LIBC/{
+               s: ::g
+               p
+           }'`"
+       test x"${LIBC}" != x && {
+               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+               exit
+       }
+       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+       ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-7:SUPER-UX:*:*)
+       echo sx7-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8:SUPER-UX:*:*)
+       echo sx8-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8R:SUPER-UX:*:*)
+       echo sx8r-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.rpath b/config.rpath
new file mode 100755 (executable)
index 0000000..c492a93
--- /dev/null
@@ -0,0 +1,614 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2006 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+#   This file 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.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    darwin*)
+      case $cc_basename in
+        xlc*)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    mingw* | pw32* | os2*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux*)
+      case $cc_basename in
+        icc* | ecc*)
+          wl='-Wl,'
+          ;;
+        pgcc | pgf77 | pgf90)
+          wl='-Wl,'
+          ;;
+        ccc*)
+          wl='-Wl,'
+          ;;
+        como)
+          wl='-lopt='
+          ;;
+        *)
+          case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ C*)
+              wl='-Wl,'
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    sco3.2v5*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    unicos*)
+      wl='-Wl,'
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # Set some defaults for GNU ld with shared library support. These
+  # are reset later if shared libraries are not supported. Putting them
+  # here allows them to be overridden if necessary.
+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
+  # option of GNU ld is called -rpath, not --rpath.
+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we cannot use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    interix3*)
+      hardcode_direct=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      ;;
+    linux*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+          ld_shlibs=no
+          ;;
+        *)
+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+          else
+            ld_shlibs=no
+          fi
+          ;;
+      esac
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = no; then
+    hardcode_libdir_flag_spec=
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+          ;;
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            hardcode_direct=yes
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+          ;;
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi[45]*)
+      ;;
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      hardcode_direct=no
+      if test "$GCC" = yes ; then
+        :
+      else
+        case $cc_basename in
+          xlc*)
+            ;;
+          *)
+            ld_shlibs=no
+            ;;
+        esac
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd* | kfreebsd*-gnu | dragonfly*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        hardcode_direct=yes
+        # hardcode_minus_L: Not really in the search PATH,
+        # but as the default location of the library.
+        hardcode_minus_L=yes
+      fi
+      ;;
+    hpux11*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct=no
+            ;;
+          *)
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      hardcode_direct=yes
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      else
+        case "$host_os" in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+        esac
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+      ;;
+    sysv5* | sco3.2v5* | sco5v6*)
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    ;;
+  aix4* | aix5*)
+    ;;
+  amigaos*)
+    ;;
+  beos*)
+    ;;
+  bsdi[45]*)
+    ;;
+  cygwin* | mingw* | pw32*)
+    shrext=.dll
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    ;;
+  dgux*)
+    ;;
+  freebsd1*)
+    ;;
+  kfreebsd*-gnu)
+    ;;
+  freebsd* | dragonfly*)
+    ;;
+  gnu*)
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case $host_cpu in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    ;;
+  interix3*)
+    ;;
+  irix5* | irix6* | nonstopux*)
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux*)
+    ;;
+  knetbsd*-gnu)
+    ;;
+  netbsd*)
+    ;;
+  newsos6)
+    ;;
+  nto-qnx*)
+    ;;
+  openbsd*)
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    ;;
+  osf3* | osf4* | osf5*)
+    ;;
+  solaris*)
+    ;;
+  sunos4*)
+    ;;
+  sysv4 | sysv4.3*)
+    ;;
+  sysv4*MP*)
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    ;;
+  uts4*)
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755 (executable)
index 0000000..053e738
--- /dev/null
@@ -0,0 +1,1677 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
+
+timestamp='2008-09-08'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fido | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore | mep | metag \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64octeon | mips64octeonel \
+       | mips64orion | mips64orionel \
+       | mips64r5900 | mips64r5900el \
+       | mips64vr | mips64vrel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k | z80)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64octeon-* | mips64octeonel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64r5900-* | mips64r5900el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+       | tron-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa*-* \
+       | ymp-* \
+       | z8k-* | z80-*)
+               ;;
+       # Recognize the basic CPU types without company name, with glob match.
+       xtensa*)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       blackfin)
+               basic_machine=bfin-unknown
+               os=-linux
+               ;;
+       blackfin-*)
+               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+        cegcc)
+               basic_machine=arm-unknown
+               os=-cegcc
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16)
+               basic_machine=cr16-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dicos)
+               basic_machine=i686-pc
+               os=-dicos
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m68knommu)
+               basic_machine=m68k-unknown
+               os=-linux
+               ;;
+       m68knommu-*)
+               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       mingw32ce)
+               basic_machine=arm-unknown
+               os=-mingw32ce
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       parisc)
+               basic_machine=hppa-unknown
+               os=-linux
+               ;;
+       parisc-*)
+               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sde)
+               basic_machine=mipsisa32-sde
+               os=-elf
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh5el)
+               basic_machine=sh5le-unknown
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+       tile*)
+               basic_machine=tile-unknown
+               os=-linux-gnu
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       z80-*-coff)
+               basic_machine=z80-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -dicos*)
+               os=-dicos
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+               os=-elf
+               ;;
+        spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+        mep-*)
+               os=-elf
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..4a3bff7
--- /dev/null
+++ b/configure
@@ -0,0 +1,18709 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.63 for sphinxbase 0.7.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes &&    (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+        /*)
+          for as_base in sh bash ksh sh5; do
+            as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+          done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+        # Try only shells that exist, to save several forks.
+        if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+               { ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+              as_have_required=yes
+              if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+       do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+       done
+       export CONFIG_SHELL
+       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell bug-autoconf@gnu.org about your system,
+  echo including any error possibly output before this message.
+  echo This can help us improve future autoconf versions.
+  echo Configuration will now proceed without shell functions.
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "$0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='sphinxbase'
+PACKAGE_TARNAME='sphinxbase'
+PACKAGE_VERSION='0.7'
+PACKAGE_STRING='sphinxbase 0.7'
+PACKAGE_BUGREPORT=''
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+SNDFILE_LIBS
+SNDFILE_CFLAGS
+PKG_CONFIG
+HAVE_PKGCONFIG
+BUILD_CYTHON_FALSE
+BUILD_CYTHON_TRUE
+HAVE_CYTHON
+BUILD_PYTHON_FALSE
+BUILD_PYTHON_TRUE
+PYTHON_CONFIG
+PYTHON
+BUILD_DOXYGEN_FALSE
+BUILD_DOXYGEN_TRUE
+HAVE_DOXYGEN
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+RANLIB
+AR
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+LIBTOOL
+ad_backend
+ad_libs
+ad_files
+FIXED_POINT_FALSE
+FIXED_POINT_TRUE
+USE_THREADS_FALSE
+USE_THREADS_TRUE
+USE_LAPACK_FALSE
+USE_LAPACK_TRUE
+LAPACK_LITE_FALSE
+LAPACK_LITE_TRUE
+LTLIBICONV
+LIBICONV
+EGREP
+GREP
+CPP
+YACC
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+with_gnu_ld
+enable_rpath
+with_libiconv_prefix
+with_lapack
+enable_threads
+enable_fixed
+enable_fixed16
+enable_debug
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+enable_libtool_lock
+with_python
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+YACC
+CPP
+PKG_CONFIG
+SNDFILE_CFLAGS
+SNDFILE_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)   ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { $as_echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
+   { (exit 1); exit 1; }; } ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
+               datadir sysconfdir sharedstatedir localstatedir includedir \
+               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+               libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { $as_echo "$as_me: error: working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_myself" : 'X\(//\)[^/]' \| \
+        X"$as_myself" : 'X\(//\)$' \| \
+        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+       pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures sphinxbase 0.7 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/sphinxbase]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of sphinxbase 0.7:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --disable-rpath         do not hardcode runtime library paths
+  --disable-threads       Disable thread-safe versions of memory allocation
+                          functions (default: check)
+  --enable-fixed=RADIX    Use 32-bit fixed-point for MFCC and GMM computation,
+                          optionally specifying a radix point
+  --enable-fixed16        Use 16-bit fixed-point for MFCC computation
+  --enable-debug          Enable debugging output
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --without-lapack        Disable matrix algebra support (depends on LAPACK)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --without-python        Disable Python extension
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  YACC        Bison command
+  CPP         C preprocessor
+  PKG_CONFIG  path to pkg-config utility
+  SNDFILE_CFLAGS
+              C compiler flags for SNDFILE, overriding pkg-config
+  SNDFILE_LIBS
+              linker flags for SNDFILE, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+sphinxbase configure 0.7
+generated by GNU Autoconf 2.63
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by sphinxbase $as_me 0.7, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  $as_echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+       "s/'\''/'\''\\\\'\'''\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       $as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test -r "$ac_site_file"; then
+    { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       # differences in whitespace do not lead to failure.
+       ac_old_val_w=`echo x $ac_old_val`
+       ac_new_val_w=`echo x $ac_new_val`
+       if test "$ac_old_val_w" != "$ac_new_val_w"; then
+         { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         ac_cache_corrupted=:
+       else
+         { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         eval $ac_var=\$ac_old_val
+       fi
+       { $as_echo "$as_me:$LINENO:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { $as_echo "$as_me:$LINENO:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_config_headers="$ac_config_headers include/config.h include/sphinx_config.h"
+
+am__api_version='1.10'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+
+done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+$as_echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+$as_echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='sphinxbase'
+ VERSION='0.7'
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+
+CFLAGS=${CFLAGS:--g -O2 -Wall}
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+case $host in
+     arm-wince-pe*)
+       CFLAGS=${CFLAGS:--march=armv4 -mapcs-32 -malignment-traps}
+       LIBS='-lc -lgcc -lwinsock -lcoredll'
+       CFLAGS="$CFLAGS -DNEWLIB -DSARM -DWIN32 -DGNUWINCE"
+       ;;
+     *uclinux*)
+       # uClinux needs special "flat" binaries
+       LDFLAGS="$LDFLAGS -Wl,-elf2flt"
+       ;;
+     *)
+     ;;
+esac
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       then :; else
+          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       fi
+       # We set ac_cv_exeext here because the later test for it is not
+       # safe: cross compilers may not add the suffix if given an `-o'
+       # argument, so we may need to know it at that point already.
+       # Even if this section looks crufty: it has the advantage of
+       # actually working.
+       break;;
+    * )
+       break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5
+$as_echo_n "checking for library containing strerror... " >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror ();
+int
+main ()
+{
+return strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_strerror=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_strerror+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_strerror+set}" = set; then
+  :
+else
+  ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+$as_echo "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+   case $ac_cv_prog_cc_stdc in
+  no) ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;;
+  *) { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if test "${ac_cv_prog_cc_c99+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+  your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str;
+  int number;
+  float fnumber;
+
+  while (*format)
+    {
+      switch (*format++)
+       {
+       case 's': // string
+         str = va_arg (args_copy, const char *);
+         break;
+       case 'd': // int
+         number = va_arg (args_copy, int);
+         break;
+       case 'f': // float
+         fnumber = va_arg (args_copy, double);
+         break;
+       default:
+         break;
+       }
+    }
+  va_end (args_copy);
+  va_end (args);
+}
+
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  test_varargs ("s, d' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+         || dynamic_array[ni.number - 1] != 543);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c99=$ac_arg
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c99"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+else
+  { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+else
+  ac_cv_prog_cc_stdc=no
+fi
+
+
+fi
+
+ ;;
+esac
+  { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO Standard C" >&5
+$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; }
+  if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+
+  case $ac_cv_prog_cc_stdc in
+  no) { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  '') { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  *) { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;;
+esac
+
+
+
+# We don't bother ourselves with flex checks until the rest of the world has an up-to-date Flex
+# We need specific bison extensions, so check for bison
+# Extract the first word of "bison", so it can be a program name with args.
+set dummy bison; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_YACC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_YACC="bison -y"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_YACC" && ac_cv_prog_YACC="no"
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:$LINENO: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test "x$YACC" = "xno";
+then
+    { { $as_echo "$as_me:$LINENO: error: You need to install bison" >&5
+$as_echo "$as_me: error: You need to install bison" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ { $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+              not a universal capable compiler
+            #endif
+            typedef int dummy;
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+
+       # Check for potential -arch flags.  It is not universal unless
+       # there are some -arch flags.  Note that *ppc* also matches
+       # ppc64.  This check is also rather less than ideal.
+       case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in  #(
+         *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;;
+       esac
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+            #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+                    && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+                    && LITTLE_ENDIAN)
+             bogus endian macros
+            #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+               #include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+                not big endian
+               #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_bigendian=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_c_bigendian=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+             bogus endian macros
+            #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+                not big endian
+               #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_bigendian=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_c_bigendian=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then
+  # Try to guess by grepping values from an object file.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+short int ascii_mm[] =
+                 { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+               short int ascii_ii[] =
+                 { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+               int use_ascii (int i) {
+                 return ascii_mm[i] + ascii_ii[i];
+               }
+               short int ebcdic_ii[] =
+                 { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+               short int ebcdic_mm[] =
+                 { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+               int use_ebcdic (int i) {
+                 return ebcdic_mm[i] + ebcdic_ii[i];
+               }
+               extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+             ac_cv_c_bigendian=yes
+           fi
+           if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+             if test "$ac_cv_c_bigendian" = unknown; then
+               ac_cv_c_bigendian=no
+             else
+               # finding both strings is unlikely to happen, but who knows?
+               ac_cv_c_bigendian=unknown
+             fi
+           fi
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+            /* Are we little or big endian?  From Harbison&Steele.  */
+            union
+            {
+              long int l;
+              char c[sizeof (long int)];
+            } u;
+            u.l = 1;
+            return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_bigendian=no
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_bigendian=yes
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+;; #(
+   no)
+      ;; #(
+   universal)
+
+cat >>confdefs.h <<\_ACEOF
+#define AC_APPLE_UNIVERSAL_BUILD 1
+_ACEOF
+
+     ;; #(
+   *)
+     { { $as_echo "$as_me:$LINENO: error: unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+$as_echo "$as_me: error: unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+   { (exit 1); exit 1; }; } ;;
+ esac
+
+{ $as_echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
+if test "${ac_cv_type_signal+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <signal.h>
+
+int
+main ()
+{
+return *(signal (0, 0)) (0) == 1;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_signal=int
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_signal=void
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+{ $as_echo "$as_me:$LINENO: checking for long long" >&5
+$as_echo_n "checking for long long... " >&6; }
+if test "${ac_cv_type_long_long+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_long_long=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof (long long))
+       return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((long long)))
+         return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_long_long=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+$as_echo "$ac_cv_type_long_long" >&6; }
+if test "x$ac_cv_type_long_long" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LONG_LONG 1
+_ACEOF
+
+
+fi
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:$LINENO: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if test "${ac_cv_sizeof_long_long+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long long))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr $ac_mid + 1`
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long long))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long long))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_hi=`expr '(' $ac_mid ')' - 1`
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long_long=$ac_lo;;
+'') if test "$ac_cv_type_long_long" = yes; then
+     { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute sizeof (long long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi ;;
+esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+static long int longval () { return (long int) (sizeof (long long)); }
+static unsigned long int ulongval () { return (long int) (sizeof (long long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (long long))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (long long))))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (long long))))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long_long=`cat conftest.val`
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_long_long" = yes; then
+     { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute sizeof (long long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:$LINENO: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr $ac_mid + 1`
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_hi=`expr '(' $ac_mid ')' - 1`
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') if test "$ac_cv_type_long" = yes; then
+     { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }; }
+   else
+     ac_cv_sizeof_long=0
+   fi ;;
+esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+static long int longval () { return (long int) (sizeof (long)); }
+static unsigned long int ulongval () { return (long int) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (long))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (long))))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (long))))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long=`cat conftest.val`
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_long" = yes; then
+     { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+
+
+
+for ac_func in popen perror snprintf
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test "${ac_cv_header_errno_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for errno.h" >&5
+$as_echo_n "checking for errno.h... " >&6; }
+if test "${ac_cv_header_errno_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
+$as_echo "$ac_cv_header_errno_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking errno.h usability" >&5
+$as_echo_n "checking errno.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <errno.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking errno.h presence" >&5
+$as_echo_n "checking errno.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <errno.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: errno.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: errno.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: errno.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: errno.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: errno.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: errno.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: errno.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: errno.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: errno.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: errno.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: errno.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: errno.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: errno.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for errno.h" >&5
+$as_echo_n "checking for errno.h... " >&6; }
+if test "${ac_cv_header_errno_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_errno_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_errno_h" >&5
+$as_echo "$ac_cv_header_errno_h" >&6; }
+
+fi
+
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ $as_echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+                                                { $as_echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if test "${acl_cv_rpath+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+                  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" \
+               && { test -f "$additional_libdir/lib$name.$shlibext" \
+                    || { test "$shlibext" = dll \
+                         && test -f "$additional_libdir/lib$name.dll.a"; }; }; then
+              found_dir="$additional_libdir"
+              if test -f "$additional_libdir/lib$name.$shlibext"; then
+                found_so="$additional_libdir/lib$name.$shlibext"
+              else
+                found_so="$additional_libdir/lib$name.dll.a"
+              fi
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" \
+                     && { test -f "$dir/lib$name.$shlibext" \
+                          || { test "$shlibext" = dll \
+                               && test -f "$dir/lib$name.dll.a"; }; }; then
+                    found_dir="$dir"
+                    if test -f "$dir/lib$name.$shlibext"; then
+                      found_so="$dir/lib$name.$shlibext"
+                    else
+                      found_so="$dir/lib$name.dll.a"
+                    fi
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:$LINENO: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if test "${am_cv_func_iconv+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  am_cv_func_iconv=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:$LINENO: checking for iconv declaration" >&5
+$as_echo_n "checking for iconv declaration... " >&6; }
+    if test "${am_cv_proto_iconv+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  am_cv_proto_iconv_arg1=""
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       am_cv_proto_iconv_arg1="const"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    { $as_echo "$as_me:$LINENO: result: ${ac_t:-
+         }$am_cv_proto_iconv" >&5
+$as_echo "${ac_t:-
+         }$am_cv_proto_iconv" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+  fi
+
+
+use_lapack=true
+use_internal_lapack=false
+
+# Check whether --with-lapack was given.
+if test "${with_lapack+set}" = set; then
+  withval=$with_lapack;
+if test x$withval = xno; then
+   use_lapack=false
+fi
+
+fi
+
+if test x$use_lapack = xtrue; then
+
+{ $as_echo "$as_me:$LINENO: checking for sgesv_ in -llapack" >&5
+$as_echo_n "checking for sgesv_ in -llapack... " >&6; }
+if test "${ac_cv_lib_lapack_sgesv_+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llapack  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sgesv_ ();
+int
+main ()
+{
+return sgesv_ ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_lapack_sgesv_=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_lapack_sgesv_=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_lapack_sgesv_" >&5
+$as_echo "$ac_cv_lib_lapack_sgesv_" >&6; }
+if test "x$ac_cv_lib_lapack_sgesv_" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLAPACK 1
+_ACEOF
+
+  LIBS="-llapack $LIBS"
+
+else
+  use_internal_lapack=true
+fi
+
+   if test x$use_internal_lapack != xtrue; then
+
+{ $as_echo "$as_me:$LINENO: checking for sgemm_ in -lblas" >&5
+$as_echo_n "checking for sgemm_ in -lblas... " >&6; }
+if test "${ac_cv_lib_blas_sgemm_+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lblas  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sgemm_ ();
+int
+main ()
+{
+return sgemm_ ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_blas_sgemm_=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_blas_sgemm_=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_blas_sgemm_" >&5
+$as_echo "$ac_cv_lib_blas_sgemm_" >&6; }
+if test "x$ac_cv_lib_blas_sgemm_" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBBLAS 1
+_ACEOF
+
+  LIBS="-lblas $LIBS"
+
+else
+  use_internal_lapack=true
+fi
+
+   fi
+
+cat >>confdefs.h <<\_ACEOF
+#define WITH_LAPACK /**/
+_ACEOF
+
+fi
+ if test x$use_internal_lapack = xtrue; then
+  LAPACK_LITE_TRUE=
+  LAPACK_LITE_FALSE='#'
+else
+  LAPACK_LITE_TRUE='#'
+  LAPACK_LITE_FALSE=
+fi
+
+ if test x$use_lapack = xtrue; then
+  USE_LAPACK_TRUE=
+  USE_LAPACK_FALSE='#'
+else
+  USE_LAPACK_TRUE='#'
+  USE_LAPACK_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for log in -lm" >&5
+$as_echo_n "checking for log in -lm... " >&6; }
+if test "${ac_cv_lib_m_log+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char log ();
+int
+main ()
+{
+return log ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_m_log=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_m_log=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_log" >&5
+$as_echo "$ac_cv_lib_m_log" >&6; }
+if test "x$ac_cv_lib_m_log" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+  LIBS="-lm $LIBS"
+
+fi
+
+
+threadsafe=auto
+# Check whether --enable-threads was given.
+if test "${enable_threads+set}" = set; then
+  enableval=$enable_threads;
+if test x$enableval != x; then
+   threadsafe=$enableval
+fi
+
+fi
+
+if test x$threadsafe != xno; then
+   threads=false
+               case $host in
+     *cygwin*|*mingw*|*wince*)
+       threads=true
+     ;;
+     *)
+
+for ac_header in pthread.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ threads=true
+fi
+
+done
+
+
+{ $as_echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_create ();
+int
+main ()
+{
+return pthread_create ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_pthread_pthread_create=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_pthread_pthread_create=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPTHREAD 1
+_ACEOF
+
+  LIBS="-lpthread $LIBS"
+
+fi
+
+     ;;
+   esac
+   if test x$threads = xtrue; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_THREADS /**/
+_ACEOF
+
+     threadsafe=yes
+   elif test x$threadsafe = xyes; then
+     { { $as_echo "$as_me:$LINENO: error: --enable-threads was given but test for thread functions failed!" >&5
+$as_echo "$as_me: error: --enable-threads was given but test for thread functions failed!" >&2;}
+   { (exit 1); exit 1; }; }
+   else
+     threadsafe=no
+   fi
+fi
+ if test x$threadsafe = xyes; then
+  USE_THREADS_TRUE=
+  USE_THREADS_FALSE='#'
+else
+  USE_THREADS_TRUE='#'
+  USE_THREADS_FALSE=
+fi
+
+
+fixed_point=false
+# Check whether --enable-fixed was given.
+if test "${enable_fixed+set}" = set; then
+  enableval=$enable_fixed;
+if test x$enableval = xyes; then
+   cat >>confdefs.h <<\_ACEOF
+#define FIXED_POINT 1
+_ACEOF
+
+   fixed_point=true
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define FIXED_POINT /**/
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_RADIX $enableval
+_ACEOF
+
+fi
+fi
+
+ if test x$fixed_point = xtrue; then
+  FIXED_POINT_TRUE=
+  FIXED_POINT_FALSE='#'
+else
+  FIXED_POINT_TRUE='#'
+  FIXED_POINT_FALSE=
+fi
+
+
+# Check whether --enable-fixed16 was given.
+if test "${enable_fixed16+set}" = set; then
+  enableval=$enable_fixed16;
+if test x$enableval = xyes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define FIXED_POINT /**/
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define FIXED16 /**/
+_ACEOF
+
+fi
+fi
+
+
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval=$enable_debug;
+cat >>confdefs.h <<\_ACEOF
+#define SPHINX_DEBUG /**/
+_ACEOF
+
+fi
+
+
+case $host in
+       *-*-linux*|*-*-uclinux*|*-*-freebsd*|*-*-netbsd*|*-*-openbsd*)
+               # Check for ALSA, fall back to OSS
+               if test "${ac_cv_header_alsa_asoundlib_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for alsa/asoundlib.h" >&5
+$as_echo_n "checking for alsa/asoundlib.h... " >&6; }
+if test "${ac_cv_header_alsa_asoundlib_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_alsa_asoundlib_h" >&5
+$as_echo "$ac_cv_header_alsa_asoundlib_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking alsa/asoundlib.h usability" >&5
+$as_echo_n "checking alsa/asoundlib.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <alsa/asoundlib.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking alsa/asoundlib.h presence" >&5
+$as_echo_n "checking alsa/asoundlib.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <alsa/asoundlib.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: alsa/asoundlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: alsa/asoundlib.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: alsa/asoundlib.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: alsa/asoundlib.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: alsa/asoundlib.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: alsa/asoundlib.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: alsa/asoundlib.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: alsa/asoundlib.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for alsa/asoundlib.h" >&5
+$as_echo_n "checking for alsa/asoundlib.h... " >&6; }
+if test "${ac_cv_header_alsa_asoundlib_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_alsa_asoundlib_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_alsa_asoundlib_h" >&5
+$as_echo "$ac_cv_header_alsa_asoundlib_h" >&6; }
+
+fi
+if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then
+
+
+cat >>confdefs.h <<\_ACEOF
+#define AD_BACKEND_ALSA /**/
+_ACEOF
+
+                       ad_files="ad_alsa.lo"
+                       ad_backend="AD_BACKEND_ALSA"
+
+{ $as_echo "$as_me:$LINENO: checking for snd_pcm_open in -lasound" >&5
+$as_echo_n "checking for snd_pcm_open in -lasound... " >&6; }
+if test "${ac_cv_lib_asound_snd_pcm_open+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lasound  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char snd_pcm_open ();
+int
+main ()
+{
+return snd_pcm_open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_asound_snd_pcm_open=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_asound_snd_pcm_open=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_pcm_open" >&5
+$as_echo "$ac_cv_lib_asound_snd_pcm_open" >&6; }
+if test "x$ac_cv_lib_asound_snd_pcm_open" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBASOUND 1
+_ACEOF
+
+  LIBS="-lasound $LIBS"
+
+fi
+
+else
+
+
+cat >>confdefs.h <<\_ACEOF
+#define AD_BACKEND_OSS /**/
+_ACEOF
+
+                       ad_files="ad_oss.lo"
+                       ad_backend="AD_BACKEND_OSS"
+
+fi
+
+
+               ;;
+       *-*-*cygwin*|*-*-*mingw*)
+               ad_files="play_win32.lo rec_win32.lo"
+               ad_libs="-lwinmm"
+               ad_backend="AD_BACKEND_WIN32"
+
+cat >>confdefs.h <<\_ACEOF
+#define AD_BACKEND_WIN32 /**/
+_ACEOF
+
+               ;;
+       *)
+               ad_files="ad_base.lo"
+               ad_backend="AD_BACKEND_NONE"
+               { $as_echo "$as_me:$LINENO: result: No audio interface for host type $host." >&5
+$as_echo "No audio interface for host type $host." >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define AD_BACKEND_NONE /**/
+_ACEOF
+
+               ;;
+esac
+
+
+
+
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6b'
+macro_revision='1.3017'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     $as_unset ac_script || ac_script=
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:9330: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:9333: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:9336: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:$LINENO: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:$LINENO: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 10541 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  lt_cv_cc_needs_belf=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_cc_needs_belf=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:$LINENO: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  lt_cv_ld_exported_symbols_list=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_ld_exported_symbols_list=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[012]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:$LINENO: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:11910: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:11914: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='--shared'
+       lt_prog_compiler_static='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:12249: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:12253: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:12354: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:12358: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:12409: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:12413: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         whole_archive_flag_spec=
+         tmp_sharedflag='--shared' ;;
+       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec=
+         hardcode_libdir_flag_spec_ld='-rpath $libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' ${wl}-bernotok'
+         allow_undefined_flag=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         whole_archive_flag_spec='$convenience'
+         archive_cmds_need_lc=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_flag_spec_ld='+b $libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+         export_dynamic_flag_spec='${wl}-E'
+       else
+         case $host_os in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+       pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+         archive_cmds_need_lc=no
+        else
+         archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+  shlibpath_overrides_runpath=yes
+fi
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
+$as_echo_n "checking for shl_load... " >&6; }
+if test "${ac_cv_func_shl_load+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_shl_load || defined __stub___shl_load
+choke me
+#endif
+
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_shl_load=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_shl_load=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+$as_echo "$ac_cv_func_shl_load" >&6; }
+if test "x$ac_cv_func_shl_load" = x""yes; then
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_shl_load=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
+$as_echo_n "checking for dlopen... " >&6; }
+if test "${ac_cv_func_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_dlopen || defined __stub___dlopen
+choke me
+#endif
+
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+$as_echo "$ac_cv_func_dlopen" >&6; }
+if test "x$ac_cv_func_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_svld_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_dld_link=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 15212 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 15308 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:$LINENO: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# Extract the first word of "doxygen", so it can be a program name with args.
+set dummy doxygen; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_HAVE_DOXYGEN+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_DOXYGEN"; then
+  ac_cv_prog_HAVE_DOXYGEN="$HAVE_DOXYGEN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_HAVE_DOXYGEN="yes"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_HAVE_DOXYGEN" && ac_cv_prog_HAVE_DOXYGEN="no"
+fi
+fi
+HAVE_DOXYGEN=$ac_cv_prog_HAVE_DOXYGEN
+if test -n "$HAVE_DOXYGEN"; then
+  { $as_echo "$as_me:$LINENO: result: $HAVE_DOXYGEN" >&5
+$as_echo "$HAVE_DOXYGEN" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "x$HAVE_DOXYGEN" = "xyes"; then
+  BUILD_DOXYGEN_TRUE=
+  BUILD_DOXYGEN_FALSE='#'
+else
+  BUILD_DOXYGEN_TRUE='#'
+  BUILD_DOXYGEN_FALSE=
+fi
+
+
+use_python=true
+PYTHON=python
+
+# Check whether --with-python was given.
+if test "${with_python+set}" = set; then
+  withval=$with_python;
+if test x$withval = xno; then
+   use_python=false
+   PYTHON=bogus
+elif test x$withval = xyes; then
+   # No specific python binary was given, so check for it in PATH
+   use_python=true
+   PYTHON=python
+else
+   # A python was given, assume it is in the user's PATH or is fully qualified
+   use_python=true
+   PYTHON="$withval"
+   PYTHON_CONFIG="$withval"-config
+fi
+
+fi
+
+if test "x$use_python" = xtrue -a "x$PYTHON" = xpython; then
+   # Extract the first word of "python", so it can be a program name with args.
+set dummy python; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PYTHON+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $PYTHON in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="bogus"
+  ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+if test -n "$PYTHON"; then
+  { $as_echo "$as_me:$LINENO: result: $PYTHON" >&5
+$as_echo "$PYTHON" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+   # Extract the first word of "python-config", so it can be a program name with args.
+set dummy python-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PYTHON_CONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $PYTHON_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PYTHON_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_PYTHON_CONFIG" && ac_cv_path_PYTHON_CONFIG="bogus"
+  ;;
+esac
+fi
+PYTHON_CONFIG=$ac_cv_path_PYTHON_CONFIG
+if test -n "$PYTHON_CONFIG"; then
+  { $as_echo "$as_me:$LINENO: result: $PYTHON_CONFIG" >&5
+$as_echo "$PYTHON_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test "x$use_python" = xtrue -a "x$PYTHON" != xbogus -a "x$PYTHON_CONFIG" != xbogus; then
+    PYTHON_INCLUDES=`"$PYTHON_CONFIG" --includes`
+    CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+    if test "${ac_cv_header_Python_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for Python.h" >&5
+$as_echo_n "checking for Python.h... " >&6; }
+if test "${ac_cv_header_Python_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_Python_h" >&5
+$as_echo "$ac_cv_header_Python_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking Python.h usability" >&5
+$as_echo_n "checking Python.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <Python.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking Python.h presence" >&5
+$as_echo_n "checking Python.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <Python.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: Python.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: Python.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: Python.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: Python.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: Python.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: Python.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: Python.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: Python.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: Python.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: Python.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: Python.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: Python.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: Python.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: Python.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: Python.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: Python.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for Python.h" >&5
+$as_echo_n "checking for Python.h... " >&6; }
+if test "${ac_cv_header_Python_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_Python_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_Python_h" >&5
+$as_echo "$ac_cv_header_Python_h" >&6; }
+
+fi
+if test "x$ac_cv_header_Python_h" = x""yes; then
+  use_python=true
+else
+  use_python=false
+fi
+
+
+else
+    use_python=false
+    PYTHON=bogus
+fi
+if test "x$use_python" != xtrue ; then
+    { $as_echo "$as_me:$LINENO: WARNING: Disabling python since development headers were not found" >&5
+$as_echo "$as_me: WARNING: Disabling python since development headers were not found" >&2;}
+fi
+ if test "x$use_python" = "xtrue"; then
+  BUILD_PYTHON_TRUE=
+  BUILD_PYTHON_FALSE='#'
+else
+  BUILD_PYTHON_TRUE='#'
+  BUILD_PYTHON_FALSE=
+fi
+
+
+
+if test "x$PYTHON" != xbogus; then
+   # Extract the first word of "cython", so it can be a program name with args.
+set dummy cython; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_HAVE_CYTHON+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_CYTHON"; then
+  ac_cv_prog_HAVE_CYTHON="$HAVE_CYTHON" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_HAVE_CYTHON="yes"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_HAVE_CYTHON" && ac_cv_prog_HAVE_CYTHON="no"
+fi
+fi
+HAVE_CYTHON=$ac_cv_prog_HAVE_CYTHON
+if test -n "$HAVE_CYTHON"; then
+  { $as_echo "$as_me:$LINENO: result: $HAVE_CYTHON" >&5
+$as_echo "$HAVE_CYTHON" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+ if test "x$HAVE_CYTHON" = "xyes"; then
+  BUILD_CYTHON_TRUE=
+  BUILD_CYTHON_FALSE='#'
+else
+  BUILD_CYTHON_TRUE='#'
+  BUILD_CYTHON_FALSE=
+fi
+
+
+# Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_HAVE_PKGCONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$HAVE_PKGCONFIG"; then
+  ac_cv_prog_HAVE_PKGCONFIG="$HAVE_PKGCONFIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_HAVE_PKGCONFIG="yes"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_HAVE_PKGCONFIG" && ac_cv_prog_HAVE_PKGCONFIG="no"
+fi
+fi
+HAVE_PKGCONFIG=$ac_cv_prog_HAVE_PKGCONFIG
+if test -n "$HAVE_PKGCONFIG"; then
+  { $as_echo "$as_me:$LINENO: result: $HAVE_PKGCONFIG" >&5
+$as_echo "$HAVE_PKGCONFIG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+if test "x$HAVE_PKGCONFIG" = "xyes"; then
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:$LINENO: checking for SNDFILE" >&5
+$as_echo_n "checking for SNDFILE... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$SNDFILE_CFLAGS"; then
+        pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sndfile\"") >&5
+  ($PKG_CONFIG --exists --print-errors "sndfile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$SNDFILE_LIBS"; then
+        pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sndfile\"") >&5
+  ($PKG_CONFIG --exists --print-errors "sndfile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sndfile"`
+        else
+               SNDFILE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sndfile"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$SNDFILE_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+                true
+elif test $pkg_failed = untried; then
+       true
+else
+       SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS
+       SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS
+        { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+       :
+fi
+
+for ac_header in sndfile.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+fi
+
+
+
+ac_config_files="$ac_config_files sphinxbase.pc Makefile include/Makefile include/sphinxbase/Makefile python/Makefile python/setup.py src/Makefile src/libsphinxad/Makefile src/libsphinxbase/Makefile src/libsphinxbase/util/Makefile src/libsphinxbase/feat/Makefile src/libsphinxbase/fe/Makefile src/libsphinxbase/lm/Makefile src/sphinx_fe/Makefile src/sphinx_cepview/Makefile src/sphinx_jsgf2fsg/Makefile src/sphinx_adtools/Makefile src/sphinx_lmtools/Makefile doc/Makefile doc/doxyfile test/Makefile test/unit/testfuncs.sh test/unit/Makefile test/unit/test_ad/Makefile test/unit/test_alloc/Makefile test/unit/test_bitvec/Makefile test/unit/test_case/Makefile test/unit/test_string/Makefile test/unit/test_cmdln/Makefile test/unit/test_hash/Makefile test/unit/test_matrix/Makefile test/unit/test_feat/Makefile test/unit/test_fe/Makefile test/unit/test_logmath/Makefile test/unit/test_ngram/Makefile test/unit/test_fsg/Makefile test/unit/test_thread/Makefile test/unit/test_util/Makefile test/regression/testfuncs.sh test/regression/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+if test -z "${LAPACK_LITE_TRUE}" && test -z "${LAPACK_LITE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"LAPACK_LITE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"LAPACK_LITE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${USE_LAPACK_TRUE}" && test -z "${USE_LAPACK_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"USE_LAPACK\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"USE_LAPACK\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${USE_THREADS_TRUE}" && test -z "${USE_THREADS_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"USE_THREADS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"USE_THREADS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${FIXED_POINT_TRUE}" && test -z "${FIXED_POINT_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"FIXED_POINT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"FIXED_POINT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${BUILD_DOXYGEN_TRUE}" && test -z "${BUILD_DOXYGEN_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_DOXYGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"BUILD_DOXYGEN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${BUILD_PYTHON_TRUE}" && test -z "${BUILD_PYTHON_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_PYTHON\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"BUILD_PYTHON\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${BUILD_CYTHON_TRUE}" && test -z "${BUILD_CYTHON_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"BUILD_CYTHON\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"BUILD_CYTHON\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by sphinxbase $as_me 0.7, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTION]... [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_version="\\
+sphinxbase config.status 0.7
+configured by $0, generated by GNU Autoconf 2.63,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { $as_echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { $as_echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+    "include/sphinx_config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/sphinx_config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "sphinxbase.pc") CONFIG_FILES="$CONFIG_FILES sphinxbase.pc" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+    "include/sphinxbase/Makefile") CONFIG_FILES="$CONFIG_FILES include/sphinxbase/Makefile" ;;
+    "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;;
+    "python/setup.py") CONFIG_FILES="$CONFIG_FILES python/setup.py" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/libsphinxad/Makefile") CONFIG_FILES="$CONFIG_FILES src/libsphinxad/Makefile" ;;
+    "src/libsphinxbase/Makefile") CONFIG_FILES="$CONFIG_FILES src/libsphinxbase/Makefile" ;;
+    "src/libsphinxbase/util/Makefile") CONFIG_FILES="$CONFIG_FILES src/libsphinxbase/util/Makefile" ;;
+    "src/libsphinxbase/feat/Makefile") CONFIG_FILES="$CONFIG_FILES src/libsphinxbase/feat/Makefile" ;;
+    "src/libsphinxbase/fe/Makefile") CONFIG_FILES="$CONFIG_FILES src/libsphinxbase/fe/Makefile" ;;
+    "src/libsphinxbase/lm/Makefile") CONFIG_FILES="$CONFIG_FILES src/libsphinxbase/lm/Makefile" ;;
+    "src/sphinx_fe/Makefile") CONFIG_FILES="$CONFIG_FILES src/sphinx_fe/Makefile" ;;
+    "src/sphinx_cepview/Makefile") CONFIG_FILES="$CONFIG_FILES src/sphinx_cepview/Makefile" ;;
+    "src/sphinx_jsgf2fsg/Makefile") CONFIG_FILES="$CONFIG_FILES src/sphinx_jsgf2fsg/Makefile" ;;
+    "src/sphinx_adtools/Makefile") CONFIG_FILES="$CONFIG_FILES src/sphinx_adtools/Makefile" ;;
+    "src/sphinx_lmtools/Makefile") CONFIG_FILES="$CONFIG_FILES src/sphinx_lmtools/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "doc/doxyfile") CONFIG_FILES="$CONFIG_FILES doc/doxyfile" ;;
+    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "test/unit/testfuncs.sh") CONFIG_FILES="$CONFIG_FILES test/unit/testfuncs.sh" ;;
+    "test/unit/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/Makefile" ;;
+    "test/unit/test_ad/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_ad/Makefile" ;;
+    "test/unit/test_alloc/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_alloc/Makefile" ;;
+    "test/unit/test_bitvec/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_bitvec/Makefile" ;;
+    "test/unit/test_case/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_case/Makefile" ;;
+    "test/unit/test_string/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_string/Makefile" ;;
+    "test/unit/test_cmdln/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_cmdln/Makefile" ;;
+    "test/unit/test_hash/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_hash/Makefile" ;;
+    "test/unit/test_matrix/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_matrix/Makefile" ;;
+    "test/unit/test_feat/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_feat/Makefile" ;;
+    "test/unit/test_fe/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_fe/Makefile" ;;
+    "test/unit/test_logmath/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_logmath/Makefile" ;;
+    "test/unit/test_ngram/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_ngram/Makefile" ;;
+    "test/unit/test_fsg/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_fsg/Makefile" ;;
+    "test/unit/test_thread/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_thread/Makefile" ;;
+    "test/unit/test_util/Makefile") CONFIG_FILES="$CONFIG_FILES test/unit/test_util/Makefile" ;;
+    "test/regression/testfuncs.sh") CONFIG_FILES="$CONFIG_FILES test/regression/testfuncs.sh" ;;
+    "test/regression/Makefile") CONFIG_FILES="$CONFIG_FILES test/regression/Makefile" ;;
+
+  *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   $as_echo "$as_me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr='\r'
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = "\a"
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+   { (exit 1); exit 1; }; }
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[    ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[      ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[    ]*#[    ]*define[       ][      ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+   { (exit 1); exit 1; }; }
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
+$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+        # (if the path is not absolute).  The absolute path cannot be DOS-style,
+        # because $ac_f cannot contain `:'.
+        test -f "$ac_f" ||
+          case $ac_f in
+          [\\/$]*) false;;
+          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+          esac ||
+          { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      ac_file_inputs="$ac_file_inputs '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+       `' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; } ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+       || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$_am_arg" : 'X\(//\)[^/]' \| \
+        X"$_am_arg" : 'X\(//\)$' \| \
+        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || # Autoconf 2.62 quotes --file arguments for eval, but not when files
+# are listed without --file.  Let's play safe and only enable the eval
+# if we detect the quoting.
+case $CONFIG_FILES in
+*\'*) eval set x "$CONFIG_FILES" ;;
+*)   set x $CONFIG_FILES ;;
+esac
+shift
+for mf
+do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+    dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    { as_dir=$dirpart/$fdir
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+ ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..3bb9e6d
--- /dev/null
@@ -0,0 +1,303 @@
+dnl Welcome to the Sphinx automated build system.
+dnl try not to hurt yourself ;)
+
+AC_INIT([sphinxbase], 0.7)
+AC_CONFIG_HEADERS([include/config.h include/sphinx_config.h])
+AM_INIT_AUTOMAKE([no-define])
+AC_CONFIG_MACRO_DIR([m4])
+
+CFLAGS=${CFLAGS:--g -O2 -Wall}
+
+AC_CANONICAL_HOST
+
+dnl
+dnl Set proper compiler flags and such for some platforms
+dnl
+case $host in
+     arm-wince-pe*)
+       CFLAGS=${CFLAGS:--march=armv4 -mapcs-32 -malignment-traps}
+       LIBS='-lc -lgcc -lwinsock -lcoredll'
+       CFLAGS="$CFLAGS -DNEWLIB -DSARM -DWIN32 -DGNUWINCE"
+       ;;
+     *uclinux*)
+       # uClinux needs special "flat" binaries
+       LDFLAGS="$LDFLAGS -Wl,-elf2flt"
+       ;;
+     *)
+     ;;
+esac     
+
+AC_ISC_POSIX
+AC_PROG_CC
+AC_PROG_CC_STDC
+
+# We don't bother ourselves with flex checks until the rest of the world has an up-to-date Flex
+# We need specific bison extensions, so check for bison
+AC_CHECK_PROG(YACC, bison, [bison -y], no)
+if test "x$YACC" = "xno";
+then
+    AC_MSG_ERROR([You need to install bison])
+fi
+AC_ARG_VAR(YACC,[Bison command])
+
+AC_HEADER_STDC
+AC_C_BIGENDIAN
+AC_TYPE_SIGNAL
+AC_CHECK_TYPES(long long)
+AC_CHECK_SIZEOF(long long)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_FUNCS([popen perror snprintf])
+AC_CHECK_HEADER(errno.h)
+AM_ICONV
+
+dnl
+dnl Check for Lapack stuff unless disabled
+dnl
+use_lapack=true
+use_internal_lapack=false
+AC_ARG_WITH(lapack,
+       AS_HELP_STRING([--without-lapack],
+                      [Disable matrix algebra support (depends on LAPACK)]),[
+if test x$withval = xno; then
+   use_lapack=false
+fi
+])
+if test x$use_lapack = xtrue; then
+   AC_CHECK_LIB(lapack, sgesv_,,use_internal_lapack=true)
+   if test x$use_internal_lapack != xtrue; then
+      AC_CHECK_LIB(blas, sgemm_,,use_internal_lapack=true)
+   fi
+   AC_DEFINE(WITH_LAPACK, [], [Enable matrix algebra with LAPACK])
+fi
+AM_CONDITIONAL(LAPACK_LITE, test x$use_internal_lapack = xtrue)
+AM_CONDITIONAL(USE_LAPACK, test x$use_lapack = xtrue)
+
+dnl
+dnl Just make sure we have this...
+dnl
+AC_CHECK_LIB(m, log)
+
+dnl
+dnl Enable thread-safe versions of some internal functions
+dnl
+threadsafe=auto
+AC_ARG_ENABLE(threads,
+       AS_HELP_STRING([--disable-threads],
+                      [Disable thread-safe versions of memory allocation functions (default: check)]),[
+if test x$enableval != x; then
+   threadsafe=$enableval
+fi
+])
+if test x$threadsafe != xno; then
+   threads=false
+   dnl
+   dnl Can't seem to check for Windows API functions, but that's okay
+   dnl because we know they will be there...
+   dnl
+   case $host in
+     *cygwin*|*mingw*|*wince*)
+       threads=true
+     ;;
+     *)
+        AC_CHECK_HEADERS([pthread.h], [threads=true])
+       AC_CHECK_LIB(pthread, pthread_create)
+     ;;
+   esac
+   if test x$threads = xtrue; then
+     AC_DEFINE(ENABLE_THREADS, [], [Enable thread safety])
+     threadsafe=yes
+   elif test x$threadsafe = xyes; then
+     AC_MSG_ERROR(--enable-threads was given but test for thread functions failed!)
+   else
+     threadsafe=no
+   fi
+fi
+AM_CONDITIONAL(USE_THREADS, test x$threadsafe = xyes)
+
+dnl
+dnl Allow compilation for fixed or floating-point MFCC and GMM computation
+dnl
+fixed_point=false
+AC_ARG_ENABLE(fixed,
+       AS_HELP_STRING([--enable-fixed=RADIX],
+                      [Use 32-bit fixed-point for MFCC and GMM computation,
+                       optionally specifying a radix point]),[
+if test x$enableval = xyes; then
+   AC_DEFINE(FIXED_POINT)
+   fixed_point=true
+else
+   AC_DEFINE(FIXED_POINT, [], [Use fixed-point computation])
+   AC_DEFINE_UNQUOTED(DEFAULT_RADIX,$enableval,[Default radix point for fixed-point])
+fi])
+AM_CONDITIONAL(FIXED_POINT, test x$fixed_point = xtrue)
+
+dnl
+dnl Enable 16-bit fixed-point (Q15) format for MFCC (less accurate, more fast)
+dnl
+AC_ARG_ENABLE(fixed16,
+       AS_HELP_STRING([--enable-fixed16],
+                      [Use 16-bit fixed-point for MFCC computation]),[
+if test x$enableval = xyes; then
+   AC_DEFINE(FIXED_POINT, [], [Use fixed-point computation])
+   AC_DEFINE(FIXED16, [], [Use Q15 fixed-point computation])
+fi])
+
+dnl
+dnl Enable debugging
+dnl
+AC_ARG_ENABLE(debug,
+       AS_HELP_STRING([--enable-debug],
+                       [Enable debugging output]),
+       AC_DEFINE(SPHINX_DEBUG, [],
+                 [Enable debugging output]))
+
+dnl
+dnl determine audio type or use none if none supported on this platform
+dnl
+case $host in
+       *-*-linux*|*-*-uclinux*|*-*-freebsd*|*-*-netbsd*|*-*-openbsd*)
+               # Check for ALSA, fall back to OSS
+               AC_CHECK_HEADER(alsa/asoundlib.h,[
+                       AC_DEFINE(AD_BACKEND_ALSA, [],
+                                [Use ALSA library for sound I/O])
+                       ad_files="ad_alsa.lo"
+                       ad_backend="AD_BACKEND_ALSA"
+                       AC_CHECK_LIB(asound, snd_pcm_open)],[
+                       AC_DEFINE(AD_BACKEND_OSS, [],
+                                [Use OSS for sound I/O])
+                       ad_files="ad_oss.lo"
+                       ad_backend="AD_BACKEND_OSS"
+                       ])
+               ;;
+       *-*-*cygwin*|*-*-*mingw*)
+               ad_files="play_win32.lo rec_win32.lo"
+               ad_libs="-lwinmm"
+               ad_backend="AD_BACKEND_WIN32"
+               AC_DEFINE(AD_BACKEND_WIN32, [], [Use WinMM interface for sound I/O])
+               ;;
+       *)
+               ad_files="ad_base.lo"
+               ad_backend="AD_BACKEND_NONE"
+               AC_MSG_RESULT([No audio interface for host type $host.])
+               AC_DEFINE(AD_BACKEND_NONE, [], [No interface for sound I/O])
+               ;;
+esac
+
+AC_SUBST(ad_files)
+AC_SUBST(ad_libs)
+AC_SUBST(ad_backend)
+
+AM_PROG_LIBTOOL
+
+dnl
+dnl Check for Doxygen, and build dox if present
+dnl
+AC_CHECK_PROG(HAVE_DOXYGEN, doxygen, yes, no)
+AM_CONDITIONAL(BUILD_DOXYGEN, test "x$HAVE_DOXYGEN" = "xyes")
+
+dnl
+dnl Check for Python, and build python module if present
+dnl
+use_python=true
+PYTHON=python
+AC_ARG_WITH(python,
+       AS_HELP_STRING([--without-python],
+                      [Disable Python extension]),[
+if test x$withval = xno; then
+   use_python=false
+   PYTHON=bogus
+elif test x$withval = xyes; then
+   # No specific python binary was given, so check for it in PATH
+   use_python=true
+   PYTHON=python
+else
+   # A python was given, assume it is in the user's PATH or is fully qualified
+   use_python=true
+   PYTHON="$withval"
+   PYTHON_CONFIG="$withval"-config
+fi
+])
+if test "x$use_python" = xtrue -a "x$PYTHON" = xpython; then
+   AC_PATH_PROG(PYTHON, python, bogus)
+   AC_PATH_PROG(PYTHON_CONFIG, python-config, bogus)
+fi
+if test "x$use_python" = xtrue -a "x$PYTHON" != xbogus -a "x$PYTHON_CONFIG" != xbogus; then
+    PYTHON_INCLUDES=`"$PYTHON_CONFIG" --includes` 
+    CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+    AC_CHECK_HEADER(Python.h,use_python=true,use_python=false)
+else
+    use_python=false
+    PYTHON=bogus
+fi
+if test "x$use_python" != xtrue ; then
+    AC_WARN([Disabling python since development headers were not found])
+fi
+AM_CONDITIONAL(BUILD_PYTHON, test "x$use_python" = "xtrue")
+AC_SUBST(PYTHON)
+
+dnl
+dnl Check for Cython, and rebuild python module if present
+dnl
+if test "x$PYTHON" != xbogus; then
+   AC_CHECK_PROG(HAVE_CYTHON, cython, yes, no)
+fi
+AM_CONDITIONAL(BUILD_CYTHON, test "x$HAVE_CYTHON" = "xyes")
+
+dnl
+dnl Check for pkgconfig
+dnl
+AC_CHECK_PROG(HAVE_PKGCONFIG, pkg-config, yes, no)
+
+dnl
+dnl Check for libsndfile
+dnl
+if test "x$HAVE_PKGCONFIG" = "xyes"; then
+   PKG_CHECK_MODULES(SNDFILE,sndfile,,true)
+   AC_CHECK_HEADERS([sndfile.h])
+fi
+AC_SUBST(SNDFILE_LIBS)
+AC_SUBST(SNDFILE_CFLAGS)
+
+AC_CONFIG_FILES([
+sphinxbase.pc
+Makefile
+include/Makefile
+include/sphinxbase/Makefile
+python/Makefile
+python/setup.py
+src/Makefile
+src/libsphinxad/Makefile
+src/libsphinxbase/Makefile
+src/libsphinxbase/util/Makefile
+src/libsphinxbase/feat/Makefile
+src/libsphinxbase/fe/Makefile
+src/libsphinxbase/lm/Makefile
+src/sphinx_fe/Makefile
+src/sphinx_cepview/Makefile
+src/sphinx_jsgf2fsg/Makefile
+src/sphinx_adtools/Makefile
+src/sphinx_lmtools/Makefile
+doc/Makefile
+doc/doxyfile
+test/Makefile
+test/unit/testfuncs.sh
+test/unit/Makefile
+test/unit/test_ad/Makefile
+test/unit/test_alloc/Makefile
+test/unit/test_bitvec/Makefile
+test/unit/test_case/Makefile
+test/unit/test_string/Makefile
+test/unit/test_cmdln/Makefile
+test/unit/test_hash/Makefile
+test/unit/test_matrix/Makefile
+test/unit/test_feat/Makefile
+test/unit/test_fe/Makefile
+test/unit/test_logmath/Makefile
+test/unit/test_ngram/Makefile
+test/unit/test_fsg/Makefile
+test/unit/test_thread/Makefile
+test/unit/test_util/Makefile
+test/regression/testfuncs.sh
+test/regression/Makefile
+])
+AC_OUTPUT
diff --git a/depcomp b/depcomp
new file mode 100755 (executable)
index 0000000..e5f9736
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,589 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2007-03-29.01
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
+# Foundation, Inc.
+
+# 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, 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.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[     ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::   \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..57a30f0
--- /dev/null
@@ -0,0 +1,65 @@
+EXTRA_DIST = args2man.pl \
+       sphinx_cepview.1.in \
+       sphinx_fe.1.in \
+       sphinx_pitch.1.in \
+       sphinx_cont_adseg.1 \
+       sphinx_cont_fileseg.1 \
+       sphinx_lm_sort.1
+
+if BUILD_DOXYGEN
+all-local: html/index.html
+endif
+
+headers =                                              \
+       $(top_srcdir)/include/sphinxbase/ad.h                   \
+       $(top_srcdir)/include/sphinxbase/agc.h                  \
+       $(top_srcdir)/include/sphinxbase/bio.h                  \
+       $(top_srcdir)/include/sphinxbase/bitvec.h                       \
+       $(top_srcdir)/include/sphinxbase/byteorder.h            \
+       $(top_srcdir)/include/sphinxbase/case.h                 \
+       $(top_srcdir)/include/sphinxbase/ckd_alloc.h            \
+       $(top_srcdir)/include/sphinxbase/clapack_lite.h         \
+       $(top_srcdir)/include/sphinxbase/cmd_ln.h                       \
+       $(top_srcdir)/include/sphinxbase/cmn.h                  \
+       $(top_srcdir)/include/sphinxbase/cont_ad.h                      \
+       $(top_srcdir)/include/sphinxbase/err.h                  \
+       $(top_srcdir)/include/sphinxbase/f2c.h                  \
+       $(top_srcdir)/include/sphinxbase/feat.h                 \
+       $(top_srcdir)/include/sphinxbase/fe.h                   \
+       $(top_srcdir)/include/sphinxbase/filename.h             \
+       $(top_srcdir)/include/sphinxbase/fixpoint.h             \
+       $(top_srcdir)/include/sphinxbase/fsg_model.h            \
+       $(top_srcdir)/include/sphinxbase/genrand.h                      \
+       $(top_srcdir)/include/sphinxbase/glist.h                        \
+       $(top_srcdir)/include/sphinxbase/hash_table.h           \
+       $(top_srcdir)/include/sphinxbase/heap.h                 \
+       $(top_srcdir)/include/sphinxbase/info.h                 \
+       $(top_srcdir)/include/sphinxbase/jsgf.h                 \
+       $(top_srcdir)/include/sphinxbase/libutil.h                      \
+       $(top_srcdir)/include/sphinxbase/listelem_alloc.h               \
+       $(top_srcdir)/include/sphinxbase/logmath.h                      \
+       $(top_srcdir)/include/sphinxbase/matrix.h                       \
+       $(top_srcdir)/include/sphinxbase/mmio.h                 \
+       $(top_srcdir)/include/sphinxbase/mulaw.h                        \
+       $(top_srcdir)/include/sphinxbase/ngram_model.h          \
+       $(top_srcdir)/include/sphinxbase/pio.h                  \
+       $(top_srcdir)/include/sphinxbase/prim_type.h            \
+       $(top_srcdir)/include/sphinxbase/profile.h                      \
+       $(top_srcdir)/include/sphinxbase/sphinxbase_export.h    \
+       $(top_srcdir)/include/sphinxbase/strfuncs.h             \
+       $(top_srcdir)/include/sphinxbase/unlimit.h                      \
+       $(top_srcdir)/include/sphinxbase/yin.h
+
+latex/refman.pdf: doxyfile $(headers)
+       doxygen
+       $(MAKE) -C latex refman.pdf
+
+html/index.html: doxyfile $(headers)
+       doxygen
+
+clean-local:
+       -rm -rf html latex doxytags
+
+# Totally CMU-specific rule for uploading documentation
+upload: html/index.html
+       rsync -av html/ fife:/usr12/apache2/htdocs/sphinx/doc/doxygen/sphinxbase/
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644 (file)
index 0000000..199a5f4
--- /dev/null
@@ -0,0 +1,413 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/doxyfile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES = doxyfile
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = args2man.pl \
+       sphinx_cepview.1.in \
+       sphinx_fe.1.in \
+       sphinx_pitch.1.in \
+       sphinx_cont_adseg.1 \
+       sphinx_cont_fileseg.1 \
+       sphinx_lm_sort.1
+
+headers = \
+       $(top_srcdir)/include/sphinxbase/ad.h                   \
+       $(top_srcdir)/include/sphinxbase/agc.h                  \
+       $(top_srcdir)/include/sphinxbase/bio.h                  \
+       $(top_srcdir)/include/sphinxbase/bitvec.h                       \
+       $(top_srcdir)/include/sphinxbase/byteorder.h            \
+       $(top_srcdir)/include/sphinxbase/case.h                 \
+       $(top_srcdir)/include/sphinxbase/ckd_alloc.h            \
+       $(top_srcdir)/include/sphinxbase/clapack_lite.h         \
+       $(top_srcdir)/include/sphinxbase/cmd_ln.h                       \
+       $(top_srcdir)/include/sphinxbase/cmn.h                  \
+       $(top_srcdir)/include/sphinxbase/cont_ad.h                      \
+       $(top_srcdir)/include/sphinxbase/err.h                  \
+       $(top_srcdir)/include/sphinxbase/f2c.h                  \
+       $(top_srcdir)/include/sphinxbase/feat.h                 \
+       $(top_srcdir)/include/sphinxbase/fe.h                   \
+       $(top_srcdir)/include/sphinxbase/filename.h             \
+       $(top_srcdir)/include/sphinxbase/fixpoint.h             \
+       $(top_srcdir)/include/sphinxbase/fsg_model.h            \
+       $(top_srcdir)/include/sphinxbase/genrand.h                      \
+       $(top_srcdir)/include/sphinxbase/glist.h                        \
+       $(top_srcdir)/include/sphinxbase/hash_table.h           \
+       $(top_srcdir)/include/sphinxbase/heap.h                 \
+       $(top_srcdir)/include/sphinxbase/info.h                 \
+       $(top_srcdir)/include/sphinxbase/jsgf.h                 \
+       $(top_srcdir)/include/sphinxbase/libutil.h                      \
+       $(top_srcdir)/include/sphinxbase/listelem_alloc.h               \
+       $(top_srcdir)/include/sphinxbase/logmath.h                      \
+       $(top_srcdir)/include/sphinxbase/matrix.h                       \
+       $(top_srcdir)/include/sphinxbase/mmio.h                 \
+       $(top_srcdir)/include/sphinxbase/mulaw.h                        \
+       $(top_srcdir)/include/sphinxbase/ngram_model.h          \
+       $(top_srcdir)/include/sphinxbase/pio.h                  \
+       $(top_srcdir)/include/sphinxbase/prim_type.h            \
+       $(top_srcdir)/include/sphinxbase/profile.h                      \
+       $(top_srcdir)/include/sphinxbase/sphinxbase_export.h    \
+       $(top_srcdir)/include/sphinxbase/strfuncs.h             \
+       $(top_srcdir)/include/sphinxbase/unlimit.h                      \
+       $(top_srcdir)/include/sphinxbase/yin.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  doc/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
+doxyfile: $(top_builddir)/config.status $(srcdir)/doxyfile.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+@BUILD_DOXYGEN_FALSE@all-local:
+all-am: Makefile all-local
+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:
+
+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: clean-am
+
+clean-am: clean-generic clean-libtool clean-local 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-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+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 mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+       clean-libtool clean-local distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am
+
+
+@BUILD_DOXYGEN_TRUE@all-local: html/index.html
+
+latex/refman.pdf: doxyfile $(headers)
+       doxygen
+       $(MAKE) -C latex refman.pdf
+
+html/index.html: doxyfile $(headers)
+       doxygen
+
+clean-local:
+       -rm -rf html latex doxytags
+
+# Totally CMU-specific rule for uploading documentation
+upload: html/index.html
+       rsync -av html/ fife:/usr12/apache2/htdocs/sphinx/doc/doxygen/sphinxbase/
+# 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/doc/args2man.pl b/doc/args2man.pl
new file mode 100755 (executable)
index 0000000..3fa2b3f
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/env perl
+use strict;
+use Pod::Usage;
+
+my $program = shift;
+pod2usage(2) unless defined($program);
+
+open ARGTEXT, "$program 2>&1 |" or die "Failed to run $program: $!";
+my $inargs = 0;
+my @args;
+while (<ARGTEXT>) {
+    chomp;
+    if (/^\[NAME/) {
+       $inargs = 1;
+       next;
+    }
+    next unless $inargs;
+    last if /^\s*$/;
+    my ($name, $deflt, $descr) = /^(\S+)\s+(\S+)\s+(.*)$/;
+    push @args, [$name, $deflt, $descr];
+}
+die "No arguments found!" unless @args;
+
+while (<>) {
+    if (/\.\\\" ### ARGUMENTS ###/) {
+       foreach (@args) {
+           my ($name, $deflt, $descr) = @$_;
+           $name =~ s/-/\\-/g;
+           $descr =~ s/ (-\S+)/ \\fB\\$1\\fR/g;
+           print <<"EOA";
+.TP
+.B $name
+$descr
+EOA
+       }
+    }
+    else {
+       print;
+    }
+}
+
+__END__
+
+=head1 NAME
+
+sphinx_args2man - Generate manual pages from the output of Sphinx programs
+
+=head1 SYNOPSIS
+
+B<sphinx_args2man> I<PROGRAM> E<lt> I<TEMPLATE> E<gt> I<OUTPUT>
+
+=head1 DESCRIPTION
+
+This program runs a Sphinx program I<PROGRAM>, reads a template file
+from standard input, and writes a manual page in L<man(7)> format to
+standard output.
+
+The template file is a manual page in L<man(7)> format, containing a
+comment line of the form:
+
+ .\" ### ARGUMENTS ###
+
+Which will be replaced in the output with the arguments and their
+descriptions from I<PROGRAM>.
+
+=head1 AUTHOR
+
+David Huggins-Daines <dhuggins@cs.cmu.edu>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2007 Carnegie Mellon University.  You may copy and
+distribute this file under the same conditions as the rest of
+PocketSphinx.  See the file COPYING for more information.
+
+=cut
diff --git a/doc/doxyfile.in b/doc/doxyfile.in
new file mode 100644 (file)
index 0000000..ebab856
--- /dev/null
@@ -0,0 +1,1257 @@
+# Doxyfile 1.5.2
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file that 
+# follow. The default is UTF-8 which is also the encoding used for all text before 
+# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into 
+# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of 
+# possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = SphinxBase
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 0.6
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = @builddir@
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, 
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, 
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, 
+# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = @top_srcdir@
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
+# include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from the 
+# version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = @top_srcdir@/include @top_srcdir@/src
+
+# This tag can be used to specify the character encoding of the source files that 
+# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
+# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. 
+# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = */.svn/* */.deps/* */.libs/* *.py
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the output. 
+# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, 
+# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = letter
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = @builddir@/doxytags
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to 
+# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to 
+# specify the directory where the mscgen tool resides. If left empty the tool is assumed to 
+# be found in the default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a caller dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable caller graphs for selected 
+# functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen will always 
+# show the root nodes and its direct children regardless of this setting.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, which results in a white background. 
+# Warning: Depending on the platform used, enabling this option may lead to 
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/doc/sphinx_cepview.1.in b/doc/sphinx_cepview.1.in
new file mode 100644 (file)
index 0000000..8169c18
--- /dev/null
@@ -0,0 +1,18 @@
+.TH SPHINX_CEPVIEW 1 "2007-08-27"
+.SH NAME
+sphinx_cepview \- View acoustic feature files
+.SH SYNOPSIS
+.B sphinx_cepview
+[\fI options \fR]...
+.SH DESCRIPTION
+.PP
+This program reads acoustic feature files in Sphinx format and
+displays their contents as text for inspection.
+.\" ### ARGUMENTS ###
+.SH AUTHOR
+Written by numerous people at CMU from 1994 onwards.  This manual page
+by David Huggins-Daines <dhuggins@cs.cmu.edu>
+.SH COPYRIGHT
+Copyright \(co 1994-2007 Carnegie Mellon University.  See the file
+\fICOPYING\fR included with this package for more information.
+.br
diff --git a/doc/sphinx_cont_adseg.1 b/doc/sphinx_cont_adseg.1
new file mode 100644 (file)
index 0000000..e03ccb8
--- /dev/null
@@ -0,0 +1,23 @@
+.TH SPHINX_CONT_ADSEG 1 "2008-05-12"
+.SH NAME
+sphinx_cont_adseg \- Read audio from the audio device and segment it
+.SH SYNOPSIS
+.B sphinx_cont_adseg
+.I sampling-rate
+.I silence-threshold
+.SH DESCRIPTION
+.PP
+This program reads audio from the system audio device and segments it
+into individual non-silence regions.  The argument
+.I sampling-rate
+is the sampling rate to read audio at (e.g. 16000), while the argument
+.I silence-threshold
+is the number of seconds to wait before deciding that a non-silence
+region is done (e.g. 1.0).
+.SH AUTHOR
+Written by M. K. Ravishankar <rkm@cs.cmu.edu>.  This manual page
+by David Huggins-Daines <dhuggins@cs.cmu.edu>
+.SH COPYRIGHT
+Copyright \(co 1999-2001 Carnegie Mellon University.  See the file
+\fICOPYING\fR included with this package for more information.
+.br
diff --git a/doc/sphinx_cont_fileseg.1 b/doc/sphinx_cont_fileseg.1
new file mode 100644 (file)
index 0000000..3eba531
--- /dev/null
@@ -0,0 +1,79 @@
+.TH SPHINX_CONT_ADSEG 1 "2008-05-12"
+.SH NAME
+sphinx_cont_fileseg \- Segment a waveform file into non-silence regions
+.SH SYNOPSIS
+.B sphinx_cont_fileseg
+[
+.B -? | -h
+]
+[
+.B \-d | \-debug
+]
+[
+.B \-sps
+.I sampling-rate (16000)
+]
+[
+.B \-b | \-byteswap
+]
+[
+{
+.B \-s | \-silsep
+}
+.I length-silence-separator(sec) (0.5)
+]
+[
+.B \-w | \-writeseg
+]
+[
+.B \-min-noise
+.I min-noise
+]
+[
+.B \-max-noise
+.I max-noise
+]
+[
+.B \-delta-sil
+.I delta-sil
+]
+[
+.B \-delta-speech
+.I delta-speech
+]
+[
+.B \-sil-onset
+.I sil-onset
+]
+[
+.B -speech-onset
+.I speech-onset
+]
+[
+.B \-adapt-rate
+.I adapt-rate
+]
+[
+.B \-max-adreadsize 
+.I ad_read_blksize
+]
+[
+.B -c
+.I copy-input-file
+]
+[
+.B -r | -rawmode
+]
+.B -i
+.I input-file
+.SH DESCRIPTION
+.PP
+This program reads an input file and segments it
+into individual non-silence regions.
+.SH AUTHOR
+Written by M. K. Ravishankar <rkm@cs.cmu.edu>.  This (rather lousy) manual page
+by David Huggins-Daines <dhuggins@cs.cmu.edu>
+.SH COPYRIGHT
+Copyright \(co 1999-2001 Carnegie Mellon University.  See the file
+\fICOPYING\fR included with this package for more information.
+.br
diff --git a/doc/sphinx_fe.1.in b/doc/sphinx_fe.1.in
new file mode 100644 (file)
index 0000000..2470b42
--- /dev/null
@@ -0,0 +1,29 @@
+.TH SPHINX_FE 1 "2007-08-27"
+.SH NAME
+sphinx_fe \- Convert audio files to acoustic feature files
+.SH SYNOPSIS
+.B sphinx_fe
+[\fI options \fR]...
+.SH DESCRIPTION
+.PP
+This program converts audio files (in either Microsoft WAV, NIST
+Sphere, or raw format) to acoustic feature files for input to
+batch-mode speech recognition.  The resulting files are also useful
+for various other things.  A list of options follows:
+.\" ### ARGUMENTS ###
+.PP
+Currently the only kind of features supported are MFCCs (mel-frequency
+cepstral coefficients).  There are numerous options which control the
+properties of the output features.  It is \fBVERY\fR important that
+you document the specific set of flags used to create any given set of
+feature files, since this information is \fBNOT\fR recorded in the
+files themselves, and any mismatch between the parameters used to
+extract features for recognition and those used to extract features
+for training will cause recognition to fail.
+.SH AUTHOR
+Written by numerous people at CMU from 1994 onwards.  This manual page
+by David Huggins-Daines <dhuggins@cs.cmu.edu>
+.SH COPYRIGHT
+Copyright \(co 1994-2007 Carnegie Mellon University.  See the file
+\fICOPYING\fR included with this package for more information.
+.br
diff --git a/doc/sphinx_lm_sort.1 b/doc/sphinx_lm_sort.1
new file mode 100644 (file)
index 0000000..bd5346e
--- /dev/null
@@ -0,0 +1,21 @@
+.TH SPHINX_LM_SORT 1 "2008-06-26"
+.SH NAME
+sphinx_lm_sort \- Order N-Grams in a language model for Sphinx
+.SH SYNOPSIS
+.B sphinx_lm_sort
+<
+.I input_lm
+>
+.I output_lm
+.SH DESCRIPTION
+.PP
+This program arranges the N-Grams in an ARPA-format language model to
+be acceptable to Sphinx.  This is necessary if you created the
+language model with SRILM or any other tool which is not as strict
+about ordering N-Grams in its output.
+.SH AUTHOR
+David Huggins-Daines <dhuggins@cs.cmu.edu>
+.SH COPYRIGHT
+Copyright \(co 2008 Carnegie Mellon University.  See the file
+\fICOPYING\fR included with this package for more information.
+.br
diff --git a/doc/sphinx_pitch.1.in b/doc/sphinx_pitch.1.in
new file mode 100644 (file)
index 0000000..fa44ff0
--- /dev/null
@@ -0,0 +1,16 @@
+.TH SPHINX_PITCH 1 "2007-05-12"
+.SH NAME
+sphinx_pitch \- Extract pitch from audio files
+.SH SYNOPSIS
+.B sphinx_pitch
+[\fI options \fR]...
+.SH DESCRIPTION
+.PP
+This program reads audio files and analyzes them for pitch and voicing.
+.\" ### ARGUMENTS ###
+.SH AUTHOR
+David Huggins-Daines <dhuggins@cs.cmu.edu>
+.SH COPYRIGHT
+Copyright \(co 2007-2008 Carnegie Mellon University.  See the file
+\fICOPYING\fR included with this package for more information.
+.br
diff --git a/group/ABLD.BAT b/group/ABLD.BAT
new file mode 100644 (file)
index 0000000..bdb4790
--- /dev/null
@@ -0,0 +1,15 @@
+@ECHO OFF\r
+\r
+REM Bldmake-generated batch file - ABLD.BAT\r
+REM ** DO NOT EDIT **\r
+\r
+perl -S ABLD.PL "\sphinx\sphinxbase\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9\r
+if errorlevel==1 goto CheckPerl\r
+goto End\r
+\r
+:CheckPerl\r
+perl -v >NUL\r
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?\r
+goto End\r
+\r
+:End\r
diff --git a/group/bld.inf b/group/bld.inf
new file mode 100644 (file)
index 0000000..bf7b89b
--- /dev/null
@@ -0,0 +1,15 @@
+/*\r
+============================================================================\r
+ Name          : bld.inf\r
+ Author          : \r
+ Copyright   : Your copyright notice\r
+ Description : This file provides the information required for building the\r
+                               whole of a sphinxbase_s60.\r
+============================================================================\r
+*/\r
+\r
+PRJ_PLATFORMS\r
+DEFAULT\r
+\r
+PRJ_MMPFILES\r
+sphinxbase.mmp\r
diff --git a/group/sphinxbase.mmp b/group/sphinxbase.mmp
new file mode 100644 (file)
index 0000000..e7b213d
--- /dev/null
@@ -0,0 +1,40 @@
+/*\r
+============================================================================\r
+ Name          : sphinxbase.mmp\r
+ Author          : \r
+ Copyright   : Your copyright notice\r
+ Description : This is the project specification file for sphinxbase.\r
+============================================================================\r
+*/\r
+\r
+TARGET           sphinxbase.dll\r
+TARGETTYPE       STDDLL\r
+EPOCALLOWDLLDATA \r
+UID 0x20004c45 0xe000acd4\r
+EPOCSTACKSIZE   0x14000\r
+\r
+USERINCLUDE     ..\include ..\include\sphinxbase ..\include\s60\r
+SYSTEMINCLUDE   \epoc32\include \epoc32\include\stdapis \epoc32\include\stdapis\sys\r
+SYSTEMINCLUDE \epoc32\include\mmf\server \epoc32\include\platform\r
+\r
+#ifdef ENABLE_ABIV2_MODE\r
+DEBUGGABLE_UDEBONLY\r
+#endif\r
+SOURCEPATH ..\src\libsphinxad\r
+SOURCE cont_ad_base.c\r
+SOURCEPATH ..\src\libsphinxbase\fe\r
+SOURCE fe_interface.c fe_sigproc.c fe_warp.c fe_warp_affine.c fe_warp_inverse_linear.c fe_warp_piecewise_linear.c fixlog.c yin.c\r
+SOURCEPATH ..\src\libsphinxbase\feat\r
+SOURCE agc.c cmn.c cmn_prior.c feat.c lda.c\r
+SOURCEPATH ..\src\libsphinxbase\lm\r
+SOURCE fsg_model.c jsgf.c jsgf_parser.c jsgf_scanner.c lm3g_model.c ngram_model.c ngram_model_arpa.c ngram_model_dmp.c ngram_model_dmp32.c ngram_model_set.c\r
+SOURCEPATH ..\src\libsphinxbase\util\r
+SOURCE bio.c bitvec.c blas_lite.c case.c ckd_alloc.c cmd_ln.c dtoa.c err.c f2c_lite.c filename.c genrand.c glist.c hash_table.c heap.c huff_code.c info.c listelem_alloc.c logmath.c matrix.c mmio.c pio.c profile.c sbthread.c slamch.c slapack_lite.c strfuncs.c unlimit.c utf8.c\r
+SOURCEPATH ..\src\libsphinxad\r
+SOURCE ad_s60.cpp\r
+\r
+\r
+/*EXPORTUNFROZEN*/ /*comment to release*/\r
+\r
+LIBRARY libm.lib libpthread.lib mediaclientaudioinputstream.lib\r
+CAPABILITY AllFiles MultimediaDD UserEnvironment\r
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644 (file)
index 0000000..993b5c6
--- /dev/null
@@ -0,0 +1,14 @@
+SUBDIRS = sphinxbase
+
+pkginclude_HEADERS = \
+       sphinx_config.h
+
+EXTRA_DIST = \
+       wince/sphinx_config.h \
+       wince/config.h \
+       win32/sphinx_config.h \
+       win32/config.h \
+       s60/config.h \
+       s60/sphinx_config.h \
+       android/config.h \
+       android/sphinx_config.h
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644 (file)
index 0000000..2161f0a
--- /dev/null
@@ -0,0 +1,576 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = include
+DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(srcdir)/sphinx_config.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h sphinx_config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(pkginclude_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = sphinxbase
+pkginclude_HEADERS = \
+       sphinx_config.h
+
+EXTRA_DIST = \
+       wince/sphinx_config.h \
+       wince/config.h \
+       win32/sphinx_config.h \
+       win32/config.h \
+       s60/config.h \
+       s60/sphinx_config.h \
+       android/config.h \
+       android/sphinx_config.h
+
+all: config.h sphinx_config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  include/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
+
+config.h: stamp-h1
+       @if test ! -f $@; then \
+         rm -f stamp-h1; \
+         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+       else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+       @rm -f stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status include/config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+       cd $(top_srcdir) && $(AUTOHEADER)
+       rm -f stamp-h1
+       touch $@
+
+sphinx_config.h: stamp-h2
+       @if test ! -f $@; then \
+         rm -f stamp-h2; \
+         $(MAKE) $(AM_MAKEFLAGS) stamp-h2; \
+       else :; fi
+
+stamp-h2: $(srcdir)/sphinx_config.h.in $(top_builddir)/config.status
+       @rm -f stamp-h2
+       cd $(top_builddir) && $(SHELL) ./config.status include/sphinx_config.h
+
+distclean-hdr:
+       -rm -f config.h stamp-h1 sphinx_config.h stamp-h2
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-pkgincludeHEADERS: $(pkginclude_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+       @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+         $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
+       done
+
+uninstall-pkgincludeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in sphinx_config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS) config.h.in sphinx_config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in sphinx_config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS) config.h.in sphinx_config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(HEADERS) config.h sphinx_config.h
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+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: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgincludeHEADERS
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-pkgincludeHEADERS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-hdr distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-pkgincludeHEADERS install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am uninstall-pkgincludeHEADERS
+
+# 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/include/android/config.h b/include/android/config.h
new file mode 100644 (file)
index 0000000..a84bc87
--- /dev/null
@@ -0,0 +1,132 @@
+/* include/config.h.  Generated from config.h.in by configure.  */
+/* include/config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+/* #undef AC_APPLE_UNIVERSAL_BUILD */
+
+/* Use ALSA library for sound I/O */
+/* #define AD_BACKEND_ALSA */
+
+/* No interface for sound I/O */
+#undef AD_BACKEND_NONE
+
+/* Use OSS for sound I/O */
+/* #undef AD_BACKEND_OSS */
+
+/* Use WinMM interface for sound I/O */
+/* #undef AD_BACKEND_WIN32 */
+
+/* Default radix point for fixed-point */
+/* #undef DEFAULT_RADIX */
+
+/* Enable thread safety */
+#define ENABLE_THREADS /**/
+
+/* Use Q15 fixed-point computation */
+/* #undef FIXED16 */
+
+/* Use fixed-point computation */
+#define FIXED_POINT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define if you have the iconv() function. */
+/* #define HAVE_ICONV 1 */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `asound' library (-lasound). */
+/* #define HAVE_LIBASOUND 1 */
+
+/* Define to 1 if you have the `blas' library (-lblas). */
+/* #define HAVE_LIBBLAS 1 */
+
+/* Define to 1 if you have the `lapack' library (-llapack). */
+/* #define HAVE_LIBLAPACK 1 */
+
+/* Define to 1 if you have the `m' library (-lm). */
+#define HAVE_LIBM 1
+
+/* Define to 1 if you have the `pthread' library (-lpthread). */
+#define HAVE_LIBPTHREAD 1
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `perror' function. */
+#define HAVE_PERROR 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#define HAVE_PTHREAD_H 1
+
+/* Define to 1 if you have the <sndfile.h> header file. */
+#define HAVE_SNDFILE_H 1
+
+/* Define to 1 if you have the `snprintf' function. */
+#define HAVE_SNPRINTF 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define as const if the declaration of iconv() needs const. */
+#define ICONV_CONST 
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#define LT_OBJDIR ".libs/"
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 8
+
+/* The size of `long long', as computed by sizeof. */
+#define SIZEOF_LONG_LONG 8
+
+/* Enable debugging output */
+/* #undef SPHINX_DEBUG */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Enable matrix algebra with LAPACK */
+/* #define WITH_LAPACK */
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+/* #  undef WORDS_BIGENDIAN */
+# endif
+#endif
diff --git a/include/android/sphinx_config.h b/include/android/sphinx_config.h
new file mode 100644 (file)
index 0000000..8fa3db3
--- /dev/null
@@ -0,0 +1,47 @@
+/* include/sphinx_config.h.  Generated from sphinx_config.h.in by configure.  */
+/* sphinx_config.h: Externally visible configuration parameters */
+
+/* Use ALSA library for sound I/O */
+/* #define AD_BACKEND_ALSA */
+
+/* Use IRIX interface for sound I/O */
+/* #undef AD_BACKEND_IRIX */
+
+/* No interface for sound I/O */
+#undef AD_BACKEND_NONE
+
+/* Use OSF interface for sound I/O */
+/* #undef AD_BACKEND_OSF */
+
+/* Use OSS interface for sound I/O */
+/* #undef AD_BACKEND_OSS */
+
+/* Use OSS interface for sound I/O */
+/* #undef AD_BACKEND_OSS_BSD */
+
+/* Use SunOS interface for sound I/O */
+/* #undef AD_BACKEND_SUNOS */
+
+/* Use WinMM interface for sound I/O */
+/* #undef AD_BACKEND_WIN32 */
+
+/* Default radix point for fixed-point */
+/* #undef DEFAULT_RADIX */
+
+/* Use Q15 fixed-point computation */
+/* #undef FIXED16 */
+
+/* Use fixed-point computation */
+#define FIXED_POINT
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 8
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* The size of `long long', as computed by sizeof. */
+#define SIZEOF_LONG_LONG 8
+
+/* Enable debugging output */
+/* #undef SPHINX_DEBUG */
diff --git a/include/config.h.in b/include/config.h.in
new file mode 100644 (file)
index 0000000..1d4c531
--- /dev/null
@@ -0,0 +1,146 @@
+/* include/config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
+/* Use ALSA library for sound I/O */
+#undef AD_BACKEND_ALSA
+
+/* No interface for sound I/O */
+#undef AD_BACKEND_NONE
+
+/* Use OSS for sound I/O */
+#undef AD_BACKEND_OSS
+
+/* Use WinMM interface for sound I/O */
+#undef AD_BACKEND_WIN32
+
+/* Default radix point for fixed-point */
+#undef DEFAULT_RADIX
+
+/* Enable thread safety */
+#undef ENABLE_THREADS
+
+/* Use Q15 fixed-point computation */
+#undef FIXED16
+
+/* Use fixed-point computation */
+#undef FIXED_POINT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define if you have the iconv() function. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `asound' library (-lasound). */
+#undef HAVE_LIBASOUND
+
+/* Define to 1 if you have the `blas' library (-lblas). */
+#undef HAVE_LIBBLAS
+
+/* Define to 1 if you have the `lapack' library (-llapack). */
+#undef HAVE_LIBLAPACK
+
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
+/* Define to 1 if you have the `pthread' library (-lpthread). */
+#undef HAVE_LIBPTHREAD
+
+/* Define to 1 if the system has the type `long long'. */
+#undef HAVE_LONG_LONG
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `perror' function. */
+#undef HAVE_PERROR
+
+/* Define to 1 if you have the `popen' function. */
+#undef HAVE_POPEN
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the <sndfile.h> header file. */
+#undef HAVE_SNDFILE_H
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* Enable debugging output */
+#undef SPHINX_DEBUG
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Enable matrix algebra with LAPACK */
+#undef WITH_LAPACK
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
diff --git a/include/s60/config.h b/include/s60/config.h
new file mode 100644 (file)
index 0000000..14d9cf8
--- /dev/null
@@ -0,0 +1,3 @@
+/* Silvio Moioli: keep only one configuration file */
+
+#include "sphinx_config.h"
diff --git a/include/s60/sphinx_config.h b/include/s60/sphinx_config.h
new file mode 100644 (file)
index 0000000..d5db0de
--- /dev/null
@@ -0,0 +1,82 @@
+/* include/sphinx_config.h, defaults for S60.  */
+/* sphinx_config.h: Externally visible configuration parameters for
+ * SphinxBase.
+ */
+
+/* Use S60 interface for sound I/O */
+#define AD_BACKEND_S60
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 4
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* The size of `long long', as computed by sizeof. */
+#define SIZEOF_LONG_LONG 8
+
+/* Enable debugging output */
+#undef SPHINX_DEBUG
+
+/* Extension for executables */
+#define EXEEXT ".exe"
+
+/* Enable thread safety */
+#define ENABLE_THREADS 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `m' library (-lm). */
+#define HAVE_LIBM 1
+
+/* Define to 1 if you have the `pthread' library (-lpthread). */
+#define HAVE_LIBPTHREAD 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `perror' function. */
+#define HAVE_PERROR 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#define HAVE_PTHREAD_H 1
+
+/* Define to 1 if you have the `snprintf' function. */
+#define HAVE_SNPRINTF 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Enable matrix algebra with LAPACK */
+#define WITH_LAPACK 1
diff --git a/include/sphinx_config.h b/include/sphinx_config.h
new file mode 100644 (file)
index 0000000..2f7898d
--- /dev/null
@@ -0,0 +1,47 @@
+/* include/sphinx_config.h.  Generated from sphinx_config.h.in by configure.  */
+/* sphinx_config.h: Externally visible configuration parameters */
+
+/* Use ALSA library for sound I/O */
+#define AD_BACKEND_ALSA /**/
+
+/* Use IRIX interface for sound I/O */
+/* #undef AD_BACKEND_IRIX */
+
+/* No interface for sound I/O */
+/* #undef AD_BACKEND_NONE */
+
+/* Use OSF interface for sound I/O */
+/* #undef AD_BACKEND_OSF */
+
+/* Use OSS interface for sound I/O */
+/* #undef AD_BACKEND_OSS */
+
+/* Use OSS interface for sound I/O */
+/* #undef AD_BACKEND_OSS_BSD */
+
+/* Use SunOS interface for sound I/O */
+/* #undef AD_BACKEND_SUNOS */
+
+/* Use WinMM interface for sound I/O */
+/* #undef AD_BACKEND_WIN32 */
+
+/* Default radix point for fixed-point */
+/* #undef DEFAULT_RADIX */
+
+/* Use Q15 fixed-point computation */
+/* #undef FIXED16 */
+
+/* Use fixed-point computation */
+/* #undef FIXED_POINT */
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 8
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* The size of `long long', as computed by sizeof. */
+#define SIZEOF_LONG_LONG 8
+
+/* Enable debugging output */
+/* #undef SPHINX_DEBUG */
diff --git a/include/sphinx_config.h.in b/include/sphinx_config.h.in
new file mode 100644 (file)
index 0000000..1b2ec53
--- /dev/null
@@ -0,0 +1,46 @@
+/* sphinx_config.h: Externally visible configuration parameters */
+
+/* Use ALSA library for sound I/O */
+#undef AD_BACKEND_ALSA
+
+/* Use IRIX interface for sound I/O */
+#undef AD_BACKEND_IRIX
+
+/* No interface for sound I/O */
+#undef AD_BACKEND_NONE
+
+/* Use OSF interface for sound I/O */
+#undef AD_BACKEND_OSF
+
+/* Use OSS interface for sound I/O */
+#undef AD_BACKEND_OSS
+
+/* Use OSS interface for sound I/O */
+#undef AD_BACKEND_OSS_BSD
+
+/* Use SunOS interface for sound I/O */
+#undef AD_BACKEND_SUNOS
+
+/* Use WinMM interface for sound I/O */
+#undef AD_BACKEND_WIN32
+
+/* Default radix point for fixed-point */
+#undef DEFAULT_RADIX
+
+/* Use Q15 fixed-point computation */
+#undef FIXED16
+
+/* Use fixed-point computation */
+#undef FIXED_POINT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* Define to 1 if the system has the type `long long'. */
+#undef HAVE_LONG_LONG
+
+/* The size of `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* Enable debugging output */
+#undef SPHINX_DEBUG
diff --git a/include/sphinxbase/Makefile.am b/include/sphinxbase/Makefile.am
new file mode 100644 (file)
index 0000000..e0adf67
--- /dev/null
@@ -0,0 +1,41 @@
+pkginclude_HEADERS =                           \
+       ad.h                                    \
+       agc.h                                   \
+       bio.h                                   \
+       bitvec.h                                \
+       byteorder.h                             \
+       case.h                                  \
+       ckd_alloc.h                             \
+       clapack_lite.h                          \
+       cmd_ln.h                                \
+       cmn.h                                   \
+       cont_ad.h                               \
+       err.h                                   \
+       f2c.h                                   \
+       feat.h                                  \
+       fe.h                                    \
+       filename.h                              \
+       fixpoint.h                              \
+       fsg_model.h                             \
+       genrand.h                               \
+       glist.h                                 \
+       hash_table.h                            \
+       heap.h                                  \
+       huff_code.h                             \
+       info.h                                  \
+       jsgf.h                                  \
+       libutil.h                               \
+       listelem_alloc.h                        \
+       logmath.h                               \
+       matrix.h                                \
+       mmio.h                                  \
+       mulaw.h                                 \
+       ngram_model.h                           \
+       pio.h                                   \
+       yin.h                                   \
+       prim_type.h                             \
+       profile.h                               \
+       sbthread.h                              \
+       sphinxbase_export.h                     \
+       strfuncs.h                              \
+       unlimit.h
diff --git a/include/sphinxbase/Makefile.in b/include/sphinxbase/Makefile.in
new file mode 100644 (file)
index 0000000..adeab60
--- /dev/null
@@ -0,0 +1,462 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = include/sphinxbase
+DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+pkginclude_HEADERS = \
+       ad.h                                    \
+       agc.h                                   \
+       bio.h                                   \
+       bitvec.h                                \
+       byteorder.h                             \
+       case.h                                  \
+       ckd_alloc.h                             \
+       clapack_lite.h                          \
+       cmd_ln.h                                \
+       cmn.h                                   \
+       cont_ad.h                               \
+       err.h                                   \
+       f2c.h                                   \
+       feat.h                                  \
+       fe.h                                    \
+       filename.h                              \
+       fixpoint.h                              \
+       fsg_model.h                             \
+       genrand.h                               \
+       glist.h                                 \
+       hash_table.h                            \
+       heap.h                                  \
+       huff_code.h                             \
+       info.h                                  \
+       jsgf.h                                  \
+       libutil.h                               \
+       listelem_alloc.h                        \
+       logmath.h                               \
+       matrix.h                                \
+       mmio.h                                  \
+       mulaw.h                                 \
+       ngram_model.h                           \
+       pio.h                                   \
+       yin.h                                   \
+       prim_type.h                             \
+       profile.h                               \
+       sbthread.h                              \
+       sphinxbase_export.h                     \
+       strfuncs.h                              \
+       unlimit.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  include/sphinxbase/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  include/sphinxbase/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
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-pkgincludeHEADERS: $(pkginclude_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+       @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+         $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
+       done
+
+uninstall-pkgincludeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(HEADERS)
+installdirs:
+       for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+
+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: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+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 mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool ctags distclean distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-pkgincludeHEADERS install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-pkgincludeHEADERS
+
+# 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/include/sphinxbase/ad.h b/include/sphinxbase/ad.h
new file mode 100644 (file)
index 0000000..f4dd348
--- /dev/null
@@ -0,0 +1,372 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * ad.h -- generic live audio interface for recording and playback
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * 
+ * $Log: ad.h,v $
+ * Revision 1.8  2005/06/22 08:00:06  arthchan2003
+ * Completed all doxygen documentation on file description for libs3decoder/libutil/libs3audio and programs.
+ *
+ * Revision 1.7  2004/12/14 00:39:49  arthchan2003
+ * add <s3types.h> to the code, change some comments to doxygen style
+ *
+ * Revision 1.6  2004/12/06 11:17:55  arthchan2003
+ * Update the copyright information of ad.h, *sigh* start to feel tired of updating documentation system.  Anyone who has time, please take up libs3audio. That is the last place which is undocumented
+ *
+ * Revision 1.5  2004/07/23 23:44:46  egouvea
+ * Changed the cygwin code to use the same audio files as the MS Visual code, removed unused variables from fe_interface.c
+ *
+ * Revision 1.4  2004/02/29 23:48:31  egouvea
+ * Updated configure.in to the recent automake/autoconf, fixed win32
+ * references in audio files.
+ *
+ * Revision 1.3  2002/11/10 19:27:38  egouvea
+ * Fixed references to sun's implementation of audio interface,
+ * referring to the correct .h file, and replacing sun4 with sunos.
+ *
+ * Revision 1.2  2001/12/11 04:40:55  lenzo
+ * License cleanup.
+ *
+ * Revision 1.1.1.1  2001/12/03 16:01:45  egouvea
+ * Initial import of sphinx3
+ *
+ * Revision 1.1.1.1  2001/01/17 05:17:14  ricky
+ * Initial Import of the s3.3 decoder, has working decodeaudiofile, s3.3_live
+ *
+ * 
+ * 19-Jan-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added AD_ return codes.  Added ad_open_sps_bufsize(), and
+ *             ad_rec_t.n_buf.
+ * 
+ * 17-Apr-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ad_open_play_sps().
+ * 
+ * 07-Mar-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ad_open_sps().
+ * 
+ * 10-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ad_wbuf_t, ad_rec_t, and ad_play_t types, and augmented all
+ *             recording functions with ad_rec_t, and playback functions with
+ *             ad_play_t.
+ * 
+ * 06-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+/** \file ad.h
+ * \brief generic live audio interface for recording and playback
+ */
+
+#ifndef _AD_H_
+#define _AD_H_
+
+#include <sphinx_config.h>
+
+#if defined (__CYGWIN__)
+#include <w32api/windows.h>
+#include <w32api/mmsystem.h>
+#elif (defined(WIN32) && !defined(GNUWINCE)) || defined(_WIN32_WCE)
+#include <windows.h>
+#include <mmsystem.h>
+#elif defined(AD_BACKEND_ALSA)
+#include <alsa/asoundlib.h>
+#endif
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+#include <sphinxbase/prim_type.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#define AD_SAMPLE_SIZE         (sizeof(int16))
+#define DEFAULT_SAMPLES_PER_SEC        16000
+
+/* Return codes */
+#define AD_OK          0
+#define AD_EOF         -1
+#define AD_ERR_GEN     -1
+#define AD_ERR_NOT_OPEN        -2
+#define AD_ERR_WAVE    -3
+
+
+#if  (defined(WIN32) || defined(AD_BACKEND_WIN32)) && !defined(GNUWINCE)
+typedef struct {
+    HGLOBAL h_whdr;
+    LPWAVEHDR p_whdr;
+    HGLOBAL h_buf;
+    LPSTR p_buf;
+} ad_wbuf_t;
+#endif
+
+
+/* ------------ RECORDING -------------- */
+
+/*
+ * NOTE: ad_rec_t and ad_play_t are READ-ONLY structures for the user.
+ */
+
+#if (defined(WIN32) || defined(AD_BACKEND_WIN32)) && !defined(GNUWINCE)
+
+#define DEFAULT_DEVICE (char*)DEV_MAPPER
+
+/**
+ * Audio recording structure. 
+ */
+typedef struct ad_rec_s {
+    HWAVEIN h_wavein;  /* "HANDLE" to the audio input device */
+    ad_wbuf_t *wi_buf; /* Recording buffers provided to system */
+    int32 n_buf;       /* #Recording buffers provided to system */
+    int32 opened;      /* Flag; A/D opened for recording */
+    int32 recording;
+    int32 curbuf;      /* Current buffer with data for application */
+    int32 curoff;      /* Start of data for application in curbuf */
+    int32 curlen;      /* #samples of data from curoff in curbuf */
+    int32 lastbuf;     /* Last buffer containing data after recording stopped */
+    int32 sps;         /* Samples/sec */
+    int32 bps;         /* Bytes/sample */
+} ad_rec_t;
+
+#elif defined(AD_BACKEND_OSS)
+
+#define DEFAULT_DEVICE "/dev/dsp"
+
+/** \struct ad_rec_t
+ *  \brief Audio recording structure. 
+ */
+
+/* Added by jd5q+@andrew.cmu.edu, 10/3/1997: */
+typedef struct {
+    int32 dspFD;       /* Audio device descriptor */
+    int32 recording;
+    int32 sps;         /* Samples/sec */
+    int32 bps;         /* Bytes/sample */
+} ad_rec_t;
+
+#elif defined(AD_BACKEND_ESD)
+
+#define DEFAULT_DEVICE NULL
+typedef struct {
+    int32 fd;
+    int32 recording;
+    int32 sps;
+    int32 bps;
+} ad_rec_t;
+
+#elif defined(AD_BACKEND_ALSA)
+
+#define DEFAULT_DEVICE "default"
+typedef struct {
+    snd_pcm_t *dspH;
+    int32 recording;
+    int32 sps;
+    int32 bps;
+} ad_rec_t;
+
+#elif defined(AD_BACKEND_S60)
+
+typedef struct ad_rec_s {
+    void* recorder;
+    int32 recording;
+    int32 sps;
+    int32 bps;
+} ad_rec_t;
+
+SPHINXBASE_EXPORT
+ad_rec_t *ad_open_sps_bufsize (int32 samples_per_sec, int32 bufsize_msec);
+
+#else
+
+#define DEFAULT_DEVICE NULL
+typedef struct {
+    int32 sps;         /**< Samples/sec */
+    int32 bps;         /**< Bytes/sample */
+} ad_rec_t;    
+
+
+#endif
+
+
+/**
+ * Open a specific audio device for recording.
+ *
+ * The device is opened in non-blocking mode and placed in idle state.
+ *
+ * @return pointer to read-only ad_rec_t structure if successful, NULL
+ * otherwise.  The return value to be used as the first argument to
+ * other recording functions.
+ */
+SPHINXBASE_EXPORT
+ad_rec_t *ad_open_dev (
+       const char *dev, /**< Device name (platform-specific) */
+       int32 samples_per_sec /**< Samples per second */
+       );
+
+/**
+ * Open the default audio device with a given sampling rate.
+ */
+SPHINXBASE_EXPORT
+ad_rec_t *ad_open_sps (
+                      int32 samples_per_sec /**< Samples per second */
+                      );
+
+
+/**
+ * Open the default audio device.
+ */
+SPHINXBASE_EXPORT
+ad_rec_t *ad_open ( void );
+
+
+#if defined(WIN32) && !defined(GNUWINCE)
+/*
+ * Like ad_open_sps but specifies buffering required within driver.  This function is
+ * useful if the default (5000 msec worth) is too small and results in loss of data.
+ */
+SPHINXBASE_EXPORT
+ad_rec_t *ad_open_sps_bufsize (int32 samples_per_sec, int32 bufsize_msec);
+#endif
+
+
+/* Start audio recording.  Return value: 0 if successful, <0 otherwise */
+SPHINXBASE_EXPORT
+int32 ad_start_rec (ad_rec_t *);
+
+
+/* Stop audio recording.  Return value: 0 if successful, <0 otherwise */
+SPHINXBASE_EXPORT
+int32 ad_stop_rec (ad_rec_t *);
+
+
+/* Close the recording device.  Return value: 0 if successful, <0 otherwise */
+SPHINXBASE_EXPORT
+int32 ad_close (ad_rec_t *);
+
+
+/*
+ * Read next block of audio samples while recording; read upto max samples into buf.
+ * Return value: # samples actually read (could be 0 since non-blocking); -1 if not
+ * recording and no more samples remaining to be read from most recent recording.
+ */
+SPHINXBASE_EXPORT
+int32 ad_read (ad_rec_t *, int16 *buf, int32 max);
+
+
+/* ------ PLAYBACK; SIMILAR TO RECORDING ------- */
+
+#if defined(WIN32) && !defined(GNUWINCE)
+
+typedef struct {
+    HWAVEOUT h_waveout;        /* "HANDLE" to the audio output device */
+    ad_wbuf_t *wo_buf; /* Playback buffers given to the system */
+    int32 opened;      /* Flag; A/D opened for playback */
+    int32 playing;
+    char *busy;                /* flags [N_WO_BUF] indicating whether given to system */
+    int32 nxtbuf;      /* Next buffer [0..N_WO_BUF-1] to be used for playback data */
+    int32 sps;         /* Samples/sec */
+    int32 bps;         /* Bytes/sample */
+} ad_play_t;
+
+#else
+
+typedef struct {
+    int32 sps;         /* Samples/sec */
+    int32 bps;         /* Bytes/sample */
+} ad_play_t;   /* Dummy definition for systems without A/D stuff */
+
+#endif
+
+
+SPHINXBASE_EXPORT
+ad_play_t *ad_open_play_sps (int32 samples_per_sec);
+
+SPHINXBASE_EXPORT
+ad_play_t *ad_open_play ( void );
+
+SPHINXBASE_EXPORT
+int32 ad_start_play (ad_play_t *);
+
+SPHINXBASE_EXPORT
+int32 ad_stop_play (ad_play_t *);
+
+SPHINXBASE_EXPORT
+int32 ad_close_play (ad_play_t *);
+
+
+/**
+ * Queue a block of audio samples for playback.
+ *
+ * Write the next block of [len] samples from rawbuf to the A/D device for playback.
+ * The device may queue less than len samples, possibly 0, since it is non-blocking.
+ * The application should resubmit the remaining data to be played.
+ * Return value: # samples accepted for playback; -1 if error.
+ */
+SPHINXBASE_EXPORT
+int32 ad_write (ad_play_t *, int16 *buf, int32 len);
+
+
+/* ------ MISCELLANEOUS ------- */
+
+/**
+ * Convert mu-law data to int16 linear PCM format.
+ */
+SPHINXBASE_EXPORT
+void ad_mu2li (int16 *outbuf,          /* Out: PCM data placed here (allocated by user) */
+              unsigned char *inbuf,    /* In: Input buffer with mulaw data */
+              int32 n_samp);           /* In: #Samples in inbuf */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/include/sphinxbase/agc.h b/include/sphinxbase/agc.h
new file mode 100644 (file)
index 0000000..67d74f6
--- /dev/null
@@ -0,0 +1,202 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * agc.h -- Various forms of automatic gain control (AGC)
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.1  2006/04/05  20:27:30  dhdfu
+ * A Great Reorganzation of header files and executables
+ * 
+ * Revision 1.8  2005/06/21 19:25:41  arthchan2003
+ * 1, Fixed doxygen documentation. 2, Added $ keyword.
+ *
+ * Revision 1.4  2005/06/13 04:02:56  archan
+ * Fixed most doxygen-style documentation under libs3decoder.
+ *
+ * Revision 1.3  2005/03/30 01:22:46  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 28-Apr-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Copied from previous version.
+ */
+
+
+#ifndef _S3_AGC_H_
+#define _S3_AGC_H_
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/fe.h>
+
+/** \file agc.h
+ *  \brief routine that implements automatic gain control
+ *  
+ *  \warning This function may not be fully compatible with
+ *  SphinxTrain's family of AGC. 
+ *
+ *  This implements AGC. 
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Types of acoustic gain control to apply to the features.
+ */
+typedef enum agc_type_e {
+    AGC_NONE = 0,
+    AGC_MAX,
+    AGC_EMAX,
+    AGC_NOISE
+} agc_type_t;
+
+/** Convert string representation (from command-line) to agc_type_t */
+SPHINXBASE_EXPORT
+agc_type_t agc_type_from_str(const char *str);
+
+/** String representations of agc_type_t values. */
+SPHINXBASE_EXPORT
+extern const char *agc_type_str[];
+
+/**
+ * Structure holding data for doing AGC.
+ **/
+typedef struct agc_s {
+    mfcc_t max;      /**< Estimated max for current utterance (for AGC_EMAX) */
+    mfcc_t obs_max;  /**< Observed max in current utterance */
+    int32 obs_frame; /**< Whether any data was observed after prev update */
+    int32 obs_utt;   /**< Whether any utterances have been observed */
+    mfcc_t obs_max_sum;
+    mfcc_t noise_thresh; /**< Noise threshold (for AGC_NOISE only) */
+} agc_t;
+
+/**
+ * Initialize AGC structure with default values.
+ */
+SPHINXBASE_EXPORT
+agc_t *agc_init(void);
+
+/**
+ * Free AGC structure.
+ */
+SPHINXBASE_EXPORT
+void agc_free(agc_t *agc);
+
+/**
+ * Apply AGC to the given mfc vectors (normalize all C0 mfc coefficients in the given
+ * input such that the max C0 value is 0, by subtracting the input max C0 from all).
+ * This function operates on an entire utterance at a time.  Hence, the entire utterance
+ * must be available beforehand (batchmode).
+ */
+SPHINXBASE_EXPORT
+void agc_max(agc_t *agc,       /**< In: AGC structure (not used) */
+             mfcc_t **mfc,     /**< In/Out: mfc[f] = cepstrum vector in frame f */
+             int32 n_frame     /**< In: number of frames of cepstrum vectors supplied */
+    );
+
+/**
+ * Apply AGC to the given block of MFC vectors. 
+ * Unlike agc_max() this does not require the entire utterance to be
+ * available.  Call agc_emax_update() at the end of each utterance to
+ * update the AGC parameters. */
+SPHINXBASE_EXPORT
+void agc_emax(agc_t *agc,      /**< In: AGC structure */
+              mfcc_t **mfc,    /**< In/Out: mfc[f] = cepstrum vector in frame f */
+              int32 n_frame    /**< In: number of frames of cepstrum vectors supplied */
+    );
+
+/**
+ * Update AGC parameters for next utterance.
+ **/
+SPHINXBASE_EXPORT
+void agc_emax_update(agc_t *agc /**< In: AGC structure */
+    );
+
+/**
+ * Get the current AGC maximum estimate.
+ **/
+SPHINXBASE_EXPORT
+float32 agc_emax_get(agc_t *agc);
+
+/**
+ * Set the current AGC maximum estimate.
+ **/
+SPHINXBASE_EXPORT
+void agc_emax_set(agc_t *agc, float32 m);
+
+/**
+ * Apply AGC using noise threshold to the given block of MFC vectors. 
+ **/
+SPHINXBASE_EXPORT
+void agc_noise(agc_t *agc,     /**< In: AGC structure */
+               mfcc_t **mfc,   /**< In/Out: mfc[f] = cepstrum vector in frame f */
+               int32 n_frame   /**< In: number of frames of cepstrum vectors supplied */
+    );
+
+/**
+ * Get the current AGC noise threshold.
+ **/
+SPHINXBASE_EXPORT
+float32 agc_get_threshold(agc_t *agc);
+
+/**
+ * Set the current AGC noise threshold.
+ **/
+SPHINXBASE_EXPORT
+void agc_set_threshold(agc_t *agc, float32 threshold);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/bio.h b/include/sphinxbase/bio.h
new file mode 100644 (file)
index 0000000..cfc9931
--- /dev/null
@@ -0,0 +1,272 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * bio.h -- Sphinx-3 binary file I/O functions.
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: bio.h,v $
+ * Revision 1.8  2005/06/21 20:40:46  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Add the $ keyword.
+ *
+ * Revision 1.5  2005/06/13 04:02:57  archan
+ * Fixed most doxygen-style documentation under libs3decoder.
+ *
+ * Revision 1.4  2005/05/10 21:21:52  archan
+ * Three functionalities added but not tested. Code on 1) addition/deletion of LM in mode 4. 2) reading text-based LM 3) Converting txt-based LM to dmp-based LM.
+ *
+ * Revision 1.3  2005/03/30 01:22:46  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 28-Apr-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+
+#ifndef _S3_BIO_H_
+#define _S3_BIO_H_
+
+#include <stdio.h>
+#include <stdarg.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/byteorder.h>
+
+/** \file bio.h
+ * \brief Cross platform binary IO to process files in sphinx3 format. 
+ * 
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#define BYTE_ORDER_MAGIC       (0x11223344)
+
+/** "reversed senses" SWAP, ARCHAN: This is still incorporated in
+    Sphinx 3 because lm3g2dmp used it.  Don't think that I am very
+    happy with it. */
+
+#if (__BIG_ENDIAN__)
+#define REVERSE_SENSE_SWAP_INT16(x)  x = ( (((x)<<8)&0x0000ff00) | (((x)>>8)&0x00ff) )
+#define REVERSE_SENSE_SWAP_INT32(x)  x = ( (((x)<<24)&0xff000000) | (((x)<<8)&0x00ff0000) | \
+                         (((x)>>8)&0x0000ff00) | (((x)>>24)&0x000000ff) )
+#else
+#define REVERSE_SENSE_SWAP_INT16(x)
+#define REVERSE_SENSE_SWAP_INT32(x)
+
+#endif
+
+
+
+/**
+ * Read binary file format header: has the following format
+ * <pre>
+ *     s3
+ *     <argument-name> <argument-value>
+ *     <argument-name> <argument-value>
+ *     ...
+ *     endhdr
+ *     4-byte byte-order word used to find file byte ordering relative to host machine.
+ * </pre>
+ * Lines beginning with # are ignored.
+ * Memory for name and val allocated by this function; use bio_hdrarg_free to free them.
+ * @return: 0 if successful, -1 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 bio_readhdr (FILE *fp,           /**< In: File to read */
+                  char ***name,        /**< Out: array of argument name strings read */
+                  char ***val,         /**< Out: corresponding value strings read */
+                  int32 *swap  /**< Out: file needs byteswapping iff (*swap) */
+                  );
+/**
+ * Write a simple binary file header, containing only the version string.  Also write
+ * the byte order magic word.
+ * @return: 0 if successful, -1 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 bio_writehdr_version (FILE *fp,  /**< Output: File to write */
+                           char *version /**< Input: A string of version */
+       );
+
+
+SPHINXBASE_EXPORT
+int32 bio_writehdr(FILE *fp, ...);
+
+/**
+ * Free name and value strings previously allocated and returned by bio_readhdr.
+ */
+SPHINXBASE_EXPORT
+void bio_hdrarg_free (char **name,     /**< In: Array previously returned by bio_readhdr */
+                     char **val        /**< In: Array previously returned by bio_readhdr */
+                     );
+
+/**
+ * Like fread but perform byteswapping and accumulate checksum (the 2 extra arguments).
+ * But unlike fread, returns -1 if required number of elements (n_el) not read; also,
+ * no byteswapping or checksum accumulation is performed in that case.
+ */
+SPHINXBASE_EXPORT
+int32 bio_fread (void *buf,
+                int32 el_sz,
+                int32 n_el,
+                FILE *fp,              /**< In: An input file pointer */
+                int32 swap,            /**< In: Byteswap iff (swap != 0) */
+                uint32 *chksum /**< In/Out: Accumulated checksum */
+                );
+
+/**
+ * Like fwrite but perform byteswapping and accumulate checksum (the 2 extra arguments).
+ * @return the number of elemens written (like fwrite).
+ */
+SPHINXBASE_EXPORT
+int32 bio_fwrite(void *buf,
+                int32 el_sz,
+                int32 n_el,
+                FILE *fp,              /**< In: An input file pointer */
+                int32 swap,            /**< In: Byteswap iff (swap != 0) */
+                uint32 *chksum /**< In/Out: Accumulated checksum */
+                );
+
+/**
+ * Read a 1-d array (fashioned after fread):
+ *
+ *  - 4-byte array size (returned in n_el)
+ *  - memory allocated for the array and read (returned in buf)
+ * 
+ * Byteswapping and checksum accumulation performed as necessary.
+ * Fails fatally if expected data not read.
+ * Return value: number of array elements allocated and read; -1 if error.
+ */
+SPHINXBASE_EXPORT
+int32 bio_fread_1d (void **buf,                /**< Out: contains array data; allocated by this
+                                          function; can be freed using ckd_free */
+                   size_t el_sz,       /**< In: Array element size */
+                   uint32 *n_el,       /**< Out: Number of array elements allocated/read */
+                   FILE *fp,           /**< In: File to read */
+                   int32 sw,           /**< In: Byteswap iff (swap != 0) */
+                   uint32 *ck  /**< In/Out: Accumulated checksum */
+                   );
+
+/**
+ * Read a 2-d matrix:
+ *
+ * - 4-byte # rows, # columns (returned in d1, d2, d3)
+ * - memory allocated for the array and read (returned in buf)
+ *
+ * Byteswapping and checksum accumulation performed as necessary.
+ * Fails fatally if expected data not read.
+ * Return value: number of array elements allocated and read; -1 if error.
+ */
+SPHINXBASE_EXPORT
+int32 bio_fread_2d(void ***arr,
+                   size_t e_sz,
+                   uint32 *d1,
+                   uint32 *d2,
+                   FILE *fp,
+                   uint32 swap,
+                   uint32 *chksum);
+
+/**
+ * Read a 3-d array (set of matrices)
+ *
+ * - 4-byte # matrices, # rows, # columns (returned in d1, d2, d3)
+ * - memory allocated for the array and read (returned in buf)
+ *
+ * Byteswapping and checksum accumulation performed as necessary.
+ * Fails fatally if expected data not read.
+ * Return value: number of array elements allocated and read; -1 if error.
+ */
+SPHINXBASE_EXPORT
+int32 bio_fread_3d(void ****arr,
+                   size_t e_sz,
+                   uint32 *d1,
+                   uint32 *d2,
+                   uint32 *d3,
+                   FILE *fp,
+                   uint32 swap,
+                   uint32 *chksum);
+
+/**
+ * Read and verify checksum at the end of binary file.  Fails fatally if there is
+ * a mismatch.
+ */
+SPHINXBASE_EXPORT
+void bio_verify_chksum (FILE *fp,      /**< In: File to read */
+                       int32 byteswap, /**< In: Byteswap iff (swap != 0) */
+                       uint32 chksum   /**< In: Value to compare with checksum in file */
+                       );
+
+
+/**
+ * Read raw data from the wav file.
+ *
+ * @param directory the folder where the file is located
+ * @param filename the name of the file
+ * @param extension file extension
+ * @param header the size of the header to skip usually 44 bytes.
+ * @param endian Endian of the data
+ * @param nsamps number of samples read
+ * @return pointer to the data
+ */
+int16*
+bio_read_wavfile(char const *directory,
+                char const *filename,
+                char const *extension,
+                int32 header,
+                int32 endian,
+                int32 *nsamps);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/bitvec.h b/include/sphinxbase/bitvec.h
new file mode 100644 (file)
index 0000000..c02a2d4
--- /dev/null
@@ -0,0 +1,153 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef _LIBUTIL_BITVEC_H_
+#define _LIBUTIL_BITVEC_H_
+
+#include <string.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/ckd_alloc.h>
+
+/** 
+ * @file bitvec.h
+ * @brief An implementation of bit vectors.
+ * 
+ * Implementation of basic operations of bit vectors.  
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#define BITVEC_BITS 32
+typedef uint32 bitvec_t;
+
+/**
+ * Number of bitvec_t in a bit vector
+ */
+#define bitvec_size(n)         (((n)+BITVEC_BITS-1)/BITVEC_BITS)
+
+/**
+ * Allocate a bit vector.
+ */
+#define bitvec_alloc(n)                ckd_calloc(bitvec_size(n), sizeof(bitvec_t))
+
+/**
+ * Resize a bit vector.
+ */
+#define bitvec_realloc(v,n)    ckd_realloc(v, bitvec_size(n) * sizeof(bitvec_t))
+
+/**
+ * Free a bit vector.
+ */
+#define bitvec_free(v)         ckd_free(v)
+
+/**
+ * Set the b-th bit of bit vector v
+ * @param v is a vector
+ * @param b is the bit which will be set
+ */
+
+#define bitvec_set(v,b)                (v[(b)/BITVEC_BITS] |= (1UL << ((b) & (BITVEC_BITS-1))))
+
+/**
+ * Set all n bits in bit vector v
+ * @param v is a vector
+ * @param n is the number of bits
+ */
+
+#define bitvec_set_all(v,n)    memset(v, (bitvec_t)-1, \
+                                       (((n)+BITVEC_BITS-1)/BITVEC_BITS) * \
+                                       sizeof(bitvec_t))
+/**
+ * Clear the b-th bit of bit vector v
+ * @param v is a vector
+ * @param b is the bit which will be set
+ */
+
+#define bitvec_clear(v,b)      (v[(b)/BITVEC_BITS] &= ~(1UL << ((b) & (BITVEC_BITS-1))))
+
+/**
+ * Clear all n bits in bit vector v
+ * @param v is a vector
+ * @param n is the number of bits
+ */
+
+#define bitvec_clear_all(v,n)  memset(v, 0, (((n)+BITVEC_BITS-1)/BITVEC_BITS) * \
+                                       sizeof(bitvec_t))
+
+/**
+ * Check whether the b-th bit is set in vector v
+ * @param v is a vector
+ * @param b is the bit which will be checked
+ */
+
+#define bitvec_is_set(v,b)     (v[(b)/BITVEC_BITS] & (1UL << ((b) & (BITVEC_BITS-1))))
+
+/**
+ * Check whether the b-th bit is cleared in vector v
+ * @param v is a vector
+ * @param b is the bit which will be checked
+ */
+
+#define bitvec_is_clear(v,b)   (! (bitvec_is_set(v,b)))
+
+
+/**
+ * Return the number of bits set in the given bitvector.
+ *
+ * @param vec is the bit vector
+ * @param len is the length of bit vector <code>vec</code>
+ * @return the number of bits being set in vector <code>vec</code>
+ */
+SPHINXBASE_EXPORT
+size_t bitvec_count_set(bitvec_t *vec, /* In: Bit vector to search */
+                        size_t len);   /* In: Lenght of above bit vector */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/byteorder.h b/include/sphinxbase/byteorder.h
new file mode 100644 (file)
index 0000000..692ce60
--- /dev/null
@@ -0,0 +1,98 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/*
+ * byteorder.h -- Byte swapping ordering macros.
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * 
+ * $Log: byteorder.h,v $
+ * Revision 1.8  2005/09/01 21:09:54  dhdfu
+ * Really, actually, truly consolidate byteswapping operations into
+ * byteorder.h.  Where unconditional byteswapping is needed, SWAP_INT32()
+ * and SWAP_INT16() are to be used.  The WORDS_BIGENDIAN macro from
+ * autoconf controls the functioning of the conditional swap macros
+ * (SWAP_?[LW]) whose names and semantics have been regularized.
+ * Private, adhoc macros have been removed.
+ *
+ */
+
+#ifndef __S2_BYTEORDER_H__
+#define __S2_BYTEORDER_H__     1
+
+/* Macro to byteswap an int16 variable.  x = ptr to variable */
+#define SWAP_INT16(x)  *(x) = ((0x00ff & (*(x))>>8) | (0xff00 & (*(x))<<8))
+
+/* Macro to byteswap an int32 variable.  x = ptr to variable */
+#define SWAP_INT32(x)  *(x) = ((0x000000ff & (*(x))>>24) | \
+                               (0x0000ff00 & (*(x))>>8) | \
+                               (0x00ff0000 & (*(x))<<8) | \
+                               (0xff000000 & (*(x))<<24))
+
+/* Macro to byteswap a float32 variable.  x = ptr to variable */
+#define SWAP_FLOAT32(x)        SWAP_INT32((int32 *) x)
+
+/* Macro to byteswap a float64 variable.  x = ptr to variable */
+#define SWAP_FLOAT64(x)        { int *low = (int *) (x), *high = (int *) (x) + 1,\
+                             temp;\
+                         SWAP_INT32(low);  SWAP_INT32(high);\
+                         temp = *low; *low = *high; *high = temp;}
+
+#ifdef WORDS_BIGENDIAN
+#define SWAP_BE_64(x)
+#define SWAP_BE_32(x)
+#define SWAP_BE_16(x)
+#define SWAP_LE_64(x) SWAP_FLOAT64(x)
+#define SWAP_LE_32(x) SWAP_INT32(x)
+#define SWAP_LE_16(x) SWAP_INT16(x)
+#else
+#define SWAP_LE_64(x)
+#define SWAP_LE_32(x)
+#define SWAP_LE_16(x)
+#define SWAP_BE_64(x) SWAP_FLOAT64(x)
+#define SWAP_BE_32(x) SWAP_INT32(x)
+#define SWAP_BE_16(x) SWAP_INT16(x)
+#endif
+
+#endif
diff --git a/include/sphinxbase/case.h b/include/sphinxbase/case.h
new file mode 100644 (file)
index 0000000..bd1f62e
--- /dev/null
@@ -0,0 +1,135 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * case.h -- Upper/lower case conversion routines
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: case.h,v $
+ * Revision 1.7  2005/06/22 02:58:54  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 18-Jun-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Added strcmp_nocase, UPPER_CASE and LOWER_CASE definitions.
+ * 
+ * 16-Feb-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Created.
+ */
+
+
+/**
+ * @file case.h
+ * @brief Locale-independent implementation of case swapping operation. 
+ *
+ * This function implements ASCII-only case switching and comparison
+ * related operations, which do not depend on the locale and are
+ * guaranteed to exist on all versions of Windows.
+ */
+
+#ifndef _LIBUTIL_CASE_H_
+#define _LIBUTIL_CASE_H_
+
+#include <string.h>
+
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/sphinxbase_export.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+  /** 
+   * Return upper case form for c 
+   */
+#define UPPER_CASE(c)  ((((c) >= 'a') && ((c) <= 'z')) ? (c-32) : c)
+
+  /**
+   * Return lower case form for c 
+   */
+#define LOWER_CASE(c)  ((((c) >= 'A') && ((c) <= 'Z')) ? (c+32) : c)
+
+
+  /** 
+   * Convert str to all upper case.
+   * @param str is a string.
+   */
+SPHINXBASE_EXPORT
+void ucase(char *str);
+
+  /** 
+   * Convert str to all lower case
+   * @param str is a string.
+   */
+SPHINXBASE_EXPORT
+void lcase(char *str);
+
+  /**
+   * (FIXME! The implementation is incorrect!) 
+   * Case insensitive string compare.  Return the usual -1, 0, +1, depending on
+   * str1 <, =, > str2 (case insensitive, of course).
+   * @param str1 is the first string.
+   * @param str2 is the second string. 
+   */
+SPHINXBASE_EXPORT
+int32 strcmp_nocase(const char *str1, const char *str2);
+
+/**
+ * Like strcmp_nocase() but with a maximum length.
+ */
+SPHINXBASE_EXPORT
+int32 strncmp_nocase(const char *str1, const char *str2, size_t len);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/ckd_alloc.h b/include/sphinxbase/ckd_alloc.h
new file mode 100644 (file)
index 0000000..1c92d40
--- /dev/null
@@ -0,0 +1,310 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * ckd_alloc.h -- Memory allocation package.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: ckd_alloc.h,v $
+ * Revision 1.10  2005/06/22 02:59:25  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 19-Jun-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Removed file,line arguments from free functions.
+ * 
+ * 01-Jan-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+
+/*********************************************************************
+ *
+ * $Header: /cvsroot/cmusphinx/sphinx3/src/libutil/ckd_alloc.h,v 1.10 2005/06/22 02:59:25 arthchan2003 Exp $
+ *
+ * Carnegie Mellon ARPA Speech Group
+ *
+ * Copyright (c) 1994 Carnegie Mellon University.
+ * All rights reserved.
+ *
+ *********************************************************************
+ *
+ * file: ckd_alloc.h
+ * 
+ * traceability: 
+ * 
+ * description: 
+ * 
+ * author: 
+ * 
+ *********************************************************************/
+
+
+#ifndef _LIBUTIL_CKD_ALLOC_H_
+#define _LIBUTIL_CKD_ALLOC_H_
+
+#include <stdlib.h>
+#include <setjmp.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+/** \file ckd_alloc.h
+ *\brief Sphinx's memory allocation/deallocation routines. 
+ * 
+ *Implementation of efficient memory allocation deallocation for
+ *multiple dimensional arrays.
+ * 
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Control behaviour of the program when allocation fails.
+ *
+ * Although your program is probably toast when memory allocation
+ * fails, it is also probably a good idea to be able to catch these
+ * errors and alert the user in some way.  Either that, or you might
+ * want the program to call abort() so that you can debug the failed
+ * code.  This function allows you to control that behaviour.
+ *
+ * @param env Pointer to a <code>jmp_buf</code> initialized with
+ * setjmp(), or NULL to remove a previously set jump target.
+ * @param abort If non-zero, the program will call abort() when
+ * allocation fails rather than exiting or calling longjmp().
+ * @return Pointer to a previously set <code>jmp_buf</code>, if any.
+ */
+jmp_buf *ckd_set_jump(jmp_buf *env, int abort);
+
+/**
+ * Fail (with a message) according to behaviour specified by ckd_set_jump().
+ */
+void ckd_fail(char *format, ...);
+
+/*
+ * The following functions are similar to the malloc family, except
+ * that they have two additional parameters, caller_file and
+ * caller_line, for error reporting.  All functions print a diagnostic
+ * message if any error occurs, with any other behaviour determined by
+ * ckd_set_jump(), above.
+ */
+
+SPHINXBASE_EXPORT
+void *__ckd_calloc__(size_t n_elem, size_t elem_size,
+                    const char *caller_file, int caller_line);
+
+SPHINXBASE_EXPORT
+void *__ckd_malloc__(size_t size,
+                    const char *caller_file, int caller_line);
+
+SPHINXBASE_EXPORT
+void *__ckd_realloc__(void *ptr, size_t new_size,
+                     const char *caller_file, int caller_line);
+
+/**
+ * Like strdup, except that if an error occurs it prints a diagnostic message
+ * and exits.
+ */
+SPHINXBASE_EXPORT
+char *__ckd_salloc__(const char *origstr,
+                    const char *caller_file, int caller_line);
+
+/**
+ * Allocate a 2-D array and return ptr to it (ie, ptr to vector of ptrs).
+ * The data area is allocated in one block so it can also be treated as a 1-D array.
+ */
+SPHINXBASE_EXPORT
+void *__ckd_calloc_2d__(size_t d1, size_t d2,  /* In: #elements in the 2 dimensions */
+                        size_t elemsize,       /* In: Size (#bytes) of each element */
+                        const char *caller_file, int caller_line);     /* In */
+
+/**
+ * Allocate a 3-D array and return ptr to it.
+ * The data area is allocated in one block so it can also be treated as a 1-D array.
+ */
+SPHINXBASE_EXPORT
+void *__ckd_calloc_3d__(size_t d1, size_t d2, size_t d3,       /* In: #elems in the dims */
+                        size_t elemsize,               /* In: Size (#bytes) per element */
+                        const char *caller_file, int caller_line);     /* In */
+
+/**
+ * Allocate a 34D array and return ptr to it.
+ * The data area is allocated in one block so it can also be treated as a 1-D array.
+ */
+SPHINXBASE_EXPORT
+void ****__ckd_calloc_4d__(size_t d1,
+                          size_t d2,
+                          size_t d3,
+                          size_t d4,
+                          size_t elem_size,
+                          char *caller_file,
+                          int caller_line);
+
+/**
+ * Overlay a 3-D array over a previously allocated storage area.
+ **/
+SPHINXBASE_EXPORT
+void * __ckd_alloc_3d_ptr(size_t d1,
+                          size_t d2,
+                          size_t d3,
+                          void *store,
+                          size_t elem_size,
+                          char *caller_file,
+                          int caller_line);
+
+/**
+ * Overlay a s-D array over a previously allocated storage area.
+ **/
+SPHINXBASE_EXPORT
+void *__ckd_alloc_2d_ptr(size_t d1,
+                         size_t d2,
+                         void *store,
+                         size_t elem_size,
+                         char *caller_file,
+                         int caller_line);
+
+/**
+ * Test and free a 1-D array 
+ */
+SPHINXBASE_EXPORT
+void ckd_free(void *ptr);
+
+/**
+ * Free a 2-D array (ptr) previously allocated by ckd_calloc_2d 
+ */
+SPHINXBASE_EXPORT
+void ckd_free_2d(void *ptr);
+
+/** 
+ * Free a 3-D array (ptr) previously allocated by ckd_calloc_3d 
+ */
+SPHINXBASE_EXPORT
+void ckd_free_3d(void *ptr);
+
+/** 
+ * Free a 4-D array (ptr) previously allocated by ckd_calloc_4d 
+ */
+SPHINXBASE_EXPORT
+void ckd_free_4d(void *ptr);
+
+/**
+ * Macros to simplify the use of above functions.
+ * One should use these, rather than target functions directly.
+ */
+
+/**
+ * Macro for __ckd_calloc__
+ */
+#define ckd_calloc(n,sz)       __ckd_calloc__((n),(sz),__FILE__,__LINE__)
+
+/**
+ * Macro for __ckd_malloc__
+ */
+#define ckd_malloc(sz)         __ckd_malloc__((sz),__FILE__,__LINE__)
+
+/**
+ * Macro for __ckd_realloc__
+ */
+#define ckd_realloc(ptr,sz)    __ckd_realloc__(ptr,(sz),__FILE__,__LINE__)
+
+/**
+ * Macro for __ckd_salloc__
+ */
+
+#define ckd_salloc(ptr)                __ckd_salloc__(ptr,__FILE__,__LINE__)
+
+/**
+ * Macro for __ckd_calloc_2d__
+ */
+
+#define ckd_calloc_2d(d1,d2,sz)        __ckd_calloc_2d__((d1),(d2),(sz),__FILE__,__LINE__)
+
+/**
+ * Macro for __ckd_calloc_3d__
+ */
+
+#define ckd_calloc_3d(d1,d2,d3,sz) __ckd_calloc_3d__((d1),(d2),(d3),(sz),__FILE__,__LINE__)
+
+/**
+ * Macro for __ckd_calloc_4d__
+ */
+#define ckd_calloc_4d(d1, d2, d3, d4, s)  __ckd_calloc_4d__((d1), (d2), (d3), (d4), (s), __FILE__, __LINE__)
+
+/**
+ * Macro for __ckd_alloc_2d_ptr__
+ */
+
+#define ckd_alloc_2d_ptr(d1, d2, bf, sz)    __ckd_alloc_2d_ptr((d1), (d2), (bf), (sz), __FILE__, __LINE__)
+
+/**
+ * Free only the pointer arrays allocated with ckd_alloc_2d_ptr().
+ */
+#define ckd_free_2d_ptr(bf) ckd_free(bf)
+
+/**
+ * Macro for __ckd_alloc_3d_ptr__
+ */
+
+#define ckd_alloc_3d_ptr(d1, d2, d3, bf, sz) __ckd_alloc_3d_ptr((d1), (d2), (d3), (bf), (sz), __FILE__, __LINE__)
+
+/**
+ * Free only the pointer arrays allocated with ckd_alloc_3d_ptr().
+ */
+#define ckd_free_3d_ptr(bf) ckd_free_2d(bf)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/clapack_lite.h b/include/sphinxbase/clapack_lite.h
new file mode 100644 (file)
index 0000000..0f5a1f4
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+#ifndef __CLAPACK_LITE_H
+#define __CLAPACK_LITE_H
+
+#include "f2c.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/* Subroutine */ int sgemm_(char *transa, char *transb, integer *m, integer *
+                            n, integer *k, real *alpha, real *a, integer *lda, real *b, integer *
+                            ldb, real *beta, real *c__, integer *ldc);
+/* Subroutine */ int sgemv_(char *trans, integer *m, integer *n, real *alpha,
+                            real *a, integer *lda, real *x, integer *incx, real *beta, real *y,
+                            integer *incy);
+/* Subroutine */ int ssymm_(char *side, char *uplo, integer *m, integer *n,
+                            real *alpha, real *a, integer *lda, real *b, integer *ldb, real *beta,
+                            real *c__, integer *ldc);
+
+/* Subroutine */ int sposv_(char *uplo, integer *n, integer *nrhs, real *a,
+                            integer *lda, real *b, integer *ldb, integer *info);
+/* Subroutine */ int spotrf_(char *uplo, integer *n, real *a, integer *lda,
+                             integer *info);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CLAPACK_LITE_H */
diff --git a/include/sphinxbase/cmd_ln.h b/include/sphinxbase/cmd_ln.h
new file mode 100644 (file)
index 0000000..b4deb0d
--- /dev/null
@@ -0,0 +1,587 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * cmd_ln.h -- Command line argument parsing.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * 
+ * 15-Jul-1997 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added required arguments types.
+ * 
+ * 07-Dec-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created, based on Eric's implementation.  Basically, combined several
+ *             functions into one, eliminated validation, and simplified the interface.
+ */
+
+
+#ifndef _LIBUTIL_CMD_LN_H_
+#define _LIBUTIL_CMD_LN_H_
+
+#include <stdio.h>
+#include <stdarg.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+/**
+ * @file cmd_ln.h
+ * @brief Command-line and other configurationparsing and handling.
+ *  
+ * Configuration parameters, optionally parsed from the command line.
+ */
+  
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * @struct arg_t
+ * Argument definition structure.
+ */
+typedef struct arg_s {
+       char const *name;   /**< Name of the command line switch */
+       int type;           /**< Type of the argument in question */
+       char const *deflt;  /**< Default value (as a character string), or NULL if none */
+       char const *doc;    /**< Documentation/description string */
+} arg_t;
+
+/**
+ * @name Values for arg_t::type
+ */
+/* @{ */
+/**
+ * Bit indicating a required argument.
+ */
+#define ARG_REQUIRED (1<<0)
+/**
+ * Integer argument (optional).
+ */
+#define ARG_INTEGER  (1<<1)
+/**
+ * Floating point argument (optional).
+ */
+#define ARG_FLOATING (1<<2)
+/**
+ * String argument (optional).
+ */
+#define ARG_STRING   (1<<3)
+/**
+ * Boolean (true/false) argument (optional).
+ */
+#define ARG_BOOLEAN  (1<<4)
+/**
+ * Boolean (true/false) argument (optional).
+ */
+#define ARG_STRING_LIST  (1<<5)
+
+/**
+ * Required integer argument.
+ */
+#define REQARG_INTEGER (ARG_INTEGER | ARG_REQUIRED)
+/**
+ * Required floating point argument.
+ */
+#define REQARG_FLOATING (ARG_FLOATING | ARG_REQUIRED)
+/**
+ * Required string argument.
+ */
+#define REQARG_STRING (ARG_STRING | ARG_REQUIRED)
+/**
+ * Required boolean argument.
+ */
+#define REQARG_BOOLEAN (ARG_BOOLEAN | ARG_REQUIRED)
+
+/**
+ * @deprecated Use ARG_INTEGER instead.
+ */
+#define ARG_INT32   ARG_INTEGER
+/**
+ * @deprecated Use ARG_FLOATING instead.
+ */
+#define ARG_FLOAT32 ARG_FLOATING
+/**
+ * @deprecated Use ARG_FLOATING instead.
+ */
+#define ARG_FLOAT64 ARG_FLOATING
+/**
+ * @deprecated Use REQARG_INTEGER instead.
+ */
+#define REQARG_INT32 (ARG_INT32 | ARG_REQUIRED)
+/**
+ * @deprecated Use REQARG_FLOATING instead.
+ */
+#define REQARG_FLOAT32 (ARG_FLOAT32 | ARG_REQUIRED)
+/**
+ * @deprecated Use REQARG_FLOATING instead.
+ */
+#define REQARG_FLOAT64 (ARG_FLOAT64 | ARG_REQUIRED)
+/* @} */
+
+
+/**
+ * Helper macro to stringify enums and other non-string values for
+ * default arguments.
+ **/
+#define ARG_STRINGIFY(s) ARG_STRINGIFY1(s)
+#define ARG_STRINGIFY1(s) #s
+
+/**
+ * @struct cmd_ln_t
+ * Opaque structure used to hold the results of command-line parsing.
+ */
+typedef struct cmd_ln_s cmd_ln_t;
+
+/**
+ * Create a cmd_ln_t from NULL-terminated list of arguments.
+ *
+ * This function creates a cmd_ln_t from a NULL-terminated list of
+ * argument strings.  For example, to create the equivalent of passing
+ * "-hmm foodir -dsratio 2 -lm bar.lm" on the command-line:
+ *
+ *  config = cmd_ln_init(NULL, defs, TRUE, "-hmm", "foodir", "-dsratio", "2",
+ *                       "-lm", "bar.lm", NULL);
+ *
+ * Note that for simplicity, <strong>all</strong> arguments are passed
+ * as strings, regardless of the actual underlying type.
+ *
+ * @param inout_cmdln Previous command-line to update, or NULL to create a new one.
+ * @param defn Array of argument name definitions, or NULL to allow any arguments.
+ * @param strict Whether to fail on duplicate or unknown arguments.
+ * @return A cmd_ln_t* containing the results of command line parsing, or NULL on failure.
+ */
+SPHINXBASE_EXPORT
+cmd_ln_t *cmd_ln_init(cmd_ln_t *inout_cmdln, arg_t const *defn, int32 strict, ...);
+
+/**
+ * Retain ownership of a command-line argument set.
+ *
+ * @return pointer to retained command-line argument set.
+ */
+SPHINXBASE_EXPORT
+cmd_ln_t *cmd_ln_retain(cmd_ln_t *cmdln);
+
+/**
+ * Release a command-line argument set and all associated strings.
+ *
+ * @return new reference count (0 if freed completely)
+ */
+SPHINXBASE_EXPORT
+int cmd_ln_free_r(cmd_ln_t *cmdln);
+
+/**
+ * Parse a list of strings into argumetns.
+ *
+ * Parse the given list of arguments (name-value pairs) according to
+ * the given definitions.  Argument values can be retrieved in future
+ * using cmd_ln_access().  argv[0] is assumed to be the program name
+ * and skipped.  Any unknown argument name causes a fatal error.  The
+ * routine also prints the prevailing argument values (to stderr)
+ * after parsing.
+ *
+ * @note It is currently assumed that the strings in argv are
+ *       allocated statically, or at least that they will be valid as
+ *       long as the cmd_ln_t returned from this function.
+ *       Unpredictable behaviour will result if they are freed or
+ *       otherwise become invalidated.
+ *
+ * @return A cmd_ln_t containing the results of command line parsing,
+ *         or NULL on failure.
+ **/
+SPHINXBASE_EXPORT
+cmd_ln_t *cmd_ln_parse_r(cmd_ln_t *inout_cmdln, /**< In/Out: Previous command-line to update,
+                                                     or NULL to create a new one. */
+                         arg_t const *defn,    /**< In: Array of argument name definitions */
+                         int32 argc,           /**< In: Number of actual arguments */
+                         char *argv[],         /**< In: Actual arguments */
+                         int32 strict           /**< In: Fail on duplicate or unknown
+                                                   arguments, or no arguments? */
+    );
+
+/**
+ * Parse an arguments file by deliminating on " \r\t\n" and putting each tokens
+ * into an argv[] for cmd_ln_parse().
+ *
+ * @return A cmd_ln_t containing the results of command line parsing, or NULL on failure.
+ */
+SPHINXBASE_EXPORT
+cmd_ln_t *cmd_ln_parse_file_r(cmd_ln_t *inout_cmdln, /**< In/Out: Previous command-line to update,
+                                                     or NULL to create a new one. */
+                              arg_t const *defn,   /**< In: Array of argument name definitions*/
+                              char const *filename,/**< In: A file that contains all
+                                                     the arguments */ 
+                              int32 strict         /**< In: Fail on duplicate or unknown
+                                                     arguments, or no arguments? */
+    );
+
+/**
+ * Access the generic type union for a command line argument.
+ */
+SPHINXBASE_EXPORT
+anytype_t *cmd_ln_access_r(cmd_ln_t *cmdln, char const *name);
+
+/**
+ * Retrieve a string from a command-line object.
+ *
+ * The command-line object retains ownership of this string, so you
+ * should not attempt to free it manually.
+ *
+ * @param cmdln Command-line object.
+ * @param name the command-line flag to retrieve.
+ * @return the string value associated with <tt>name</tt>, or NULL if
+ *         <tt>name</tt> does not exist.  You must use
+ *         cmd_ln_exists_r() to distinguish between cases where a
+ *         value is legitimately NULL and where the corresponding flag
+ *         is unknown.
+ */
+SPHINXBASE_EXPORT
+char const *cmd_ln_str_r(cmd_ln_t *cmdln, char const *name);
+
+/**
+ * Retrieve an array of strings from a command-line object.
+ *
+ * The command-line object retains ownership of this array, so you
+ * should not attempt to free it manually.
+ *
+ * @param cmdln Command-line object.
+ * @param name the command-line flag to retrieve.
+ * @return the array of strings associated with <tt>name</tt>, or NULL if
+ *         <tt>name</tt> does not exist.  You must use
+ *         cmd_ln_exists_r() to distinguish between cases where a
+ *         value is legitimately NULL and where the corresponding flag
+ *         is unknown.
+ */
+SPHINXBASE_EXPORT
+char const **cmd_ln_str_list_r(cmd_ln_t *cmdln, char const *name);
+
+/**
+ * Retrieve an integer from a command-line object.
+ *
+ * @param cmdln Command-line object.
+ * @param name the command-line flag to retrieve.
+ * @return the integer value associated with <tt>name</tt>, or 0 if
+ *         <tt>name</tt> does not exist.  You must use
+ *         cmd_ln_exists_r() to distinguish between cases where a
+ *         value is legitimately zero and where the corresponding flag
+ *         is unknown.
+ */
+SPHINXBASE_EXPORT
+long cmd_ln_int_r(cmd_ln_t *cmdln, char const *name);
+
+/**
+ * Retrieve a floating-point number from a command-line object.
+ *
+ * @param cmdln Command-line object.
+ * @param name the command-line flag to retrieve.
+ * @return the float value associated with <tt>name</tt>, or 0.0 if
+ *         <tt>name</tt> does not exist.  You must use
+ *         cmd_ln_exists_r() to distinguish between cases where a
+ *         value is legitimately zero and where the corresponding flag
+ *         is unknown.
+ */
+SPHINXBASE_EXPORT
+double cmd_ln_float_r(cmd_ln_t *cmdln, char const *name);
+
+/**
+ * Retrieve a boolean value from a command-line object.
+ */
+#define cmd_ln_boolean_r(c,n) (cmd_ln_int_r(c,n) != 0)
+
+/**
+ * Set a string in a command-line object.
+ *
+ * @param cmdln Command-line object.
+ * @param name The command-line flag to set.
+ * @param str String value to set.  The command-line object does not
+ *            retain ownership of this pointer.
+ */
+SPHINXBASE_EXPORT
+void cmd_ln_set_str_r(cmd_ln_t *cmdln, char const *name, char const *str);
+
+/**
+ * Set an integer in a command-line object.
+ *
+ * @param cmdln Command-line object.
+ * @param name The command-line flag to set.
+ * @param iv Integer value to set.
+ */
+SPHINXBASE_EXPORT
+void cmd_ln_set_int_r(cmd_ln_t *cmdln, char const *name, long iv);
+
+/**
+ * Set a floating-point number in a command-line object.
+ *
+ * @param cmdln Command-line object.
+ * @param name The command-line flag to set.
+ * @param fv Integer value to set.
+ */
+SPHINXBASE_EXPORT
+void cmd_ln_set_float_r(cmd_ln_t *cmdln, char const *name, double fv);
+
+/**
+ * Set a boolean value in a command-line object.
+ */
+#define cmd_ln_set_boolean_r(c,n,b) (cmd_ln_set_int_r(c,n,(b)!=0))
+
+/*
+ * Compatibility macros
+ */
+#define cmd_ln_int32_r(c,n)    cmd_ln_int_r(c,n)
+#define cmd_ln_float32_r(c,n)  (float32)cmd_ln_float_r(c,n)
+#define cmd_ln_float64_r(c,n)  (float64)cmd_ln_float_r(c,n)
+#define cmd_ln_set_int32_r(c,n,i)   cmd_ln_set_int_r(c,n,i)
+#define cmd_ln_set_float32_r(c,n,f) cmd_ln_set_float_r(c,n,(double)f)
+#define cmd_ln_set_float64_r(c,n,f) cmd_ln_set_float_r(c,n,(double)f)
+
+/**
+ * Re-entrant version of cmd_ln_exists().
+ *
+ * @return True if the command line argument exists (i.e. it
+ * was one of the arguments defined in the call to cmd_ln_parse_r().
+ */
+SPHINXBASE_EXPORT
+int cmd_ln_exists_r(cmd_ln_t *cmdln, char const *name);
+
+/**
+ * Print a help message listing the valid argument names, and the associated
+ * attributes as given in defn.
+ */
+SPHINXBASE_EXPORT
+void cmd_ln_print_help_r (cmd_ln_t *cmdln,
+                          FILE *fp,       /**< In: File to which to print */
+                         const arg_t *defn /**< In: Array of argument name definitions */
+       );
+
+/**
+ * Non-reentrant version of cmd_ln_parse().
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_parse_r().
+ * @return 0 if successful, <0 if error.
+ */
+SPHINXBASE_EXPORT
+int32 cmd_ln_parse(const arg_t *defn,  /**< In: Array of argument name definitions */
+                   int32 argc,        /**< In: Number of actual arguments */
+                   char *argv[],       /**< In: Actual arguments */
+                   int32 strict        /**< In: Fail on duplicate or unknown
+                                          arguments, or no arguments? */
+       );
+
+/**
+ * Parse an arguments file by deliminating on " \r\t\n" and putting each tokens
+ * into an argv[] for cmd_ln_parse().
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_parse_file_r().
+ *
+ * @return 0 if successful, <0 on error.
+ */
+SPHINXBASE_EXPORT
+int32 cmd_ln_parse_file(const arg_t *defn,   /**< In: Array of argument name definitions*/
+                       char const *filename,/**< In: A file that contains all the arguments */ 
+                        int32 strict         /**< In: Fail on duplicate or unknown
+                                                arguments, or no arguments? */
+       );
+
+/**
+ * Old application initialization routine for Sphinx3 code.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API.
+ */
+SPHINXBASE_EXPORT
+void cmd_ln_appl_enter(int argc,   /**< In: Number of actual arguments */
+                      char *argv[], /**< In: Number of actual arguments */
+                      char const* default_argfn, /**< In: default argument file name*/
+                      const arg_t *defn /**< Command-line argument definition */
+       );
+
+
+/**
+ * Finalization routine corresponding to cmd_ln_appl_enter().
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API.
+ */
+
+SPHINXBASE_EXPORT
+void cmd_ln_appl_exit(void);
+
+/**
+ * Retrieve the global cmd_ln_t object used by non-re-entrant functions.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API.
+ * @return global cmd_ln_t object.
+ */
+SPHINXBASE_EXPORT
+cmd_ln_t *cmd_ln_get(void);
+
+/**
+ * Test the existence of a command-line argument in the global set of
+ * definitions.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_exists_r().
+ *
+ * @return True if the command line argument exists (i.e. it
+ * was one of the arguments defined in the call to cmd_ln_parse().
+ */
+#define cmd_ln_exists(name)    cmd_ln_exists_r(cmd_ln_get(), name)
+
+/**
+ * Return a pointer to the previously parsed value for the given argument name.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_access_r().
+ */
+#define cmd_ln_access(name)    cmd_ln_access_r(cmd_ln_get(), name)
+
+/**
+ * Retrieve a string from the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_str_r().
+ */
+#define cmd_ln_str(name)       cmd_ln_str_r(cmd_ln_get(), name)
+
+/**
+ * Retrieve an array of strings in the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_str_list_r().
+ */
+#define cmd_ln_str_list(name)  cmd_ln_str_list_r(cmd_ln_get(), name)
+
+/**
+ * Retrieve a 32-bit integer from the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_int_r().
+ */
+#define cmd_ln_int32(name)     (int32)cmd_ln_int_r(cmd_ln_get(), name)
+/**
+ * Retrieve a 32-bit float from the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_float_r().
+ */
+#define cmd_ln_float32(name)   (float32)cmd_ln_float_r(cmd_ln_get(), name)
+/**
+ * Retrieve a 64-bit float from the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_float_r().
+ */
+#define cmd_ln_float64(name)   (float64)cmd_ln_float_r(cmd_ln_get(), name)
+/**
+ * Retrieve a boolean from the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_boolean_r().
+ */
+#define cmd_ln_boolean(name)   cmd_ln_boolean_r(cmd_ln_get(), name)
+
+/**
+ * Set a string in the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_set_str_r().
+ */
+#define cmd_ln_set_str(n,s)     cmd_ln_set_str_r(cmd_ln_get(),n,s)
+/**
+ * Set a 32-bit integer value in the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_set_int_r().
+ */
+#define cmd_ln_set_int32(n,i)   cmd_ln_set_int_r(cmd_ln_get(),n,i)
+/**
+ * Set a 32-bit float in the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_set_float_r().
+ */
+#define cmd_ln_set_float32(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f)
+/**
+ * Set a 64-bit float in the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_set_float_r().
+ */
+#define cmd_ln_set_float64(n,f) cmd_ln_set_float_r(cmd_ln_get(),n,f)
+/**
+ * Set a boolean value in the global command line.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_set_boolean_r().
+ */
+#define cmd_ln_set_boolean(n,b) cmd_ln_set_boolean_r(cmd_ln_get(),n,b)
+
+/**
+ * Print a help message listing the valid argument names, and the associated
+ * attributes as given in defn.
+ *
+ * @deprecated This is deprecated in favor of the re-entrant API
+ * function cmd_ln_print_help_r().
+ */
+#define cmd_ln_print_help(f,d) cmd_ln_print_help_r(cmd_ln_get(),f,d)
+
+/**
+ * Free the global command line, if any exists.
+ * @deprecated Use the re-entrant API instead.
+ */
+SPHINXBASE_EXPORT
+void cmd_ln_free (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/include/sphinxbase/cmn.h b/include/sphinxbase/cmn.h
new file mode 100644 (file)
index 0000000..d91555e
--- /dev/null
@@ -0,0 +1,191 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * cmn.h -- Various forms of cepstral mean normalization
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.1  2006/04/05  20:27:30  dhdfu
+ * A Great Reorganzation of header files and executables
+ * 
+ * Revision 1.13  2006/02/23 03:48:27  arthchan2003
+ * Resolved conflict in cmn.h
+ *
+ *
+ * Revision 1.12  2006/02/22 23:43:55  arthchan2003
+ * Merged from the branch SPHINX3_5_2_RCI_IRII_BRANCH: Put data structure into the cmn_t structure.
+ *
+ * Revision 1.11.4.2  2005/10/17 04:45:57  arthchan2003
+ * Free stuffs in cmn and feat corectly.
+ *
+ * Revision 1.11.4.1  2005/07/05 06:25:08  arthchan2003
+ * Fixed dox-doc.
+ *
+ * Revision 1.11  2005/06/21 19:28:00  arthchan2003
+ * 1, Fixed doxygen documentation. 2, Added $ keyword.
+ *
+ * Revision 1.4  2005/06/13 04:02:56  archan
+ * Fixed most doxygen-style documentation under libs3decoder.
+ *
+ * Revision 1.3  2005/03/30 01:22:46  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 20.Apr.2001  RAH (rhoughton@mediasite.com, ricky.houghton@cs.cmu.edu)
+ *              Added cmn_free() and moved *mean and *var out global space and named them cmn_mean and cmn_var
+ * 
+ * 28-Apr-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Copied from previous version.
+ */
+
+
+#ifndef _S3_CMN_H_
+#define _S3_CMN_H_
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/fe.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/** \file cmn.h
+ * \brief Apply Cepstral Mean Normalization (CMN) to the set of input mfc frames.
+ *
+ * By subtractingthe mean of the input from each frame.  C0 is also included in this process.
+ * This function operates on an entire utterance at a time.  Hence, the entire utterance
+ * must be available beforehand (batchmode).
+ */
+
+/**
+ * Types of cepstral mean normalization to apply to the features.
+ */
+typedef enum cmn_type_e {
+    CMN_NONE = 0,
+    CMN_CURRENT,
+    CMN_PRIOR
+} cmn_type_t;
+
+/** String representations of cmn_type_t values. */
+SPHINXBASE_EXPORT
+extern const char *cmn_type_str[];
+
+/** Convert string representation (from command-line) to cmn_type_t */
+SPHINXBASE_EXPORT
+cmn_type_t cmn_type_from_str(const char *str);
+
+/** \struct cmn_t
+ *  \brief wrapper of operation of the cepstral mean normalization. 
+ */
+
+typedef struct {
+    mfcc_t *cmn_mean;   /**< Temporary variable: current means */
+    mfcc_t *cmn_var;    /**< Temporary variables: stored the cmn variance */
+    mfcc_t *sum;        /**< The sum of the cmn frames */
+    int32 nframe;      /**< Number of frames */
+    int32 veclen;      /**< Length of cepstral vector */
+} cmn_t;
+
+SPHINXBASE_EXPORT
+cmn_t* cmn_init(int32 veclen);
+
+/**
+ * CMN for the whole sentence
+*/
+SPHINXBASE_EXPORT
+void cmn (cmn_t *cmn,   /**< In/Out: cmn normalization, which contains the cmn_mean and cmn_var) */
+          mfcc_t **mfc,        /**< In/Out: mfc[f] = mfc vector in frame f */
+         int32 varnorm,/**< In: if not FALSE, variance normalize the input vectors
+                          to have unit variance (along each dimension independently);
+                          Irrelevant if no cmn is performed */
+         int32 n_frame /**< In: Number of frames of mfc vectors */
+       );
+
+#define CMN_WIN_HWM     800     /* #frames after which window shifted */
+#define CMN_WIN         500
+
+/**
+ * CMN for one block of data, using prior mean
+ */
+SPHINXBASE_EXPORT
+void cmn_prior(cmn_t *cmn,        /**< In/Out: cmn normalization, which contains
+                                    the cmn_mean and cmn_var) */
+               mfcc_t **incep,  /**< In/Out: mfc[f] = mfc vector in frame f*/
+              int32 varnorm,    /**< This flag should always be 0 for live */
+              int32 nfr         /**< Number of incoming frames */
+    );
+
+/**
+ * Update prior mean based on observed data
+ */
+SPHINXBASE_EXPORT
+void cmn_prior_update(cmn_t *cmn);
+
+/**
+ * Set the prior mean.
+ */
+SPHINXBASE_EXPORT
+void cmn_prior_set(cmn_t *cmn, mfcc_t const *vec);
+
+/**
+ * Get the prior mean.
+ */
+SPHINXBASE_EXPORT
+void cmn_prior_get(cmn_t *cmn, mfcc_t *vec);
+
+/* RAH, free previously allocated memory */
+SPHINXBASE_EXPORT
+void cmn_free (cmn_t *cmn);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/cont_ad.h b/include/sphinxbase/cont_ad.h
new file mode 100644 (file)
index 0000000..6d08676
--- /dev/null
@@ -0,0 +1,492 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * cont_ad.h -- Continuous A/D listening and silence filtering module.
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * 
+ * 13-Jul-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added spf and adbufsize to cont_ad_t in order to support variable
+ *             frame sizes depending on audio sampling rate.
+ * 
+ * 30-Jun-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added FILE* argument to cont_ad_powhist_dump().
+ * 
+ * 16-Jan-98   Paul Placeway (pwp@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed to use dB instead of the weird power measure.
+ *             Added most system parameters to cont_ad_t instead of hardwiring
+ *             them in cont_ad.c.
+ *             Added cont_ad_set_params() and cont_ad_get_params().
+ * 
+ * 28-Jul-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added cont_ad_t.siglvl.
+ * 
+ * 27-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added the option for cont_ad_read to return -1 on EOF.
+ * 
+ * 21-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added cont_ad_set_thresh().
+ * 
+ * 20-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Separated thresholds for speech and silence.
+ * 
+ * 17-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created, based loosely on Steve Reed's original implementation.
+ */
+
+
+#ifndef _CONT_AD_H_
+#define _CONT_AD_H_
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/ad.h>
+
+/**
+ * \file cont_ad.h
+ * \brief Continuous A/D listening and silence filtering module.
+ *
+ * This module is intended to be interposed as a filter between any
+ * raw A/D source and the application to remove silence regions.  Its
+ * main purpose is to remove regions of silence from the raw input
+ * speech.  It is initialized with a raw A/D source function (during
+ * the cont_ad_init call).  The application is responsible for setting
+ * up the A/D source, turning recording on and off as it desires.
+ * Filtered A/D data can be read by the application using the
+ * cont_ad_read function.
+ * 
+ * In other words, the application calls cont_ad_read instead of the
+ * raw A/D source function (e.g., ad_read in libad) to obtain filtered
+ * A/D data with silence regions removed.  This module itself does not
+ * enforce any other structural changes to the application.
+ * 
+ * The cont_ad_read function also updates an "absolute" timestamp (see
+ * cont_ad_t.read_ts) at the end of each invocation.  The timestamp
+ * indicates the total number of samples of A/D data read until this
+ * point, including data discarded as silence frames.  The application
+ * is responsible for using this timestamp to make any policy
+ * decisions regarding utterance boundaries or whatever.
+ */
+
+
+#include <stdio.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/* States of continuous listening module */
+#define CONT_AD_STATE_SIL      0
+#define CONT_AD_STATE_SPEECH   1
+
+
+/**
+ * \struct spseg_t
+ * \brief  (FOR INTERNAL USE ) Data structure for maintaining speech (non-silence) segments not yet consumed by the
+ * application.  
+ */
+typedef struct spseg_s {
+    int32 startfrm;    /**< Frame-id in adbuf (see below) of start of this segment */ 
+    int32 nfrm;                /**< Number of frames in segment (may wrap around adbuf) */
+    struct spseg_s *next;      /**< Next speech segment (with some intervening silence) */
+} spseg_t;
+
+
+/**
+ * \struct cont_ad_t
+ * \brief Continuous listening module or object
+ * Continuous listening module or object.  An application can open and maintain several
+ * such objects, if necessary.
+ * FYI: Module always in one of two states: SILENCE or SPEECH.  Transitions between the
+ * two detected by sliding a window spanning several frames and looking for some minimum
+ * number of frames of the other type.
+ */
+typedef struct {
+    /* Function to be called for obtaining A/D data (see prototype for ad_read in ad.h) */
+    int32 (*adfunc)(ad_rec_t *ad, int16 *buf, int32 max);
+    ad_rec_t *ad;      /**< A/D device argument for adfunc.  Also, ad->sps used to
+                          determine frame size (spf, see below) */
+    int32 rawmode;     /**< Pass all input data through, without filtering silence */
+    
+    int16 *adbuf;      /**< Circular buffer for maintaining A/D data read until consumed */
+
+    /* **************************************************************************
+     * state, read_ts, and siglvl are provided for READ-ONLY use by client
+     * applications, and are updated by calls to cont_ad_read() (see below).  All
+     * other variables should be left alone.
+     */
+    int32 state;       /**< State of data returned by most recent cont_ad_read call;
+                          CONT_AD_STATE_SIL or CONT_AD_STATE_SPEECH. */
+    int32 read_ts;     /**< Absolute timestamp (total no. of raw samples consumed
+                          upto the most recent cont_ad_read call, starting from
+                          the very beginning).  Note that this is a 32-bit
+                          integer; applications should guard against overflow. */
+    int32 seglen;      /**< Total no. of raw samples consumed in the segment
+                          returned by the most recent cont_ad_read call.  Can be
+                          used to detect silence segments that have stretched long
+                          enough to terminate an utterance */
+    int32 siglvl;      /**< Max signal level for the data consumed by the most recent
+                          cont_ad_read call (dB range: 0-99).  Can be used to
+                          update a V-U meter, for example. */
+    /* ************************************************************************ */
+    
+    int32 sps;         /**< Samples/sec; moved from ad->sps to break dependence on
+                          ad by N. Roy.*/
+
+    int32 eof;         /**< Whether the source ad device has encountered EOF */
+  
+    int32 spf;         /**< Samples/frame; audio level is analyzed within frames */
+    int32 adbufsize;   /**< Buffer size (Number of samples) */
+    int32 prev_sample; /**< For pre-emphasis filter */
+    int32 headfrm;     /**< Frame number in adbuf with unconsumed A/D data */
+    int32 n_frm;       /**< Number of complete frames of unconsumed A/D data in adbuf */
+    int32 n_sample;    /**< Number of samples of unconsumed data in adbuf */
+    int32 tot_frm;     /**< Total number of frames of A/D data read, including consumed ones */
+    int32 noise_level; /**< PWP: what we claim as the "current" noise level */
+    
+    int32 *pow_hist;   /**< Histogram of frame power, moving window, decayed */
+    char *frm_pow;     /**< Frame power */
+
+    int32 auto_thresh;  /**< Do automatic threshold adjustment or not */
+    int32 delta_sil;   /**< Max silence power/frame ABOVE noise level */
+    int32 delta_speech;        /**< Min speech power/frame ABOVE noise level */
+    int32 min_noise;   /**< noise lower than this we ignore */
+    int32 max_noise;   /**< noise higher than this signals an error */
+    int32 winsize;     /**< how many frames to look at for speech det */
+    int32 speech_onset;        /**< start speech on >= these many frames out of winsize, of >= delta_speech */
+    int32 sil_onset;   /**< end speech on >= these many frames out of winsize, of <= delta_sil */
+    int32 leader;      /**< pad beggining of speech with this many extra frms */
+    int32 trailer;     /**< pad end of speech with this many extra frms */
+
+    int32 thresh_speech;/**< Frame considered to be speech if power >= thresh_speech
+                          (for transitioning from SILENCE to SPEECH state) */
+    int32 thresh_sil;  /**< Frame considered to be silence if power <= thresh_sil
+                          (for transitioning from SPEECH to SILENCE state) */
+    int32 thresh_update;/**< Number of frames before next update to pow_hist/thresholds */
+    float32 adapt_rate;        /**< Linear interpolation constant for rate at which noise level adapted
+                          to each estimate;
+                          range: 0-1; 0=> no adaptation, 1=> instant adaptation */
+    
+    int32 tail_state;  /**< State at the end of its internal buffer (internal use):
+                          CONT_AD_STATE_SIL or CONT_AD_STATE_SPEECH.  Note: This is
+                          different from cont_ad_t.state. */
+    int32 win_startfrm;        /**< Where next analysis window begins */
+    int32 win_validfrm;        /**< Number of frames currently available from win_startfrm for analysis */
+    int32 n_other;     /**< If in SILENCE state, number of frames in analysis window considered to
+                          be speech; otherwise number of frames considered to be silence */
+    spseg_t *spseg_head;/**< First of unconsumed speech segments */
+    spseg_t *spseg_tail;/**< Last of unconsumed speech segments */
+    
+    FILE *rawfp;       /**< If non-NULL, raw audio input data processed by cont_ad
+                          is dumped to this file.  Controlled by user application
+                          via cont_ad_set_rawfp().  NULL when cont_ad object is
+                          initially created. */
+    FILE *logfp;       /**< If non-NULL, write detailed logs of this object's
+                          progress to the file.  Controlled by user application
+                          via cont_ad_set_logfp().  NULL when cont_ad object is
+                          initially created. */
+
+    int32 n_calib_frame; /**< Number of frames of calibration data seen so far. */
+} cont_ad_t;
+
+
+/**
+ * Initialize a continuous listening/silence filtering object.
+ *
+ * One time initialization of a continuous listening/silence filtering
+ * object/module.  This can work in either "stream mode", where it
+ * reads data from an audio device represented by
+ * <code>ad_rec_t</code>, or in "block mode", where it filters out
+ * silence regions from blocks of data passed into it.
+ *
+ * @param ad An audio device to read from, or NULL to operate in block mode.
+ * @param adfunc The function used to read audio from <code>ad</code>,
+ * or NULL to operate in block mode.  This is usually ad_read().
+ * @return A pointer to a READ-ONLY structure used in other calls to
+ * the object.  If any error occurs, the return value is NULL.
+ */
+SPHINXBASE_EXPORT
+cont_ad_t *cont_ad_init (ad_rec_t *ad, /**< In: The A/D source object to be filtered */
+                        int32 (*adfunc)(ad_rec_t *ad, int16 *buf, int32 max)
+                        /**< In: adfunc = source function to be invoked
+                                          to obtain raw A/D data.  See ad.h for the
+                                          required prototype definition. */
+                        );
+
+/**
+ * Initializes a continuous listening object which simply passes data through (!)
+ *
+ * Like cont_ad_init, but put the module in raw mode; i.e., all data is passed
+ * through, unfiltered.  (By special request.)
+ */
+SPHINXBASE_EXPORT
+cont_ad_t *cont_ad_init_rawmode (ad_rec_t *ad,
+                                int32 (*adfunc)(ad_rec_t *ad, int16 *buf, int32 max));
+
+
+/**
+ * Read raw audio data into the silence filter.
+ *
+ * The main read routine for reading speech/silence segmented audio data.  Audio
+ * data is copied into the caller provided buffer, much like a file read routine.
+ *
+ * In "block mode", i.e. if NULL was passed as a read function to
+ * <code>cont_ad_init</code>, the data in <code>buf</code> is taken as
+ * input, and any non-silence data is written back to <code>buf</code>
+ * on exit.  In this case, you must take care that <code>max</code>
+ * does not overflow the internal buffer of the silence filter.  The
+ * available number of samples can be obtained by calling
+ * cont_ad_buffer_space().  Any excess data will be discarded.
+ *
+ * In normal mode, only speech segments are copied; silence segments are dropped.
+ * In rawmode (cont_ad module initialized using cont_ad_init_rawmode()), all data
+ * are passed through to the caller.  But, in either case, any single call to
+ * cont_ad_read will never return data that crosses a speech/silence segment
+ * boundary.
+ * 
+ * The following variables are updated for use by the caller (see cont_ad_t above):
+ *   cont_ad_t.state,
+ *   cont_ad_t.read_ts,
+ *   cont_ad_t.seglen,
+ *   cont_ad_t.siglvl.
+ * 
+ * Return value: Number of samples actually read, possibly 0; <0 if EOF on A/D source.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_read (cont_ad_t *r,      /**< In: Object pointer returned by cont_ad_init */
+                   int16 *buf,         /**< In/Out: In block mode, contains input data.
+                                           On return, buf contains A/D data returned
+                                          by this function, if any. */
+                   int32 max           /**< In: Maximum number of samples to be filled into buf.
+                                          NOTE: max must be at least 256; otherwise
+                                          the functions returns -1. */
+       );
+
+/**
+ * Get the maximum number of samples which can be passed into cont_ad_read().
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_buffer_space(cont_ad_t *r);
+
+/**
+ * Calibrate the silence filter.
+ *
+ * Calibration to determine an initial silence threshold.  This function can be called
+ * any number of times.  It should be called at least once immediately after cont_ad_init.
+ * The silence threshold is also updated internally once in a while, so this function
+ * only needs to be called in the middle if there is a definite change in the recording
+ * environment.
+ * The application is responsible for making sure that the raw audio source is turned on
+ * before the calibration.
+ * Return value: 0 if successful, <0 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_calib (cont_ad_t *cont   /**< In: object pointer returned by cont_ad_init */
+                    );
+
+/**
+ * Calibrate the silence filter without an audio device.
+ *
+ * If the application has not passed an audio device into the silence filter
+ * at initialisation,  this routine can be used to calibrate the filter. The
+ * buf (of length max samples) should contain audio data for calibration. This
+ * data is assumed to be completely consumed. More than one call may be
+ * necessary to fully calibrate. 
+ * Return value: 0 if successful, <0 on failure, >0 if calibration not
+ * complete.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_calib_loop (cont_ad_t *r, int16 *buf, int32 max); 
+
+/**
+ * Get the number of samples required to calibrate the silence filter.
+ *
+ * Since, as mentioned above, the calibration data is assumed to be
+ * fully consumed, it may be desirable to "hold onto" this data in
+ * case it contains useful speech.  This function returns the number
+ * of samples required to calibrate the silence filter, which is
+ * useful in allocating a buffer to store this data.
+ *
+ * @return Number of samples required for successful calibration.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_calib_size(cont_ad_t *r);
+
+/**
+ * Set silence and speech threshold parameters.
+ *
+ * The silence threshold is the max power
+ * level, RELATIVE to the peak background noise level, in any silence frame.  Similarly,
+ * the speech threshold is the min power level, RELATIVE to the peak background noise
+ * level, in any speech frame.  In general, silence threshold <= speech threshold.
+ * Increasing the thresholds (say, from the default value of 2 to 3 or 4) reduces the
+ * sensitivity to background noise, but may also increase the chances of clipping actual
+ * speech.
+ * @return: 0 if successful, <0 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_set_thresh (cont_ad_t *cont,     /**< In: Object ptr from cont_ad_init */
+                         int32 sil,    /**< In: silence threshold (default 2) */
+                         int32 sp      /**< In: speech threshold (default 2) */
+                         );
+
+
+/**
+ * Set the changable parameters.
+ *
+ *   delta_sil, delta_speech, min_noise, and max_noise are in dB,
+ *   winsize, speech_onset, sil_onset, leader and trailer are in frames of
+ *   16 ms length (256 samples @ 16kHz sampling).
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_set_params (cont_ad_t *r, int32 delta_sil, int32 delta_speech,
+                         int32 min_noise, int32 max_noise,
+                         int32 winsize, int32 speech_onset, int32 sil_onset,
+                         int32 leader, int32 trailer,
+                         float32 adapt_rate);
+
+/**
+ * PWP 1/14/98 -- get the changable params.
+ *
+ *   delta_sil, delta_speech, min_noise, and max_noise are in dB,
+ *   winsize, speech_onset, sil_onset, leader and trailer are in frames of
+ *   16 ms length (256 samples @ 16kHz sampling).
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_get_params (cont_ad_t *r, int32 *delta_sil, int32 *delta_speech,
+                         int32 *min_noise, int32 *max_noise,
+                         int32 *winsize, int32 *speech_onset, int32 *sil_onset,
+                         int32 *leader, int32 *trailer,
+                         float32 *adapt_rate);
+
+/**
+ * Reset, discarding any accumulated speech segments.
+ * @return 0 if successful, <0 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_reset (cont_ad_t *cont); /* In: Object pointer from cont_ad_init */
+
+
+/**
+ * Close the continuous listening object.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_close (cont_ad_t *cont); /* In: Object pointer from cont_ad_init */
+
+
+/**
+ * Dump the power histogram.  For debugging...
+ */
+SPHINXBASE_EXPORT
+void cont_ad_powhist_dump (FILE *fp, cont_ad_t *cont);
+
+
+/**
+ * Detach the given continuous listening module from the associated audio device.
+ * @return 0 if successful, -1 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_detach (cont_ad_t *c);
+
+
+/**
+ * Attach the continuous listening module to the given audio device/function.
+ * (Like cont_ad_init, but without the calibration.)
+ * @return 0 if successful, -1 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_attach (cont_ad_t *c, ad_rec_t *a, int32 (*func)(ad_rec_t *, int16 *, int32));
+
+
+/**
+ * Set a file for dumping raw audio input.
+ *
+ * The application can ask cont_ad to dump the raw audio input that cont_ad
+ * processes to a file.  Use this function to give the FILE* to the cont_ad
+ * object.  If invoked with fp == NULL, dumping is turned off.  The application
+ * is responsible for opening and closing the file.  If fp is non-NULL, cont_ad
+ * assumes the file pointer is valid and opened for writing.
+ *
+ * @return 0 if successful, -1 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_set_rawfp (cont_ad_t *c, /* The cont_ad object being addressed */
+                        FILE *fp);     /* File to which raw audio data is to
+                                          be dumped; NULL to stop dumping. */
+
+/**
+ * Set the file to which cont_ad logs its progress.
+ *
+ * Mainly for debugging.  If <code>fp</code> is NULL, logging is turned off.
+ *
+ * @return 0 if successful, -1 otherwise.
+ */
+SPHINXBASE_EXPORT
+int32 cont_ad_set_logfp (cont_ad_t *c, /* The cont_ad object being addressed */
+                        FILE *fp);     /* File to which logs are written;
+                                          NULL to stop logging. */
+
+/**
+ * Set the silence and speech thresholds.
+ *
+ * For this to remain permanently in effect, the auto_thresh field of
+ * the continuous listening module should be set to FALSE or 0.
+ * Otherwise the thresholds may be modified by the noise- level
+ * adaptation.
+ */
+SPHINXBASE_EXPORT
+int32 cont_set_thresh(cont_ad_t *r, int32 silence, int32 speech);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/include/sphinxbase/err.h b/include/sphinxbase/err.h
new file mode 100644 (file)
index 0000000..1207584
--- /dev/null
@@ -0,0 +1,223 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef _LIBUTIL_ERR_H_
+#define _LIBUTIL_ERR_H_
+
+#include <stdarg.h>
+#include <stdio.h>
+#ifndef _WIN32_WCE
+#include <errno.h>
+#endif
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+/**
+ * @file err.h
+ * @brief Implementation of logging routines. 
+ *
+ * Logging, warning, debug and error message output funtionality is provided in this file.
+ * Sphinxbase defines several level of logging messages - INFO, WARNING, ERROR, FATAL. By
+ * default output goes to standard error output.
+ *
+ * Logging is implemented through macros. They take same arguments as printf: format string and 
+ * values. By default source file name and source line are prepended to the message. Log output 
+ * could be redirected to any file using err_set_logfp() and err_set_logfile() functions. To disable 
+ * logging in your application, call err_set_logfp(NULL).
+ *
+ * It's possible to log multiline info messages, to do that you need to start message with
+ * E_INFO and output other lines with E_INFOCONT.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+SPHINXBASE_EXPORT
+void _E__pr_header(char const *file, long line, char const *msg);
+SPHINXBASE_EXPORT
+void _E__pr_debug_header(char const *file, long line, int level);
+SPHINXBASE_EXPORT
+void _E__pr_info_header(char const *file, long line, char const *tag);
+SPHINXBASE_EXPORT
+void _E__pr_info_header_wofn(char const *msg);
+SPHINXBASE_EXPORT
+void _E__pr_warn(char const *fmt, ...);
+SPHINXBASE_EXPORT
+void _E__pr_info(char const *fmt, ...);
+SPHINXBASE_EXPORT
+void _E__die_error(char const *fmt, ...);
+SPHINXBASE_EXPORT
+void _E__abort_error(char const *fmt, ...);
+SPHINXBASE_EXPORT
+void _E__sys_error(char const *fmt, ...);
+SPHINXBASE_EXPORT
+void _E__fatal_sys_error(char const *fmt, ...);
+
+/**
+ * Direct all logging to a given filehandle.
+ *
+ * @param logfp Filehandle to send log messages to, or NULL to disable logging.
+ * @return Previous logging filehandle, if any.
+ */
+SPHINXBASE_EXPORT
+FILE *err_set_logfp(FILE *logfp);
+
+/**
+ * Get the current logging filehandle.
+ * @return Current logging filehandle, NULL if disabled.
+ */
+SPHINXBASE_EXPORT
+FILE * err_get_logfp(void);
+
+
+/**
+ * Append all log messages to a given file.
+ *
+ * Previous logging filehandle is closed (unless it was stdout or stderr).
+ *
+ * @param file File to send log messages to, or NULL to disable logging.
+ * @return 0 for success, <0 for failure (e.g. if file does not exist)
+ */
+SPHINXBASE_EXPORT
+int err_set_logfile(char const *file);
+
+/**
+ * Exit with non-zero status after error message 
+ */
+#define E_FATAL  _E__pr_header(__FILE__, __LINE__, "FATAL_ERROR"),_E__die_error
+
+/**
+ * Print error text; Call perror(""); exit(errno); 
+ */
+#define E_FATAL_SYSTEM _E__pr_header(__FILE__, __LINE__, "SYSTEM_ERROR"),_E__fatal_sys_error
+
+/**
+ * Print error text; Call perror(""); 
+ */
+#define E_WARN_SYSTEM  _E__pr_header(__FILE__, __LINE__, "SYSTEM_ERROR"),_E__sys_error
+
+/**
+ * Print error text; Call perror(""); 
+ */
+#define E_ERROR_SYSTEM _E__pr_header(__FILE__, __LINE__, "SYSTEM_ERROR"),_E__sys_error
+
+/**
+ * Print logging information to standard error stream
+ */
+#define E_INFO   _E__pr_info_header(__FILE__, __LINE__, "INFO"),_E__pr_info
+
+/**
+ * Print logging information without header, to standard error stream
+ */
+
+#define E_INFOCONT       _E__pr_info
+
+/**
+ * Print logging information without filename.
+ */
+#define E_INFO_NOFN _E__pr_info_header_wofn("INFO"),_E__pr_info
+
+
+/**
+ * Print warning information to standard error stream
+ */
+#define E_WARN   _E__pr_header(__FILE__, __LINE__, "WARNING"),_E__pr_warn
+
+/**
+ * Print error message to standard error stream
+ */
+#define E_ERROR          _E__pr_header(__FILE__, __LINE__, "ERROR"),_E__pr_warn
+
+/**
+ * Set debugging verbosity level.
+ *
+ * Note that debugging messages are only enabled when compiled with -DDEBUG.
+ *
+ * @param level Verbosity level to set, or 0 to disable debug messages.
+ */
+SPHINXBASE_EXPORT
+int err_set_debug_level(int level);
+
+/**
+ * Get debugging verbosity level.
+ *
+ * Note that debugging messages are only enabled when compiled with -DDEBUG.
+ */
+SPHINXBASE_EXPORT
+int err_get_debug_level(void);
+
+/**
+ * Print debugging information to standard error stream.
+ *
+ * This will only print a message if:
+ *  1. Debugging is enabled at compile time
+ *  2. The debug level is greater than or equal to \a level
+ *
+ * Note that for portability reasons the format and arguments must be
+ * enclosed in an extra set of parentheses.
+ */
+#ifdef SPHINX_DEBUG
+#define E_DEBUG(level,x) {                              \
+        if (err_get_debug_level() >= level) {           \
+            _E__pr_header(__FILE__, __LINE__, "DEBUG"); \
+            _E__pr_info x;                              \
+        }                                               \
+    }
+#define E_DEBUGCONT(level,x) {                          \
+        if (err_get_debug_level() >= level) {           \
+            _E__pr_info x;                              \
+        }                                               \
+    }
+#else
+#define E_DEBUG(level,x)
+#define E_DEBUGCONT(level,x)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* !_ERR_H */
+
+
diff --git a/include/sphinxbase/f2c.h b/include/sphinxbase/f2c.h
new file mode 100644 (file)
index 0000000..a50d1c7
--- /dev/null
@@ -0,0 +1,218 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* f2c.h  --  Standard Fortran to C header file */
+
+/**  barf  [ba:rf]  2.  "He suggested using FORTRAN, and everybody barfed."
+
+       - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */
+
+#ifndef F2C_INCLUDE
+#define F2C_INCLUDE
+
+typedef int integer;
+typedef char *address;
+typedef short int shortint;
+typedef float real;
+typedef double doublereal;
+typedef struct { real r, i; } complex;
+typedef struct { doublereal r, i; } doublecomplex;
+typedef int logical;
+typedef short int shortlogical;
+typedef char logical1;
+typedef char integer1;
+
+#define TRUE_ (1)
+#define FALSE_ (0)
+
+/* Extern is for use with -E */
+#ifndef Extern
+#define Extern extern
+#endif
+
+/* I/O stuff */
+
+#ifdef f2c_i2
+/* for -i2 */
+typedef short flag;
+typedef short ftnlen;
+typedef short ftnint;
+#else
+typedef int flag;
+typedef int ftnlen;
+typedef int ftnint;
+#endif
+
+/*external read, write*/
+typedef struct
+{      flag cierr;
+       ftnint ciunit;
+       flag ciend;
+       char *cifmt;
+       ftnint cirec;
+} cilist;
+
+/*internal read, write*/
+typedef struct
+{      flag icierr;
+       char *iciunit;
+       flag iciend;
+       char *icifmt;
+       ftnint icirlen;
+       ftnint icirnum;
+} icilist;
+
+/*open*/
+typedef struct
+{      flag oerr;
+       ftnint ounit;
+       char *ofnm;
+       ftnlen ofnmlen;
+       char *osta;
+       char *oacc;
+       char *ofm;
+       ftnint orl;
+       char *oblnk;
+} olist;
+
+/*close*/
+typedef struct
+{      flag cerr;
+       ftnint cunit;
+       char *csta;
+} cllist;
+
+/*rewind, backspace, endfile*/
+typedef struct
+{      flag aerr;
+       ftnint aunit;
+} alist;
+
+/* inquire */
+typedef struct
+{      flag inerr;
+       ftnint inunit;
+       char *infile;
+       ftnlen infilen;
+       ftnint  *inex;  /*parameters in standard's order*/
+       ftnint  *inopen;
+       ftnint  *innum;
+       ftnint  *innamed;
+       char    *inname;
+       ftnlen  innamlen;
+       char    *inacc;
+       ftnlen  inacclen;
+       char    *inseq;
+       ftnlen  inseqlen;
+       char    *indir;
+       ftnlen  indirlen;
+       char    *infmt;
+       ftnlen  infmtlen;
+       char    *inform;
+       ftnint  informlen;
+       char    *inunf;
+       ftnlen  inunflen;
+       ftnint  *inrecl;
+       ftnint  *innrec;
+       char    *inblank;
+       ftnlen  inblanklen;
+} inlist;
+
+#define VOID void
+
+union Multitype {      /* for multiple entry points */
+       shortint h;
+       integer i;
+       real r;
+       doublereal d;
+       complex c;
+       doublecomplex z;
+       };
+
+typedef union Multitype Multitype;
+
+typedef long Long;     /* No longer used; formerly in Namelist */
+
+struct Vardesc {       /* for Namelist */
+       char *name;
+       char *addr;
+       ftnlen *dims;
+       int  type;
+       };
+typedef struct Vardesc Vardesc;
+
+struct Namelist {
+       char *name;
+       Vardesc **vars;
+       int nvars;
+       };
+typedef struct Namelist Namelist;
+
+#ifndef abs
+#define abs(x) ((x) >= 0 ? (x) : -(x))
+#endif
+#define dabs(x) (doublereal)abs(x)
+#ifndef min
+#define min(a,b) ((a) <= (b) ? (a) : (b))
+#endif
+#ifndef max
+#define max(a,b) ((a) >= (b) ? (a) : (b))
+#endif
+#define dmin(a,b) (doublereal)min(a,b)
+#define dmax(a,b) (doublereal)max(a,b)
+
+/* procedure parameter types for -A and -C++ */
+
+#define F2C_proc_par_types 1
+#ifdef __cplusplus
+typedef int /* Unknown procedure type */ (*U_fp)(...);
+typedef shortint (*J_fp)(...);
+typedef integer (*I_fp)(...);
+typedef real (*R_fp)(...);
+typedef doublereal (*D_fp)(...), (*E_fp)(...);
+typedef /* Complex */ VOID (*C_fp)(...);
+typedef /* Double Complex */ VOID (*Z_fp)(...);
+typedef logical (*L_fp)(...);
+typedef shortlogical (*K_fp)(...);
+typedef /* Character */ VOID (*H_fp)(...);
+typedef /* Subroutine */ int (*S_fp)(...);
+#else
+typedef int /* Unknown procedure type */ (*U_fp)(void);
+typedef shortint (*J_fp)(void);
+typedef integer (*I_fp)(void);
+typedef real (*R_fp)(void);
+typedef doublereal (*D_fp)(void), (*E_fp)(void);
+typedef /* Complex */ VOID (*C_fp)(void);
+typedef /* Double Complex */ VOID (*Z_fp)(void);
+typedef logical (*L_fp)(void);
+typedef shortlogical (*K_fp)(void);
+typedef /* Character */ VOID (*H_fp)(void);
+typedef /* Subroutine */ int (*S_fp)(void);
+#endif
+/* E_fp is for real functions when -R is not specified */
+typedef VOID C_f;      /* complex function */
+typedef VOID H_f;      /* character function */
+typedef VOID Z_f;      /* double complex function */
+typedef doublereal E_f;        /* real function with -R not specified */
+
+/* undef any lower-case symbols that your C compiler predefines, e.g.: */
+
+#ifndef Skip_f2c_Undefs
+#undef cray
+#undef gcos
+#undef mc68010
+#undef mc68020
+#undef mips
+#undef pdp11
+#undef sgi
+#undef sparc
+#undef sun
+#undef sun2
+#undef sun3
+#undef sun4
+#undef u370
+#undef u3b
+#undef u3b2
+#undef u3b5
+#undef unix
+#undef vax
+#endif
+#endif
diff --git a/include/sphinxbase/fe.h b/include/sphinxbase/fe.h
new file mode 100644 (file)
index 0000000..0ac3fda
--- /dev/null
@@ -0,0 +1,560 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1996-2004 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/*
+ * fe.h
+ * 
+ * $Log: fe.h,v $
+ * Revision 1.11  2005/02/05 02:15:02  egouvea
+ * Removed fe_process(), never used
+ *
+ * Revision 1.10  2004/12/10 16:48:55  rkm
+ * Added continuous density acoustic model handling
+ *
+ *
+ */
+
+#if defined(WIN32) && !defined(GNUWINCE)
+#define srand48(x) srand(x)
+#define lrand48() rand()
+#endif
+
+#ifndef _NEW_FE_H_
+#define _NEW_FE_H_
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/fixpoint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#ifdef WORDS_BIGENDIAN
+#define NATIVE_ENDIAN "big"
+#else
+#define NATIVE_ENDIAN "little"
+#endif
+
+/** Default number of samples per second. */
+#define DEFAULT_SAMPLING_RATE 16000
+/** Default number of frames per second. */
+#define DEFAULT_FRAME_RATE 100
+/** Default spacing between frame starts (equal to
+ * DEFAULT_SAMPLING_RATE/DEFAULT_FRAME_RATE) */
+#define DEFAULT_FRAME_SHIFT 160
+/** Default size of each frame (410 samples @ 16000Hz). */
+#define DEFAULT_WINDOW_LENGTH 0.025625 
+/** Default number of FFT points. */
+#define DEFAULT_FFT_SIZE 512
+/** Default number of MFCC coefficients in output. */
+#define DEFAULT_NUM_CEPSTRA 13
+/** Default number of filter bands used to generate MFCCs. */
+#define DEFAULT_NUM_FILTERS 40
+/** Default lower edge of mel filter bank. */
+#define DEFAULT_LOWER_FILT_FREQ 133.33334
+/** Default upper edge of mel filter bank. */
+#define DEFAULT_UPPER_FILT_FREQ 6855.4976
+/** Default pre-emphasis filter coefficient. */
+#define DEFAULT_PRE_EMPHASIS_ALPHA 0.97
+/** Default type of frequency warping to use for VTLN. */
+#define DEFAULT_WARP_TYPE "inverse_linear"
+/** Default random number seed to use for dithering. */
+#define SEED  -1
+
+#define waveform_to_cepstral_command_line_macro() \
+  { "-logspec", \
+    ARG_BOOLEAN, \
+    "no", \
+    "Write out logspectral files instead of cepstra" }, \
+   \
+  { "-smoothspec", \
+    ARG_BOOLEAN, \
+    "no", \
+    "Write out cepstral-smoothed logspectral files" }, \
+   \
+  { "-transform", \
+    ARG_STRING, \
+    "legacy", \
+    "Which type of transform to use to calculate cepstra (legacy, dct, or htk)" }, \
+   \
+  { "-alpha", \
+    ARG_FLOAT32, \
+    ARG_STRINGIFY(DEFAULT_PRE_EMPHASIS_ALPHA), \
+    "Preemphasis parameter" }, \
+   \
+  { "-samprate", \
+    ARG_FLOAT32, \
+    ARG_STRINGIFY(DEFAULT_SAMPLING_RATE), \
+    "Sampling rate" }, \
+   \
+  { "-frate", \
+    ARG_INT32, \
+    ARG_STRINGIFY(DEFAULT_FRAME_RATE), \
+    "Frame rate" }, \
+   \
+  { "-wlen", \
+    ARG_FLOAT32, \
+    ARG_STRINGIFY(DEFAULT_WINDOW_LENGTH), \
+    "Hamming window length" }, \
+   \
+  { "-nfft", \
+    ARG_INT32, \
+    ARG_STRINGIFY(DEFAULT_FFT_SIZE), \
+    "Size of FFT" }, \
+   \
+  { "-nfilt", \
+    ARG_INT32, \
+    ARG_STRINGIFY(DEFAULT_NUM_FILTERS), \
+    "Number of filter banks" }, \
+   \
+  { "-lowerf", \
+    ARG_FLOAT32, \
+    ARG_STRINGIFY(DEFAULT_LOWER_FILT_FREQ), \
+    "Lower edge of filters" }, \
+   \
+  { "-upperf", \
+    ARG_FLOAT32, \
+    ARG_STRINGIFY(DEFAULT_UPPER_FILT_FREQ), \
+    "Upper edge of filters" }, \
+   \
+  { "-unit_area", \
+    ARG_BOOLEAN, \
+    "yes", \
+    "Normalize mel filters to unit area" }, \
+   \
+  { "-round_filters", \
+    ARG_BOOLEAN, \
+    "yes", \
+    "Round mel filter frequencies to DFT points" }, \
+   \
+  { "-ncep", \
+    ARG_INT32, \
+    ARG_STRINGIFY(DEFAULT_NUM_CEPSTRA), \
+    "Number of cep coefficients" }, \
+   \
+  { "-doublebw", \
+    ARG_BOOLEAN, \
+    "no", \
+    "Use double bandwidth filters (same center freq)" }, \
+   \
+  { "-lifter", \
+    ARG_INT32, \
+    "0", \
+    "Length of sin-curve for liftering, or 0 for no liftering." }, \
+   \
+  { "-input_endian", \
+    ARG_STRING, \
+    NATIVE_ENDIAN, \
+    "Endianness of input data, big or little, ignored if NIST or MS Wav" }, \
+   \
+  { "-warp_type", \
+    ARG_STRING, \
+    DEFAULT_WARP_TYPE, \
+    "Warping function type (or shape)" }, \
+   \
+  { "-warp_params", \
+    ARG_STRING, \
+    NULL, \
+    "Parameters defining the warping function" }, \
+   \
+  { "-dither", \
+    ARG_BOOLEAN, \
+    "no", \
+    "Add 1/2-bit noise" }, \
+   \
+  { "-seed", \
+    ARG_INT32, \
+    ARG_STRINGIFY(SEED), \
+    "Seed for random number generator; if less than zero, pick our own" }, \
+   \
+  { "-remove_dc", \
+    ARG_BOOLEAN, \
+    "no", \
+    "Remove DC offset from each frame" }, \
+                                          \
+  { "-verbose", \
+    ARG_BOOLEAN, \
+    "no", \
+    "Show input filenames" } \
+  
+  
+#ifdef FIXED_POINT
+/** MFCC computation type. */
+typedef fixed32 mfcc_t;
+
+/** Convert a floating-point value to mfcc_t. */
+#define FLOAT2MFCC(x) FLOAT2FIX(x)
+/** Convert a mfcc_t value to floating-point. */
+#define MFCC2FLOAT(x) FIX2FLOAT(x)
+/** Multiply two mfcc_t values. */
+#define MFCCMUL(a,b) FIXMUL(a,b)
+#define MFCCLN(x,in,out) FIXLN_ANY(x,in,out)
+#else /* !FIXED_POINT */
+
+/** MFCC computation type. */
+typedef float32 mfcc_t;
+/** Convert a floating-point value to mfcc_t. */
+#define FLOAT2MFCC(x) (x)
+/** Convert a mfcc_t value to floating-point. */
+#define MFCC2FLOAT(x) (x)
+/** Multiply two mfcc_t values. */
+#define MFCCMUL(a,b) ((a)*(b))
+#define MFCCLN(x,in,out) log(x)
+#endif /* !FIXED_POINT */
+
+/**
+ * Structure for the front-end computation.
+ */
+typedef struct fe_s fe_t;
+
+/**
+ * Error codes returned by stuff.
+ */
+enum fe_error_e {
+       FE_SUCCESS = 0,
+       FE_OUTPUT_FILE_SUCCESS  = 0,
+       FE_CONTROL_FILE_ERROR = -1,
+       FE_START_ERROR = -2,
+       FE_UNKNOWN_SINGLE_OR_BATCH = -3,
+       FE_INPUT_FILE_OPEN_ERROR = -4,
+       FE_INPUT_FILE_READ_ERROR = -5,
+       FE_MEM_ALLOC_ERROR = -6,
+       FE_OUTPUT_FILE_WRITE_ERROR = -7,
+       FE_OUTPUT_FILE_OPEN_ERROR = -8,
+       FE_ZERO_ENERGY_ERROR = -9,
+       FE_INVALID_PARAM_ERROR =  -10
+};
+
+/**
+ * Initialize a front-end object from global command-line.
+ *
+ * This is equivalent to calling fe_init_auto_r(cmd_ln_get()).
+ *
+ * @return Newly created front-end object.
+ */
+SPHINXBASE_EXPORT
+fe_t* fe_init_auto(void);
+
+/**
+ * Get the default set of arguments for fe_init_auto_r().
+ *
+ * @return Pointer to an argument structure which can be passed to
+ * cmd_ln_init() in friends to create argument structures for
+ * fe_init_auto_r().
+ */
+SPHINXBASE_EXPORT
+arg_t const *fe_get_args(void);
+
+/**
+ * Initialize a front-end object from a command-line parse.
+ *
+ * @param config Command-line object, as returned by cmd_ln_parse_r()
+ *               or cmd_ln_parse_file().  Ownership of this object is
+ *               claimed by the fe_t, so you must not attempt to free
+ *               it manually.  Use cmd_ln_retain() if you wish to
+ *               reuse it.
+ * @return Newly created front-end object.
+ */
+SPHINXBASE_EXPORT
+fe_t *fe_init_auto_r(cmd_ln_t *config);
+
+/**
+ * Retrieve the command-line object used to initialize this front-end.
+ *
+ * @return command-line object for this front-end.  This pointer is
+ *         retained by the fe_t, so you should not attempt to free it
+ *         manually.
+ */
+SPHINXBASE_EXPORT
+cmd_ln_t *fe_get_config(fe_t *fe);
+
+/**
+ * Start processing an utterance.
+ * @return 0 for success, <0 for error (see enum fe_error_e)
+ */
+SPHINXBASE_EXPORT
+int fe_start_utt(fe_t *fe);
+
+/**
+ * Get the dimensionality of the output of this front-end object.
+ *
+ * This is guaranteed to be the number of values in one frame of
+ * output from fe_end_utt(), fe_process_frame(), and
+ * fe_process_frames().  It is usually the number of MFCC
+ * coefficients, but it might be the number of log-spectrum bins, if
+ * the <tt>-logspec</tt> or <tt>-smoothspec</tt> options to
+ * fe_init_auto() were true.
+ *
+ * @return Dimensionality of front-end output.
+ */
+SPHINXBASE_EXPORT
+int fe_get_output_size(fe_t *fe);
+
+/**
+ * Get the dimensionality of the input to this front-end object.
+ *
+ * This function retrieves the number of input samples consumed by one
+ * frame of processing.  To obtain one frame of output, you must have
+ * at least <code>*out_frame_size</code> samples.  To obtain <i>N</i>
+ * frames of output, you must have at least <code>(N-1) *
+ * *out_frame_shift + *out_frame_size</code> input samples.
+ *
+ * @param out_frame_shift Output: Number of samples between each frame start.
+ * @param out_frame_size Output: Number of samples in each frame.
+ */
+SPHINXBASE_EXPORT
+void fe_get_input_size(fe_t *fe, int *out_frame_shift,
+                       int *out_frame_size);
+
+/**
+ * Finish processing an utterance.
+ *
+ * This function also collects any remaining samples and calculates a
+ * final cepstral vector.  If there are overflow samples remaining, it
+ * will pad with zeros to make a complete frame.
+ *
+ * @param fe Front-end object.
+ * @param out_cepvector Buffer to hold a residual cepstral vector, or NULL
+ *                      if you wish to ignore it.  Must be large enough
+ * @param out_nframes Number of frames of residual cepstra created
+ *                    (either 0 or 1).
+ * @return 0 for success, <0 for error (see enum fe_error_e)
+ */
+SPHINXBASE_EXPORT
+int fe_end_utt(fe_t *fe, mfcc_t *out_cepvector, int32 *out_nframes);
+
+/**
+ * Retain ownership of a front end object.
+ *
+ * @return pointer to the retained front end.
+ */
+SPHINXBASE_EXPORT
+fe_t *fe_retain(fe_t *fe);
+
+/**
+ * Free the front end. 
+ *
+ * Releases resources associated with the front-end object.
+ *
+ * @return new reference count (0 if freed completely)
+ */
+SPHINXBASE_EXPORT
+int fe_free(fe_t *fe);
+
+/**
+ * Process one frame of samples.
+ *
+ * @param spch Speech samples (signed 16-bit linear PCM)
+ * @param nsamps Number of samples in <code>spch</code>
+ * @param buf_cep Buffer which will receive one frame of features.
+ * @return 0 for success, <0 for error (see enum fe_error_e)
+ */
+SPHINXBASE_EXPORT
+int fe_process_frame(fe_t *fe, int16 const *spch,
+                     int32 nsamps, mfcc_t *out_cep);
+
+/** 
+ * Process a block of samples.
+ *
+ * This function generates up to <code>*inout_nframes</code> of
+ * features, or as many as can be generated from
+ * <code>*inout_nsamps</code> samples.
+ *
+ * On exit, the <code>inout_spch</code>, <code>inout_nsamps</code>,
+ * and <code>inout_nframes</code> parameters are updated to point to
+ * the remaining sample data, the number of remaining samples, and the
+ * number of frames processed, respectively.  This allows you to call
+ * this repeatedly to process a large block of audio in small (say,
+ * 5-frame) chunks:
+ *
+ *  int16 *bigbuf, *p;
+ *  mfcc_t **cepstra;
+ *  int32 nsamps;
+ *  int32 nframes = 5;
+ *
+ *  cepstra = (mfcc_t **)
+ *      ckd_calloc_2d(nframes, fe_get_output_size(fe), sizeof(**cepstra));
+ *  p = bigbuf;
+ *  while (nsamps) {
+ *      nframes = 5;
+ *      fe_process_frames(fe, &p, &nsamps, cepstra, &nframes);
+ *      // Now do something with these frames...
+ *      if (nframes)
+ *          do_some_stuff(cepstra, nframes);
+ *  }
+ *
+ * @param inout_spch Input: Pointer to pointer to speech samples
+ *                   (signed 16-bit linear PCM).
+ *                   Output: Pointer to remaining samples.
+ * @param inout_nsamps Input: Pointer to maximum number of samples to
+ *                     process.
+ *                     Output: Number of samples remaining in input buffer.
+ * @param buf_cep Two-dimensional buffer (allocated with
+ *                ckd_calloc_2d()) which will receive frames of output
+ *                data.  If NULL, no actual processing will be done,
+ *                and the maximum number of output frames which would
+ *                be generated is returned in
+ *                <code>*inout_nframes</code>.
+ * @param inout_nframes Input: Pointer to maximum number of frames to
+ *                      generate.
+ *                      Output: Number of frames actually generated.
+ * @return 0 for success, <0 for failure (see enum fe_error_e)
+ */
+SPHINXBASE_EXPORT
+int fe_process_frames(fe_t *fe,
+                      int16 const **inout_spch,
+                      size_t *inout_nsamps,
+                      mfcc_t **buf_cep,
+                      int32 *inout_nframes);
+
+/** 
+ * Process a block of samples, returning as many frames as possible.
+ *
+ * This function processes all the samples in a block of data and
+ * returns a newly allocated block of feature vectors.  This block
+ * needs to be freed with fe_free_2d() after use.
+ *
+ * It is possible for there to be some left-over data which could not
+ * fit in a complete frame.  This data can be processed with
+ * fe_end_utt().
+ *
+ * This function is deprecated in favor of fe_process_frames().
+ *
+ * @return 0 for success, <0 for failure (see enum fe_error_e)
+ */
+SPHINXBASE_EXPORT
+int fe_process_utt(fe_t *fe,  /**< A front end object */
+                   int16 const *spch, /**< The speech samples */
+                   size_t nsamps, /**< number of samples*/
+                   mfcc_t ***cep_block, /**< Output pointer to cepstra */
+                   int32 *nframes /**< Number of frames processed */
+       );
+
+/**
+ * Free the output pointer returned by fe_process_utt().
+ **/
+SPHINXBASE_EXPORT
+void fe_free_2d(void *arr);
+
+/**
+ * Convert a block of mfcc_t to float32 (can be done in-place)
+ **/
+SPHINXBASE_EXPORT
+int fe_mfcc_to_float(fe_t *fe,
+                     mfcc_t **input,
+                     float32 **output,
+                     int32 nframes);
+
+/**
+ * Convert a block of float32 to mfcc_t (can be done in-place)
+ **/
+SPHINXBASE_EXPORT
+int fe_float_to_mfcc(fe_t *fe,
+                     float32 **input,
+                     mfcc_t **output,
+                     int32 nframes);
+
+/**
+ * Process one frame of log spectra into MFCC using discrete cosine
+ * transform.
+ *
+ * This uses a variant of the DCT-II where the first frequency bin is
+ * scaled by 0.5.  Unless somebody misunderstood the DCT-III equations
+ * and thought that's what they were implementing here, this is
+ * ostensibly done to account for the symmetry properties of the
+ * DCT-II versus the DFT - the first coefficient of the input is
+ * assumed to be repeated in the negative frequencies, which is not
+ * the case for the DFT.  (This begs the question, why not just use
+ * the DCT-I, since it has the appropriate symmetry properties...)
+ * Moreover, this is bogus since the mel-frequency bins on which we
+ * are doing the DCT don't extend to the edge of the DFT anyway.
+ *
+ * This also means that the matrix used in computing this DCT can not
+ * be made orthogonal, and thus inverting the transform is difficult.
+ * Therefore if you want to do cepstral smoothing or have some other
+ * reason to invert your MFCCs, use fe_logspec_dct2() and its inverse
+ * fe_logspec_dct3() instead.
+ *
+ * Also, it normalizes by 1/nfilt rather than 2/nfilt, for some reason.
+ **/
+SPHINXBASE_EXPORT
+int fe_logspec_to_mfcc(fe_t *fe,  /**< A fe structure */
+                       const mfcc_t *fr_spec, /**< One frame of spectrum */
+                       mfcc_t *fr_cep /**< One frame of cepstrum */
+        );
+
+/**
+ * Convert log spectra to MFCC using DCT-II.
+ *
+ * This uses the "unitary" form of the DCT-II, i.e. with a scaling
+ * factor of sqrt(2/N) and a "beta" factor of sqrt(1/2) applied to the
+ * cos(0) basis vector (i.e. the one corresponding to the DC
+ * coefficient in the output).
+ **/
+SPHINXBASE_EXPORT
+int fe_logspec_dct2(fe_t *fe,  /**< A fe structure */
+                    const mfcc_t *fr_spec, /**< One frame of spectrum */
+                    mfcc_t *fr_cep /**< One frame of cepstrum */
+        );
+
+/**
+ * Convert MFCC to log spectra using DCT-III.
+ *
+ * This uses the "unitary" form of the DCT-III, i.e. with a scaling
+ * factor of sqrt(2/N) and a "beta" factor of sqrt(1/2) applied to the
+ * cos(0) basis vector (i.e. the one corresponding to the DC
+ * coefficient in the input).
+ **/
+SPHINXBASE_EXPORT
+int fe_mfcc_dct3(fe_t *fe,  /**< A fe structure */
+                 const mfcc_t *fr_cep, /**< One frame of cepstrum */
+                 mfcc_t *fr_spec /**< One frame of spectrum */
+        );
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/include/sphinxbase/feat.h b/include/sphinxbase/feat.h
new file mode 100644 (file)
index 0000000..6d756d8
--- /dev/null
@@ -0,0 +1,489 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * feat.h -- Cepstral features computation.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.1  2006/04/05  20:27:30  dhdfu
+ * A Great Reorganzation of header files and executables
+ * 
+ * Revision 1.17  2006/02/23 03:59:40  arthchan2003
+ * Merged from branch SPHINX3_5_2_RCI_IRII_BRANCH: a, Free buffers correctly. b, Fixed dox-doc.
+ *
+ * Revision 1.16.4.1  2005/07/05 06:25:08  arthchan2003
+ * Fixed dox-doc.
+ *
+ * Revision 1.16  2005/06/22 03:29:35  arthchan2003
+ * Makefile.am s  for all subdirectory of libs3decoder/
+ *
+ * Revision 1.5  2005/06/13 04:02:56  archan
+ * Fixed most doxygen-style documentation under libs3decoder.
+ *
+ * Revision 1.4  2005/04/21 23:50:26  archan
+ * Some more refactoring on the how reporting of structures inside kbcore_t is done, it is now 50% nice. Also added class-based LM test case into test-decode.sh.in.  At this moment, everything in search mode 5 is already done.  It is time to test the idea whether the search can really be used.
+ *
+ * Revision 1.3  2005/03/30 01:22:46  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 20.Apr.2001  RAH (rhoughton@mediasite.com, ricky.houghton@cs.cmu.edu)
+ *              Adding feat_free() to free allocated memory
+ * 
+ * 04-Jan-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Started.
+ */
+
+
+#ifndef _S3_FEAT_H_
+#define _S3_FEAT_H_
+
+#include <stdio.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/fe.h>
+#include <sphinxbase/cmn.h>
+#include <sphinxbase/agc.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/** \file feat.h
+ * \brief compute the dynamic coefficients from the cepstral vector. 
+ */
+#define LIVEBUFBLOCKSIZE        256    /** Blocks of 256 vectors allocated 
+                                          for livemode decoder */
+#define S3_MAX_FRAMES          15000    /* RAH, I believe this is still too large, but better than before */
+
+#define cepstral_to_feature_command_line_macro()                        \
+{ "-feat",                                                              \
+      ARG_STRING,                                                       \
+      "1s_c_d_dd",                                                      \
+      "Feature stream type, depends on the acoustic model" },           \
+{ "-ceplen",                                                            \
+      ARG_INT32,                                                        \
+      "13",                                                             \
+     "Number of components in the input feature vector" },              \
+{ "-cmn",                                                               \
+      ARG_STRING,                                                       \
+      "current",                                                        \
+      "Cepstral mean normalization scheme ('current', 'prior', or 'none')" }, \
+{ "-cmninit",                                                           \
+      ARG_STRING,                                                       \
+      "8.0",                                                            \
+      "Initial values (comma-separated) for cepstral mean when 'prior' is used" }, \
+{ "-varnorm",                                                           \
+      ARG_BOOLEAN,                                                      \
+      "no",                                                             \
+      "Variance normalize each utterance (only if CMN == current)" },   \
+{ "-agc",                                                               \
+      ARG_STRING,                                                       \
+      "none",                                                           \
+      "Automatic gain control for c0 ('max', 'emax', 'noise', or 'none')" }, \
+{ "-agcthresh",                                                         \
+      ARG_FLOAT32,                                                      \
+      "2.0",                                                            \
+      "Initial threshold for automatic gain control" },                 \
+{ "-lda",                                                               \
+      ARG_STRING,                                                       \
+      NULL,                                                             \
+      "File containing transformation matrix to be applied to features (single-stream features only)" }, \
+{ "-ldadim",                                                            \
+      ARG_INT32,                                                        \
+      "0",                                                              \
+      "Dimensionality of output of feature transformation (0 to use entire matrix)" }, \
+{"-svspec",                                                             \
+     ARG_STRING,                                                        \
+     NULL,                                                           \
+     "Subvector specification (e.g., 24,0-11/25,12-23/26-38 or 0-12/13-25/26-38)"}
+
+/**
+ * \struct feat_t
+ * \brief Structure for describing a speech feature type
+ * Structure for describing a speech feature type (no. of streams and stream widths),
+ * as well as the computation for converting the input speech (e.g., Sphinx-II format
+ * MFC cepstra) into this type of feature vectors.
+ */
+typedef struct feat_s {
+    int refcount;       /**< Reference count. */
+    char *name;                /**< Printable name for this feature type */
+    int32 cepsize;     /**< Size of input speech vector (typically, a cepstrum vector) */
+    int32 n_stream;    /**< Number of feature streams; e.g., 4 in Sphinx-II */
+    int32 *stream_len; /**< Vector length of each feature stream */
+    int32 window_size; /**< Number of extra frames around given input frame needed to compute
+                           corresponding output feature (so total = window_size*2 + 1) */
+    int32 n_sv;         /**< Number of subvectors */
+    int32 *sv_len;      /**< Vector length of each subvector */
+    int32 **subvecs;    /**< Subvector specification (or NULL for none) */
+    mfcc_t *sv_buf;      /**< Temporary copy buffer for subvector projection */
+    int32 sv_dim;       /**< Total dimensionality of subvector (length of sv_buf) */
+
+    cmn_type_t cmn;    /**< Type of CMN to be performed on each utterance */
+    int32 varnorm;     /**< Whether variance normalization is to be performed on each utt;
+                           Irrelevant if no CMN is performed */
+    agc_type_t agc;    /**< Type of AGC to be performed on each utterance */
+
+    /**
+     * Feature computation function. 
+     * @param fcb the feat_t describing this feature type
+     * @param input pointer into the input cepstra
+     * @param feat a 2-d array of output features (n_stream x stream_len)
+     * @return 0 if successful, -ve otherwise.
+     *
+     * Function for converting window of input speech vector
+     * (input[-window_size..window_size]) to output feature vector
+     * (feat[stream][]).  If NULL, no conversion available, the
+     * speech input must be feature vector itself.
+     **/
+    void (*compute_feat)(struct feat_s *fcb, mfcc_t **input, mfcc_t **feat);
+    cmn_t *cmn_struct; /**< Structure that stores the temporary variables for cepstral 
+                           means normalization*/
+    agc_t *agc_struct; /**< Structure that stores the temporary variables for acoustic
+                           gain control*/
+
+    mfcc_t **cepbuf;    /**< Circular buffer of MFCC frames for live feature computation. */
+    mfcc_t **tmpcepbuf; /**< Array of pointers into cepbuf to handle border cases. */
+    int32   bufpos;     /**< Write index in cepbuf. */
+    int32   curpos;     /**< Read index in cepbuf. */
+
+    mfcc_t ***lda; /**< Array of linear transformations (for LDA, MLLT, or whatever) */
+    uint32 n_lda;   /**< Number of linear transformations in lda. */
+    uint32 out_dim; /**< Output dimensionality */
+} feat_t;
+
+/**
+ * Name of feature type.
+ */
+#define feat_name(f)           ((f)->name)
+/**
+ * Input dimensionality of feature.
+ */
+#define feat_cepsize(f)                ((f)->cepsize)
+/**
+ * Size of dynamic feature window.
+ */
+#define feat_window_size(f)    ((f)->window_size)
+/**
+ * Number of feature streams.
+ *
+ * @deprecated Do not use this, use feat_dimension1() instead.
+ */
+#define feat_n_stream(f)       ((f)->n_stream)
+/**
+ * Length of feature stream i.
+ *
+ * @deprecated Do not use this, use feat_dimension2() instead.
+ */
+#define feat_stream_len(f,i)   ((f)->stream_len[i])
+/**
+ * Number of streams or subvectors in feature output.
+ */
+#define feat_dimension1(f)     ((f)->n_sv ? (f)->n_sv : f->n_stream)
+/**
+ * Dimensionality of stream/subvector i in feature output.
+ */
+#define feat_dimension2(f,i)   ((f)->sv_len ? (f)->sv_len[i] : f->stream_len[i])
+/**
+ * Total dimensionality of feature output.
+ */
+#define feat_dimension(f)      ((f)->out_dim)
+/**
+ * Array with stream/subvector lengths
+ */
+//#define feat_stream_lengths(f)       ((f)->sv_len ? (f)->sv_len : f->stream_len)
+#define feat_stream_lengths(f)  ((f)->lda ? (&(f)->out_dim) : (f)->sv_len ? (f)->sv_len : f->stream_len)
+
+/**
+ * Parse subvector specification string.
+ *
+ * Format of specification:
+ *   \li '/' separated list of subvectors
+ *   \li each subvector is a ',' separated list of subranges
+ *   \li each subrange is a single \verbatim <number> \endverbatim or
+ *       \verbatim <number>-<number> \endverbatim (inclusive), where
+ *       \verbatim <number> \endverbatim is a feature vector dimension
+ *       specifier.
+ *
+ * E.g., "24,0-11/25,12-23/26,27-38" has:
+ *   \li 3 subvectors
+ *   \li the 1st subvector has feature dims: 24, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, and 11.
+ *   \li etc.
+ *
+ * @param str subvector specification string.
+ * @return allocated 2-D array of subvector specs (free with
+ * subvecs_free()).  If there are N subvectors specified, subvec[N] =
+ * NULL; and each subvec[0]..subvec[N-1] is -1 terminated vector of
+ * feature dims.
+ */
+SPHINXBASE_EXPORT
+int32 **parse_subvecs(char const *str);
+
+/**
+ * Free array of subvector specs.
+ */
+SPHINXBASE_EXPORT
+void subvecs_free(int32 **subvecs);
+
+
+/**
+ * Allocate an array to hold several frames worth of feature vectors.  The returned value
+ * is the mfcc_t ***data array, organized as follows:
+ *
+ * - data[0][0] = frame 0 stream 0 vector, data[0][1] = frame 0 stream 1 vector, ...
+ * - data[1][0] = frame 1 stream 0 vector, data[0][1] = frame 1 stream 1 vector, ...
+ * - data[2][0] = frame 2 stream 0 vector, data[0][1] = frame 2 stream 1 vector, ...
+ * - ...
+ *
+ * NOTE: For I/O convenience, the entire data area is allocated as one contiguous block.
+ * @return pointer to the allocated space if successful, NULL if any error.
+ */
+SPHINXBASE_EXPORT
+mfcc_t ***feat_array_alloc(feat_t *fcb,        /**< In: Descriptor from feat_init(), used
+                                          to obtain number of streams and stream sizes */
+                           int32 nfr   /**< In: Number of frames for which to allocate */
+    );
+
+/**
+ * Free a buffer allocated with feat_array_alloc()
+ */
+SPHINXBASE_EXPORT
+void feat_array_free(mfcc_t ***feat);
+
+
+/**
+ * Initialize feature module to use the selected type of feature stream.  
+ * One-time only initialization at the beginning of the program.  Input type 
+ * is a string defining the  kind of input->feature conversion desired:
+ *
+ * - "s2_4x":     s2mfc->Sphinx-II 4-feature stream,
+ * - "1s_c_d_dd": s2mfc->Sphinx 3.x single feature stream,
+ * - "s3_1x39":   s2mfc->Sphinx 3.0 single feature stream,
+ * - "n1,n2,n3,...": Explicit feature vector layout spec. with comma-separated 
+ *   feature stream lengths.  In this case, the input data is already in the 
+ *   feature format and there is no conversion necessary.
+ *
+ * @return (feat_t *) descriptor if successful, NULL if error.  Caller 
+ * must not directly modify the contents of the returned value.
+ */
+SPHINXBASE_EXPORT
+feat_t *feat_init(char const *type,/**< In: Type of feature stream */
+                  cmn_type_t cmn, /**< In: Type of cepstram mean normalization to 
+                                     be done before feature computation; can be 
+                                     CMN_NONE (for none) */
+                  int32 varnorm,  /**< In: (boolean) Whether variance 
+                                     normalization done on each utt; only 
+                                     applicable if CMN also done */
+                  agc_type_t agc, /**< In: Type of automatic gain control to be 
+                                     done before feature computation */
+                  int32 breport, /**< In: Whether to show a report for feat_t */
+                  int32 cepsize  /**< Number of components in the input vector
+                                    (or 0 for the default for this feature type,
+                                    which is usually 13) */
+    );
+
+/**
+ * Add an LDA transformation to the feature module from a file.
+ * @return 0 for success or -1 if reading the LDA file failed.
+ **/
+SPHINXBASE_EXPORT
+int32 feat_read_lda(feat_t *feat,       /**< In: Descriptor from feat_init() */
+                    const char *ldafile, /**< In: File to read the LDA matrix from. */
+                    int32 dim           /**< In: Dimensionality of LDA output. */
+    );
+
+/**
+ * Transform a block of features using the feature module's LDA transform.
+ **/
+SPHINXBASE_EXPORT
+void feat_lda_transform(feat_t *fcb,           /**< In: Descriptor from feat_init() */
+                        mfcc_t ***inout_feat,  /**< Feature block to transform. */
+                        uint32 nfr             /**< In: Number of frames in inout_feat. */
+    );
+
+/**
+ * Add a subvector specification to the feature module.
+ *
+ * The subvector splitting will be performed after dynamic feature
+ * computation, CMN, AGC, and any LDA transformation.  The number of
+ * streams in the dynamic feature type must be one, as with LDA.
+ *
+ * After adding a subvector specification, the output of feature
+ * computation will be split into multiple subvectors, and
+ * feat_array_alloc() will allocate pointers accordingly.  The number
+ * of <em>streams</em> will remain the 
+ *
+ * @param fcb the feature descriptor.
+ * @param subvecs subvector specification.  This pointer is retained
+ * by the feat_t and should not be freed manually.
+ * @return 0 for success or -1 if the subvector specification was
+ * invalid.
+ */
+SPHINXBASE_EXPORT
+int feat_set_subvecs(feat_t *fcb, int32 **subvecs);
+
+/**
+ * Print the given block of feature vectors to the given FILE.
+ */
+SPHINXBASE_EXPORT
+void feat_print(feat_t *fcb,           /**< In: Descriptor from feat_init() */
+               mfcc_t ***feat,         /**< In: Feature data to be printed */
+               int32 nfr,              /**< In: Number of frames of feature data above */
+               FILE *fp                /**< In: Output file pointer */
+    );
+
+  
+/**
+ * Read a specified MFC file (or given segment within it), perform
+ * CMN/AGC as indicated by <code>fcb</code>, and compute feature
+ * vectors.  Feature vectors are computed for the entire segment
+ * specified, by including additional surrounding or padding frames to
+ * accommodate the feature windows.
+ *
+ * @return Number of frames of feature vectors computed if successful;
+ * -1 if any error.  <code>If</code> feat is NULL, then no actual
+ * computation will be done, and the number of frames which must be
+ * allocated will be returned.
+ * 
+ * A note on how the file path is constructed: If the control file
+ * already specifies extension or absolute path, then these are not
+ * applied. The default extension is defined by the application.
+ */
+SPHINXBASE_EXPORT
+int32 feat_s2mfc2feat(feat_t *fcb,     /**< In: Descriptor from feat_init() */
+                     const char *file, /**< In: File to be read */
+                     const char *dir,  /**< In: Directory prefix for file, 
+                                          if needed; can be NULL */
+                     const char *cepext,/**< In: Extension of the
+                                          cepstrum file.It cannot be
+                                          NULL */
+                     int32 sf, int32 ef,   /* Start/End frames
+                                               within file to be read. Use
+                                               0,-1 to process entire
+                                               file */
+                     mfcc_t ***feat,   /**< Out: Computed feature vectors; 
+                                          caller must allocate this space */
+                     int32 maxfr       /**< In: Available space (number of frames) in 
+                                          above feat array; it must be 
+                                          sufficient to hold the result.
+                                           Pass -1 for no limit. */
+    );
+
+
+/**
+ * Feature computation routine for live mode decoder.
+ *
+ * This function computes features for blocks of incoming data. It
+ * retains an internal buffer for computing deltas, which means that
+ * the number of output frames will not necessarily equal the number
+ * of input frames.
+ *
+ * <strong>It is very important</strong> to realize that the number of
+ * output frames can be <strong>greater than</strong> the number of
+ * input frames, specifically when <code>endutt</code> is true.  It is
+ * guaranteed to never exceed <code>*inout_ncep +
+ * feat_window_size(fcb)</code>.  You <strong>MUST</strong> have
+ * allocated at least that many frames in <code>ofeat</code>, or you
+ * will experience a buffer overflow.
+ *
+ * If beginutt and endutt are both true, CMN_CURRENT and AGC_MAX will
+ * be done.  Otherwise only CMN_PRIOR and AGC_EMAX will be done.
+ *
+ * If beginutt is false, endutt is true, and the number of input
+ * frames exceeds the input size, then end-of-utterance processing
+ * won't actually be done.  This condition can easily be checked,
+ * because <code>*inout_ncep</code> will equal the return value on
+ * exit, and will also be smaller than the value of
+ * <code>*inout_ncep</code> on entry.
+ *
+ * @return The number of output frames actually computed.
+ **/
+SPHINXBASE_EXPORT
+int32 feat_s2mfc2feat_live(feat_t  *fcb,     /**< In: Descriptor from feat_init() */
+                           mfcc_t **uttcep,  /**< In: Incoming cepstral buffer */
+                           int32 *inout_ncep,/**< In: Size of incoming buffer.
+                                                Out: Number of incoming frames consumed. */
+                           int32 beginutt,   /**< In: Begining of utterance flag */
+                           int32 endutt,     /**< In: End of utterance flag */
+                           mfcc_t ***ofeat   /**< In: Output feature buffer.  See
+                                                <strong>VERY IMPORTANT</strong> note
+                                                about the size of this buffer above. */
+    );
+
+
+/**
+ * Retain ownership of feat_t.
+ *
+ * @return pointer to retained feat_t.
+ */
+SPHINXBASE_EXPORT
+feat_t *feat_retain(feat_t *f);
+
+/**
+ * Release resource associated with feat_t
+ *
+ * @return new reference count (0 if freed)
+ */
+SPHINXBASE_EXPORT
+int feat_free(feat_t *f /**< In: feat_t */
+    );
+
+/**
+ * Report the feat_t data structure 
+ */
+SPHINXBASE_EXPORT
+void feat_report(feat_t *f /**< In: feat_t */
+    );
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/include/sphinxbase/filename.h b/include/sphinxbase/filename.h
new file mode 100644 (file)
index 0000000..3f05d6b
--- /dev/null
@@ -0,0 +1,113 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * filename.h -- File and path name operations.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: filename.h,v $
+ * Revision 1.7  2005/06/22 03:01:07  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 30-Oct-1997 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University.
+ *             Started.
+ */
+
+
+#ifndef _LIBUTIL_FILENAME_H_
+#define _LIBUTIL_FILENAME_H_
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+/**\file filename.h
+ *\brief File names related operation
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Strip off leading path components from the given path and copy the base into base.
+ * Caller must have allocated base (hint: it's always shorter than path).
+ */
+SPHINXBASE_EXPORT
+void path2basename(const char *path, char *base);
+
+/**
+ * Strip off filename from the given path and copy the directory name into dir
+ * Caller must have allocated dir (hint: it's always shorter than path).
+ */
+SPHINXBASE_EXPORT
+void path2dirname(const char *path, char *dir);
+
+
+/**
+ * Strip off the smallest trailing file-extension suffix and copy
+ * the rest into the given root argument.  Caller must have
+ * allocated root.
+ */
+SPHINXBASE_EXPORT
+void strip_fileext(const char *file, char *root);
+
+/**
+ * Test whether a pathname is absolute for the current OS.
+ */
+SPHINXBASE_EXPORT
+int path_is_absolute(const char *file);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/include/sphinxbase/fixpoint.h b/include/sphinxbase/fixpoint.h
new file mode 100644 (file)
index 0000000..b494013
--- /dev/null
@@ -0,0 +1,151 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2005 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ==================================================================== */
+
+/* Fixed-point arithmetic macros.
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#ifndef _FIXPOINT_H_
+#define _FIXPOINT_H_
+
+#include <limits.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#ifndef DEFAULT_RADIX
+#define DEFAULT_RADIX 12
+#endif
+
+/** Fixed-point computation type. */
+typedef int32 fixed32;
+
+/** Convert floating point to fixed point. */
+#define FLOAT2FIX_ANY(x,radix) \
+       (((x)<0.0) ? \
+       ((fixed32)((x)*(float32)(1<<(radix)) - 0.5)) \
+       : ((fixed32)((x)*(float32)(1<<(radix)) + 0.5)))
+#define FLOAT2FIX(x) FLOAT2FIX_ANY(x,DEFAULT_RADIX)
+/** Convert fixed point to floating point. */
+#define FIX2FLOAT_ANY(x,radix) ((float32)(x)/(1<<(radix)))
+#define FIX2FLOAT(x) FIX2FLOAT_ANY(x,DEFAULT_RADIX)
+
+/**
+ * Multiply two fixed point numbers with an arbitrary radix point.
+ *
+ * A veritable multiplicity of implementations exist, starting with
+ * the fastest ones...
+ */
+
+
+/* 
+ * This works on most modern ARMs but *only* in ARM mode (for obvious
+ * reasons), so don't use it in Thumb mode (but why are you building
+ * signal processing code in Thumb mode?!)
+ */
+#if defined(__arm__) && !defined(__thumb__)
+#define FIXMUL(a,b) FIXMUL_ANY(a,b,DEFAULT_RADIX)
+#define FIXMUL_ANY(a,b,r) ({                           \
+      int cl, ch, _a = a, _b = b;                      \
+      __asm__ ("smull %0, %1, %2, %3\n"                        \
+          "mov %0, %0, lsr %4\n"                       \
+          "orr %0, %0, %1, lsl %5\n"                   \
+          : "=&r" (cl), "=&r" (ch)                     \
+          : "r" (_a), "r" (_b), "i" (r), "i" (32-(r)));\
+      cl; })
+#elif defined(BFIN) && DEFAULT_RADIX == 16
+/* Blackfin magic */
+#undef FIXMUL
+/* Use the accumulators for the 16.16 case (probably not as efficient as it could be). */
+#define FIXMUL(a,b) ({                                 \
+      int c, _a = a, _b = b;                           \
+       __asm__("%0.L = %1.l * %2.l (FU);\n\t"          \
+           "%0.H = %1.h * %2.h (IS);\n\t"              \
+           "A1 = %0;\n\t"                              \
+           "A1 += %1.h * %2.l (IS, M);\n\t"            \
+           "%0 = (A1 += %2.h * %1.l) (IS, M);\n\t"     \
+           : "=&W" (c)                                 \
+           : "d" (_a), "d" (_b)                        \
+           : "A1", "cc");                                      \
+      c; })
+#define FIXMUL_ANY(a,b,radix) ((fixed32)(((int64)(a)*(b))>>(radix)))
+#elif defined(_MSC_VER) || (defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8)
+#define FIXMUL(a,b) FIXMUL_ANY(a,b,DEFAULT_RADIX)
+#define FIXMUL_ANY(a,b,radix) ((fixed32)(((int64)(a)*(b))>>(radix)))
+#else /* Most general case where 'long long' doesn't exist or is slow. */
+#define FIXMUL(a,b) FIXMUL_ANY(a,b,DEFAULT_RADIX)
+#define FIXMUL_ANY(a,b,radix) \
+       (fixed32)(((((uint32)(a))&((1<<(radix))-1))         \
+                  * (((uint32)(b))&((1<<(radix))-1)) >> (radix))       \
+       + (((((int32)(a))>>(radix)) * (((int32)(b))>>(radix))) << (radix)) \
+       + ((((uint32)(a))&((1<<(radix))-1)) * (((int32)(b))>>(radix))) \
+       + ((((uint32)(b))&((1<<(radix))-1)) * (((int32)(a))>>(radix))))
+#endif
+
+/* Various fixed-point logarithmic functions that we need. */
+/** Minimum value representable in log format. */
+#define MIN_FIXLOG -2829416  /* log(1e-300) * (1<<DEFAULT_RADIX) */
+#define MIN_FIXLOG2 -4081985 /* log2(1e-300) * (1<<DEFAULT_RADIX) */
+/** Fixed-point representation of log(2) */
+#define FIXLN_2                ((fixed32)(0.693147180559945 * (1<<DEFAULT_RADIX)))
+/** Take natural logarithm of a fixedpoint number. */
+#define FIXLN(x) (fixlog(x) - (FIXLN_2 * DEFAULT_RADIX))
+/**
+ * Take natural logarithm of an integer, yielding a fixedpoint number
+ * with DEFAULT_RADIX as radix point.
+ */
+int32 fixlog(uint32 x);
+/**
+ * Take base-2 logarithm of an integer, yielding a fixedpoint number
+ * with DEFAULT_RADIX as radix point.
+ */
+int32 fixlog2(uint32 x);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _FIXPOINT_H_ */
diff --git a/include/sphinxbase/fsg_model.h b/include/sphinxbase/fsg_model.h
new file mode 100644 (file)
index 0000000..cb82b90
--- /dev/null
@@ -0,0 +1,364 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/*
+ * fsg_model.h -- Word-level finite state graph
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 2003 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ */
+
+
+#ifndef __FSG_MODEL_H__
+#define __FSG_MODEL_H__
+
+/* System headers. */
+#include <stdio.h>
+#include <string.h>
+
+/* SphinxBase headers. */
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/glist.h>
+#include <sphinxbase/logmath.h>
+#include <sphinxbase/bitvec.h>
+#include <sphinxbase/hash_table.h>
+#include <sphinxbase/listelem_alloc.h>
+#include <sphinxbase/sphinxbase_export.h>
+
+/*
+ * A single transition in the FSG.
+ */
+typedef struct fsg_link_s {
+    int32 from_state;
+    int32 to_state;
+    int32 logs2prob;   /**< log(transition probability)*lw */
+    int32 wid;         /**< Word-ID; <0 if epsilon or null transition */
+} fsg_link_t;
+
+/* Access macros */
+#define fsg_link_from_state(l) ((l)->from_state)
+#define fsg_link_to_state(l)   ((l)->to_state)
+#define fsg_link_wid(l)                ((l)->wid)
+#define fsg_link_logs2prob(l)  ((l)->logs2prob)
+
+/**
+ * Adjacency list (opaque) for a state in an FSG.
+ */
+typedef struct trans_list_s trans_list_t;
+
+/**
+ * Word level FSG definition.
+ * States are simply integers 0..n_state-1.
+ * A transition emits a word and has a given probability of being taken.
+ * There can also be null or epsilon transitions, with no associated emitted
+ * word.
+ */
+typedef struct fsg_model_s {
+    int refcount;       /**< Reference count. */
+    char *name;                /**< A unique string identifier for this FSG */
+    int32 n_word;       /**< Number of unique words in this FSG */
+    int32 n_word_alloc; /**< Number of words allocated in vocab */
+    char **vocab;       /**< Vocabulary for this FSG. */
+    bitvec_t *silwords; /**< Indicates which words are silence/fillers. */
+    bitvec_t *altwords; /**< Indicates which words are pronunciation alternates. */
+    logmath_t *lmath;  /**< Pointer to log math computation object. */
+    int32 n_state;     /**< number of states in FSG */
+    int32 start_state; /**< Must be in the range [0..n_state-1] */
+    int32 final_state; /**< Must be in the range [0..n_state-1] */
+    float32 lw;                /**< Language weight that's been applied to transition
+                          logprobs */
+    trans_list_t *trans; /**< Transitions out of each state, if any. */
+    listelem_alloc_t *link_alloc; /**< Allocator for FSG links. */
+} fsg_model_t;
+
+/* Access macros */
+#define fsg_model_name(f)              ((f)->name)
+#define fsg_model_n_state(f)           ((f)->n_state)
+#define fsg_model_start_state(f)       ((f)->start_state)
+#define fsg_model_final_state(f)       ((f)->final_state)
+#define fsg_model_log(f,p)             logmath_log((f)->lmath, p)
+#define fsg_model_lw(f)                        ((f)->lw)
+#define fsg_model_n_word(f)            ((f)->n_word)
+#define fsg_model_word_str(f,wid)       (wid == -1 ? "(NULL)" : (f)->vocab[wid])
+
+/**
+ * Iterator over arcs.
+ */
+typedef struct fsg_arciter_s fsg_arciter_t;
+
+/**
+ * Have silence transitions been added?
+ */
+#define fsg_model_has_sil(f)            ((f)->silwords != NULL)
+
+/**
+ * Have alternate word transitions been added?
+ */
+#define fsg_model_has_alt(f)            ((f)->altwords != NULL)
+
+#define fsg_model_is_filler(f,wid) \
+    (fsg_model_has_sil(f) ? bitvec_is_set((f)->silwords, wid) : FALSE)
+#define fsg_model_is_alt(f,wid) \
+    (fsg_model_has_alt(f) ? bitvec_is_set((f)->altwords, wid) : FALSE)
+
+/**
+ * Create a new FSG.
+ */
+SPHINXBASE_EXPORT
+fsg_model_t *fsg_model_init(char const *name, logmath_t *lmath,
+                            float32 lw, int32 n_state);
+
+/**
+ * Read a word FSG from the given file and return a pointer to the structure
+ * created.  Return NULL if any error occurred.
+ * 
+ * File format:
+ * 
+ * <pre>
+ *   Any number of comment lines; ignored
+ *   FSG_BEGIN [<fsgname>]
+ *   N <#states>
+ *   S <start-state ID>
+ *   F <final-state ID>
+ *   T <from-state> <to-state> <prob> [<word-string>]
+ *   T ...
+ *   ... (any number of state transitions)
+ *   FSG_END
+ *   Any number of comment lines; ignored
+ * </pre>
+ * 
+ * The FSG spec begins with the line containing the keyword FSG_BEGIN.
+ * It has an optional fsg name string.  If not present, the FSG has the empty
+ * string as its name.
+ * 
+ * Following the FSG_BEGIN declaration is the number of states, the start
+ * state, and the final state, each on a separate line.  States are numbered
+ * in the range [0 .. <numberofstate>-1].
+ * 
+ * These are followed by all the state transitions, each on a separate line,
+ * and terminated by the FSG_END line.  A state transition has the given
+ * probability of being taken, and emits the given word.  The word emission
+ * is optional; if word-string omitted, it is an epsilon or null transition.
+ * 
+ * Comments can also be embedded within the FSG body proper (i.e. between
+ * FSG_BEGIN and FSG_END): any line with a # character in col 1 is treated
+ * as a comment line.
+ * 
+ * Return value: a new fsg_model_t structure if the file is successfully
+ * read, NULL otherwise.
+ */
+SPHINXBASE_EXPORT
+fsg_model_t *fsg_model_readfile(const char *file, logmath_t *lmath, float32 lw);
+
+/**
+ * Like fsg_model_readfile(), but from an already open stream.
+ */
+SPHINXBASE_EXPORT
+fsg_model_t *fsg_model_read(FILE *fp, logmath_t *lmath, float32 lw);
+
+/**
+ * Retain ownership of an FSG.
+ *
+ * @return Pointer to retained FSG.
+ */
+SPHINXBASE_EXPORT
+fsg_model_t *fsg_model_retain(fsg_model_t *fsg);
+
+/**
+ * Free the given word FSG.
+ *
+ * @return new reference count (0 if freed completely)
+ */
+SPHINXBASE_EXPORT
+int fsg_model_free(fsg_model_t *fsg);
+
+/**
+ * Add a word to the FSG vocabulary.
+ *
+ * @return Word ID for this new word.
+ */
+SPHINXBASE_EXPORT
+int fsg_model_word_add(fsg_model_t *fsg, char const *word);
+
+/**
+ * Look up a word in the FSG vocabulary.
+ *
+ * @return Word ID for this word
+ */
+SPHINXBASE_EXPORT
+int fsg_model_word_id(fsg_model_t *fsg, char const *word);
+
+/**
+ * Add the given transition to the FSG transition matrix.
+ *
+ * Duplicates (i.e., two transitions between the same states, with the
+ * same word label) are flagged and only the highest prob retained.
+ */
+SPHINXBASE_EXPORT
+void fsg_model_trans_add(fsg_model_t * fsg,
+                         int32 from, int32 to, int32 logp, int32 wid);
+
+/**
+ * Add a null transition between the given states.
+ *
+ * There can be at most one null transition between the given states;
+ * duplicates are flagged and only the best prob retained.  Transition
+ * probs must be <= 1 (i.e., logprob <= 0).
+ *
+ * @return 1 if a new transition was added, 0 if the prob of an existing
+ * transition was upgraded; -1 if nothing was changed.
+ */
+SPHINXBASE_EXPORT
+int32 fsg_model_null_trans_add(fsg_model_t * fsg, int32 from, int32 to, int32 logp);
+
+/**
+ * Add a "tag" transition between the given states.
+ *
+ * A "tag" transition is a null transition with a non-null word ID,
+ * which corresponds to a semantic tag or other symbol to be output
+ * when this transition is taken.
+ *
+ * As above, there can be at most one null or tag transition between
+ * the given states; duplicates are flagged and only the best prob
+ * retained.  Transition probs must be <= 1 (i.e., logprob <= 0).
+ *
+ * @return 1 if a new transition was added, 0 if the prob of an existing
+ * transition was upgraded; -1 if nothing was changed.
+ */
+SPHINXBASE_EXPORT
+int32 fsg_model_tag_trans_add(fsg_model_t * fsg, int32 from, int32 to,
+                              int32 logp, int32 wid);
+
+/**
+ * Obtain transitive closure of null transitions in the given FSG.
+ *
+ * @param nulls List of null transitions, or NULL to find them automatically.
+ * @return Updated list of null transitions.
+ */
+SPHINXBASE_EXPORT
+glist_t fsg_model_null_trans_closure(fsg_model_t * fsg, glist_t nulls);
+
+/**
+ * Get the list of transitions (if any) from state i to j.
+ */
+SPHINXBASE_EXPORT
+glist_t fsg_model_trans(fsg_model_t *fsg, int32 i, int32 j);
+
+/**
+ * Get an iterator over the outgoing transitions from state i.
+ */
+SPHINXBASE_EXPORT
+fsg_arciter_t *fsg_model_arcs(fsg_model_t *fsg, int32 i);
+
+/**
+ * Get the current arc from the arc iterator.
+ */
+SPHINXBASE_EXPORT
+fsg_link_t *fsg_arciter_get(fsg_arciter_t *itor);
+
+/**
+ * Move the arc iterator forward.
+ */
+SPHINXBASE_EXPORT
+fsg_arciter_t *fsg_arciter_next(fsg_arciter_t *itor);
+
+/**
+ * Free the arc iterator (early termination)
+ */
+SPHINXBASE_EXPORT
+void fsg_arciter_free(fsg_arciter_t *itor);
+/**
+ * Get the null transition (if any) from state i to j.
+ */
+SPHINXBASE_EXPORT
+fsg_link_t *fsg_model_null_trans(fsg_model_t *fsg, int32 i, int32 j);
+
+/**
+ * Add silence word transitions to each state in given FSG.
+ *
+ * @param state state to add a self-loop to, or -1 for all states.
+ * @param silprob probability of silence transition.
+ */
+SPHINXBASE_EXPORT
+int fsg_model_add_silence(fsg_model_t * fsg, char const *silword,
+                          int state, float32 silprob);
+
+/**
+ * Add alternate pronunciation transitions for a word in given FSG.
+ */
+SPHINXBASE_EXPORT
+int fsg_model_add_alt(fsg_model_t * fsg, char const *baseword,
+                      char const *altword);
+
+/**
+ * Write FSG to a file.
+ */
+SPHINXBASE_EXPORT
+void fsg_model_write(fsg_model_t *fsg, FILE *fp);
+
+/**
+ * Write FSG to a file.
+ */
+SPHINXBASE_EXPORT
+void fsg_model_writefile(fsg_model_t *fsg, char const *file);
+
+/**
+ * Write FSG to a file in AT&T FSM format.
+ */
+SPHINXBASE_EXPORT
+void fsg_model_write_fsm(fsg_model_t *fsg, FILE *fp);
+
+/**
+ * Write FSG to a file in AT&T FSM format.
+ */
+SPHINXBASE_EXPORT
+void fsg_model_writefile_fsm(fsg_model_t *fsg, char const *file);
+
+/**
+ * Write FSG symbol table to a file (for AT&T FSM)
+ */
+SPHINXBASE_EXPORT
+void fsg_model_write_symtab(fsg_model_t *fsg, FILE *file);
+
+/**
+ * Write FSG symbol table to a file (for AT&T FSM)
+ */
+SPHINXBASE_EXPORT
+void fsg_model_writefile_symtab(fsg_model_t *fsg, char const *file);
+
+#endif /* __FSG_MODEL_H__ */
diff --git a/include/sphinxbase/genrand.h b/include/sphinxbase/genrand.h
new file mode 100644 (file)
index 0000000..ddcc7ee
--- /dev/null
@@ -0,0 +1,180 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* 
+   A C-program for MT19937, with initialization improved 2002/1/26.
+   Coded by Takuji Nishimura and Makoto Matsumoto.
+
+   Before using, initialize the state by using init_genrand(seed)  
+   or init_by_array(init_key, key_length).
+
+   Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+   All rights reserved.                          
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above copyright
+`        notice, this list of conditions and the following disclaimer in the
+        documentation and/or other materials provided with the distribution.
+
+     3. The names of its contributors may not be used to endorse or promote 
+        products derived from this software without specific prior written 
+        permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+   Any feedback is very welcome.
+   http://www.math.keio.ac.jp/matumoto/emt.html
+   email: matumoto@math.keio.ac.jp
+*/
+
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/*
+ * randgen.c   : a portable random generator 
+ * 
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: genrand.h,v $
+ * Revision 1.3  2005/06/22 03:01:50  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 18-Nov-04 ARCHAN (archan@cs.cmu.edu) at Carnegie Mellon University
+ *              First incorporated from the Mersenne Twister Random
+ *              Number Generator package. It was chosen because it is
+ *              in BSD-license and its performance is quite
+ *              reasonable. Of course if you look at the inventors's
+ *              page.  This random generator can actually gives
+ *              19937-bits period.  This is already far from we need. 
+ *              This will possibly good enough for the next 10 years. 
+ *
+ *              I also downgrade the code a little bit to avoid Sphinx's
+ *              developers misused it. 
+ */
+
+#ifndef _LIBUTIL_GENRAND_H_
+#define _LIBUTIL_GENRAND_H_
+
+#define S3_RAND_MAX_INT32 0x7fffffff
+#include <stdio.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+/** \file genrand.h
+ *\brief High performance prortable random generator created by Takuji
+ *Nishimura and Makoto Matsumoto.  
+ * 
+ * A high performance which applied Mersene twister primes to generate
+ * random number. If probably seeded, the random generator can achieve 
+ * 19937-bits period.  For technical detail.  Please take a look at 
+ * (FIXME! Need to search for the web site.) http://www.
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Macros to simplify calling of random generator function.
+ *
+ */
+#define s3_rand_seed(s) genrand_seed(s);
+#define s3_rand_int31()  genrand_int31()
+#define s3_rand_real() genrand_real3()
+#define s3_rand_res53()  genrand_res53()
+
+/**
+ *Initialize the seed of the random generator. 
+ */
+SPHINXBASE_EXPORT
+void genrand_seed(unsigned long s);
+
+/**
+ *generates a random number on [0,0x7fffffff]-interval 
+ */
+SPHINXBASE_EXPORT
+long genrand_int31(void);
+
+/**
+ *generates a random number on (0,1)-real-interval 
+ */
+SPHINXBASE_EXPORT
+double genrand_real3(void);
+
+/**
+ *generates a random number on [0,1) with 53-bit resolution
+ */
+SPHINXBASE_EXPORT
+double genrand_res53(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_LIBUTIL_GENRAND_H_*/
+
+
+
diff --git a/include/sphinxbase/glist.h b/include/sphinxbase/glist.h
new file mode 100644 (file)
index 0000000..cdb18be
--- /dev/null
@@ -0,0 +1,242 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * glist.h -- Module for maintaining a generic, linear linked-list structure.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: glist.h,v $
+ * Revision 1.9  2005/06/22 03:02:51  arthchan2003
+ * 1, Fixed doxygen documentation, 2, add  keyword.
+ *
+ * Revision 1.4  2005/05/03 04:09:11  archan
+ * Implemented the heart of word copy search. For every ci-phone, every word end, a tree will be allocated to preserve its pathscore.  This is different from 3.5 or below, only the best score for a particular ci-phone, regardless of the word-ends will be preserved at every frame.  The graph propagation will not collect unused word tree at this point. srch_WST_propagate_wd_lv2 is also as the most stupid in the century.  But well, after all, everything needs a start.  I will then really get the results from the search and see how it looks.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 09-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added glist_chkdup_*().
+ * 
+ * 13-Feb-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created from earlier version.
+ */
+
+
+/**
+ * \file glist.h
+ * \brief Generic linked-lists maintenance.
+ *
+ * Only insert at the head of the list.  A convenient little
+ * linked-list package, but a double-edged sword: the user must keep
+ * track of the data type within the linked list elements.  When it
+ * was first written, there was no selective deletions except to
+ * destroy the entire list.  This is modified in later version. 
+ * 
+ * 
+ * (C++ would be good for this, but that's a double-edged sword as well.)
+ */
+
+
+#ifndef _LIBUTIL_GLIST_H_
+#define _LIBUTIL_GLIST_H_
+
+#include <stdlib.h>
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/** A node in a generic list 
+ */
+typedef struct gnode_s {
+       anytype_t data;         /** See prim_type.h */
+       struct gnode_s *next;   /** Next node in list */
+} gnode_t;
+typedef gnode_t *glist_t;      /** Head of a list of gnodes */
+
+
+/** Access macros, for convenience 
+ */
+#define gnode_ptr(g)           ((g)->data.ptr)
+#define gnode_int32(g)         ((g)->data.i)
+#define gnode_uint32(g)                ((g)->data.ui)
+#define gnode_float32(g)       ((float32)(g)->data.fl)
+#define gnode_float64(g)       ((g)->data.fl)
+#define gnode_next(g)          ((g)->next)
+
+
+/**
+ * Create and prepend a new list node, with the given user-defined data, at the HEAD
+ * of the given generic list.  Return the new list thus formed.
+ * g may be NULL to indicate an initially empty list.
+ */
+SPHINXBASE_EXPORT
+glist_t glist_add_ptr (glist_t g,  /**< a link list */
+                      void *ptr   /**< a pointer */
+       );
+
+/**
+ * Create and prepend a new list node containing an integer.
+ */  
+SPHINXBASE_EXPORT
+glist_t glist_add_int32 (glist_t g, /**< a link list */
+                        int32 val  /**< an integer value */
+       );
+/**
+ * Create and prepend a new list node containing an unsigned integer.
+ */  
+SPHINXBASE_EXPORT
+glist_t glist_add_uint32 (glist_t g,  /**< a link list */
+                         uint32 val  /**< an unsigned integer value */
+       );
+/**
+ * Create and prepend a new list node containing a single-precision float.
+ */  
+SPHINXBASE_EXPORT
+glist_t glist_add_float32 (glist_t g, /**< a link list */
+                          float32 val /**< a float32 vlaue */
+       );
+/**
+ * Create and prepend a new list node containing a double-precision float.
+ */  
+SPHINXBASE_EXPORT
+glist_t glist_add_float64 (glist_t g, /**< a link list */
+                          float64 val  /**< a float64 vlaue */
+       );
+
+
+
+/**
+ * Create and insert a new list node, with the given user-defined data, after
+ * the given generic node gn.  gn cannot be NULL.
+ * Return ptr to the newly created gnode_t.
+ */
+SPHINXBASE_EXPORT
+gnode_t *glist_insert_ptr (gnode_t *gn, /**< a generic node which ptr will be inserted after it*/
+                          void *ptr /**< pointer inserted */
+       );
+/**
+ * Create and insert a new list node containing an integer.
+ */  
+SPHINXBASE_EXPORT
+gnode_t *glist_insert_int32 (gnode_t *gn, /**< a generic node which a value will be inserted after it*/
+                            int32 val /**< int32 inserted */
+       );
+/**
+ * Create and insert a new list node containing an unsigned integer.
+ */  
+SPHINXBASE_EXPORT
+gnode_t *glist_insert_uint32 (gnode_t *gn, /**< a generic node which a value will be inserted after it*/
+                             uint32 val /**< uint32 inserted */
+       );
+/**
+ * Create and insert a new list node containing a single-precision float.
+ */  
+SPHINXBASE_EXPORT
+gnode_t *glist_insert_float32 (gnode_t *gn, /**< a generic node which a value will be inserted after it*/
+                              float32 val /**< float32 inserted */
+       );
+/**
+ * Create and insert a new list node containing a double-precision float.
+ */  
+SPHINXBASE_EXPORT
+gnode_t *glist_insert_float64 (gnode_t *gn, /**< a generic node which a value will be inserted after it*/
+                              float64 val /**< float64 inserted */
+       );
+
+/**
+ * Reverse the order of the given glist.  (glist_add() adds to the head; one might
+ * ultimately want the reverse of that.)
+ * NOTE: The list is reversed "in place"; i.e., no new memory is allocated.
+ * @return: The head of the new list.
+ */
+SPHINXBASE_EXPORT
+glist_t glist_reverse (glist_t g /**< input link list */
+       );
+
+
+/**
+   Count the number of element in a given link list 
+   @return the number of elements in the given glist_t 
+*/
+SPHINXBASE_EXPORT
+int32 glist_count (glist_t g /**< input link list */
+       );
+
+/**
+ * Free the given generic list; user-defined data contained within is not
+ * automatically freed.  The caller must have done that already.
+ */
+SPHINXBASE_EXPORT
+void glist_free (glist_t g);
+
+
+/**
+ * Free the given node, gn, of a glist, pred being its predecessor in the list.
+ * Return ptr to the next node in the list after the freed node.
+ */
+SPHINXBASE_EXPORT
+gnode_t *gnode_free(gnode_t *gn, 
+                   gnode_t *pred
+       );
+
+/**
+ * Return the last node in the given list.
+ */
+SPHINXBASE_EXPORT
+gnode_t *glist_tail (glist_t g);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/hash_table.h b/include/sphinxbase/hash_table.h
new file mode 100644 (file)
index 0000000..5de8360
--- /dev/null
@@ -0,0 +1,443 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * hash.h -- Hash table module.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: hash.h,v $
+ * Revision 1.7  2005/06/22 03:04:01  arthchan2003
+ * 1, Implemented hash_delete and hash_display, 2, Fixed doxygen documentation, 3, Added  keyword.
+ *
+ * Revision 1.8  2005/05/24 01:10:54  archan
+ * Fix a bug when the value only appear in the hash but there is no chain.   Also make sure that prev was initialized to NULL. All success cases were tested, but not tested with the deletion is tested.
+ *
+ * Revision 1.7  2005/05/24 00:12:31  archan
+ * Also add function prototype for hash_display in hash.h
+ *
+ * Revision 1.4  2005/05/03 04:09:11  archan
+ * Implemented the heart of word copy search. For every ci-phone, every word end, a tree will be allocated to preserve its pathscore.  This is different from 3.5 or below, only the best score for a particular ci-phone, regardless of the word-ends will be preserved at every frame.  The graph propagation will not collect unused word tree at this point. srch_WST_propagate_wd_lv2 is also as the most stupid in the century.  But well, after all, everything needs a start.  I will then really get the results from the search and see how it looks.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 05-May-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Removed hash_key2hash().  Added hash_enter_bkey() and hash_lookup_bkey(),
+ *             and len attribute to hash_entry_t.
+ * 
+ * 30-Apr-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Added hash_key2hash().
+ * 
+ * 18-Jun-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Included case sensitive/insensitive option.
+ * 
+ * 08-31-95    M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Created.
+ */
+
+
+/**
+ * @file hash_table.h
+ * @brief Hash table implementation
+ *
+ * This hash tables are intended for associating a pointer/integer
+ * "value" with a char string "key", (e.g., an ID with a word string).
+ * Subsequently, one can retrieve the value by providing the string
+ * key.  (The reverse functionality--obtaining the string given the
+ * value--is not provided with the hash table module.)
+ */
+
+/**
+ * A note by ARCHAN at 20050510: Technically what we use is so-called
+ * "hash table with buckets" which is very nice way to deal with
+ * external hashing.  There are definitely better ways to do internal
+ * hashing (i.e. when everything is stored in the memory.)  In Sphinx
+ * 3, this is a reasonable practice because hash table is only used in
+ * lookup in initialization or in lookups which is not critical for
+ * speed.
+ */
+
+/**
+ * Another note by ARCHAN at 20050703: To use this data structure
+ * properly, it is very important to realize that the users are
+ * required to handle memory allocation of the C-style keys.  The hash
+ * table will not make a copy of the memory allocated for any of the
+ * C-style key. It will not allocate memory for it. It will not delete
+ * memory for it.  As a result, the following code sniplet will cause
+ * memory leak.  
+ *
+ * while (1){
+ * str=(char*)ckd_calloc(str_length,sizeof(char*))
+ * if(hash_enter(ht,str,id)!=id){ printf("fail to add key str %s with val id %d\n",str,id)} 
+ * }
+ *
+ */
+
+/**
+ * A note by dhuggins on 20061010: Changed this to use void * instead
+ * of int32 as the value type, so that arbitrary objects can be
+ * inserted into a hash table (in a way that won't crash on 64-bit
+ * machines ;)
+ */
+
+#ifndef _LIBUTIL_HASH_H_
+#define _LIBUTIL_HASH_H_
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/glist.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * The hash table structures.
+ * Each hash table is identified by a hash_table_t structure.  hash_table_t.table is
+ * pre-allocated for a user-controlled max size, and is initially empty.  As new
+ * entries are created (using hash_enter()), the empty entries get filled.  If multiple
+ * keys hash to the same entry, new entries are allocated and linked together in a
+ * linear list.
+ */
+
+typedef struct hash_entry_s {
+       const char *key;                /** Key string, NULL if this is an empty slot.
+                                           NOTE that the key must not be changed once the entry
+                                           has been made. */
+       size_t len;                     /** Key-length; the key string does not have to be a C-style NULL
+                                           terminated string; it can have arbitrary binary bytes */
+       void *val;                      /** Value associated with above key */
+       struct hash_entry_s *next;      /** For collision resolution */
+} hash_entry_t;
+
+typedef struct {
+       hash_entry_t *table;    /**Primary hash table, excluding entries that collide */
+       int32 size;             /** Primary hash table size, (is a prime#); NOTE: This is the
+                                   number of primary entries ALLOCATED, NOT the number of valid
+                                   entries in the table */
+       int32 inuse;            /** Number of valid entries in the table. */
+       int32 nocase;           /** Whether case insensitive for key comparisons */
+} hash_table_t;
+
+typedef struct hash_iter_s {
+       hash_table_t *ht;  /**< Hash table we are iterating over. */
+       hash_entry_t *ent; /**< Current entry in that table. */
+       size_t idx;        /**< Index of next bucket to search. */
+} hash_iter_t;
+
+/** Access macros */
+#define hash_entry_val(e)      ((e)->val)
+#define hash_entry_key(e)      ((e)->key)
+#define hash_entry_len(e)      ((e)->len)
+#define hash_table_inuse(h)    ((h)->inuse)
+#define hash_table_size(h)     ((h)->size)
+
+
+/**
+ * Allocate a new hash table for a given expected size.
+ *
+ * @note Case sensitivity of hash keys applies to 7-bit ASCII
+ * characters only, and is not locale-dependent.
+ *
+ * @return handle to allocated hash table.
+ */
+SPHINXBASE_EXPORT
+hash_table_t * hash_table_new(int32 size,      /**< In: Expected number of entries in the table */
+                              int32 casearg    /**< In: Whether case insensitive for key
+                                                   comparisons. When 1, case is insentitive,
+                                                   0, case is sensitive. */
+    );
+
+#define HASH_CASE_YES          0
+#define HASH_CASE_NO           1
+
+/**
+ * Free the specified hash table; the caller is responsible for freeing the key strings
+ * pointed to by the table entries.
+ */
+SPHINXBASE_EXPORT
+void hash_table_free(hash_table_t *h /**< In: Handle of hash table to free */
+    );
+
+
+/**
+ * Try to add a new entry with given key and associated value to hash table h.  If key doesn't
+ * already exist in hash table, the addition is successful, and the return value is val.  But
+ * if key already exists, return its existing associated value.  (The hash table is unchanged;
+ * it is up to the caller to resolve the conflict.)
+ */
+SPHINXBASE_EXPORT
+void *hash_table_enter(hash_table_t *h, /**< In: Handle of hash table in which to create entry */
+                       const char *key, /**< In: C-style NULL-terminated key string
+                                           for the new entry */
+                       void *val         /**< In: Value to be associated with above key */
+    );
+
+/**
+ * Add a 32-bit integer value to a hash table.
+ *
+ * This macro is the clean way to do this and avoid compiler warnings
+ * on 64-bit platforms.
+ */
+#define hash_table_enter_int32(h,k,v) \
+    ((int32)(long)hash_table_enter((h),(k),(void *)(long)(v)))
+
+/**
+ * Add a new entry with given key and value to hash table h.  If the
+ * key already exists, its value is replaced with the given value, and
+ * the previous value is returned, otherwise val is returned.
+ *
+ * A very important but subtle point: The key pointer in the hash
+ * table is <b>replaced</b> with the pointer passed to this function.
+ * In general you should always pass a pointer to hash_table_enter()
+ * whose lifetime matches or exceeds that of the hash table.  In some
+ * rare cases it is convenient to initially enter a value with a
+ * short-lived key, then later replace that with a long-lived one.
+ * This behaviour allows this to happen.
+ */
+SPHINXBASE_EXPORT
+void *hash_table_replace(hash_table_t *h, /**< In: Handle of hash table in which to create entry */
+                         const char *key, /**< In: C-style NULL-terminated key string
+                                             for the new entry */
+                         void *val       /**< In: Value to be associated with above key */
+    );
+
+/**
+ * Replace a 32-bit integer value in a hash table.
+ *
+ * This macro is the clean way to do this and avoid compiler warnings
+ * on 64-bit platforms.
+ */
+#define hash_table_replace_int32(h,k,v) \
+    ((int32)(long)hash_table_replace((h),(k),(void *)(long)(v)))
+
+/**
+ * Delete an entry with given key and associated value to hash table
+ * h.  Return the value associated with the key (NULL if it did not exist)
+ */
+
+SPHINXBASE_EXPORT
+void *hash_table_delete(hash_table_t *h,    /**< In: Handle of hash table in
+                                               which a key will be deleted */
+                        const char *key     /**< In: C-style NULL-terminated
+                                               key string for the new entry */
+       );
+
+/**
+ * Like hash_table_delete, but with an explicitly specified key length,
+ * instead of a NULL-terminated, C-style key string.  So the key
+ * string is a binary key (or bkey).  Hash tables containing such keys
+ * should be created with the HASH_CASE_YES option.  Otherwise, the
+ * results are unpredictable.
+ */
+SPHINXBASE_EXPORT
+void *hash_table_delete_bkey(hash_table_t *h,    /**< In: Handle of hash table in
+                                               which a key will be deleted */
+                             const char *key,     /**< In: C-style NULL-terminated
+                                               key string for the new entry */
+                             size_t len
+       );
+
+/**
+ * Delete all entries from a hash_table.
+ */
+SPHINXBASE_EXPORT
+void hash_table_empty(hash_table_t *h    /**< In: Handle of hash table */
+    );
+
+/**
+ * Like hash_table_enter, but with an explicitly specified key length,
+ * instead of a NULL-terminated, C-style key string.  So the key
+ * string is a binary key (or bkey).  Hash tables containing such keys
+ * should be created with the HASH_CASE_YES option.  Otherwise, the
+ * results are unpredictable.
+ */
+SPHINXBASE_EXPORT
+void *hash_table_enter_bkey(hash_table_t *h,   /**< In: Handle of hash table
+                                                   in which to create entry */
+                              const char *key, /**< In: Key buffer */
+                              size_t len,      /**< In: Length of above key buffer */
+                              void *val                /**< In: Value to be associated with above key */
+       );
+
+/**
+ * Enter a 32-bit integer value in a hash table.
+ *
+ * This macro is the clean way to do this and avoid compiler warnings
+ * on 64-bit platforms.
+ */
+#define hash_table_enter_bkey_int32(h,k,l,v) \
+    ((int32)(long)hash_table_enter_bkey((h),(k),(l),(void *)(long)(v)))
+
+/**
+ * Like hash_table_replace, but with an explicitly specified key length,
+ * instead of a NULL-terminated, C-style key string.  So the key
+ * string is a binary key (or bkey).  Hash tables containing such keys
+ * should be created with the HASH_CASE_YES option.  Otherwise, the
+ * results are unpredictable.
+ */
+SPHINXBASE_EXPORT
+void *hash_table_replace_bkey(hash_table_t *h, /**< In: Handle of hash table in which to create entry */
+                              const char *key, /**< In: Key buffer */
+                              size_t len,      /**< In: Length of above key buffer */
+                              void *val          /**< In: Value to be associated with above key */
+    );
+
+/**
+ * Replace a 32-bit integer value in a hash table.
+ *
+ * This macro is the clean way to do this and avoid compiler warnings
+ * on 64-bit platforms.
+ */
+#define hash_table_replace_bkey_int32(h,k,l,v)                          \
+    ((int32)(long)hash_table_replace_bkey((h),(k),(l),(void *)(long)(v)))
+
+/**
+ * Look up a key in a hash table and optionally return the associated
+ * value.
+ * @return 0 if key found in hash table, else -1.
+ */
+SPHINXBASE_EXPORT
+int32 hash_table_lookup(hash_table_t *h,       /**< In: Handle of hash table being searched */
+                        const char *key,       /**< In: C-style NULL-terminated string whose value is sought */
+                        void **val             /**< Out: *val = value associated with key.
+                                                   If this is NULL, no value will be returned. */
+       );
+
+/**
+ * Look up a 32-bit integer value in a hash table.
+ *
+ * This function is the clean way to do this and avoid compiler warnings
+ * on 64-bit platforms.
+ */
+SPHINXBASE_EXPORT
+int32 hash_table_lookup_int32(hash_table_t *h, /**< In: Handle of hash table being searched */
+                              const char *key, /**< In: C-style NULL-terminated string whose value is sought */
+                              int32 *val       /**< Out: *val = value associated with key.
+                                                   If this is NULL, no value will be returned. */
+       );
+
+/**
+ * Like hash_lookup, but with an explicitly specified key length, instead of a NULL-terminated,
+ * C-style key string.  So the key string is a binary key (or bkey).  Hash tables containing
+ * such keys should be created with the HASH_CASE_YES option.  Otherwise, the results are
+ * unpredictable.
+ */
+SPHINXBASE_EXPORT
+int32 hash_table_lookup_bkey(hash_table_t *h,  /**< In: Handle of hash table being searched */
+                             const char *key,  /**< In: Key buffer */
+                             size_t len,       /**< In: Length of above key buffer */
+                             void **val                /**< Out: *val = value associated with key.
+                                                   If this is NULL, no value will be returned. */
+       );
+
+/**
+ * Look up a 32-bit integer value in a hash table.
+ *
+ * This function is the clean way to do this and avoid compiler warnings
+ * on 64-bit platforms.
+ */
+SPHINXBASE_EXPORT
+int32 hash_table_lookup_bkey_int32(hash_table_t *h,/**< In: Handle of hash table being searched */
+                                   const char *key,/**< In: Key buffer */
+                                   size_t len, /**< In: Length of above key buffer */
+                                   int32 *val  /**< Out: *val = value associated with key.
+                                                   If this is NULL, no value will be returned. */
+       );
+
+/**
+ * Start iterating over key-value pairs in a hash table.
+ */
+SPHINXBASE_EXPORT
+hash_iter_t *hash_table_iter(hash_table_t *h);
+
+/**
+ * Get the next key-value pair in iteration.
+ *
+ * This function automatically frees the iterator object upon reaching
+ * the final entry.
+ *
+ * @return the next entry in the hash table, or NULL if done.
+ */
+SPHINXBASE_EXPORT
+hash_iter_t *hash_table_iter_next(hash_iter_t *itor);
+
+/**
+ * Delete an unfinished iterator.
+ */
+SPHINXBASE_EXPORT
+void hash_table_iter_free(hash_iter_t *itor);
+
+/**
+ * Build a glist of valid hash_entry_t pointers from the given hash table.  Return the list.
+ */
+SPHINXBASE_EXPORT
+glist_t hash_table_tolist(hash_table_t *h,     /**< In: Hash table from which list is to be generated */
+                          int32 *count         /**< Out: Number of entries in the list.
+                                                   If this is NULL, no count will be returned. */
+
+       );
+
+/**
+ * Display a hash-with-chaining representation on the screen.
+ * Currently, it will only works for situation where hash_enter was
+ * used to enter the keys. 
+ */
+SPHINXBASE_EXPORT
+void  hash_table_display(hash_table_t *h, /**< In: Hash table to display */
+                         int32 showkey    /**< In: Show the string or not,
+                                             Use 0 if hash_enter_bkey was
+                                             used. */
+       );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/heap.h b/include/sphinxbase/heap.h
new file mode 100644 (file)
index 0000000..ad3756a
--- /dev/null
@@ -0,0 +1,153 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * heap.h -- Generic heap structure for inserting in any and popping in sorted
+ *             order.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: heap.h,v $
+ * Revision 1.7  2005/06/22 03:05:49  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Add  keyword.
+ *
+ * Revision 1.4  2005/06/15 04:21:46  archan
+ * 1, Fixed doxygen-documentation, 2, Add  keyword such that changes will be logged into a file.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 23-Dec-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Started.
+ */
+
+
+#ifndef _LIBUTIL_HEAP_H_
+#define _LIBUTIL_HEAP_H_
+
+#include <stdlib.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+  /** \file heap.h
+   * \brief Heap Implementation. 
+   *
+   * General Comment: Sorted heap structure with three main operations:
+   * 
+   *   1. Insert a data item (with two attributes: an application supplied pointer and an
+   *      integer value; the heap is maintained in ascending order of the integer value).
+   *   2. Return the currently topmost item (i.e., item with smallest associated value).
+   *   3. Return the currently topmost item and pop it off the heap.
+   */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+
+typedef struct heap_s heap_t;
+
+
+/**
+ * Allocate a new heap and return handle to it.
+ */
+SPHINXBASE_EXPORT
+heap_t *heap_new(void);
+
+
+/**
+ * Insert a new item into the given heap.
+ * Return value: 0 if successful, -1 otherwise.
+ */
+SPHINXBASE_EXPORT
+int heap_insert(heap_t *heap,  /**< In: Heap into which item is to be inserted */
+                void *data,    /**< In: Application-determined data pointer */
+                int32 val      /**< In: According to item entered in sorted heap */
+       );
+/**
+ * Return the topmost item in the heap.
+ * Return value: 1 if heap is not empty and the topmost value is returned;
+ * 0 if heap is empty; -1 if some error occurred.
+ */
+SPHINXBASE_EXPORT
+int heap_top(heap_t *heap,     /**< In: Heap whose topmost item is to be returned */
+             void **data,      /**< Out: Data pointer associated with the topmost item */
+             int32 *val                /**< Out: Value associated with the topmost item */
+       );
+/**
+ * Like heap_top but also pop the top item off the heap.
+ */
+SPHINXBASE_EXPORT
+int heap_pop(heap_t *heap, void **data, int32 *val);
+
+/**
+ * Remove an item from the heap.
+ */
+SPHINXBASE_EXPORT
+int heap_remove(heap_t *heap, void *data);
+
+/**
+ * Return the number of items in the heap.
+ */
+SPHINXBASE_EXPORT
+size_t heap_size(heap_t *heap);
+
+/**
+ * Destroy the given heap; free the heap nodes.  NOTE: Data pointers in the nodes are NOT freed.
+ * Return value: 0 if successful, -1 otherwise.
+ */
+
+SPHINXBASE_EXPORT
+int heap_destroy(heap_t *heap);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/huff_code.h b/include/sphinxbase/huff_code.h
new file mode 100644 (file)
index 0000000..6365e22
--- /dev/null
@@ -0,0 +1,143 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2009 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/**
+ * @file huff_code.h
+ * @brief Huffman code and bitstream implementation
+ *
+ * This interface supports building canonical Huffman codes from
+ * string and integer values.  It also provides support for encoding
+ * and decoding from strings and files, and for reading and writing
+ * codebooks from files.
+ */
+
+#ifndef __HUFF_CODE_H__
+#define __HUFF_CODE_H__
+
+#include <stdio.h>
+
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/cmd_ln.h>
+
+typedef struct huff_code_s huff_code_t;
+
+/**
+ * Create a codebook from 32-bit integer data.
+ */
+SPHINXBASE_EXPORT
+huff_code_t *huff_code_build_int(int32 const *values, int32 const *frequencies, int nvals);
+
+/**
+ * Create a codebook from string data.
+ */
+SPHINXBASE_EXPORT
+huff_code_t *huff_code_build_str(char * const *values, int32 const *frequencies, int nvals);
+
+/**
+ * Read a codebook from a file.
+ */
+SPHINXBASE_EXPORT
+huff_code_t *huff_code_read(FILE *infh);
+
+/**
+ * Write a codebook to a file.
+ */
+SPHINXBASE_EXPORT
+int huff_code_write(huff_code_t *hc, FILE *outfh);
+
+/**
+ * Print a codebook to a file as text (for debugging)
+ */
+SPHINXBASE_EXPORT
+int huff_code_dump(huff_code_t *hc, FILE *dumpfh);
+
+/**
+ * Retain a pointer to a Huffman codec object.
+ */
+SPHINXBASE_EXPORT
+huff_code_t *huff_code_retain(huff_code_t *hc);
+
+/**
+ * Release a pointer to a Huffman codec object.
+ */
+SPHINXBASE_EXPORT
+int huff_code_free(huff_code_t *hc);
+
+/**
+ * Attach a Huffman codec to a file handle for input/output.
+ */
+SPHINXBASE_EXPORT
+FILE *huff_code_attach(huff_code_t *hc, FILE *fh, char const *mode);
+
+/**
+ * Detach a Huffman codec from its file handle.
+ */
+SPHINXBASE_EXPORT
+FILE *huff_code_detach(huff_code_t *hc);
+
+/**
+ * Encode an integer, writing it to the file handle, if any.
+ */
+SPHINXBASE_EXPORT
+int huff_code_encode_int(huff_code_t *hc, int32 sym, uint32 *outcw);
+
+/**
+ * Encode a string, writing it to the file handle, if any.
+ */
+SPHINXBASE_EXPORT
+int huff_code_encode_str(huff_code_t *hc, char const *sym, uint32 *outcw);
+
+/**
+ * Decode an integer, reading it from the file if no data given.
+ */
+SPHINXBASE_EXPORT
+int huff_code_decode_int(huff_code_t *hc, int *outval,
+                         char const **inout_data,
+                         size_t *inout_data_len,
+                         int *inout_offset);
+
+/**
+ * Decode a string, reading it from the file if no data given.
+ */
+SPHINXBASE_EXPORT
+char const *huff_code_decode_str(huff_code_t *hc,
+                                 char const **inout_data,
+                                 size_t *inout_data_len,
+                                 int *inout_offset);
+
+#endif /* __HUFF_CODE_H__ */
diff --git a/include/sphinxbase/info.h b/include/sphinxbase/info.h
new file mode 100644 (file)
index 0000000..fa29b2a
--- /dev/null
@@ -0,0 +1,87 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+
+#ifndef _LIBUTIL_INFO_H_
+#define _LIBUTIL_INFO_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+/* HISTORY
+ * $Log$
+ * Revision 1.1  2006/04/05  20:27:30  dhdfu
+ * A Great Reorganzation of header files and executables
+ * 
+ * Revision 1.3  2005/06/22 03:06:46  arthchan2003
+ * Add  keyword.
+ *
+ * Revision 1.2  2005/06/15 04:21:46  archan
+ * 1, Fixed doxygen-documentation, 2, Add  keyword such that changes will be logged into a file.
+ *
+ */
+
+/** \file info.h
+ *  \brief Print hostname, directory name, compile time and date. 
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+
+/**
+   This function prints the hostname, the directory, compile time
+   and date .  */
+
+SPHINXBASE_EXPORT
+void print_appl_info(char* appl_name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBUTIL_INFO_H_ */
+
diff --git a/include/sphinxbase/jsgf.h b/include/sphinxbase/jsgf.h
new file mode 100644 (file)
index 0000000..bc4009c
--- /dev/null
@@ -0,0 +1,169 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef __JSGF_H__
+#define __JSGF_H__
+
+/**
+ * @file jsgf.h JSGF grammar compiler
+ *
+ * This file defines the data structures for parsing JSGF grammars
+ * into Sphinx finite-state grammars.
+ **/
+
+#include <stdio.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/hash_table.h>
+#include <sphinxbase/fsg_model.h>
+#include <sphinxbase/logmath.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+typedef struct jsgf_s jsgf_t;
+typedef struct jsgf_rule_s jsgf_rule_t;
+
+/**
+ * Create a new JSGF grammar.
+ *
+ * @param parent optional parent grammar for this one (NULL, usually).
+ * @return new JSGF grammar object, or NULL on failure.
+ */
+SPHINXBASE_EXPORT
+jsgf_t *jsgf_grammar_new(jsgf_t *parent);
+
+/**
+ * Parse a JSGF grammar from a file.
+ *
+ * @param filename the name of the file to parse.
+ * @param parent optional parent grammar for this one (NULL, usually).
+ * @return new JSGF grammar object, or NULL on failure.
+ */
+SPHINXBASE_EXPORT
+jsgf_t *jsgf_parse_file(const char *filename, jsgf_t *parent);
+
+/**
+ * Free a JSGF grammar.
+ */
+SPHINXBASE_EXPORT
+void jsgf_grammar_free(jsgf_t *jsgf);
+
+/**
+ * Iterator over rules in a grammar.
+ */
+typedef hash_iter_t jsgf_rule_iter_t;
+
+/**
+ * Get an iterator over all rules in a grammar.
+ */
+SPHINXBASE_EXPORT
+jsgf_rule_iter_t *jsgf_rule_iter(jsgf_t *grammar);
+
+/**
+ * Advance an iterator to the next rule in the grammar.
+ */
+#define jsgf_rule_iter_next(itor) hash_table_iter_next(itor)
+
+/**
+ * Get the current rule in a rule iterator.
+ */
+#define jsgf_rule_iter_rule(itor) ((jsgf_rule_t *)(itor)->ent->val)
+
+/**
+ * Free a rule iterator (if the end hasn't been reached).
+ */
+#define jsgf_rule_iter_free(itor) hash_table_iter_free(itor)
+
+/**
+ * Get a rule by name from a grammar.
+ */
+SPHINXBASE_EXPORT
+jsgf_rule_t *jsgf_get_rule(jsgf_t *grammar, char const *name);
+
+/**
+ * Get the rule name from a rule.
+ */
+SPHINXBASE_EXPORT
+char const *jsgf_rule_name(jsgf_rule_t *rule);
+
+/**
+ * Test if a rule is public or not.
+ */
+SPHINXBASE_EXPORT
+int jsgf_rule_public(jsgf_rule_t *rule);
+
+/**
+ * Build a Sphinx FSG object from a JSGF rule.
+ */
+SPHINXBASE_EXPORT
+fsg_model_t *jsgf_build_fsg(jsgf_t *grammar, jsgf_rule_t *rule,
+                            logmath_t *lmath, float32 lw);
+
+/**
+ * Build a Sphinx FSG object from a JSGF rule.
+ *
+ * This differs from jsgf_build_fsg() in that it does not do closure
+ * on epsilon transitions or any other postprocessing.  For the time
+ * being this is necessary in order to write it to a file - the FSG
+ * code will be fixed soon.
+ */
+SPHINXBASE_EXPORT
+fsg_model_t *jsgf_build_fsg_raw(jsgf_t *grammar, jsgf_rule_t *rule,
+                                logmath_t *lmath, float32 lw);
+
+/**
+ * Convert a JSGF rule to Sphinx FSG text form.
+ *
+ * This does a direct conversion without doing transitive closure on
+ * null transitions and so forth.
+ */
+SPHINXBASE_EXPORT
+int jsgf_write_fsg(jsgf_t *grammar, jsgf_rule_t *rule, FILE *outfh);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __JSGF_H__ */
diff --git a/include/sphinxbase/libutil.h b/include/sphinxbase/libutil.h
new file mode 100644 (file)
index 0000000..3f693db
--- /dev/null
@@ -0,0 +1,139 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * libutil.h -- Collection of all other .h files in this directory; for brevity
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: libutil.h,v $
+ * Revision 1.14  2005/06/22 03:07:21  arthchan2003
+ * Add  keyword.
+ *
+ * Revision 1.4  2005/06/15 06:23:21  archan
+ * change headers from io.h to pio.h
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 08-Dec-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Added SLEEP_SEC macro.
+ * 
+ * 08-31-95    M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Created.
+ */
+
+
+#ifndef _LIBUTIL_LIBUTIL_H_
+#define _LIBUTIL_LIBUTIL_H_
+
+/** \file libutil.h
+ * \brief (Considered as dangenous) master header for libutil.h
+ * 
+ * Master file for all the headers in libutil/ . Though many people point out
+ * using libutil.h can easily result in nested include. 
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#ifndef WIN32                  /* RAH */
+#include <unistd.h>
+#endif /* RAH */
+#include <math.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/bitvec.h>
+#include <sphinxbase/case.h>
+#include <sphinxbase/ckd_alloc.h>
+#include <sphinxbase/listelem_alloc.h>
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/err.h>
+#include <sphinxbase/filename.h>
+#include <sphinxbase/glist.h>
+#include <sphinxbase/hash_table.h>
+#include <sphinxbase/heap.h>
+#include <sphinxbase/pio.h>
+#include <sphinxbase/profile.h>
+#include <sphinxbase/strfuncs.h>
+#include <sphinxbase/unlimit.h>
+#include <sphinxbase/info.h>
+#include <sphinxbase/genrand.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+
+#if (defined(WIN32) && !defined(__CYGWIN__))
+#define SLEEP_SEC(sec) (0)                     /* Why doesn't Sleep((sec)*1000) work? */
+#else
+#define SLEEP_SEC(sec) sleep(sec)              /* sec must be integer */
+#endif
+
+#ifndef TRUE
+#define TRUE   1
+#define FALSE  0
+#endif
+
+#ifndef M_PI
+#define M_PI           3.1415926535897932385   /* For the pain-in-the-neck Win32 */
+#endif
+#define PI             M_PI
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/include/sphinxbase/listelem_alloc.h b/include/sphinxbase/listelem_alloc.h
new file mode 100644 (file)
index 0000000..91b21d1
--- /dev/null
@@ -0,0 +1,125 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef __LISTELEM_ALLOC_H__
+#define __LISTELEM_ALLOC_H__
+
+/** @file listelem_alloc.h
+ * @brief Fast memory allocator for uniformly sized objects
+ * @author M K Ravishankar <rkm@cs.cmu.edu>
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#include <stdlib.h>
+#ifdef S60
+#include <types.h>
+#endif
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+/**
+ * List element allocator object.
+ */
+typedef struct listelem_alloc_s listelem_alloc_t;
+
+/**
+ * Initialize and return a list element allocator.
+ */
+SPHINXBASE_EXPORT
+listelem_alloc_t * listelem_alloc_init(size_t elemsize);
+
+/**
+ * Finalize and release all memory associated with a list element allocator.
+ */
+SPHINXBASE_EXPORT
+void listelem_alloc_free(listelem_alloc_t *le);
+
+
+SPHINXBASE_EXPORT
+void *__listelem_malloc__(listelem_alloc_t *le, char *file, int line);
+
+/** 
+ * Allocate a list element and return pointer to it.
+ */
+#define listelem_malloc(le)    __listelem_malloc__((le),__FILE__,__LINE__)
+
+SPHINXBASE_EXPORT
+void *__listelem_malloc_id__(listelem_alloc_t *le, char *file, int line,
+                             int32 *out_id);
+
+/**
+ * Allocate a list element, returning a unique identifier.
+ */
+#define listelem_malloc_id(le, oid)    __listelem_malloc_id__((le),__FILE__,__LINE__,(oid))
+
+/**
+ * Retrieve a list element by its identifier.
+ */
+SPHINXBASE_EXPORT
+void *listelem_get_item(listelem_alloc_t *le, int32 id);
+
+/**
+ * Free list element of given size 
+ */
+SPHINXBASE_EXPORT
+void __listelem_free__(listelem_alloc_t *le, void *elem, char *file, int line);
+
+/** 
+ * Macro of __listelem_free__
+ */
+#define listelem_free(le,el)   __listelem_free__((le),(el),__FILE__,__LINE__)
+
+/**
+   Print number of allocation, numer of free operation stats 
+*/
+SPHINXBASE_EXPORT
+void listelem_stats(listelem_alloc_t *le);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/logmath.h b/include/sphinxbase/logmath.h
new file mode 100644 (file)
index 0000000..21caf45
--- /dev/null
@@ -0,0 +1,237 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * @file logmath.h
+ * @brief Fast integer logarithmic addition operations.
+ *
+ * In evaluating HMM models, probability values are often kept in log
+ * domain, to avoid overflow.  To enable these logprob values to be
+ * held in int32 variables without significant loss of precision, a
+ * logbase of (1+epsilon) (where epsilon < 0.01 or so) is used.  This
+ * module maintains this logbase (B).
+ * 
+ * However, maintaining probabilities in log domain creates a problem
+ * when adding two probability values.  This problem can be solved by
+ * table lookup.  Note that:
+ *
+ *  - \f$ b^z = b^x + b^y \f$
+ *  - \f$ b^z = b^x(1 + b^{y-x})     = b^y(1 + e^{x-y}) \f$
+ *  - \f$ z   = x + log_b(1 + b^{y-x}) = y + log_b(1 + b^{x-y}) \f$
+ *
+ * So:
+ * 
+ *  - when \f$ y > x, z = y + logadd\_table[-(x-y)] \f$
+ *  - when \f$ x > y, z = x + logadd\_table[-(y-x)] \f$
+ *  - where \f$ logadd\_table[n] = log_b(1 + b^{-n}) \f$
+ *
+ * The first entry in <i>logadd_table</i> is
+ * simply \f$ log_b(2.0) \f$, for
+ * the case where \f$ y = x \f$ and thus
+ * \f$ z = log_b(2x) = log_b(2) + x \f$.  The last entry is zero,
+ * where \f$ log_b(x+y) = x = y \f$ due to loss of precision.
+ *
+ * Since this table can be quite large particularly for small
+ * logbases, an option is provided to compress it by dropping the
+ * least significant bits of the table.
+ */
+
+#ifndef __LOGMATH_H__
+#define __LOGMATH_H__
+
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/cmd_ln.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Integer log math computation table.
+ *
+ * This is exposed here to allow log-add computations to be inlined.
+ */
+typedef struct logadd_s logadd_t;
+struct logadd_s {
+    /** Table, in unsigned integers of (width) bytes. */
+    void *table;
+    /** Number of elements in (table).  This is never smaller than 256 (important!) */
+    uint32 table_size;
+    /** Width of elements of (table). */
+    uint8 width;
+    /** Right shift applied to elements in (table). */
+    int8 shift;
+};
+
+/**
+ * Integer log math computation class.
+ */
+typedef struct logmath_s logmath_t;
+
+/**
+ * Obtain the log-add table from a logmath_t *
+ */
+#define LOGMATH_TABLE(lm) ((logadd_t *)lm)
+
+/**
+ * Initialize a log math computation table.
+ * @param base The base B in which computation is to be done.
+ * @param shift Log values are shifted right by this many bits.
+ * @param use_table Whether to use an add table or not
+ * @return The newly created log math table.
+ */
+SPHINXBASE_EXPORT
+logmath_t *logmath_init(float64 base, int shift, int use_table);
+
+/**
+ * Memory-map (or read) a log table from a file.
+ */
+SPHINXBASE_EXPORT
+logmath_t *logmath_read(const char *filename);
+
+/**
+ * Write a log table to a file.
+ */
+SPHINXBASE_EXPORT
+int32 logmath_write(logmath_t *lmath, const char *filename);
+
+/**
+ * Get the log table size and dimensions.
+ */
+SPHINXBASE_EXPORT
+int32 logmath_get_table_shape(logmath_t *lmath, uint32 *out_size,
+                              uint32 *out_width, uint32 *out_shift);
+
+/**
+ * Get the log base.
+ */
+SPHINXBASE_EXPORT
+float64 logmath_get_base(logmath_t *lmath);
+
+/**
+ * Get the smallest possible value represented in this base.
+ */
+SPHINXBASE_EXPORT
+int logmath_get_zero(logmath_t *lmath);
+
+/**
+ * Get the width of the values in a log table.
+ */
+SPHINXBASE_EXPORT
+int logmath_get_width(logmath_t *lmath);
+
+/**
+ * Get the shift of the values in a log table.
+ */
+SPHINXBASE_EXPORT
+int logmath_get_shift(logmath_t *lmath);
+
+/**
+ * Retain ownership of a log table.
+ *
+ * @return pointer to retained log table.
+ */
+SPHINXBASE_EXPORT
+logmath_t *logmath_retain(logmath_t *lmath);
+
+/**
+ * Free a log table.
+ *
+ * @return new reference count (0 if freed completely)
+ */
+SPHINXBASE_EXPORT
+int logmath_free(logmath_t *lmath);
+
+/**
+ * Add two values in log space exactly and slowly (without using add table).
+ */
+SPHINXBASE_EXPORT
+int logmath_add_exact(logmath_t *lmath, int logb_p, int logb_q);
+
+/**
+ * Add two values in log space (i.e. return log(exp(p)+exp(q)))
+ */
+SPHINXBASE_EXPORT
+int logmath_add(logmath_t *lmath, int logb_p, int logb_q);
+
+/**
+ * Convert linear floating point number to integer log in base B.
+ */
+SPHINXBASE_EXPORT
+int logmath_log(logmath_t *lmath, float64 p);
+
+/**
+ * Convert integer log in base B to linear floating point.
+ */
+SPHINXBASE_EXPORT
+float64 logmath_exp(logmath_t *lmath, int logb_p);
+
+/**
+ * Convert natural log (in floating point) to integer log in base B.
+ */
+SPHINXBASE_EXPORT
+int logmath_ln_to_log(logmath_t *lmath, float64 log_p);
+
+/**
+ * Convert integer log in base B to natural log (in floating point).
+ */
+SPHINXBASE_EXPORT
+float64 logmath_log_to_ln(logmath_t *lmath, int logb_p);
+
+/**
+ * Convert base 10 log (in floating point) to integer log in base B.
+ */
+SPHINXBASE_EXPORT
+int logmath_log10_to_log(logmath_t *lmath, float64 log_p);
+
+/**
+ * Convert integer log in base B to base 10 log (in floating point).
+ */
+SPHINXBASE_EXPORT
+float64 logmath_log_to_log10(logmath_t *lmath, int logb_p);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /*  __LOGMATH_H__ */
diff --git a/include/sphinxbase/matrix.h b/include/sphinxbase/matrix.h
new file mode 100644 (file)
index 0000000..1b130b4
--- /dev/null
@@ -0,0 +1,232 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1997-2000 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*********************************************************************
+ *
+ * File: matrix.h
+ * 
+ * Description: Matrix and linear algebra functions
+ * 
+ * Author: 
+ * 
+ *********************************************************************/
+
+#ifndef MATRIX_H
+#define MATRIX_H
+
+/** \file matrix.h
+ * \brief Matrix and linear algebra functions.
+ *
+ * This file contains some basic matrix and linear algebra operations.
+ * In general these operate on positive definite matrices ONLY,
+ * because all matrices we're likely to encounter are either
+ * covariance matrices or are derived from them, and therefore a
+ * non-positive-definite matrix indicates some kind of pathological
+ * condition.
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+
+/**
+ * Norm an array
+ * @param arr array
+ * @param d1 dimension
+ * @param d2 dimension
+ * @param d3 dimension
+ **/
+SPHINXBASE_EXPORT void norm_3d(float32 ***arr, uint32 d1, uint32 d2, uint32 d3);
+
+/**
+ * Floor 3-d array
+ * @param out output array
+ * @para in input array
+ * @param d1 dimension
+ * @param d2 dimension
+ * @param d3 dimension
+ **/
+SPHINXBASE_EXPORT void
+accum_3d(float32 ***out, float32 ***in, uint32 d1, uint32 d2, uint32 d3);
+
+/** Ensures that non-zero values x such that -band < x < band, band > 0 are set to -band if x < 0 and band if x > 0.
+ * @param v array
+ * @param d1 array size
+ * @param band band value
+ */
+SPHINXBASE_EXPORT void band_nz_1d(float32 *v, uint32 d1, float32 band);
+
+/**
+ * Floor 3-d array
+ * @param m array
+ * @param d1 dimension
+ * @param d2 dimension
+ * @param d3 dimension
+ * @param floor floor value
+ **/
+SPHINXBASE_EXPORT void floor_nz_3d(float32 ***m, uint32 d1, uint32 d2, uint32 d3, float32 floor);
+
+/**
+ * Floor 1-d array
+ * @param m array
+ * @param d1 dimension
+ * @param floor floor value
+ **/
+SPHINXBASE_EXPORT void floor_nz_1d(float32 *v, uint32 d1, float32 floor);
+
+/**
+ * Calculate the determinant of a positive definite matrix.
+ * @param a The input matrix, must be positive definite.
+ * @param len The dimension of the input matrix.
+ * @return The determinant of the input matrix, or -1.0 if the matrix is
+ * not positive definite.
+ *
+ * \note These can be vanishingly small hence the float64 return type.
+ * Also note that only the upper triangular portion of a is
+ * considered, therefore the check for positive-definiteness is not
+ * reliable.
+ **/
+SPHINXBASE_EXPORT
+float64 determinant(float32 **a, int32 len);
+
+/**
+ * Invert (if possible) a positive definite matrix.
+ * @param out_ainv The inverse of a will be stored here.
+ * @param a The input matrix, must be positive definite.
+ * @param len The dimension of the input matrix.
+ * @return 0 for success or -1 for a non-positive-definite matrix.
+ *
+ * \note Only the upper triangular portion of a is considered,
+ * therefore the check for positive-definiteness is not reliable.
+ **/
+SPHINXBASE_EXPORT
+int32 invert(float32 **out_ainv, float32 **a, int32 len);
+
+/**
+ * Solve (if possible) a positive-definite system of linear equations AX=B for X.
+ * @param a The A matrix on the left-hand side of the equation, must be positive-definite.
+ * @param b The B vector on the right-hand side of the equation.
+ * @param out_x The X vector will be stored here.
+ * @param n The dimension of the A matrix (n by n) and the B and X vectors.
+ * @return 0 for success or -1 for a non-positive-definite matrix.
+ *
+ * \note Only the upper triangular portion of a is considered,
+ * therefore the check for positive-definiteness is not reliable.
+ **/
+SPHINXBASE_EXPORT
+int32 solve(float32 **a, float32 *b,
+            float32 *out_x, int32 n);
+
+/**
+ * Calculate the outer product of two vectors.
+ * @param out_a A (pre-allocated) len x len array. The outer product
+ * will be stored here.
+ * @param x A vector of length len.
+ * @param y A vector of length len.
+ * @param len The length of the input vectors.
+ **/
+SPHINXBASE_EXPORT
+void outerproduct(float32 **out_a, float32 *x, float32 *y, int32 len);
+
+/**
+ * Multiply C=AB where A and B are symmetric matrices.
+ * @param out_c The output matrix C.
+ * @param a The input matrix A.
+ * @param b The input matrix B.
+ * @param n Dimensionality of A and B.
+ **/
+SPHINXBASE_EXPORT
+void matrixmultiply(float32 **out_c, /* = */
+                    float32 **a, /* * */ float32 **b,
+                    int32 n);
+
+/**
+ * Multiply a symmetric matrix by a constant in-place.
+ * @param inout_a The matrix to multiply.
+ * @param x The constant to multiply it by.
+ * @param n dimension of a.
+ **/
+SPHINXBASE_EXPORT
+void scalarmultiply(float32 **inout_a, float32 x, int32 n);
+
+/**
+ * Add A += B.
+ * @param inout_a The A matrix to add.
+ * @param b The B matrix to add to A.
+ * @param n dimension of a and b.
+ **/
+SPHINXBASE_EXPORT
+void matrixadd(float32 **inout_a, float32 **b, int32 n);
+
+#if 0
+{ /* Fool indent. */
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MATRIX_H */ 
+
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log$
+ * Revision 1.4  2004/07/21  17:46:09  egouvea
+ * Changed the license terms to make it the same as sphinx2 and sphinx3.
+ * 
+ * Revision 1.3  2001/04/05 20:02:30  awb
+ * *** empty log message ***
+ *
+ * Revision 1.2  2000/09/29 22:35:12  awb
+ * *** empty log message ***
+ *
+ * Revision 1.1  2000/09/24 21:38:30  awb
+ * *** empty log message ***
+ *
+ * Revision 1.1  97/07/16  11:39:10  eht
+ * Initial revision
+ * 
+ *
+ */
diff --git a/include/sphinxbase/mmio.h b/include/sphinxbase/mmio.h
new file mode 100644 (file)
index 0000000..7612733
--- /dev/null
@@ -0,0 +1,85 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2006-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * @file mmio.h 
+ * @brief Memory-mapped I/O wrappers for files.
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ **/
+
+#ifndef __MMIO_H__
+#define __MMIO_H__
+
+#include <sphinxbase/sphinxbase_export.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Abstract structure representing a memory-mapped file.
+ **/
+typedef struct mmio_file_s mmio_file_t;
+
+/**
+ * Memory-map a file for reading.
+ * @return a mmio_file_t * or NULL for failure.
+ **/
+SPHINXBASE_EXPORT
+mmio_file_t *mmio_file_read(const char *filename);
+
+/**
+ * Get a pointer to the memory mapped for a file.
+ **/
+SPHINXBASE_EXPORT
+void *mmio_file_ptr(mmio_file_t *mf);
+
+/**
+ * Unmap a file, releasing memory associated with it.
+ **/
+SPHINXBASE_EXPORT
+void mmio_file_unmap(mmio_file_t *mf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __MMIO_H__ */
diff --git a/include/sphinxbase/mulaw.h b/include/sphinxbase/mulaw.h
new file mode 100644 (file)
index 0000000..4956130
--- /dev/null
@@ -0,0 +1,99 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * muLaw.h -- Table for converting mu-law data into 16-bit linear PCM format.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * 
+ * 21-Jul-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created from Sunil Issar's version.
+ */
+
+/**
+ * \file mulaw.h
+ * \brief Table for converting mu-law data into 16-bit linear PCM format.
+ */
+
+
+#ifndef _MULAW_H_
+#define _MULAW_H_
+
+
+static int16 muLaw[256] = {
+ -0x1f5f, -0x1e5f, -0x1d5f, -0x1c5f, -0x1b5f, -0x1a5f, -0x195f, -0x185f,
+ -0x175f, -0x165f, -0x155f, -0x145f, -0x135f, -0x125f, -0x115f, -0x105f,
+ -0x0f9f, -0x0f1f, -0x0e9f, -0x0e1f, -0x0d9f, -0x0d1f, -0x0c9f, -0x0c1f,
+ -0x0b9f, -0x0b1f, -0x0a9f, -0x0a1f, -0x099f, -0x091f, -0x089f, -0x081f,
+ -0x07bf, -0x077f, -0x073f, -0x06ff, -0x06bf, -0x067f, -0x063f, -0x05ff,
+ -0x05bf, -0x057f, -0x053f, -0x04ff, -0x04bf, -0x047f, -0x043f, -0x03ff,
+ -0x03cf, -0x03af, -0x038f, -0x036f, -0x034f, -0x032f, -0x030f, -0x02ef,
+ -0x02cf, -0x02af, -0x028f, -0x026f, -0x024f, -0x022f, -0x020f, -0x01ef,
+ -0x01d7, -0x01c7, -0x01b7, -0x01a7, -0x0197, -0x0187, -0x0177, -0x0167,
+ -0x0157, -0x0147, -0x0137, -0x0127, -0x0117, -0x0107, -0x00f7, -0x00e7,
+ -0x00db, -0x00d3, -0x00cb, -0x00c3, -0x00bb, -0x00b3, -0x00ab, -0x00a3,
+ -0x009b, -0x0093, -0x008b, -0x0083, -0x007b, -0x0073, -0x006b, -0x0063,
+ -0x005d, -0x0059, -0x0055, -0x0051, -0x004d, -0x0049, -0x0045, -0x0041,
+ -0x003d, -0x0039, -0x0035, -0x0031, -0x002d, -0x0029, -0x0025, -0x0021,
+ -0x001e, -0x001c, -0x001a, -0x0018, -0x0016, -0x0014, -0x0012, -0x0010,
+ -0x000e, -0x000c, -0x000a, -0x0008, -0x0006, -0x0004, -0x0002,  0x0000,
+  0x1f5f,  0x1e5f,  0x1d5f,  0x1c5f,  0x1b5f,  0x1a5f,  0x195f,  0x185f,
+  0x175f,  0x165f,  0x155f,  0x145f,  0x135f,  0x125f,  0x115f,  0x105f,
+  0x0f9f,  0x0f1f,  0x0e9f,  0x0e1f,  0x0d9f,  0x0d1f,  0x0c9f,  0x0c1f,
+  0x0b9f,  0x0b1f,  0x0a9f,  0x0a1f,  0x099f,  0x091f,  0x089f,  0x081f,
+  0x07bf,  0x077f,  0x073f,  0x06ff,  0x06bf,  0x067f,  0x063f,  0x05ff,
+  0x05bf,  0x057f,  0x053f,  0x04ff,  0x04bf,  0x047f,  0x043f,  0x03ff,
+  0x03cf,  0x03af,  0x038f,  0x036f,  0x034f,  0x032f,  0x030f,  0x02ef,
+  0x02cf,  0x02af,  0x028f,  0x026f,  0x024f,  0x022f,  0x020f,  0x01ef,
+  0x01d7,  0x01c7,  0x01b7,  0x01a7,  0x0197,  0x0187,  0x0177,  0x0167,
+  0x0157,  0x0147,  0x0137,  0x0127,  0x0117,  0x0107,  0x00f7,  0x00e7,
+  0x00db,  0x00d3,  0x00cb,  0x00c3,  0x00bb,  0x00b3,  0x00ab,  0x00a3,
+  0x009b,  0x0093,  0x008b,  0x0083,  0x007b,  0x0073,  0x006b,  0x0063,
+  0x005d,  0x0059,  0x0055,  0x0051,  0x004d,  0x0049,  0x0045,  0x0041,
+  0x003d,  0x0039,  0x0035,  0x0031,  0x002d,  0x0029,  0x0025,  0x0021,
+  0x001e,  0x001c,  0x001a,  0x0018,  0x0016,  0x0014,  0x0012,  0x0010,
+  0x000e,  0x000c,  0x000a,  0x0008,  0x0006,  0x0004,  0x0002,  0x0000,
+};
+
+
+#endif
diff --git a/include/sphinxbase/ngram_model.h b/include/sphinxbase/ngram_model.h
new file mode 100644 (file)
index 0000000..2ddb576
--- /dev/null
@@ -0,0 +1,717 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * @file ngram_model.h
+ * @brief N-Gram language models
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#ifndef __NGRAM_MODEL_H__
+#define __NGRAM_MODEL_H__
+
+#include <stdarg.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/logmath.h>
+#include <sphinxbase/mmio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Abstract type representing an N-Gram based language model.
+ */
+typedef struct ngram_model_s ngram_model_t;
+
+/**
+ * Abstract type representing a word class in an N-Gram model.
+ */
+typedef struct ngram_class_s ngram_class_t;
+
+/**
+ * File types for N-Gram files
+ */
+typedef enum ngram_file_type_e {
+    NGRAM_INVALID = -1, /**< Not a valid file type. */
+    NGRAM_AUTO,  /**< Determine file type automatically. */
+    NGRAM_ARPA,  /**< ARPABO text format (the standard). */
+    NGRAM_DMP,   /**< Sphinx .DMP format. */
+    NGRAM_DMP32, /**< Sphinx .DMP32 format (NOT SUPPORTED) */
+} ngram_file_type_t;
+
+#define NGRAM_INVALID_WID -1 /**< Impossible word ID */
+
+/**
+ * Read an N-Gram model from a file on disk.
+ *
+ * @param config Optional pointer to a set of command-line arguments.
+ * Recognized arguments are:
+ *
+ *  - -mmap (boolean) whether to use memory-mapped I/O
+ *  - -lw (float32) language weight to apply to the model
+ *  - -wip (float32) word insertion penalty to apply to the model
+ *  - -uw (float32) unigram weight to apply to the model
+ *
+ * @param file_name path to the file to read.
+ * @param file_type type of the file, or NGRAM_AUTO to determine automatically.
+ * @param lmath Log-math parameters to use for probability
+ *              calculations.  Ownership of this object is assumed by
+ *              the newly created ngram_model_t, and you should not
+ *              attempt to free it manually.  If you wish to reuse it
+ *              elsewhere, you must retain it with logmath_retain().
+ * @return newly created ngram_model_t.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_read(cmd_ln_t *config,
+                               const char *file_name,
+                                ngram_file_type_t file_type,
+                               logmath_t *lmath);
+
+/**
+ * Write an N-Gram model to disk.
+ *
+ * @return 0 for success, <0 on error
+ */
+SPHINXBASE_EXPORT
+int ngram_model_write(ngram_model_t *model, const char *file_name,
+                     ngram_file_type_t format);
+
+/**
+ * Guess the file type for an N-Gram model from the filename.
+ *
+ * @return the guessed file type, or NGRAM_INVALID if none could be guessed.
+ */
+SPHINXBASE_EXPORT
+ngram_file_type_t ngram_file_name_to_type(const char *file_name);
+
+/**
+ * Get the N-Gram file type from a string.
+ *
+ * @return file type, or NGRAM_INVALID if no such file type exists.
+ */
+SPHINXBASE_EXPORT
+ngram_file_type_t ngram_str_to_type(const char *str_name);
+
+/**
+ * Get the canonical name for an N-Gram file type.
+ *
+ * @return read-only string with the name for this file type, or NULL
+ * if no such type exists.
+ */
+SPHINXBASE_EXPORT
+char const *ngram_type_to_str(int type);
+
+/**
+ * Retain ownership of an N-Gram model.
+ *
+ * @return Pointer to retained model.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_retain(ngram_model_t *model);
+
+/**
+ * Release memory associated with an N-Gram model.
+ *
+ * @return new reference count (0 if freed completely)
+ */
+SPHINXBASE_EXPORT
+int ngram_model_free(ngram_model_t *model);
+
+/**
+ * Re-encode word strings in an N-Gram model.
+ *
+ * Character set names are the same as those passed to iconv(1).  If
+ * your system does not have iconv, this function may fail.  Also,
+ * because all file formats consist of 8-bit character streams,
+ * attempting to convert to or from UTF-16 (or any other encoding
+ * which contains null bytes) is a recipe for total desaster.
+ *
+ * We have no interest in supporting UTF-16, so don't ask.
+ *
+ * Note that this does not affect any pronunciation dictionary you
+ * might currently be using in conjunction with this N-Gram model, so
+ * the effect of calling this during decoding is undefined.  That's a
+ * bug!
+ */
+SPHINXBASE_EXPORT
+int ngram_model_recode(ngram_model_t *model, const char *from, const char *to);
+
+/**
+ * Constants for case folding.
+ */
+typedef enum ngram_case_e {
+    NGRAM_UPPER,
+    NGRAM_LOWER
+} ngram_case_t;
+
+/**
+ * Case-fold word strings in an N-Gram model.
+ *
+ * WARNING: This is not Unicode aware, so any non-ASCII characters
+ * will not be converted.
+ */
+SPHINXBASE_EXPORT
+int ngram_model_casefold(ngram_model_t *model, int kase);
+
+/**
+ * Apply a language weight, insertion penalty, and unigram weight to a
+ * language model.
+ *
+ * This will change the values output by ngram_score() and friends.
+ * This is done for efficiency since in decoding, these are the only
+ * values we actually need.  Call ngram_prob() if you want the "raw"
+ * N-Gram probability estimate.
+ *
+ * To remove all weighting, call ngram_apply_weights(model, 1.0, 1.0, 1.0).
+ */
+SPHINXBASE_EXPORT
+int ngram_model_apply_weights(ngram_model_t *model,
+                              float32 lw, float32 wip, float32 uw);
+
+/**
+ * Get the current weights from a language model.
+ *
+ * @param model The model in question.
+ * @param out_log_wip Output: (optional) logarithm of word insertion penalty.
+ * @param out_log_uw Output: (optional) logarithm of unigram weight.
+ * @return language weight.
+ */
+SPHINXBASE_EXPORT
+float32 ngram_model_get_weights(ngram_model_t *model, int32 *out_log_wip,
+                                int32 *out_log_uw);
+
+/**
+ * Get the score (scaled, interpolated log-probability) for a general
+ * N-Gram.
+ *
+ * The argument list consists of the history words (as null-terminated
+ * strings) of the N-Gram, <b>in reverse order</b>, followed by NULL.
+ * Therefore, if you wanted to get the N-Gram score for "a whole joy",
+ * you would call:
+ *
+ * <pre>
+ *  score = ngram_score(model, "joy", "whole", "a", NULL);
+ * </pre>
+ *
+ * This is not the function to use in decoding, because it has some
+ * overhead for looking up words.  Use ngram_ng_score(),
+ * ngram_tg_score(), or ngram_bg_score() instead.  In the future there
+ * will probably be a version that takes a general language model
+ * state object, to support suffix-array LM and things like that.
+ *
+ * If one of the words is not in the LM's vocabulary, the result will
+ * depend on whether this is an open or closed vocabulary language
+ * model.  For an open-vocabulary model, unknown words are all mapped
+ * to the unigram &lt;UNK&gt; which has a non-zero probability and also
+ * participates in higher-order N-Grams.  Therefore, you will get a
+ * score of some sort in this case.
+ *
+ * For a closed-vocabulary model, unknown words are impossible and
+ * thus have zero probability.  Therefore, if <code>word</code> is
+ * unknown, this function will return a "zero" log-probability, i.e. a
+ * large negative number.  To obtain this number for comparison, call
+ * ngram_zero().
+ */
+SPHINXBASE_EXPORT
+int32 ngram_score(ngram_model_t *model, const char *word, ...);
+
+/**
+ * Quick trigram score lookup.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_tg_score(ngram_model_t *model,
+                     int32 w3, int32 w2, int32 w1,
+                     int32 *n_used);
+
+/**
+ * Quick bigram score lookup.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_bg_score(ngram_model_t *model,
+                     int32 w2, int32 w1,
+                     int32 *n_used);
+
+/**
+ * Quick general N-Gram score lookup.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_ng_score(ngram_model_t *model, int32 wid, int32 *history,
+                     int32 n_hist, int32 *n_used);
+
+/**
+ * Get the "raw" log-probability for a general N-Gram.
+ *
+ * This returns the log-probability of an N-Gram, as defined in the
+ * language model file, before any language weighting, interpolation,
+ * or insertion penalty has been applied.
+ *
+ * @note When backing off to a unigram from a bigram or trigram, the
+ * unigram weight (interpolation with uniform) is not removed.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_prob(ngram_model_t *model, const char *word, ...);
+
+/**
+ * Quick "raw" probability lookup for a general N-Gram.
+ *
+ * See documentation for ngram_ng_score() and ngram_apply_weights()
+ * for an explanation of this.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_ng_prob(ngram_model_t *model, int32 wid, int32 *history,
+                    int32 n_hist, int32 *n_used);
+
+/**
+ * Convert score to "raw" log-probability.
+ *
+ * @note The unigram weight (interpolation with uniform) is not
+ * removed, since there is no way to know which order of N-Gram
+ * generated <code>score</code>.
+ * 
+ * @param model The N-Gram model from which score was obtained.
+ * @param score The N-Gram score to convert
+ * @return The raw log-probability value.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_score_to_prob(ngram_model_t *model, int32 score);
+
+/**
+ * Look up numerical word ID.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_wid(ngram_model_t *model, const char *word);
+
+/**
+ * Look up word string for numerical word ID.
+ */
+SPHINXBASE_EXPORT
+const char *ngram_word(ngram_model_t *model, int32 wid);
+
+/**
+ * Get the unknown word ID for a language model.
+ *
+ * Language models can be either "open vocabulary" or "closed
+ * vocabulary".  The difference is that the former assigns a fixed
+ * non-zero unigram probability to unknown words, while the latter
+ * does not allow unknown words (or, equivalently, it assigns them
+ * zero probability).  If this is a closed vocabulary model, this
+ * function will return NGRAM_INVALID_WID.
+ *
+ * @return The ID for the unknown word, or NGRAM_INVALID_WID if none
+ * exists.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_unknown_wid(ngram_model_t *model);
+
+/**
+ * Get the "zero" log-probability value for a language model.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_zero(ngram_model_t *model);
+
+/**
+ * Get the order of the N-gram model (i.e. the "N" in "N-gram")
+ */
+SPHINXBASE_EXPORT
+int32 ngram_model_get_size(ngram_model_t *model);
+
+/**
+ * Get the counts of the various N-grams in the model.
+ */
+SPHINXBASE_EXPORT
+int32 const *ngram_model_get_counts(ngram_model_t *model);
+
+/**
+ * M-gram iterator object.
+ */
+typedef struct ngram_iter_s ngram_iter_t;
+
+/**
+ * Iterate over all M-grams.
+ *
+ * @param model Language model to query.
+ * @param m Order of the M-Grams requested minus one (i.e. order of the history)
+ * @return An iterator over the requested M, or NULL if no N-grams of
+ * order M+1 exist.
+ */
+SPHINXBASE_EXPORT
+ngram_iter_t *ngram_model_mgrams(ngram_model_t *model, int m);
+
+/**
+ * Get an iterator over M-grams pointing to the specified M-gram.
+ */
+SPHINXBASE_EXPORT
+ngram_iter_t *ngram_iter(ngram_model_t *model, const char *word, ...);
+
+/**
+ * Get an iterator over M-grams pointing to the specified M-gram.
+ */
+SPHINXBASE_EXPORT
+ngram_iter_t *ngram_ng_iter(ngram_model_t *model, int32 wid, int32 *history, int32 n_hist);
+
+/**
+ * Get information from the current M-gram in an iterator.
+ *
+ * @param out_score Output: Score for this M-gram (including any word
+ *                          penalty and language weight).
+ * @param out_bowt Output: Backoff weight for this M-gram.
+ * @return read-only array of word IDs.
+ */
+SPHINXBASE_EXPORT
+int32 const *ngram_iter_get(ngram_iter_t *itor,
+                            int32 *out_score,
+                            int32 *out_bowt);
+
+/**
+ * Iterate over all M-gram successors of an M-1-gram.
+ *
+ * @param itor Iterator pointing to the M-1-gram to get successors of.
+ */
+SPHINXBASE_EXPORT
+ngram_iter_t *ngram_iter_successors(ngram_iter_t *itor);
+
+/**
+ * Advance an M-gram iterator.
+ */
+SPHINXBASE_EXPORT
+ngram_iter_t *ngram_iter_next(ngram_iter_t *itor);
+
+/**
+ * Terminate an M-gram iterator.
+ */
+SPHINXBASE_EXPORT
+void ngram_iter_free(ngram_iter_t *itor);
+
+/**
+ * Add a word (unigram) to the language model.
+ *
+ * @note The semantics of this are not particularly well-defined for
+ * model sets, and may be subject to change.  Currently this will add
+ * the word to all of the submodels
+ *
+ * @param model The model to add a word to.
+ * @param word Text of the word to add.
+ * @param weight Weight of this word relative to the uniform distribution.
+ * @return The word ID for the new word.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_model_add_word(ngram_model_t *model,
+                           const char *word, float32 weight);
+
+/**
+ * Read a class definition file and add classes to a language model.
+ *
+ * This function assumes that the class tags have already been defined
+ * as unigrams in the language model.  All words in the class
+ * definition will be added to the lexicon as special in-class words.
+ * For this reason is is necessary that they not have the same names
+ * as any words in the general unigram distribution.  The convention
+ * is to suffix them with ":class_tag", where class_tag is the class
+ * tag minus the enclosing square brackets.
+ *
+ * @return 0 for success, <0 for error
+ */
+SPHINXBASE_EXPORT
+int32 ngram_model_read_classdef(ngram_model_t *model,
+                                const char *file_name);
+
+/**
+ * Add a new class to a language model.
+ *
+ * If <code>classname</code> already exists in the unigram set for
+ * <code>model</code>, then it will be converted to a class tag, and
+ * <code>classweight</code> will be ignored.  Otherwise, a new unigram
+ * will be created as in ngram_model_add_word().
+ */
+SPHINXBASE_EXPORT
+int32 ngram_model_add_class(ngram_model_t *model,
+                            const char *classname,
+                            float32 classweight,
+                            char **words,
+                            const float32 *weights,
+                            int32 n_words);
+
+/**
+ * Add a word to a class in a language model.
+ *
+ * @param model The model to add a word to.
+ * @param classname Name of the class to add this word to.
+ * @param word Text of the word to add.
+ * @param weight Weight of this word relative to the within-class uniform distribution.
+ * @return The word ID for the new word.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_model_add_class_word(ngram_model_t *model,
+                                 const char *classname,
+                                 const char *word,
+                                 float32 weight);
+
+/**
+ * Create a set of language models sharing a common space of word IDs.
+ *
+ * This function creates a meta-language model which groups together a
+ * set of language models, synchronizing word IDs between them.  To
+ * use this language model, you can either select a submodel to use
+ * exclusively using ngram_model_set_select(), or interpolate
+ * between scores from all models.  To do the latter, you can either
+ * pass a non-NULL value of the <code>weights</code> parameter, or
+ * re-activate interpolation later on by calling
+ * ngram_model_set_interp().
+ *
+ * In order to make this efficient, there are some restrictions on the
+ * models that can be grouped together.  The most important (and
+ * currently the only) one is that they <strong>must</strong> all
+ * share the same log-math parameters.
+ *
+ * @param config Any configuration parameters to be shared between models.
+ * @param models Array of pointers to previously created language models.
+ * @param names Array of strings to use as unique identifiers for LMs.
+ * @param weights Array of weights to use in interpolating LMs, or NULL
+ *                for no interpolation.
+ * @param n_models Number of elements in the arrays passed to this function.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_set_init(cmd_ln_t *config,
+                                    ngram_model_t **models,
+                                    char **names,
+                                    const float32 *weights,
+                                    int32 n_models);
+
+/**
+ * Read a set of language models from a control file.
+ *
+ * This file creates a language model set from a "control file" of
+ * the type used in Sphinx-II and Sphinx-III.
+ * File format (optional stuff is indicated by enclosing in []):
+ * 
+ * <pre>
+ *   [{ LMClassFileName LMClassFilename ... }]
+ *   TrigramLMFileName LMName [{ LMClassName LMClassName ... }]
+ *   TrigramLMFileName LMName [{ LMClassName LMClassName ... }]
+ *   ...
+ * (There should be whitespace around the { and } delimiters.)
+ * </pre>
+ * 
+ * This is an extension of the older format that had only TrigramLMFilenName
+ * and LMName pairs.  The new format allows a set of LMClass files to be read
+ * in and referred to by the trigram LMs.
+ * 
+ * No "comments" allowed in this file.
+ *
+ * @param config Configuration parameters.
+ * @param lmctlfile Path to the language model control file.
+ * @param lmath Log-math parameters to use for probability
+ *              calculations.  Ownership of this object is assumed by
+ *              the newly created ngram_model_t, and you should not
+ *              attempt to free it manually.  If you wish to reuse it
+ *              elsewhere, you must retain it with logmath_retain().
+ * @return newly created language model set.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_set_read(cmd_ln_t *config,
+                                    const char *lmctlfile,
+                                    logmath_t *lmath);
+
+/**
+ * Returns the number of language models in a set.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_model_set_count(ngram_model_t *set);
+
+/**
+ * Iterator over language models in a set.
+ */
+typedef struct ngram_model_set_iter_s ngram_model_set_iter_t;
+
+/**
+ * Begin iterating over language models in a set.
+ *
+ * @return iterator pointing to the first language model, or NULL if no models remain.
+ */
+SPHINXBASE_EXPORT
+ngram_model_set_iter_t *ngram_model_set_iter(ngram_model_t *set);
+
+/**
+ * Move to the next language model in a set.
+ *
+ * @return iterator pointing to the next language model, or NULL if no models remain.
+ */
+SPHINXBASE_EXPORT
+ngram_model_set_iter_t *ngram_model_set_iter_next(ngram_model_set_iter_t *itor);
+
+/**
+ * Finish iteration over a langauge model set.
+ */
+SPHINXBASE_EXPORT
+void ngram_model_set_iter_free(ngram_model_set_iter_t *itor);
+
+/**
+ * Get language model and associated name from an iterator.
+ *
+ * @param itor the iterator
+ * @param lmname Output: string name associated with this language model.
+ * @return Language model pointed to by this iterator.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_set_iter_model(ngram_model_set_iter_t *itor,
+                                          char const **lmname);
+
+/**
+ * Select a single language model from a set for scoring.
+ *
+ * @return the newly selected language model, or NULL if no language
+ * model by that name exists.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_set_select(ngram_model_t *set,
+                                      const char *name);
+
+/**
+ * Look up a language model by name from a set.
+ *
+ * @return language model corresponding to <code>name</code>, or NULL
+ * if no language model by that name exists.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_set_lookup(ngram_model_t *set,
+                                      const char *name);
+
+/**
+ * Get the current language model name, if any.
+ */
+SPHINXBASE_EXPORT
+const char *ngram_model_set_current(ngram_model_t *set);
+
+/**
+ * Set interpolation weights for a set and enables interpolation.
+ *
+ * If <code>weights</code> is NULL, any previously initialized set of
+ * weights will be used.  If no weights were specified to
+ * ngram_model_set_init(), then a uniform distribution will be used.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_set_interp(ngram_model_t *set,
+                                      const char **names,
+                                      const float32 *weights);
+
+/**
+ * Add a language model to a set.
+ *
+ * @param set The language model set to add to.
+ * @param model The language model to add.
+ * @param name The name to associate with this model.
+ * @param weight Interpolation weight for this model, relative to the
+ *               uniform distribution.  1.0 is a safe value.
+ * @param reuse_widmap Reuse the existing word-ID mapping in
+ * <code>set</code>.  Any new words present in <code>model</code>
+ * will not be added to the word-ID mapping in this case.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_set_add(ngram_model_t *set,
+                                   ngram_model_t *model,
+                                   const char *name,
+                                   float32 weight,
+                                   int reuse_widmap);
+
+/**
+ * Remove a language model from a set.
+ *
+ * @param set The language model set to remove from.
+ * @param name The name associated with the model to remove.
+ * @param reuse_widmap Reuse the existing word-ID mapping in
+ *                     <code>set</code>.
+ */
+SPHINXBASE_EXPORT
+ngram_model_t *ngram_model_set_remove(ngram_model_t *set,
+                                      const char *name,
+                                      int reuse_widmap);
+
+/**
+ * Set the word-to-ID mapping for this model set.
+ */
+SPHINXBASE_EXPORT
+void ngram_model_set_map_words(ngram_model_t *set,
+                               const char **words,
+                               int32 n_words);
+
+/**
+ * Query the word-ID mapping for the current language model.
+ *
+ * @return the local word ID in the current language model, or
+ * NGRAM_INVALID_WID if <code>set_wid</code> is invalid or
+ * interpolation is enabled.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_model_set_current_wid(ngram_model_t *set,
+                                  int32 set_wid);
+
+/**
+ * Test whether a word ID corresponds to a known word in the current
+ * state of the language model set.
+ *
+ * @return If there is a current language model, returns non-zero if
+ * <code>set_wid</code> corresponds to a known word in that language
+ * model.  Otherwise, returns non-zero if <code>set_wid</code>
+ * corresponds to a known word in any language model.
+ */
+SPHINXBASE_EXPORT
+int32 ngram_model_set_known_wid(ngram_model_t *set, int32 set_wid);
+
+/**
+ * Flush any cached N-Gram information 
+ *
+ * Some types of models cache trigram or other N-Gram information to
+ * speed repeated access to N-Grams with shared histories.  This
+ * function flushes the cache so as to avoid dynamic memory leaks.
+ */
+SPHINXBASE_EXPORT
+void ngram_model_flush(ngram_model_t *lm);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __NGRAM_MODEL_H__ */
diff --git a/include/sphinxbase/pio.h b/include/sphinxbase/pio.h
new file mode 100644 (file)
index 0000000..9347cb0
--- /dev/null
@@ -0,0 +1,288 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * pio.h -- Packaged I/O routines.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: pio.h,v $
+ * Revision 1.3  2005/06/22 08:00:09  arthchan2003
+ * Completed all doxygen documentation on file description for libs3decoder/libutil/libs3audio and programs.
+ *
+ * Revision 1.2  2005/06/22 03:09:52  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Added  keyword.
+ *
+ * Revision 1.2  2005/06/16 00:14:08  archan
+ * Added const keyword to file argument for file_open
+ *
+ * Revision 1.1  2005/06/15 06:11:03  archan
+ * sphinx3 to s3.generic: change io.[ch] to pio.[ch]
+ *
+ * Revision 1.5  2005/06/15 04:21:46  archan
+ * 1, Fixed doxygen-documentation, 2, Add  keyword such that changes will be logged into a file.
+ *
+ * Revision 1.4  2005/04/20 03:49:32  archan
+ * Add const to string argument of myfopen.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 08-Dec-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added stat_mtime().
+ * 
+ * 11-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added _myfopen() and myfopen macro.
+ * 
+ * 05-Sep-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Started.
+ */
+
+
+#ifndef _LIBUTIL_IO_H_
+#define _LIBUTIL_IO_H_
+
+#include <stdio.h>
+#if !defined(_WIN32_WCE) && !(defined(__ADSPBLACKFIN__) && !defined(__linux__))
+#include <sys/stat.h>
+#endif
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+/** \file pio.h
+ * \brief file IO related operations.  
+ *
+ * Custom fopen with error checking is implemented. fopen_comp can
+ * open a file with .z, .Z, .gz or .GZ extension
+ *  
+ * WARNING: Usage of stat_retry will results in 100s of waiting time
+ * if the file doesn't exist.  
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Like fopen, but use popen and zcat if it is determined that "file" is compressed
+ * (i.e., has a .z, .Z, .gz, or .GZ extension).
+ */
+SPHINXBASE_EXPORT
+FILE *fopen_comp (const char *file,            /**< In: File to be opened */
+                 const char *mode,             /**< In: "r" or "w", as with normal fopen */
+                 int32 *ispipe /**< Out: On return *ispipe is TRUE iff file
+                                  was opened via a pipe */
+       );
+
+/**
+ * Close a file opened using fopen_comp.
+ */
+SPHINXBASE_EXPORT
+void fclose_comp (FILE *fp,            /**< In: File pointer to be closed */
+                 int32 ispipe  /**< In: ispipe argument that was returned by the
+                                  corresponding fopen_comp() call */
+       );
+
+/**
+ * Open a file for reading, but if file not present try to open compressed version (if
+ * file is uncompressed, and vice versa).
+ */
+SPHINXBASE_EXPORT
+FILE *fopen_compchk (const char *file, /**< In: File to be opened */
+                    int32 *ispipe      /**< Out: On return *ispipe is TRUE iff file
+                                          was opened via a pipe */
+       );
+
+/**
+ * Wrapper around fopen to check for failure and E_FATAL if failed.
+ */
+SPHINXBASE_EXPORT
+FILE *_myfopen(const char *file, const char *mode,
+              const char *pgm, int32 line);    /* In: __FILE__, __LINE__ from where called */
+#define myfopen(file,mode)     _myfopen((file),(mode),__FILE__,__LINE__)
+
+
+/**
+ * NFS file reads seem to fail now and then.  Use the following functions in place of
+ * the regular fread.  It retries failed freads several times and quits only if all of
+ * them fail.  Be aware, however, that even normal failures such as attempting to read
+ * beyond EOF will trigger such retries, wasting about a minute in retries.
+ * Arguments identical to regular fread.
+ */
+SPHINXBASE_EXPORT
+int32 fread_retry(void *pointer, int32 size, int32 num_items, FILE *stream);
+
+/**
+ * Read a line of arbitrary length from a file and return it as a
+ * newly allocated string.
+ *
+ * @deprecated Use line iterators instead.
+ *
+ * @param stream The file handle to read from.
+ * @param out_len Output: if not NULL, length of the string read.
+ * @return allocated string containing the line, or NULL on error or EOF.
+ */
+SPHINXBASE_EXPORT
+char *fread_line(FILE *stream, size_t *out_len);
+
+/**
+ * Line iterator for files.
+ */
+typedef struct lineiter_t {
+       char *buf;
+       size_t bsiz;
+       size_t len;
+       FILE *fh;
+} lineiter_t;
+
+/**
+ * Start reading lines from a file.
+ */
+SPHINXBASE_EXPORT
+lineiter_t *lineiter_start(FILE *fh);
+
+/**
+ * Move to the next line in the file.
+ */
+SPHINXBASE_EXPORT
+lineiter_t *lineiter_next(lineiter_t *li);
+
+/**
+ * Stop reading lines from a file.
+ */
+SPHINXBASE_EXPORT
+void lineiter_free(lineiter_t *li);
+
+
+#ifdef _WIN32_WCE
+/* Fake this for WinCE which has no stat() */
+#include <windows.h>
+struct stat {
+    DWORD st_mtime;
+    DWORD st_size;
+};
+#endif /* _WIN32_WCE */
+
+#if defined(__ADSPBLACKFIN__) && !defined(__linux__)
+struct stat {
+    int32 st_mtime;
+    int32 st_size;
+};
+
+#endif
+
+/**
+ * Bitstream encoder - for writing compressed files.
+ */
+typedef struct bit_encode_s bit_encode_t;
+
+/**
+ * Attach bitstream encoder to a file.
+ */
+bit_encode_t *bit_encode_attach(FILE *outfh);
+
+/**
+ * Retain pointer to a bit encoder.
+ */
+bit_encode_t *bit_encode_retain(bit_encode_t *be);
+
+/**
+ * Release pointer to a bit encoder.
+ *
+ * Note that this does NOT flush any leftover bits.
+ */
+int bit_encode_free(bit_encode_t *be);
+
+/**
+ * Write bits to encoder.
+ */
+int bit_encode_write(bit_encode_t *be, unsigned char const *bits, int nbits);
+
+/**
+ * Write lowest-order bits of codeword to encoder.
+ */
+int bit_encode_write_cw(bit_encode_t *be, uint32 codeword, int nbits);
+
+/**
+ * Flush any unwritten bits, zero-padding if necessary.
+ */
+int bit_encode_flush(bit_encode_t *be);
+
+/**
+ * There is no bitstream decoder, because a stream abstraction is too
+ * slow.  Instead we read blocks of bits and treat them as bitvectors.
+ */
+
+/**
+ * Like fread_retry, but for stat.  Arguments identical to regular stat.
+ * Return value: 0 if successful, -1 if stat failed several attempts.
+ */
+SPHINXBASE_EXPORT
+int32 stat_retry (const char *file, struct stat *statbuf);
+
+/**
+ * Return time of last modification for the given file, or -1 if stat fails.
+ */
+
+SPHINXBASE_EXPORT
+int32 stat_mtime (const char *file);
+
+/**
+ * Create a directory and all of its parent directories, as needed.
+ *
+ * @return 0 on success, <0 on failure.
+ */
+SPHINXBASE_EXPORT
+int build_directory(const char *path);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/prim_type.h b/include/sphinxbase/prim_type.h
new file mode 100644 (file)
index 0000000..d21581c
--- /dev/null
@@ -0,0 +1,185 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * prim_type.h -- Primitive types; more machine-independent.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: prim_type.h,v $
+ * Revision 1.12  2005/10/05 00:31:14  dhdfu
+ * Make int8 be explicitly signed (signedness of 'char' is
+ * architecture-dependent).  Then make a bunch of things use uint8 where
+ * signedness is unimportant, because on the architecture where 'char' is
+ * unsigned, it is that way for a reason (signed chars are slower).
+ *
+ * Revision 1.11  2005/06/22 03:10:23  arthchan2003
+ * Added  keyword.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 12-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Added arraysize_t, point_t, fpoint_t.
+ * 
+ * 01-Feb-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Added anytype_t.
+ * 
+ * 08-31-95    M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Created.
+ */
+
+
+#ifndef _LIBUTIL_PRIM_TYPE_H_
+#define _LIBUTIL_PRIM_TYPE_H_
+
+/**
+ * @file prim_type.h
+ * @brief Basic type definitions used in Sphinx. 
+ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+} /* Fool Emacs into not indenting things. */
+#endif
+
+#include <sphinx_config.h>
+
+/* Define some things for VisualDSP++ */
+#if defined(__ADSPBLACKFIN__) && !defined(__GNUC__)
+# ifndef HAVE_LONG_LONG
+#  define HAVE_LONG_LONG
+# endif
+# ifndef ssize_t
+typedef signed int ssize_t;
+# endif
+# define SIZEOF_LONG_LONG 8
+# define __BIGSTACKVARIABLE__ static
+#else /* Not VisualDSP++ */
+# define __BIGSTACKVARIABLE__
+#endif
+
+/**
+ * Union of basic types.
+ */
+typedef union anytype_s {
+    void *ptr;
+    long i;
+    unsigned long ui;
+    double fl;
+} anytype_t;
+
+/*
+ * Assume P64 or LP64.  If you need to port this to a DSP, let us know.
+ */
+typedef int            int32;
+typedef short          int16;
+typedef signed char    int8;
+typedef unsigned int   uint32;
+typedef unsigned short uint16;
+typedef unsigned char  uint8;
+typedef float          float32;
+typedef double         float64;
+#if defined(_MSC_VER)
+typedef __int64                 int64;
+typedef unsigned __int64 uint64;
+#elif defined(HAVE_LONG_LONG) && (SIZEOF_LONG_LONG == 8)
+typedef long long         int64;
+typedef unsigned long long uint64;
+#else /* !HAVE_LONG_LONG && SIZEOF_LONG_LONG == 8 */
+typedef double          int64;
+typedef double          uint64;
+#endif /* !HAVE_LONG_LONG && SIZEOF_LONG_LONG == 8 */
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef NULL
+#define NULL (void *)0
+#endif
+
+/* These really ought to come from <limits.h>, but not everybody has that. */
+/* Useful constants */
+#define MAX_INT32              ((int32) 0x7fffffff)
+#define MAX_INT16              ((int16) 0x00007fff)
+#define MAX_INT8               ((int8)  0x0000007f)
+
+#define MAX_NEG_INT32          ((int32) 0x80000000)
+#define MAX_NEG_INT16          ((int16) 0xffff8000)
+#define MAX_NEG_INT8           ((int8)  0xffffff80)
+
+#define MAX_UINT32             ((uint32) 0xffffffff)
+#define MAX_UINT16             ((uint16) 0x0000ffff)
+#define MAX_UINT8              ((uint8)  0x000000ff)
+
+/* The following are approximate; IEEE floating point standards might quibble! */
+#define MAX_POS_FLOAT32                3.4e+38f
+#define MIN_POS_FLOAT32                1.2e-38f        /* But not 0 */
+#define MAX_POS_FLOAT64                1.8e+307
+#define MIN_POS_FLOAT64                2.2e-308
+
+#define MAX_IEEE_NORM_POS_FLOAT32        3.4e+38f
+#define MIN_IEEE_NORM_POS_FLOAT32        1.2e-38f
+#define MIN_IEEE_NORM_NEG_FLOAT32       -3.4e+38f
+#define MAX_IEEE_NORM_POS_FLOAT64        1.8e+307
+#define MIN_IEEE_NORM_POS_FLOAT64        2.2e-308
+#define MIN_IEEE_NORM_NEG_FLOAT64       -1.8e+307
+
+/* Will the following really work?? */
+#define MAX_NEG_FLOAT32                ((float32) (-MAX_POS_FLOAT32))
+#define MIN_NEG_FLOAT32                ((float32) (-MIN_POS_FLOAT32))
+#define MAX_NEG_FLOAT64                ((float64) (-MAX_POS_FLOAT64))
+#define MIN_NEG_FLOAT64                ((float64) (-MIN_POS_FLOAT64))
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/profile.h b/include/sphinxbase/profile.h
new file mode 100644 (file)
index 0000000..ddecfb6
--- /dev/null
@@ -0,0 +1,231 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * profile.h -- For timing and event counting.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: profile.h,v $
+ * Revision 1.10  2005/06/22 03:10:59  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Added  keyword.
+ *
+ * Revision 1.5  2005/06/15 04:21:47  archan
+ * 1, Fixed doxygen-documentation, 2, Add  keyword such that changes will be logged into a file.
+ *
+ * Revision 1.4  2005/04/25 19:22:48  archan
+ * Refactor out the code of rescoring from lexical tree. Potentially we want to turn off the rescoring if we need.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 11-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ptmr_init().
+ * 
+ * 19-Jun-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created from earlier Sphinx-3 version.
+ */
+
+
+#ifndef _LIBUTIL_PROFILE_H_
+#define _LIBUTIL_PROFILE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+} /* Fool Emacs into not indenting things. */
+#endif
+  
+/** \file profile.h
+ * \brief Implementation of profiling, include counting , timing, cpu clock checking
+ *  
+ * Currently, function host_endian is also in this function. It is
+ * not documented.  
+ */
+
+#include <stdio.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+
+/**
+ * \struct pctr_t 
+ *
+ * Generic event counter for profiling.  User is responsible for allocating an array
+ * of the desired number.  There should be a sentinel with name = NULL.
+ */
+typedef struct {
+       char *name;             /**< Counter print name; NULL 
+                                  terminates array of counters
+                                  Used by pctr_print_all */
+       int32 count;            /**< Counter value */
+} pctr_t;
+
+/**
+ * operations of pctr_t
+ */
+
+/**
+ * Initialize a counter
+ * @return an initialized counter 
+ */ 
+SPHINXBASE_EXPORT
+pctr_t* pctr_new (
+       char *name   /**< The name of the counter */
+       );
+
+/**
+ * Reset a counter
+ */ 
+
+SPHINXBASE_EXPORT
+void pctr_reset (pctr_t *ctr  /**< A pointer of a counter */
+       );
+
+/**
+ * Print a counter
+ */ 
+SPHINXBASE_EXPORT
+void pctr_print(FILE *fp,      /**< A file pointer */
+               pctr_t *ctr   /**< A pointer of a counter */
+       );
+
+/**
+ * Increment a counter
+ */ 
+SPHINXBASE_EXPORT
+void pctr_increment (pctr_t *ctr, /**< A pointer of a counter */
+                    int32 inc   /**< The increment of the counter */
+       );
+
+/**
+   Free the counter 
+*/
+SPHINXBASE_EXPORT
+void pctr_free(pctr_t* ctr /**< A pointer of a counter */ 
+       );
+
+
+/**
+ * \struct ptmr_t
+ * Generic timer structures and functions for coarse-grained performance measurements
+ * using standard system calls.
+ */
+typedef struct {
+       const char *name;               /**< Timer print name; NULL terminates an array of timers.
+                                          Used by ptmr_print_all */
+       float64 t_cpu;          /**< CPU time accumulated since most recent reset op */
+       float64 t_elapsed;              /**< Elapsed time accumulated since most recent reset */
+       float64 t_tot_cpu;              /**< Total CPU time since creation */
+       float64 t_tot_elapsed;  /**< Total elapsed time since creation */
+       float64 start_cpu;              /**< ---- FOR INTERNAL USE ONLY ---- */
+       float64 start_elapsed;  /**< ---- FOR INTERNAL USE ONLY ---- */
+} ptmr_t;
+
+
+
+/** Start timing using tmr */
+SPHINXBASE_EXPORT
+void ptmr_start (ptmr_t *tmr /**< The timer*/
+       );
+
+/** Stop timing and accumulate tmr->{t_cpu, t_elapsed, t_tot_cpu, t_tot_elapsed} */
+SPHINXBASE_EXPORT
+void ptmr_stop (ptmr_t *tmr  /**< The timer*/
+       );
+
+/** Reset tmr->{t_cpu, t_elapsed} to 0.0 */
+SPHINXBASE_EXPORT
+void ptmr_reset (ptmr_t *tmr  /**< The timer*/
+       );
+
+/** Reset tmr->{t_cpu, t_elapsed, t_tot_cpu, t_tot_elapsed} to 0.0 
+ */
+SPHINXBASE_EXPORT
+void ptmr_init (ptmr_t *tmr /**< The timer*/
+       );
+
+
+/**
+ * Reset t_cpu, t_elapsed of all timer modules in array tmr[] to 0.0.
+ * The array should be terminated with a sentinel with .name = NULL.
+ */
+SPHINXBASE_EXPORT
+void ptmr_reset_all (ptmr_t *tmr /**< The timer*/
+       );
+
+/**
+ * Print t_cpu for all timer modules in tmr[], normalized by norm (i.e., t_cpu/norm).
+ * The array should be terminated with a sentinel with .name = NULL.
+ */
+SPHINXBASE_EXPORT
+void ptmr_print_all (FILE *fp,    /**< The file pointer */
+                    ptmr_t *tmr, /**< The timer*/
+                    float64 norm
+       );
+
+
+/**
+ * Return the processor clock speed (in MHz); only available on some machines (Alphas).
+ * The dummy argument can be any integer value.
+ */
+SPHINXBASE_EXPORT
+int32 host_pclk (int32 dummy);
+
+
+/*
+ * Check the native byte-ordering of the machine by writing a magic
+ * number to a temporary file and reading it back.  * Return value:
+ * 0 if BIG-ENDIAN, 1 if LITTLE-ENDIAN, -1 if error.  
+ */
+SPHINXBASE_EXPORT
+int32 host_endian ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/sphinxbase/sbthread.h b/include/sphinxbase/sbthread.h
new file mode 100644 (file)
index 0000000..9154dfe
--- /dev/null
@@ -0,0 +1,221 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2008 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * @file sbthread.h 
+ * @brief Simple portable thread functions.
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ **/
+
+#ifndef __SBTHREAD_H__
+#define __SBTHREAD_H__
+
+#include <sphinx_config.h>
+
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/cmd_ln.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Thread object.
+ */
+typedef struct sbthread_s sbthread_t;
+
+/**
+ * Asynchronous message queue object.
+ */
+typedef struct sbmsgq_s sbmsgq_t;
+
+/**
+ * Mutex (critical section) object.
+ */
+typedef struct sbmtx_s sbmtx_t;
+
+/**
+ * Event object.
+ */
+typedef struct sbevent_s sbevent_t;
+
+/**
+ * Entry point for a thread.
+ */
+typedef int (*sbthread_main)(sbthread_t *th);
+
+/**
+ * Start a new thread.
+ */
+SPHINXBASE_EXPORT
+sbthread_t *sbthread_start(cmd_ln_t *config, sbthread_main func, void *arg);
+
+/**
+ * Wait for a thread to complete.
+ */
+SPHINXBASE_EXPORT
+int sbthread_wait(sbthread_t *th);
+
+/**
+ * Free a thread object.
+ */
+SPHINXBASE_EXPORT
+void sbthread_free(sbthread_t *th);
+
+/**
+ * Get configuration object from a thread.
+ */
+SPHINXBASE_EXPORT
+cmd_ln_t *sbthread_config(sbthread_t *th);
+
+/**
+ * Get argument pointer from a thread.
+ */
+SPHINXBASE_EXPORT
+void *sbthread_arg(sbthread_t *th);
+
+/**
+ * Get message queue from a thread.
+ */
+SPHINXBASE_EXPORT
+sbmsgq_t *sbthread_msgq(sbthread_t *th);
+
+/**
+ * Wait for a thread to complete.
+ */
+SPHINXBASE_EXPORT
+int sbthread_wait(sbthread_t *th);
+
+/**
+ * Send an asynchronous message to a thread.
+ *
+ * Each thread gets a message queue by default, so this is just a
+ * wrapper around sbmsgq_send().
+ */
+SPHINXBASE_EXPORT
+int sbthread_send(sbthread_t *th, size_t len, void const *data);
+
+/**
+ * Create a message queue.
+ *
+ * @param depth Depth of the queue.
+ */
+SPHINXBASE_EXPORT
+sbmsgq_t *sbmsgq_init(size_t depth);
+
+/**
+ * Free a message queue.
+ */
+SPHINXBASE_EXPORT
+void sbmsgq_free(sbmsgq_t *q);
+
+/**
+ * Post a message to a queue.
+ */
+SPHINXBASE_EXPORT
+int sbmsgq_send(sbmsgq_t *q, size_t len, void const *data);
+
+/**
+ * Wait for a message from a queue.
+ */
+SPHINXBASE_EXPORT
+void *sbmsgq_wait(sbmsgq_t *q, size_t *out_len, int sec, int nsec);
+
+/**
+ * Create a mutex.
+ */
+SPHINXBASE_EXPORT
+sbmtx_t *sbmtx_init(void);
+
+/**
+ * Try to acquire a mutex.
+ */
+SPHINXBASE_EXPORT
+int sbmtx_trylock(sbmtx_t *mtx);
+
+/**
+ * Acquire a mutex.
+ */
+SPHINXBASE_EXPORT
+int sbmtx_lock(sbmtx_t *mtx);
+
+/**
+ * Release a mutex.
+ */
+SPHINXBASE_EXPORT
+int sbmtx_unlock(sbmtx_t *mtx);
+
+/**
+ * Dispose of a mutex.
+ */
+SPHINXBASE_EXPORT
+void sbmtx_free(sbmtx_t *mtx);
+
+/**
+ * Initialize an event.
+ */
+SPHINXBASE_EXPORT
+sbevent_t *sbevent_init(void);
+
+/**
+ * Free an event.
+ */
+SPHINXBASE_EXPORT
+void sbevent_free(sbevent_t *evt);
+
+/**
+ * Signal an event.
+ */
+SPHINXBASE_EXPORT
+int sbevent_signal(sbevent_t *evt);
+
+/**
+ * Wait for an event to be signalled.
+ */
+SPHINXBASE_EXPORT
+int sbevent_wait(sbevent_t *evt, int sec, int nsec);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __SBTHREAD_H__ */
diff --git a/include/sphinxbase/sphinxbase_export.h b/include/sphinxbase/sphinxbase_export.h
new file mode 100644 (file)
index 0000000..dead6b2
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef __SPHINXBASE_EXPORT_H__
+#define __SPHINXBASE_EXPORT_H__
+
+/* Win32/WinCE DLL gunk */
+#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(__SYMBIAN32__)
+#if defined(SPHINXBASE_EXPORTS) /* Visual Studio */
+#define SPHINXBASE_EXPORT __declspec(dllexport)
+#elif defined(__CYGWIN__) /* Disable this on Cygwin, it doesn't work */
+#define SPHINXBASE_EXPORT
+#else
+#define SPHINXBASE_EXPORT __declspec(dllimport)
+#endif
+#else /* !_WIN32 */
+#define SPHINXBASE_EXPORT
+#endif
+
+#endif /* __SPHINXBASE_EXPORT_H__ */
diff --git a/include/sphinxbase/strfuncs.h b/include/sphinxbase/strfuncs.h
new file mode 100644 (file)
index 0000000..64874c8
--- /dev/null
@@ -0,0 +1,161 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1995-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * @file strfuncs.h
+ * @brief Miscellaneous useful string functions
+ */
+
+#ifndef __SB_STRFUNCS_H__
+#define __SB_STRFUNCS_H__
+
+#include <stdarg.h>
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+/**
+ * Concatenate a NULL-terminated argument list of strings, returning a
+ * newly allocated string.
+ **/
+SPHINXBASE_EXPORT
+char *string_join(const char *base, ...);
+
+/**
+ * Which end of a string to operate on for string_trim().
+ */
+enum string_edge_e {
+    STRING_START,      /**< Beginning of string. */
+    STRING_END,                /**< End of string. */
+    STRING_BOTH                /**< Both ends of string. */
+};
+
+/**
+ * Remove whitespace from a string, modifying it in-place.
+ *
+ * @param string string to trim, contents will be modified.
+ * @param which one of STRING_START, STRING_END, or STRING_BOTH.
+ */
+SPHINXBASE_EXPORT
+char *string_trim(char *string, enum string_edge_e which);
+
+/**
+ * Locale independent version of atof().
+ *
+ * This function behaves like atof() in the "C" locale.  Switching
+ * locale in a threaded program is extremely uncool, therefore we need
+ * this since we pass floats as strings in 1000 different places.
+ */
+SPHINXBASE_EXPORT
+double atof_c(char const *str);
+
+SPHINXBASE_EXPORT
+uint32 utf8_decode(uint32 *state, uint32 *codep, uint32 *byte);
+
+/* FIXME: Both of these string splitting functions basically suck.  I
+ have attempted to fix them as best I can.  (dhuggins@cs, 20070808) */
+
+/** 
+ * Convert a line to an array of "words", based on whitespace separators.  A word
+ * is a string with no whitespace chars in it.
+ * Note that the string line is modified as a result: NULL chars are placed after
+ * every word in the line.
+ * Return value: No. of words found; -1 if no. of words in line exceeds n_wptr.
+ */
+SPHINXBASE_EXPORT
+int32 str2words (char *line,   /**< In/Out: line to be parsed.  This
+                                  string will be modified! (NUL
+                                  characters inserted at word
+                                  boundaries) */
+                char **wptr,   /**< In/Out: Array of pointers to
+                                  words found in line.  The array
+                                  must be allocated by the caller.
+                                  It may be NULL in which case the
+                                  number of words will be counted.
+                                  This allows you to allcate it to
+                                  the proper size, e.g.:
+                                  
+                                  n = str2words(line, NULL, 0);
+                                  wptr = ckd_calloc(n, sizeof(*wptr));
+                                  str2words(line, wptr, n);
+                               */
+                int32 n_wptr   /**< In: Size of wptr array, ignored
+                                  if wptr == NULL */
+       );
+
+/**
+ * Yet another attempt at a clean "next-word-in-string" function.  See arguments below.
+ * @return Length of word returned, or -1 if nothing found.
+ * This allows you to scan through a line:
+ *
+ * <pre>
+ * while ((n = nextword(line, delim, &word, &delimfound)) >= 0) {
+ *     ... do something with word ..
+ *     word[n] = delimfound;
+ *     line = word + n;
+ * }
+ * </pre>
+ */
+SPHINXBASE_EXPORT
+int32 nextword (char *line, /**< Input: String being searched for next word.
+                              Will be modified by this function (NUL characters inserted) */
+               const char *delim, /**< Input: A word, if found, must be delimited at either
+                                end by a character from this string (or at the end
+                                by the NULL char) */
+               char **word,/**< Output: *word = ptr within line to beginning of first
+                                word, if found.  Delimiter at the end of word replaced
+                                with the NULL char. */
+               char *delimfound /**< Output: *delimfound = original delimiter found at the end
+                                   of the word.  (This way, the caller can restore the
+                                   delimiter, preserving the original string.) */
+       );
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __SB_STRFUNCS_H__ */
diff --git a/include/sphinxbase/unlimit.h b/include/sphinxbase/unlimit.h
new file mode 100644 (file)
index 0000000..9a5d89a
--- /dev/null
@@ -0,0 +1,90 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * unlimit.h -- "unlimit" the memory usage of program.
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.1  2006/04/05  20:27:30  dhdfu
+ * A Great Reorganzation of header files and executables
+ * 
+ * Revision 1.6  2005/06/22 03:12:31  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Added  keyword.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 03-Oct-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University.
+ *             Copied from Sphinx-II sources.
+ */
+
+
+#ifndef _LIBUTIL_UNLIMIT_H_
+#define _LIBUTIL_UNLIMIT_H_
+
+/** \file unlimit.h
+    \brief (Obsolete, keep it for compilation purposes) 
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+} /* Fool Emacs into not indenting things. */
+#endif
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+
+/* To remove resource (memory) usage restrictions */
+SPHINXBASE_EXPORT
+void unlimit ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/include/sphinxbase/yin.h b/include/sphinxbase/yin.h
new file mode 100644 (file)
index 0000000..dd59c62
--- /dev/null
@@ -0,0 +1,117 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+ * Copyright (c) 2008 Beyond Access, Inc.  All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY BEYOND ACCESS, INC. ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL BEYOND ACCESS, INC.  NOR
+ * ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @file yin.h
+ * @brief Implementation of pitch estimation
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ *
+ * This implements part of the YIN algorithm:
+ *
+ * "YIN, a fundamental frequency estimator for speech and music".
+ * Alain de Cheveigné and Hideki Kawahara.  Journal of the Acoustical
+ * Society of America, 111 (4), April 2002.
+ */
+
+#ifndef __YIN_H__
+#define __YIN_H__
+
+#ifdef __cplusplus
+extern "C"
+#endif
+#if 0
+} /* Fool Emacs. */
+#endif
+
+/* Win32/WinCE DLL gunk */
+#include <sphinxbase/sphinxbase_export.h>
+#include <sphinxbase/prim_type.h>
+
+/**
+ * Frame-based moving-window pitch estimator.
+ */
+typedef struct yin_s yin_t;
+
+/**
+ * Initialize moving-window pitch estimation.
+ */
+SPHINXBASE_EXPORT
+yin_t *yin_init(int frame_size, float search_threshold,
+                float search_range, int smooth_window);
+
+/**
+ * Free a moving-window pitch estimator.
+ */
+SPHINXBASE_EXPORT
+void yin_free(yin_t *pe);
+
+/**
+ * Start processing an utterance.
+ */
+SPHINXBASE_EXPORT
+void yin_start(yin_t *pe);
+
+/**
+ * Mark the end of an utterance.
+ */
+SPHINXBASE_EXPORT
+void yin_end(yin_t *pe);
+
+/**
+ * Feed a frame of data to the pitch estimator.
+ *
+ * @param pe Pitch estimator.
+ * @param frame Frame of <code>frame_size</code> (see
+ * yin_init()) samples of audio data.
+ */
+SPHINXBASE_EXPORT
+void yin_write(yin_t *pe, int16 const *frame);
+
+/**
+ * Read a raw estimated pitch value from the pitch estimator.
+ *
+ * @param pe Pitch estimator.
+ * @param out_period Output: an estimate of the period (*not* the pitch)
+ *                  of the signal in samples.
+ * @param out_bestdiff Output: the minimum normalized difference value
+ *                     associated with <code>*out_pitch</code>, in Q15
+ *                     format (i.e. scaled by 32768).  This can be
+ *                     interpreted as one minus the probability of voicing.
+ * @return Non-zero if enough data was avaliable to return a pitch
+ *         estimate, zero otherwise.
+ */
+SPHINXBASE_EXPORT
+int yin_read(yin_t *pe, uint16 *out_period, uint16 *out_bestdiff);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __YIN_H__ */
+
diff --git a/include/win32/config.h b/include/win32/config.h
new file mode 100644 (file)
index 0000000..536cf45
--- /dev/null
@@ -0,0 +1,67 @@
+/* include/sphinx_config.h, defaults for Win32 */
+/* sphinx_config.h: Externally visible configuration parameters for
+ * SphinxBase.
+ */
+
+/* Use ALSA library for sound I/O */
+/* #undef AD_BACKEND_ALSA */
+
+/* Use IRIX interface for sound I/O */
+/* #undef AD_BACKEND_IRIX */
+
+/* No interface for sound I/O */
+/* #undef AD_BACKEND_NONE */
+
+/* Use OSF interface for sound I/O */
+/* #undef AD_BACKEND_OSF */
+
+/* Use OSS interface for sound I/O */
+/* #define AD_BACKEND_OSS */
+
+/* Use OSS interface for sound I/O */
+/* #undef AD_BACKEND_OSS_BSD */
+
+/* Use SunOS interface for sound I/O */
+/* #undef AD_BACKEND_SUNOS */
+
+/* Use WinMM interface for sound I/O */
+#undef AD_BACKEND_WIN32
+
+/* Default radix point for fixed-point */
+/* #undef DEFAULT_RADIX */
+
+/* Enable thread safety */
+#define ENABLE_THREADS 
+
+/* The Thread Local Storage class */
+#define SPHINXBASE_TLS __declspec(thread)
+
+/* Use Q15 fixed-point computation */
+/* #undef FIXED16 */
+
+/* Use fixed-point computation */
+/* #undef FIXED_POINT */
+
+/* Enable matrix algebra with LAPACK */
+#define WITH_LAPACK
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 4
+
+/* Yes, we have errno.h */
+#define HAVE_ERRNO_H 1
+
+/* We don't have popen, but we do have _popen */
+/* #define HAVE_POPEN 1 */
+
+/* We do have perror */
+#define HAVE_PERROR 1
+
+/* We have sys/stat.h */
+#define HAVE_SYS_STAT_H 1
+
+/* We do not have unistd.h. */
+#define YY_NO_UNISTD_H 1
+
+/* Extension for executables */
+#define EXEEXT ".exe"
diff --git a/include/win32/sphinx_config.h b/include/win32/sphinx_config.h
new file mode 100644 (file)
index 0000000..5e425f0
--- /dev/null
@@ -0,0 +1,40 @@
+/* include/sphinx_config.h, defaults for Win32 */
+/* sphinx_config.h: Externally visible configuration parameters for
+ * SphinxBase.
+ */
+
+/* Use ALSA library for sound I/O */
+/* #undef AD_BACKEND_ALSA */
+
+/* Use IRIX interface for sound I/O */
+/* #undef AD_BACKEND_IRIX */
+
+/* No interface for sound I/O */
+/* #undef AD_BACKEND_NONE */
+
+/* Use OSF interface for sound I/O */
+/* #undef AD_BACKEND_OSF */
+
+/* Use OSS interface for sound I/O */
+/* #define AD_BACKEND_OSS */
+
+/* Use OSS interface for sound I/O */
+/* #undef AD_BACKEND_OSS_BSD */
+
+/* Use SunOS interface for sound I/O */
+/* #undef AD_BACKEND_SUNOS */
+
+/* Use WinMM interface for sound I/O */
+#undef AD_BACKEND_WIN32
+
+/* Default radix point for fixed-point */
+/* #undef DEFAULT_RADIX */
+
+/* Use Q15 fixed-point computation */
+/* #undef FIXED16 */
+
+/* Use fixed-point computation */
+/* #undef FIXED_POINT */
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 4
diff --git a/include/wince/config.h b/include/wince/config.h
new file mode 100644 (file)
index 0000000..14d9cf8
--- /dev/null
@@ -0,0 +1,3 @@
+/* Silvio Moioli: keep only one configuration file */
+
+#include "sphinx_config.h"
diff --git a/include/wince/sphinx_config.h b/include/wince/sphinx_config.h
new file mode 100644 (file)
index 0000000..851e421
--- /dev/null
@@ -0,0 +1,43 @@
+/* include/sphinx_config.h, defaults for Windows CE.  */
+/* sphinx_config.h: Externally visible configuration parameters for
+ * SphinxBase.
+ */
+
+/* Use ALSA library for sound I/O */
+/* #undef AD_BACKEND_ALSA */
+
+/* Use IRIX interface for sound I/O */
+/* #undef AD_BACKEND_IRIX */
+
+/* No interface for sound I/O */
+/* #undef AD_BACKEND_NONE */
+
+/* Use OSF interface for sound I/O */
+/* #undef AD_BACKEND_OSF */
+
+/* Use OSS interface for sound I/O */
+/* #define AD_BACKEND_OSS */
+
+/* Use OSS interface for sound I/O */
+/* #undef AD_BACKEND_OSS_BSD */
+
+/* Use SunOS interface for sound I/O */
+/* #undef AD_BACKEND_SUNOS */
+
+/* Use WinMM interface for sound I/O */
+#undef AD_BACKEND_WIN32
+
+/* Default radix point for fixed-point */
+/* #undef DEFAULT_RADIX */
+
+/* Use Q15 fixed-point computation */
+/* #undef FIXED16 */
+
+/* Use fixed-point computation */
+/* #define FIXED_POINT 1 */
+
+/* The size of `long', as computed by sizeof. */
+#define SIZEOF_LONG 4
+
+/* Extension for executables */
+#define EXEEXT ".exe"
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..a5897de
--- /dev/null
@@ -0,0 +1,519 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-12-25.00
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""       $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+       shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+       case $mode in
+         *' '* | *'    '* | *'
+'*       | *'*'* | *'?'* | *'['*)
+           echo "$0: invalid mode: $mode" >&2
+           exit 1;;
+       esac
+       shift;;
+
+    -o) chowncmd="$chownprog $2"
+       shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+       shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)        shift
+       break;;
+
+    -*)        echo "$0: invalid option: $1" >&2
+       exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dst_arg: Is a directory" >&2
+       exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+       (dirname "$dst") 2>/dev/null ||
+       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+            X"$dst" : 'X\(//\)[^/]' \| \
+            X"$dst" : 'X\(//\)$' \| \
+            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+       echo X"$dst" |
+           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)[^/].*/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\).*/{
+                  s//\1/
+                  q
+                }
+                s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+       # Create intermediate dirs using mode 755 as modified by the umask.
+       # This is like FreeBSD 'install' as of 1997-10-28.
+       umask=`umask`
+       case $stripcmd.$umask in
+         # Optimize common cases.
+         *[2367][2367]) mkdir_umask=$umask;;
+         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+         *[0-7])
+           mkdir_umask=`expr $umask + 22 \
+             - $umask % 100 % 40 + $umask % 20 \
+             - $umask % 10 % 4 + $umask % 2
+           `;;
+         *) mkdir_umask=$umask,go-w;;
+       esac
+
+       # With -d, create the new directory with the user-specified mode.
+       # Otherwise, rely on $mkdir_umask.
+       if test -n "$dir_arg"; then
+         mkdir_mode=-m$mode
+       else
+         mkdir_mode=
+       fi
+
+       posix_mkdir=false
+       case $umask in
+         *[123567][0-7][0-7])
+           # POSIX mkdir -p sets u+wx bits regardless of umask, which
+           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+           ;;
+         *)
+           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+           if (umask $mkdir_umask &&
+               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+           then
+             if test -z "$dir_arg" || {
+                  # Check for POSIX incompatibilities with -m.
+                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                  # other-writeable bit of parent directory when it shouldn't.
+                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                  case $ls_ld_tmpdir in
+                    d????-?r-*) different_mode=700;;
+                    d????-?--*) different_mode=755;;
+                    *) false;;
+                  esac &&
+                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                  }
+                }
+             then posix_mkdir=:
+             fi
+             rmdir "$tmpdir/d" "$tmpdir"
+           else
+             # Remove any dirs left behind by ancient mkdir implementations.
+             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+           fi
+           trap '' 0;;
+       esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+       umask $mkdir_umask &&
+       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+       /*) prefix='/';;
+       -*) prefix='./';;
+       *)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+       test -z "$d" && continue
+
+       prefix=$prefix$d
+       if test -d "$prefix"; then
+         prefixes=
+       else
+         if $posix_mkdir; then
+           (umask=$mkdir_umask &&
+            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+           # Don't fail if two instances are running concurrently.
+           test -d "$prefix" || exit 1
+         else
+           case $prefix in
+             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+             *) qprefix=$prefix;;
+           esac
+           prefixes="$prefixes '$qprefix'"
+         fi
+       fi
+       prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+       # Don't fail if two instances are running concurrently.
+       (umask $mkdir_umask &&
+        eval "\$doit_exec \$mkdirprog $prefixes") ||
+         test -d "$dstdir" || exit 1
+       obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+       # Now remove or move aside any old file at destination location.
+       # We try this two ways since rm can't unlink itself on some
+       # systems and the destination file might be busy for other
+       # reasons.  In this case, the final cleanup might fail but the new
+       # file should still install successfully.
+       {
+         test ! -f "$dst" ||
+         $doit $rmcmd -f "$dst" 2>/dev/null ||
+         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+         } ||
+         { echo "$0: cannot unlink or rename $dst" >&2
+           (exit 1); exit 1
+         }
+       } &&
+
+       # Now rename the file to the real destination.
+       $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100755 (executable)
index 0000000..a72f2fd
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,8406 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.6b
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#     --config             show all configuration variables
+#     --debug              enable verbose shell tracing
+# -n, --dry-run            display commands without modifying any files
+#     --features           display basic configuration information and exit
+#     --mode=MODE          use operation mode MODE
+#     --preserve-dup-deps  don't remove duplicate dependency libraries
+#     --quiet, --silent    don't print informational messages
+#     --tag=TAG            use configuration variables from tag TAG
+# -v, --verbose            print informational messages (default)
+#     --version            print version information
+# -h, --help               print short or long help message
+#
+# MODE must be one of the following:
+#
+#       clean              remove files from the build directory
+#       compile            compile a source file into a libtool object
+#       execute            automatically set library path, then run a program
+#       finish             complete the installation of libtool libraries
+#       install            install libraries or executables
+#       link               create a library or an executable
+#       uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#       host-triplet:  $host
+#       shell:         $SHELL
+#       compiler:              $LTCC
+#       compiler flags:                $LTCFLAGS
+#       linker:                $LD (gnu? $with_gnu_ld)
+#       $progname:             (GNU libtool) 2.2.6b
+#       automake:              $automake_version
+#       autoconf:              $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=2.2.6b
+TIMESTAMP=""
+package_revision=1.3017
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+         export $lt_var
+         lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+         lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+       fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS="  $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+  -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+       IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+       func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+       my_arg=`$ECHO "X$1" | $Xsed \
+           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+           $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+       s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $SED -n '/^# Usage:/,/# -h/ {
+        s/^# //
+       s/^# *$//
+       s/\$progname/'$progname'/
+       p
+    }' < "$progpath"
+    $ECHO
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+        s/^# //
+       s/^# *$//
+       s*\$progname*'$progname'*
+       s*\$host*'"$host"'*
+       s*\$SHELL*'"$SHELL"'*
+       s*\$LTCC*'"$LTCC"'*
+       s*\$LTCFLAGS*'"$LTCFLAGS"'*
+       s*\$LD*'"$LD"'*
+       s/\$with_gnu_ld/'"$with_gnu_ld"'/
+       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       p
+     }' < "$progpath"
+    exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    func_error "missing argument for $1"
+    exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell, and then maybe $ECHO will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    $ECHO "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $ECHO "enable shared libraries"
+    else
+      $ECHO "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $ECHO "enable static libraries"
+    else
+      $ECHO "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+       taglist="$taglist $tagname"
+
+       # Evaluate the configuration.  Be careful to quote the path
+       # and the sed script, to avoid splitting on whitespace, but
+       # also don't use non-portable quotes within backquotes within
+       # quotes we have to do it in 2 steps:
+       extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+       eval "$extractedcf"
+      else
+       func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# Parse options once, thoroughly.  This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+  # Shorthand for --mode=foo, only valid as the first argument
+  case $1 in
+  clean|clea|cle|cl)
+    shift; set dummy --mode clean ${1+"$@"}; shift
+    ;;
+  compile|compil|compi|comp|com|co|c)
+    shift; set dummy --mode compile ${1+"$@"}; shift
+    ;;
+  execute|execut|execu|exec|exe|ex|e)
+    shift; set dummy --mode execute ${1+"$@"}; shift
+    ;;
+  finish|finis|fini|fin|fi|f)
+    shift; set dummy --mode finish ${1+"$@"}; shift
+    ;;
+  install|instal|insta|inst|ins|in|i)
+    shift; set dummy --mode install ${1+"$@"}; shift
+    ;;
+  link|lin|li|l)
+    shift; set dummy --mode link ${1+"$@"}; shift
+    ;;
+  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+    shift; set dummy --mode uninstall ${1+"$@"}; shift
+    ;;
+  esac
+
+  # Parse non-mode specific arguments:
+  while test "$#" -gt 0; do
+    opt="$1"
+    shift
+
+    case $opt in
+      --config)                func_config                                     ;;
+
+      --debug)         preserve_args="$preserve_args $opt"
+                       func_echo "enabling shell trace mode"
+                       opt_debug='set -x'
+                       $opt_debug
+                       ;;
+
+      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       execute_dlfiles="$execute_dlfiles $1"
+                       shift
+                       ;;
+
+      --dry-run | -n)  opt_dry_run=:                                   ;;
+      --features)       func_features                                  ;;
+      --finish)                mode="finish"                                   ;;
+
+      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       case $1 in
+                         # Valid mode arguments:
+                         clean)        ;;
+                         compile)      ;;
+                         execute)      ;;
+                         finish)       ;;
+                         install)      ;;
+                         link)         ;;
+                         relink)       ;;
+                         uninstall)    ;;
+
+                         # Catch anything else as an error
+                         *) func_error "invalid argument for $opt"
+                            exit_cmd=exit
+                            break
+                            ;;
+                       esac
+
+                       mode="$1"
+                       shift
+                       ;;
+
+      --preserve-dup-deps)
+                       opt_duplicate_deps=:                            ;;
+
+      --quiet|--silent)        preserve_args="$preserve_args $opt"
+                       opt_silent=:
+                       ;;
+
+      --verbose| -v)   preserve_args="$preserve_args $opt"
+                       opt_silent=false
+                       ;;
+
+      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       preserve_args="$preserve_args $opt $1"
+                       func_enable_tag "$1"    # tagname is set here
+                       shift
+                       ;;
+
+      # Separate optargs to long options:
+      -dlopen=*|--mode=*|--tag=*)
+                       func_opt_split "$opt"
+                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+                       shift
+                       ;;
+
+      -\?|-h)          func_usage                                      ;;
+      --help)          opt_help=:                                      ;;
+      --version)       func_version                                    ;;
+
+      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
+
+      *)               nonopt="$opt"
+                       break
+                       ;;
+    esac
+  done
+
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      ;;
+  esac
+
+  # Having warned about all mis-specified options, bail out if
+  # anything was wrong.
+  $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+$opt_help || {
+  # Sanity checks first:
+  func_check_version_match
+
+  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+    func_fatal_configuration "not configured to build any kind of library"
+  fi
+
+  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+  # Darwin sucks
+  eval std_shrext=\"$shrext_cmds\"
+
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    func_error "unrecognized option \`-dlopen'"
+    $ECHO "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case "$lalib_p_line" in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_ltwrapper_scriptname_result=""
+    if func_ltwrapper_executable_p "$1"; then
+       func_dirname_and_basename "$1" "" "."
+       func_stripname '' '.exe' "$func_basename_result"
+       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+        func_quote_for_eval "$arg"
+       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_quote_for_eval "$arg"
+             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+           done
+           case "$@ " in
+             " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with \`--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg="$arg"
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj="$arg"
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify \`-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          pie_flag="$pie_flag $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         later="$later $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs="$IFS"; IFS=','
+         for arg in $args; do
+           IFS="$save_ifs"
+           func_quote_for_eval "$arg"
+           lastarg="$lastarg $func_quote_for_eval_result"
+         done
+         IFS="$save_ifs"
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         base_compile="$base_compile $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg="$srcfile"
+         srcfile="$arg"
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_quote_for_eval "$lastarg"
+      base_compile="$base_compile $func_quote_for_eval_result"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      removelist="$removelist $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    removelist="$removelist $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       command="$command -o $lobj"
+      fi
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+       removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$mode'"
+        ;;
+    esac
+
+    $ECHO
+    $ECHO "Try \`$progname --help' for more information about other modes."
+
+    exit $?
+}
+
+  # Now that we've collected a possible --mode arg, show help if necessary
+  $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      test -f "$file" \
+       || func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "\`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+       ;;
+
+      *)
+       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_quote_for_eval "$file"
+      args="$args $func_quote_for_eval_result"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       $ECHO "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+       libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    $ECHO "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $ECHO "   $libdir"
+    done
+    $ECHO
+    $ECHO "If you ever happen to want to link against installed libraries"
+    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $ECHO "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $ECHO "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $ECHO "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $ECHO "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $ECHO "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $ECHO
+
+    $ECHO "See any operating system documentation about shared libraries for"
+    case $host in
+      solaris2.[6789]|solaris2.1[0-9])
+        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+       $ECHO "pages."
+       ;;
+      *)
+        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+        ;;
+    esac
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    install_prog="$install_prog$func_quote_for_eval_result"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+       case " $install_prog " in
+       *[\\\ /]cp\ *) ;;
+       *) prev=$arg ;;
+       esac
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      install_prog="$install_prog $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "\`$destdir' must be an absolute directory name"
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) current_libdirs="$current_libdirs $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) future_libdirs="$future_libdirs $libdir" ;;
+         esac
+       fi
+
+       func_dirname "$file" "/" ""
+       dir="$func_dirname_result"
+       dir="$dir$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking \`$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname="$1"
+         shift
+
+         srcname="$realname"
+         test -n "$relink_command" && srcname="$realname"T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme="$stripme"
+         case $host_os in
+         cygwin* | mingw* | pw32* | cegcc*)
+           case $realname in
+           *.dll.a)
+             tstripme=""
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try `ln -sf' first, because the `ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name="$func_basename_result"
+       instname="$dir/$name"i
+       func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=""
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=".exe"
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin* | *mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+         finalize=yes
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "\`$lib' has not been installed in \`$libdir'"
+             finalize=no
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if test "$finalize" = yes; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file="$func_basename_result"
+               outputname="$tmpdir/$file"
+               # Replace the output file specification.
+               relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_silent || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink \`$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file="$outputname"
+             else
+               func_warning "cannot relink \`$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms="${my_outputname}S.c"
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist="$output_objdir/${my_outputname}.nm"
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test "$dlself" = yes; then
+         func_verbose "generating symbol list for \`$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_verbose "extracting global C symbols from \`$progfile'"
+           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols="$output_objdir/$outputname.exp"
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_basename "$dlprefile"
+         name="$func_basename_result"
+         $opt_dry_run || {
+           eval '$ECHO ": $name " >> "$nlist"'
+           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+         }
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+"
+         case $host in
+         *cygwin* | *mingw* | *cegcc* )
+           $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs.  */"
+           lt_dlsym_const= ;;
+         *osf5*)
+           echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+           lt_dlsym_const= ;;
+         *)
+           lt_dlsym_const=const ;;
+         esac
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           if test "X$my_pic_p" != Xno; then
+             pic_flag_for_symtable=" $pic_flag"
+           fi
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) symtab_cflags="$symtab_cflags $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       case $host in
+       *cygwin* | *mingw* | *cegcc* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 |
+       $SED -n -e '
+           1,100{
+               / I /{
+                   s,.*,import,
+                   p
+                   q
+               }
+           }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         darwin_base_archive=`basename "$darwin_archive"`
+         darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches ; do
+             func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             $LIPO -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper_part1 [arg=no]
+#
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
+{
+       func_emit_wrapper_part1_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part1_arg1=$1
+       fi
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    ECHO=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$ECHO will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+       $ECHO "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+       func_emit_wrapper_part2_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part2_arg1=$1
+       fi
+
+       $ECHO "\
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test "$fast_install" = yes; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       $ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # Export our shlibpath_var if we have one.
+       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       # fixup the dll searchpath if we need to.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+       case $host in
+       # Backslashes separate directories on plain windows
+       *-*-mingw | *-*-os2* | *-cegcc*)
+         $ECHO "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+         ;;
+
+       *)
+         $ECHO "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+         ;;
+       esac
+       $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_arg1=$1
+       fi
+
+       # split this up so that func_emit_cwrapperexe_src
+       # can call each part independently.
+       func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+       func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin.  Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+  func_to_host_path_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        case $build in
+          *mingw* ) # actually, msys
+            # awkward: cmd appends spaces to result
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_path_tmp1=`cygpath -w "$1"`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # Unfortunately, winepath does not exit with a non-zero
+            # error code, so we are forced to check the contents of
+            # stdout. On the other hand, if the command is not
+            # found, the shell will set an exit code of 127 and print
+            # *an error message* to stdout. So we must check for both
+            # error code of zero AND non-empty stdout, which explains
+            # the odd construction:
+            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+                $SED -e "$lt_sed_naive_backslashify"`
+            else
+              # Allow warning below.
+              func_to_host_path_result=""
+            fi
+            ;;
+        esac
+        if test -z "$func_to_host_path_result" ; then
+          func_error "Could not determine host path corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback:
+          func_to_host_path_result="$1"
+        fi
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+  func_to_host_pathlist_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        # Remove leading and trailing path separator characters from
+        # ARG. msys behavior is inconsistent here, cygpath turns them
+        # into '.;' and ';.', and winepath ignores them completely.
+        func_to_host_pathlist_tmp2="$1"
+        # Once set for this call, this variable should not be
+        # reassigned. It is used in tha fallback case.
+        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+          $SED -e 's|^:*||' -e 's|:*$||'`
+        case $build in
+          *mingw* ) # Actually, msys.
+            # Awkward: cmd appends spaces to result.
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # unfortunately, winepath doesn't convert pathlists
+            func_to_host_pathlist_result=""
+            func_to_host_pathlist_oldIFS=$IFS
+            IFS=:
+            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+              IFS=$func_to_host_pathlist_oldIFS
+              if test -n "$func_to_host_pathlist_f" ; then
+                func_to_host_path "$func_to_host_pathlist_f"
+                if test -n "$func_to_host_path_result" ; then
+                  if test -z "$func_to_host_pathlist_result" ; then
+                    func_to_host_pathlist_result="$func_to_host_path_result"
+                  else
+                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+                  fi
+                fi
+              fi
+              IFS=:
+            done
+            IFS=$func_to_host_pathlist_oldIFS
+            ;;
+        esac
+        if test -z "$func_to_host_pathlist_result" ; then
+          func_error "Could not determine the host path(s) corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback. This may break if $1 contains DOS-style drive
+          # specifications. The fix is not to complicate the expression
+          # below, but for the user to provide a working wine installation
+          # with winepath so that path translation in the cross-to-mingw
+          # case works properly.
+          lt_replace_pathsep_nix_to_dos="s|:|;|g"
+          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+            $SED -e "$lt_replace_pathsep_nix_to_dos"`
+        fi
+        # Now, add the leading and trailing path separators back
+        case "$1" in
+          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+            ;;
+        esac
+        case "$1" in
+          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+            ;;
+        esac
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "$SHELL $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+           cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+#  define HAVE_SETENV
+#  ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+#  endif
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+    va_list args;
+    va_start (args, fmt);
+    (void) vfprintf (stderr, fmt, args);
+    va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_opt_process_env_set (const char *arg);
+void lt_opt_process_env_prepend (const char *arg);
+void lt_opt_process_env_append (const char *arg);
+int lt_split_name_value (const char *arg, char** name, char** value);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+
+static const char *script_text_part1 =
+EOF
+
+           func_emit_wrapper_part1 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+           cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+           func_emit_wrapper_part2 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+
+           cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+           if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_pathlist "$temp_rpath"
+             cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test -n "$dllsearchpath"; then
+              func_to_host_pathlist "$dllsearchpath:"
+             cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test "$fast_install" = yes; then
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+           else
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+           fi
+
+
+           cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
+
+static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+
+static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
+  /* argument is putenv-style "foo=bar", value of foo is set to bar */
+
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
+  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+
+static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
+  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+  /* very simple arg parsing; don't want to rely on getopt */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+       {
+EOF
+           case "$host" in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<"EOF"
+         printf ("%s", script_text_part1);
+         printf ("%s", script_text_part2);
+         return 0;
+       }
+    }
+
+  newargz = XMALLOC (char *, argc + 1);
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal ("Couldn't find %s", argv[0]);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+                         tmp_pathspec));
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+                         actual_cwrapper_path));
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+                         target_name));
+EOF
+
+           cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+           cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+        {
+          if (argv[i][env_set_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_set_opt_len + 1;
+              lt_opt_process_env_set (p);
+            }
+          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_set (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_set_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+        {
+          if (argv[i][env_prepend_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_prepend_opt_len + 1;
+              lt_opt_process_env_prepend (p);
+            }
+          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_prepend_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+        {
+          if (argv[i][env_append_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_append_opt_len + 1;
+              lt_opt_process_env_append (p);
+            }
+          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_append (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_append_opt);
+          continue;
+        }
+      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal ("Unrecognized option in %s namespace: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  for (i = 0; i < newargc; i++)
+    {
+      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      return 127;
+    }
+  return rval;
+EOF
+               ;;
+             *)
+               cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+                         wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = q - p;
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal ("getcwd failed");
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+                             tmp_pathspec));
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         char *errstr = strerror (errno);
+         lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal ("Could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+       *str = '\0';
+    }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+int
+lt_split_name_value (const char *arg, char** name, char** value)
+{
+  const char *p;
+  int len;
+  if (!arg || !*arg)
+    return 1;
+
+  p = strchr (arg, (int)'=');
+
+  if (!p)
+    return 1;
+
+  *value = xstrdup (++p);
+
+  len = strlen (arg) - strlen (*value);
+  *name = XMALLOC (char, len);
+  strncpy (*name, arg, len-1);
+  (*name)[len - 1] = '\0';
+
+  return 0;
+}
+
+void
+lt_opt_process_env_set (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+    }
+
+  lt_setenv (name, value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_prepend (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 0);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_append (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 1);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=yes
+         fi
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         test -f "$arg" \
+           || func_fatal_error "symbol file \`$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir="$arg"
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            moreargs="$moreargs $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test "$pic_object" = none &&
+                  test "$non_pic_object" = none; then
+                 func_fatal_error "cannot find name of object for \`$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir="$func_dirname_result"
+
+               if test "$pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object="$xdir$pic_object"
+
+                 if test "$prev" = dlfiles; then
+                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                     dlfiles="$dlfiles $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test "$prev" = dlprefiles; then
+                   # Preload the old-style object.
+                   dlprefiles="$dlprefiles $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg="$pic_object"
+               fi
+
+               # Non-PIC object.
+               if test "$non_pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object="$xdir$non_pic_object"
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test "$pic_object" = none ; then
+                   arg="$non_pic_object"
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object="$pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir="$func_dirname_result"
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "\`$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file \`$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         release="-$arg"
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds="$arg"
+         prev=
+         continue
+         ;;
+       weak)
+         weak_libs="$weak_libs $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         # See comment for -static flag below, for more details.
+         func_append compile_command " $link_static_flag"
+         func_append finalize_command " $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname '-L' '' "$arg"
+       dir=$func_stripname_result
+       if test -z "$dir"; then
+         if test "$#" -gt 0; then
+           func_fatal_error "require no space between \`-L' and \`$1'"
+         else
+           func_fatal_error "need path for \`-L' option"
+         fi
+       fi
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of \`$dir'"
+         dir="$absdir"
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "*) ;;
+       *)
+         deplibs="$deplibs -L$dir"
+         lib_search_path="$lib_search_path $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         ::) dllsearchpath=$dir;;
+         *) dllsearchpath="$dllsearchpath:$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           deplibs="$deplibs System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test "X$arg" = "X-lc" && continue
+           ;;
+         esac
+       elif test "X$arg" = "X-lc_r"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module="${wl}-multi_module"
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "\`-no-install' is ignored for $host"
+         func_warning "assuming \`-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) xrpath="$xrpath $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+         linker_flags="$linker_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      *.$objext)
+       # A standard object.
+       objs="$objs $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test "$pic_object" = none &&
+            test "$non_pic_object" = none; then
+           func_fatal_error "cannot find name of object for \`$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir="$func_dirname_result"
+
+         if test "$pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           pic_object="$xdir$pic_object"
+
+           if test "$prev" = dlfiles; then
+             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+               dlfiles="$dlfiles $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test "$prev" = dlprefiles; then
+             # Preload the old-style object.
+             dlprefiles="$dlprefiles $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg="$pic_object"
+         fi
+
+         # Non-PIC object.
+         if test "$non_pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object="$xdir$non_pic_object"
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test "$pic_object" = none ; then
+             arg="$non_pic_object"
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object="$pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir="$func_dirname_result"
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "\`$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       deplibs="$deplibs $arg"
+       old_deplibs="$old_deplibs $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       if test "$prev" = dlfiles; then
+         # This library was specified with -dlopen.
+         dlfiles="$dlfiles $arg"
+         prev=
+       elif test "$prev" = dlprefiles; then
+         # The library was specified with -dlpreopen.
+         dlprefiles="$dlprefiles $arg"
+         prev=
+       else
+         deplibs="$deplibs $arg"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_duplicate_deps ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=no
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+        test "$linkmode,$pass" = "prog,scan"; then
+       libs="$deplibs"
+       deplibs=
+      fi
+      if test "$linkmode" = prog; then
+       case $pass in
+       dlopen) libs="$dlfiles" ;;
+       dlpreopen) libs="$dlprefiles" ;;
+       link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+       esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         case $lib in
+         *.la) func_source "$lib" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) deplibs="$deplibs $deplib" ;;
+           esac
+         done
+       done
+       libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+       # Collect dlpreopened libraries
+       save_deplibs="$deplibs"
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=no
+       case $deplib in
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           compiler_flags="$compiler_flags $deplib"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test "$linkmode" != lib && test "$linkmode" != prog; then
+           func_warning "\`-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test "$linkmode" = lib; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib="$searchdir/lib${name}${search_ext}"
+             if test -f "$lib"; then
+               if test "$search_ext" = ".la"; then
+                 found=yes
+               else
+                 found=no
+               fi
+               break 2
+             fi
+           done
+         done
+         if test "$found" != yes; then
+           # deplib doesn't seem to be a libtool library
+           if test "$linkmode,$pass" = "prog,link"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         else # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll="$l"
+                 done
+                 if test "X$ll" = "X$old_library" ; then # only static version available
+                   found=no
+                   func_dirname "$lib" "" "."
+                   ladir="$func_dirname_result"
+                   lib=$ladir/$old_library
+                   if test "$linkmode,$pass" = "prog,link"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         fi
+         ;; # -l
+       *.ltframework)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test "$pass" = conv && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         prog)
+           if test "$pass" = conv; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test "$pass" = scan; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         *)
+           func_warning "\`-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test "$pass" = link; then
+           func_stripname '-R' '' "$deplib"
+           dir=$func_stripname_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) xrpath="$xrpath $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la) lib="$deplib" ;;
+       *.$libext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=no
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=yes
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=yes
+               ;;
+             esac
+             if test "$valid_a_lib" != yes; then
+               $ECHO
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+               $ECHO "*** that it is just a static archive that I should not use here."
+             else
+               $ECHO
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test "$pass" != link; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+         elif test "$linkmode" = prog; then
+           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             newdlprefiles="$newdlprefiles $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             newdlfiles="$newdlfiles $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=yes
+         continue
+         ;;
+       esac # case $deplib
+
+       if test "$found" = yes || test -f "$lib"; then :
+       else
+         func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+       fi
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir="$func_dirname_result"
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test "$linkmode,$pass" = "lib,link" ||
+          test "$linkmode,$pass" = "prog,scan" ||
+          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+       fi
+
+       if test "$pass" = conv; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for \`$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           convenience="$convenience $ladir/$objdir/$old_library"
+           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+         elif test "$linkmode" != prog && test "$linkmode" != lib; then
+           func_fatal_error "\`$lib' is not a convenience library"
+         fi
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           deplibs="$deplib $deplibs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       for l in $old_library $library_names; do
+         linklib="$l"
+       done
+       if test -z "$linklib"; then
+         func_fatal_error "cannot find name of link library for \`$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$pass" = dlopen; then
+         if test -z "$libdir"; then
+           func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+         fi
+         if test -z "$dlname" ||
+            test "$dlopen_support" != yes ||
+            test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           dlprefiles="$dlprefiles $lib $dependency_libs"
+         else
+           newdlfiles="$newdlfiles $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of \`$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir="$ladir"
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname="$func_basename_result"
+
+       # Find the relevant object directory and library name.
+       if test "X$installed" = Xyes; then
+         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library \`$lib' was moved."
+           dir="$ladir"
+           absdir="$abs_ladir"
+           libdir="$abs_ladir"
+         else
+           dir="$libdir"
+           absdir="$libdir"
+         fi
+         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir="$ladir"
+           absdir="$abs_ladir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         else
+           dir="$ladir/$objdir"
+           absdir="$abs_ladir/$objdir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test "$pass" = dlpreopen; then
+         if test -z "$libdir" && test "$linkmode" = prog; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+         fi
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           newdlprefiles="$newdlprefiles $dir/$old_library"
+           # Keep a list of preopened convenience libraries to check
+           # that they are being used correctly in the link pass.
+           test -z "$libdir" && \
+               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+         # Otherwise, use the dlname, so that lt_dlopen finds it.
+         elif test -n "$dlname"; then
+           newdlprefiles="$newdlprefiles $dir/$dlname"
+         else
+           newdlprefiles="$newdlprefiles $dir/$linklib"
+         fi
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test "$linkmode" = lib; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test "$linkmode" = prog && test "$pass" != link; then
+         newlib_search_path="$newlib_search_path $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=no
+         if test "$link_all_deplibs" != no || test -z "$library_names" ||
+            test "$build_libtool_libs" = no; then
+           linkalldeplibs=yes
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                newlib_search_path="$newlib_search_path $func_stripname_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if test "$linkalldeplibs" = yes; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test "$linkmode,$pass" = "prog,link"; then
+         if test -n "$library_names" &&
+            { { test "$prefer_static_libs" = no ||
+                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+             # Make sure the rpath contains only unique directories.
+             case "$temp_rpath:" in
+             *"$absdir:"*) ;;
+             *) temp_rpath="$temp_rpath$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if test "$alldeplibs" = yes &&
+            { test "$deplibs_check_method" = pass_all ||
+              { test "$build_libtool_libs" = yes &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test "$use_static_libs" = built && test "$installed" = yes; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw* | *cegcc*)
+             # No point in relinking DLLs because paths are not encoded
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=no
+           ;;
+         *)
+           if test "$installed" = no; then
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=""
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule="$dlpremoduletest"
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+           $ECHO
+           if test "$linkmode" = prog; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test "$linkmode" = lib &&
+            test "$hardcode_into_libs" = yes; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname="$1"
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname="$dlname"
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw* | *cegcc*)
+               func_arith $current - $age
+               major=$func_arith_result
+               versuffix="-$major"
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname="$realname"
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot="$soname"
+           func_basename "$soroot"
+           soname="$func_basename_result"
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from \`$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for \`$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test "$linkmode" = prog || test "$mode" != relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test "$hardcode_direct" = no; then
+               add="$dir/$linklib"
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir="-L$dir" ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we can not
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null ; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library" ; then
+                         $ECHO
+                         $ECHO "*** And there doesn't seem to be a static archive available"
+                         $ECHO "*** The link will probably fail, sorry"
+                       else
+                         add="$dir/$old_library"
+                       fi
+                     elif test -n "$old_library"; then
+                       add="$dir/$old_library"
+                     fi
+                   fi
+               esac
+             elif test "$hardcode_minus_L" = no; then
+               case $host in
+               *-*-sunos*) add_shlibpath="$dir" ;;
+               esac
+               add_dir="-L$dir"
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = no; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test "$hardcode_direct" = yes &&
+                test "$hardcode_direct_absolute" = no; then
+               add="$dir/$linklib"
+             elif test "$hardcode_minus_L" = yes; then
+               add_dir="-L$dir"
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = yes; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test "$lib_linked" != yes; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             esac
+           fi
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test "$hardcode_direct" != yes &&
+                test "$hardcode_minus_L" != yes &&
+                test "$hardcode_shlibpath_var" = yes; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test "$linkmode" = prog || test "$mode" = relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test "$hardcode_direct" = yes &&
+              test "$hardcode_direct_absolute" = no; then
+             add="$libdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             add_dir="-L$libdir"
+             add="-l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             esac
+             add="-l$name"
+           elif test "$hardcode_automatic" = yes; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib" ; then
+               add="$inst_prefix_dir$libdir/$linklib"
+             else
+               add="$libdir/$linklib"
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add="-l$name"
+           fi
+
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test "$linkmode" = prog; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test "$hardcode_direct" != unsupported; then
+           test -n "$old_library" && linklib="$old_library"
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test "$build_libtool_libs" = yes; then
+         # Not a shared library
+         if test "$deplibs_check_method" != pass_all; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           $ECHO
+           $ECHO "*** Warning: This system can not link to static lib archive $lib."
+           $ECHO "*** I have the capability to make that library automatically link in when"
+           $ECHO "*** you link to this library.  But I can only do this if you have a"
+           $ECHO "*** shared version of the library, which you do not appear to have."
+           if test "$module" = yes; then
+             $ECHO "*** But as you try to build a module library, libtool will still create "
+             $ECHO "*** a static module, that should work as long as the dlopening application"
+             $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               $ECHO
+               $ECHO "*** However, this would only work if libtool was able to extract symbol"
+               $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               $ECHO "*** not find such a program.  So, this module is probably useless."
+               $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test "$build_old_libs" = no; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test "$linkmode" = lib; then
+         if test -n "$dependency_libs" &&
+            { test "$hardcode_into_libs" != yes ||
+              test "$build_old_libs" = yes ||
+              test "$link_static" = yes; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) xrpath="$xrpath $temp_xrpath";;
+                  esac;;
+             *) temp_deplibs="$temp_deplibs $libdir";;
+             esac
+           done
+           dependency_libs="$temp_deplibs"
+         fi
+
+         newlib_search_path="$newlib_search_path $absdir"
+         # Link against this library
+         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+
+         if test "$link_all_deplibs" != no; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             case $deplib in
+             -L*) path="$deplib" ;;
+             *.la)
+               func_dirname "$deplib" "" "."
+               dir="$func_dirname_result"
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of \`$dir'"
+                   absdir="$dir"
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names" ; then
+                   for tmp in $deplibrary_names ; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl" ; then
+                     depdepl="$absdir/$objdir/$depdepl"
+                     darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path="-L$absdir/$objdir"
+                 ;;
+               esac
+               else
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "\`$deplib' seems to be moved"
+
+                 path="-L$absdir"
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+       if test "$linkmode" = "prog"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test "$pass" != dlopen; then
+       if test "$pass" != conv; then
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) lib_search_path="$lib_search_path $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       fi
+
+       if test "$linkmode,$pass" != "prog,link"; then
+         vars="deplibs"
+       else
+         vars="compile_deplibs finalize_deplibs"
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) tmp_libs="$tmp_libs $deplib" ;;
+             esac
+             ;;
+           *) tmp_libs="$tmp_libs $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=""
+         ;;
+       esac
+       if test -n "$i" ; then
+         tmp_libs="$tmp_libs $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test "$module" = no && \
+         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+       if test "$need_lib_prefix" != no; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test "$deplibs_check_method" != pass_all; then
+         func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+       else
+         $ECHO
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         libobjs="$libobjs $objs"
+       fi
+      fi
+
+      test "$dlself" != no && \
+       func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+       func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test "$build_libtool_libs" = yes; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a `.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs="$IFS"; IFS=':'
+       set dummy $vinfo 0 0 0
+       shift
+       IFS="$save_ifs"
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to \`-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major="$1"
+         number_minor="$2"
+         number_revision="$3"
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # which has an extra 1 added just for fun
+         #
+         case $version_type in
+         darwin|linux|osf|windows|none)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_revision"
+           ;;
+         freebsd-aout|freebsd-elf|sunos)
+           current="$number_major"
+           revision="$number_minor"
+           age="0"
+           ;;
+         irix|nonstopux)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_minor"
+           lt_irix_increment=no
+           ;;
+         esac
+         ;;
+       no)
+         current="$1"
+         revision="$2"
+         age="$3"
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT \`$current' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION \`$revision' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE \`$age' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE \`$age' is greater than the current interface number \`$current'"
+         func_fatal_error "\`$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         # Darwin ld doesn't like 0 for these options...
+         func_arith $current + 1
+         minor_current=$func_arith_result
+         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+         ;;
+
+       freebsd-aout)
+         major=".$current"
+         versuffix=".$current.$revision";
+         ;;
+
+       freebsd-elf)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       irix | nonstopux)
+         if test "X$lt_irix_increment" = "Xno"; then
+           func_arith $current - $age
+         else
+           func_arith $current - $age + 1
+         fi
+         major=$func_arith_result
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring="$verstring_prefix$major.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test "$loop" -ne 0; do
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring_prefix$major.$iface:$verstring"
+         done
+
+         # Before this point, $major must not contain `.'.
+         major=.$major
+         versuffix="$major.$revision"
+         ;;
+
+       linux)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         ;;
+
+       osf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=".$current.$age.$revision"
+         verstring="$current.$age.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test "$loop" -ne 0; do
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring:${iface}.0"
+         done
+
+         # Make executables depend on our current version.
+         verstring="$verstring:${current}.0"
+         ;;
+
+       qnx)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       sunos)
+         major=".$current"
+         versuffix=".$current.$revision"
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 filesystems.
+         func_arith $current - $age
+         major=$func_arith_result
+         versuffix="-$major"
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type \`$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring="0.0"
+           ;;
+         esac
+         if test "$need_version" = no; then
+           versuffix=
+         else
+           versuffix=".0.0"
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test "$avoid_version" = yes && test "$need_version" = no; then
+         major=
+         versuffix=
+         verstring=""
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test "$allow_undefined" = yes; then
+         if test "$allow_undefined_flag" = unsupported; then
+           func_warning "undefined symbols not allowed in $host shared libraries"
+           build_libtool_libs=no
+           build_old_libs=yes
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag="$no_undefined_flag"
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      libobjs="$libobjs $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$mode" != relink; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext | *.gcno)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+              if test "X$precious_files_regex" != "X"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              removelist="$removelist $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+      #        deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         temp_xrpath="$temp_xrpath -R$libdir"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) dlfiles="$dlfiles $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) dlprefiles="$dlprefiles $lib" ;;
+       esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           deplibs="$deplibs System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test "$build_libtool_need_lc" = "yes"; then
+             deplibs="$deplibs -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   newdeplibs="$newdeplibs $i"
+                   i=""
+                   ;;
+                 esac
+               fi
+               if test -n "$i" ; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   $ECHO
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   $ECHO "*** I have the capability to make that library automatically link in when"
+                   $ECHO "*** you link to this library.  But I can only do this if you have a"
+                   $ECHO "*** shared version of the library, which I believe you do not have"
+                   $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+                   $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     newdeplibs="$newdeplibs $i"
+                     i=""
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i" ; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                     newdeplibs="$newdeplibs $i"
+                   else
+                     droppeddeps=yes
+                     $ECHO
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     $ECHO "*** I have the capability to make that library automatically link in when"
+                     $ECHO "*** you link to this library.  But I can only do this if you have a"
+                     $ECHO "*** shared version of the library, which you do not appear to have"
+                     $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+                     $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 $ECHO
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 $ECHO "*** make it link in!  You will probably need to install it or some"
+                 $ECHO "*** library that it depends on before this library will be fully"
+                 $ECHO "*** functional.  Installing it before continuing would be even better."
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib="$potent_lib" # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     newdeplibs="$newdeplibs $a_deplib"
+                     a_deplib=""
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+             -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           for i in $predeps $postdeps ; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+           done
+         fi
+         if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[      ]//g' |
+            $GREP . >/dev/null; then
+           $ECHO
+           if test "X$deplibs_check_method" = "Xnone"; then
+             $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           $ECHO "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           $ECHO
+           $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           $ECHO "*** a static module, that should work as long as the dlopening"
+           $ECHO "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             $ECHO
+             $ECHO "*** However, this would only work if libtool was able to extract symbol"
+             $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             $ECHO "*** not find such a program.  So, this module is probably useless."
+             $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             oldlibs="$output_objdir/$libname.$libext"
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           $ECHO "*** The inter-library dependencies that have been dropped here will be"
+           $ECHO "*** automatically added whenever a program is linked with this library"
+           $ECHO "*** or is declared to -dlopen it."
+
+           if test "$allow_undefined" = no; then
+             $ECHO
+             $ECHO "*** Since this library must not contain undefined symbols,"
+             $ECHO "*** because either the platform does not support them or"
+             $ECHO "*** it was explicitly requested with -no-undefined,"
+             $ECHO "*** libtool will only create a static version of it."
+             if test "$build_old_libs" = no; then
+               oldlibs="$output_objdir/$libname.$libext"
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       if test "$hardcode_into_libs" = yes; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath="$finalize_rpath"
+         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs="$libdir"
+               else
+                 # Just accumulate the unique libdirs.
+                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               dep_rpath="$dep_rpath $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) perm_rpath="$perm_rpath $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir="$hardcode_libdirs"
+           if test -n "$hardcode_libdir_flag_spec_ld"; then
+             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+           else
+             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+           fi
+         fi
+         if test -n "$runpath_var" && test -n "$perm_rpath"; then
+           # We should set the runpath_var.
+           rpath=
+           for dir in $perm_rpath; do
+             rpath="$rpath$dir:"
+           done
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath="$finalize_shlibpath"
+       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname="$1"
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname="$realname"
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib="$output_objdir/$realname"
+       linknames=
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols="$output_objdir/$libname.uexp"
+         delfiles="$delfiles $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw* | cegcc*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols="$export_symbols"
+             export_symbols=
+             always_export_symbols=yes
+           fi
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             func_len " $cmd"
+             len=$func_len_result
+             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols="$export_symbols"
+         test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+         $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           tmp_deplibs="$tmp_deplibs $test_deplib"
+           ;;
+         esac
+       done
+       deplibs="$tmp_deplibs"
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test "$compiler_needs_object" = yes &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           func_extract_archives $gentop $convenience
+           libobjs="$libobjs $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linker_flags="$linker_flags $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test "$module" = yes && test -n "$module_cmds" ; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test "X$skipped_export" != "X:" &&
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+           output=${output_objdir}/${output_la}.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           $ECHO 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             $ECHO "$obj" >> $output
+           done
+           $ECHO ')' >> $output
+           delfiles="$delfiles $output"
+         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+           output=${output_objdir}/${output_la}.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test "$compiler_needs_object" = yes; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             $ECHO "$obj" >> $output
+           done
+           delfiles="$delfiles $output"
+           output=$firstobj\"$file_list_spec$output\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-${k}.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
+               if test "X$objlist" = X ||
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test "$k" -eq 1 ; then
+                   # The first file doesn't have a previous command to add.
+                   eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 func_arith $k + 1
+                 k=$func_arith_result
+                 output=$output_objdir/$output_la-${k}.$objext
+                 objlist=$obj
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+             fi
+             delfiles="$delfiles $output"
+
+           else
+             output=
+           fi
+
+           if ${skipped_export-false}; then
+             func_verbose "generating symbol list for \`$libname.la'"
+             export_symbols="$output_objdir/$libname.exp"
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           fi
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS="$save_ifs"
+             $opt_silent || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test "$mode" = relink; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS="$save_ifs"
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          if ${skipped_export-false}; then
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols="$export_symbols"
+             test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+             $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         fi
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test "$module" = yes && test -n "$module_cmds" ; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         libobjs="$libobjs $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $opt_silent || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test "$mode" = relink; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS="$save_ifs"
+
+       # Restore the uninstalled library and exit
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj="$output"
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+       else
+         gentop="$output_objdir/${obj}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+       && test "$dlopen_self" = unknown \
+       && test "$dlopen_self_static" = unknown && \
+         func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test "$tagname" = CXX ; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             compile_command="$compile_command ${wl}-bind_at_load"
+             finalize_command="$finalize_command ${wl}-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         ::) dllsearchpath=$libdir;;
+         *) dllsearchpath="$dllsearchpath:$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *cegcc)
+        # Disable wrappers for cegcc, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+       # Replace the output file specification.
+       compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command="$compile_command$compile_rpath"
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.${objext}"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       fi
+
+       exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$no_install" = yes; then
+       # We don't need to create a wrapper script.
+       link_command="$compile_var$compile_command$compile_rpath"
+       # Replace the output file specification.
+       link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+       # Fast installation is not supported
+       link_command="$compile_var$compile_command$compile_rpath"
+       relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+       func_warning "this platform does not like uninstalled shared libraries"
+       func_warning "\`$output' will be relinked during installation"
+      else
+       if test "$fast_install" != no; then
+         link_command="$finalize_var$compile_command$finalize_rpath"
+         if test "$fast_install" = yes; then
+           relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+         else
+           # fast_install is set to needless
+           relink_command=
+         fi
+       else
+         link_command="$compile_var$compile_command$compile_rpath"
+         relink_command="$finalize_var$finalize_command$finalize_rpath"
+       fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $ECHO for shipping.
+      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+       case $progpath in
+       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+       esac
+       qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+       qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource="$output_path/$objdir/lt-$output_name.c"
+           cwrapper="$output_path/$output_name.exe"
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # The wrapper executable is built using the $host compiler,
+           # because it contains $host paths and files. If cross-
+           # compiling, it, like the target executable, must be
+           # executed on the $host or under an emulation environment.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host" ; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save $symfileobj"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$old_deplibs $non_pic_objects"
+         if test "$preload" = yes && test -f "$symfileobj"; then
+           oldobjs="$oldobjs $symfileobj"
+         fi
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       generated="$generated $gentop"
+
+       func_extract_archives $gentop $addlibs
+       oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         oldobjs="$oldobjs $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         $ECHO "copying selected object files to avoid basename conflicts..."
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase="$func_basename_result"
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               func_arith $counter + 1
+               counter=$func_arith_result
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             oldobjs="$oldobjs $gentop/$newobj"
+             ;;
+           *) oldobjs="$oldobjs $obj" ;;
+           esac
+         done
+       fi
+       eval cmds=\"$old_archive_cmds\"
+
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         oldobjs=
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
+         for obj in $save_oldobjs
+         do
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj" ; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             objlist=
+             len=$len0
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test "X$oldobjs" = "X" ; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test "$installed" = yes; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output="$output_objdir/$outputname"i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+               newdependency_libs="$newdependency_libs $libdir/$name"
+               ;;
+             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             esac
+           done
+           dependency_libs="$newdependency_libs"
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlfiles="$newdlfiles $libdir/$name"
+               ;;
+             *) newdlfiles="$newdlfiles $lib" ;;
+             esac
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlprefiles="$newdlprefiles $libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles="$newdlprefiles"
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlfiles="$newdlfiles $abs"
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlprefiles="$newdlprefiles $abs"
+           done
+           dlprefiles="$newdlprefiles"
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test "$installed" = no && test "$need_relink" = yes; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) RM="$RM $arg"; rmforce=yes ;;
+      -*) RM="$RM $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+       objdir="$origobjdir"
+      else
+       objdir="$dir/$origobjdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+       case " $rmdirs " in
+         *" $objdir "*) ;;
+         *) rmdirs="$rmdirs $objdir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif test "$rmforce" = yes; then
+       continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           rmfiles="$rmfiles $objdir/$n"
+         done
+         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+         case "$mode" in
+         clean)
+           case "  $library_names " in
+           # "  " in the beginning catches empty $dlname
+           *" $dlname "*) ;;
+           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           esac
+           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" &&
+            test "$pic_object" != none; then
+           rmfiles="$rmfiles $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" &&
+            test "$non_pic_object" != none; then
+           rmfiles="$rmfiles $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test "$mode" = clean ; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           rmfiles="$rmfiles $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           if test "$fast_install" = yes && test -n "$relink_command"; then
+             rmfiles="$rmfiles $objdir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name" ; then
+             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644 (file)
index 0000000..654c415
--- /dev/null
@@ -0,0 +1,101 @@
+# iconv.m4 serial AM4 (gettext-0.11.3)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST(LIBICONV)
+  AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644 (file)
index 0000000..96c4e2c
--- /dev/null
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644 (file)
index 0000000..f95b7ba
--- /dev/null
@@ -0,0 +1,644 @@
+# lib-link.m4 serial 9 (gettext-0.16)
+dnl Copyright (C) 2001-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.50)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib$1-prefix],
+[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" \
+               && { test -f "$additional_libdir/lib$name.$shlibext" \
+                    || { test "$shlibext" = dll \
+                         && test -f "$additional_libdir/lib$name.dll.a"; }; }; then
+              found_dir="$additional_libdir"
+              if test -f "$additional_libdir/lib$name.$shlibext"; then
+                found_so="$additional_libdir/lib$name.$shlibext"
+              else
+                found_so="$additional_libdir/lib$name.dll.a"
+              fi
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" \
+                     && { test -f "$dir/lib$name.$shlibext" \
+                          || { test "$shlibext" = dll \
+                               && test -f "$dir/lib$name.dll.a"; }; }; then
+                    found_dir="$dir"
+                    if test -f "$dir/lib$name.$shlibext"; then
+                      found_so="$dir/lib$name.$shlibext"
+                    else
+                      found_so="$dir/lib$name.dll.a"
+                    fi
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644 (file)
index 0000000..a8684e1
--- /dev/null
@@ -0,0 +1,185 @@
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64. The current
+  dnl practice is that on a system supporting 32-bit and 64-bit instruction
+  dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+  dnl libraries go under $prefix/lib. We determine the compiler's default
+  dnl mode by looking at the compiler's library search path. If at least
+  dnl of its elements ends in /lib64 or points to a directory whose absolute
+  dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+  dnl default, namely "lib".
+  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644 (file)
index 0000000..671cde1
--- /dev/null
@@ -0,0 +1,7360 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file 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.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+        [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "[$]0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen="dlopen"],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Add ABI-specific directories to the system library path.
+  sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64 which still supported -KPIC.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd*)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         _LT_TAGVAR(whole_archive_flag_spec, $1)=
+         tmp_sharedflag='--shared' ;;
+       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       else
+         case $host_os in
+          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+            ;;
+          *)
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644 (file)
index 0000000..34151a3
--- /dev/null
@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644 (file)
index 0000000..9000a05
--- /dev/null
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+            [m4_foreach([_Lt_suffix],
+               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644 (file)
index 0000000..f3c5309
--- /dev/null
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file 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.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644 (file)
index 0000000..637bb20
--- /dev/null
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file 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.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/m4/pkg.m4 b/m4/pkg.m4
new file mode 100644 (file)
index 0000000..0048a3f
--- /dev/null
+++ b/m4/pkg.m4
@@ -0,0 +1,157 @@
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+               
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+    if test -n "$$1"; then
+        pkg_cv_[]$1="$$1"
+    else
+        PKG_CHECK_EXISTS([$3],
+                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+                        [pkg_failed=yes])
+    fi
+else
+       pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+               [AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+       ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+               [$4])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..1c8ff70
--- /dev/null
+++ b/missing
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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, 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.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case $1 in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $1 in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case $firstarg in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case $firstarg in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/packaging/sphinxbase.changes b/packaging/sphinxbase.changes
new file mode 100644 (file)
index 0000000..da25227
--- /dev/null
@@ -0,0 +1,2 @@
+* Fri Aug 31 21:47:09 UTC 2012 - jimmy.huang@intel.com
+- Intial import from upstream.
diff --git a/packaging/sphinxbase.spec b/packaging/sphinxbase.spec
new file mode 100644 (file)
index 0000000..a338425
--- /dev/null
@@ -0,0 +1,86 @@
+Name:       sphinxbase
+Version:    0.7
+Release:    1
+Group:      System/Libraries
+License:    BSD
+URL:        http://www.pocketsphinx.org/
+Summary:    Speech Recognition Engine
+Source:     http://sourceforge.net/projects/cmusphinx/files/%{name}/%{version}/%{name}-%{version}.tar.gz
+BuildRequires:  bison
+BuildRequires:  pkgconfig(python)
+BuildRequires:  python-setuptools
+
+%description
+Sphinxbase is a common library for CMU Sphinx voice recognition products.
+This package does not provide voice recognition by itself.
+
+%package devel
+Summary:        Header and other development files for sphinxbase
+Group:          Development/Libraries
+Requires:       %{name}-libs = %{version}-%{release}
+
+%description devel
+Header files and other development files for sphinxbase.
+
+%package libs
+Summary:        Libraries for sphinxbase
+Group:          Development/Libraries
+
+%description libs
+The libraries for sphinxbase.
+
+%package python
+Summary:        Python interface to sphinxbase
+Group:          Development/Libraries
+Requires:       %{name}-libs = %{version}-%{release}
+
+%description python
+Python interface to sphinxbase.
+
+%prep
+%setup -q
+
+%build
+%configure --disable-static --disable-rpath
+
+make %{?_smp_mflags}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT%{python_sitearch}
+make install DESTDIR=$RPM_BUILD_ROOT
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+
+# Install the man pages
+mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
+cp -p doc/*.1 $RPM_BUILD_ROOT%{_mandir}/man1
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post libs -p /sbin/ldconfig
+
+%postun libs -p /sbin/ldconfig
+
+%files
+%defattr(-,root,root,-)
+%{_bindir}/*
+%{_mandir}/man1/*
+
+%files devel
+%defattr(-,root,root,-)
+%{_includedir}/sphinxbase
+%{_libdir}/libsphinxad.so
+%{_libdir}/libsphinxbase.so
+%{_libdir}/pkgconfig/sphinxbase.pc
+
+%files libs
+%defattr(-,root,root,-)
+%doc AUTHORS ChangeLog COPYING NEWS README
+%{_libdir}/libsphinxad.so.*
+%{_libdir}/libsphinxbase.so.*
+
+%files python
+%defattr(-,root,root,-)
+%{python_sitearch}/*
+%changelog
diff --git a/python/Makefile.am b/python/Makefile.am
new file mode 100644 (file)
index 0000000..a720d70
--- /dev/null
@@ -0,0 +1,39 @@
+EXTRA_DIST = sphinxbase.c \
+       sphinxbase.pyx \
+       setup_win32.py \
+       sb_test.py \
+       hufftest2.py
+
+pkginclude_HEADERS = sphinxbase.pxd
+
+if BUILD_PYTHON
+# Setuptools isn't really compatible with distutils, unfortunately
+SETUPTOOLS_CRAP = `python -c 'import setuptools' 2>/dev/null \
+       && echo --single-version-externally-managed --record filelist.txt`
+
+all-local: pymod-build-stamp
+
+install-exec-local: pymod-build-stamp
+       $(PYTHON) setup.py install --prefix $(DESTDIR)$(prefix) $(SETUPTOOLS_CRAP)
+
+uninstall-local:
+       $(PYTHON) setup.py bogus_uninstall --prefix $(DESTDIR)$(prefix)
+
+clean-local:
+       $(PYTHON) setup.py clean --all
+# This is dumb, but distutils is completely incapable of VPATH building
+       test -z "$(VPATH)" || $(RM) sphinxbase.c
+       $(RM) -r *.egg-info
+       $(RM) pymod-build-stamp filelist.txt
+
+pymod-build-stamp: $(srcdir)/sphinxbase.c
+# This is dumb, but distutils is completely incapable of VPATH building
+       test -z "$(VPATH)" || cp "$(srcdir)/sphinxbase.c" sphinxbase.c
+       $(PYTHON) setup.py build
+       touch $@
+endif
+
+if BUILD_CYTHON
+$(srcdir)/sphinxbase.c: $(srcdir)/sphinxbase.pyx $(srcdir)/sphinxbase.pxd
+       cython -o $@ $<
+endif
diff --git a/python/Makefile.in b/python/Makefile.in
new file mode 100644 (file)
index 0000000..00c9ab9
--- /dev/null
@@ -0,0 +1,463 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = python
+DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/setup.py.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES = setup.py
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgincludedir)"
+pkgincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(pkginclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = sphinxbase.c \
+       sphinxbase.pyx \
+       setup_win32.py \
+       sb_test.py \
+       hufftest2.py
+
+pkginclude_HEADERS = sphinxbase.pxd
+
+# Setuptools isn't really compatible with distutils, unfortunately
+@BUILD_PYTHON_TRUE@SETUPTOOLS_CRAP = `python -c 'import setuptools' 2>/dev/null \
+@BUILD_PYTHON_TRUE@    && echo --single-version-externally-managed --record filelist.txt`
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  python/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  python/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
+setup.py: $(top_builddir)/config.status $(srcdir)/setup.py.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-pkgincludeHEADERS: $(pkginclude_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
+       @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pkgincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+         $(pkgincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgincludedir)/$$f"; \
+       done
+
+uninstall-pkgincludeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkginclude_HEADERS)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pkgincludedir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pkgincludedir)/$$f"; \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+@BUILD_PYTHON_FALSE@all-local:
+all-am: Makefile $(HEADERS) all-local
+installdirs:
+       for dir in "$(DESTDIR)$(pkgincludedir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+
+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."
+@BUILD_PYTHON_FALSE@uninstall-local:
+@BUILD_PYTHON_FALSE@install-exec-local:
+@BUILD_PYTHON_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-exec-local
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+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 mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-pkgincludeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+       clean-generic clean-libtool clean-local ctags distclean \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-exec-local install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-pkgincludeHEADERS \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am uninstall-local uninstall-pkgincludeHEADERS
+
+
+@BUILD_PYTHON_TRUE@all-local: pymod-build-stamp
+
+@BUILD_PYTHON_TRUE@install-exec-local: pymod-build-stamp
+@BUILD_PYTHON_TRUE@    $(PYTHON) setup.py install --prefix $(DESTDIR)$(prefix) $(SETUPTOOLS_CRAP)
+
+@BUILD_PYTHON_TRUE@uninstall-local:
+@BUILD_PYTHON_TRUE@    $(PYTHON) setup.py bogus_uninstall --prefix $(DESTDIR)$(prefix)
+
+@BUILD_PYTHON_TRUE@clean-local:
+@BUILD_PYTHON_TRUE@    $(PYTHON) setup.py clean --all
+# This is dumb, but distutils is completely incapable of VPATH building
+@BUILD_PYTHON_TRUE@    test -z "$(VPATH)" || $(RM) sphinxbase.c
+@BUILD_PYTHON_TRUE@    $(RM) -r *.egg-info
+@BUILD_PYTHON_TRUE@    $(RM) pymod-build-stamp filelist.txt
+
+@BUILD_PYTHON_TRUE@pymod-build-stamp: $(srcdir)/sphinxbase.c
+# This is dumb, but distutils is completely incapable of VPATH building
+@BUILD_PYTHON_TRUE@    test -z "$(VPATH)" || cp "$(srcdir)/sphinxbase.c" sphinxbase.c
+@BUILD_PYTHON_TRUE@    $(PYTHON) setup.py build
+@BUILD_PYTHON_TRUE@    touch $@
+
+@BUILD_CYTHON_TRUE@$(srcdir)/sphinxbase.c: $(srcdir)/sphinxbase.pyx $(srcdir)/sphinxbase.pxd
+@BUILD_CYTHON_TRUE@    cython -o $@ $<
+# 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/python/hufftest2.py b/python/hufftest2.py
new file mode 100644 (file)
index 0000000..adbc3ce
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+
+import sphinxbase
+import sys
+
+hc = sphinxbase.HuffCode(((1, 42), (2, 4), (3, 5), (4, 6), (5, 225), (6, 15001), (7, 3), (8, 2), (9, 87), (10, 1003)))
+hc.dump(sys.stdout)
+data, bits = hc.encode((1,2,3,4,5))
+dstr = "".join([("%02x" % ord(b)) for b in data])
+print "encoding", (1,2,3,4,5), "=>", (dstr, bits)
+print "decoded to", hc.decode(data)
diff --git a/python/sb_test.py b/python/sb_test.py
new file mode 100644 (file)
index 0000000..5a65f33
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+
+import sphinxbase
+import sys
+
+lm = sphinxbase.NGramModel("../test/unit/test_ngram/100.arpa.DMP")
+for ng in lm.mgrams(0):
+    print ng.log_prob, ng.log_bowt
+lm.write("100.arpa.DMP")
+lm.casefold(sphinxbase.UPPER)
+lm.write("100.arpa")
+
+hc = sphinxbase.HuffCode((("foo", 42), ("bar", 4), ("baz", 5), ("quux", 6), ("argh", 225), ("hurf", 15001), ("burf", 3), ("blatz", 2), ("unf", 87), ("woof", 1003)))
+hc.dump(sys.stdout)
+data, bits = hc.encode(("hurf", "burf", "blatz", "unf", "woof"))
+dstr = "".join([("%02x" % ord(b)) for b in data])
+print "encoding", ("hurf", "burf", "blatz", "unf", "woof"), "=>", (dstr, bits)
+print "decoded to", hc.decode(data)
+
+hc.write("foo.huff")
+hc = sphinxbase.HuffCode(infile="foo.huff")
+data, bits = hc.encode(("hurf", "burf", "blatz", "unf", "woof"))
+dstr = "".join([("%02x" % ord(b)) for b in data])
+print "encoding", ("hurf", "burf", "blatz", "unf", "woof"), "=>", (dstr, bits)
+print "decoded to", hc.decode(data)
+
+hc.attach("foo.bin", "wb")
+hc.encode_to_file(("hurf", "burf", "blatz", "unf", "woof"))
+hc.encode_to_file(("burf", "blatz", "woof", "unf", "woof"))
+hc.detach()
+
+hc.attach("foo.bin", "rb")
+syms = []
+while True:
+    sym = hc.decode_from_file()
+    if sym == None:
+        break
+    syms.append(sym)
+print "decoded", syms
+hc.detach()
diff --git a/python/setup.py.in b/python/setup.py.in
new file mode 100644 (file)
index 0000000..1f84ef3
--- /dev/null
@@ -0,0 +1,71 @@
+try:
+    from setuptools import setup, Extension
+except:
+    from distutils.core import setup, Extension
+
+import distutils.command.install
+import os
+import sys
+
+class bogus_uninstall(distutils.command.install.install):
+    """
+    Slightly bogus uninstall, just here to satisfy automake's make
+    distcheck.  Do NOT actually use this to uninstall the module!
+    """
+    def run(self):
+        # I believe the word 'bogus' is operative here.  When we run
+        # get_outputs() it will create subcommands, which will try to
+        # create the original 'install' object, which does not exist
+        # at this point.  We need to make sure that the --prefix
+        # argument gets propagated to said object.  This is not the
+        # right way to do that, but it works, for now.
+        install = self.distribution.get_command_obj('install')
+        install.prefix = self.prefix
+        install.ensure_finalized()
+        dirs = {}
+        for f in self.get_outputs():
+            dirs[os.path.dirname(f)] = 1
+            if os.path.isdir(f):
+               dirs[f] = 1
+               continue
+            print "Trying to remove file", f
+            try:
+                os.unlink(f)
+            except:
+                pass
+        # Gently try to remove any empty directories.
+        # This is really not guaranteed to work!!!
+        for d in dirs:
+            while d != self.prefix:
+                print "Trying to remove dir", d
+                try:
+                   if d.endswith(".egg-info"):
+                       files=[os.path.join(d,f) for f in os.listdir(d)]
+                       print "Trying to remove:", " ".join(files)
+                       for f in files: os.unlink(f)
+                    os.rmdir(d)
+                except:
+                    pass
+                d = os.path.dirname(d)
+
+libraries = ['sphinxbase']
+if sys.platform == "cygwin":
+      libraries.append("iconv")
+
+setup(name = 'SphinxBase',
+      version = '@VERSION@',
+      author = 'David Huggins-Daines',
+      author_email = 'dhuggins@cs.cmu.edu',
+      description = 'Python interface to CMU Sphinx base libraries',
+      license = 'BSD',
+      url = 'http://cmusphinx.org',
+      ext_modules = [
+        Extension('sphinxbase',
+                   sources=['sphinxbase.c'],
+                   libraries=libraries,
+                   include_dirs=['@top_builddir@/include',
+                                 '@top_srcdir@/include'],
+                   library_dirs=['@top_builddir@/src/libsphinxbase/.libs'])
+        ],
+      cmdclass = {'bogus_uninstall' : bogus_uninstall}
+     ) 
diff --git a/python/setup_win32.py b/python/setup_win32.py
new file mode 100644 (file)
index 0000000..ad89069
--- /dev/null
@@ -0,0 +1,24 @@
+try:
+    from setuptools import setup, Extension
+except:
+    from distutils.core import setup, Extension
+
+import os
+
+setup(name = 'SphinxBase',
+      version = '0.6',
+      author = 'David Huggins-Daines',
+      author_email = 'dhuggins@cs.cmu.edu',
+      description = 'Python interface to CMU Sphinx base libraries',
+      license = 'BSD',
+      url = 'http://cmusphinx.org',
+      ext_modules = [
+        Extension('sphinxbase',
+                   sources=['sphinxbase.c'],
+                   libraries=['sphinxbase'],
+                  define_macros = [('WIN32', '1')],
+                   include_dirs=['../include',
+                                 '../include/win32'],
+                   library_dirs=['../lib/debug'])
+        ],
+     ) 
diff --git a/python/sphinxbase.c b/python/sphinxbase.c
new file mode 100644 (file)
index 0000000..31b2582
--- /dev/null
@@ -0,0 +1,7984 @@
+/* Generated by Cython 0.12.1 on Mon May 16 07:44:10 2011 */
+
+#define PY_SSIZE_T_CLEAN
+#include "Python.h"
+#include "structmember.h"
+#ifndef Py_PYTHON_H
+    #error Python headers needed to compile C extensions, please install development version of Python.
+#else
+
+#ifndef PY_LONG_LONG
+  #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef DL_EXPORT
+  #define DL_EXPORT(t) t
+#endif
+#if PY_VERSION_HEX < 0x02040000
+  #define METH_COEXIST 0
+  #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
+  #define PyDict_Contains(d,o)   PySequence_Contains(d,o)
+#endif
+
+#if PY_VERSION_HEX < 0x02050000
+  typedef int Py_ssize_t;
+  #define PY_SSIZE_T_MAX INT_MAX
+  #define PY_SSIZE_T_MIN INT_MIN
+  #define PY_FORMAT_SIZE_T ""
+  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
+  #define PyInt_AsSsize_t(o)   PyInt_AsLong(o)
+  #define PyNumber_Index(o)    PyNumber_Int(o)
+  #define PyIndex_Check(o)     PyNumber_Check(o)
+  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
+#endif
+
+#if PY_VERSION_HEX < 0x02060000
+  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
+  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
+  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
+  #define PyVarObject_HEAD_INIT(type, size) \
+          PyObject_HEAD_INIT(type) size,
+  #define PyType_Modified(t)
+
+  typedef struct {
+     void *buf;
+     PyObject *obj;
+     Py_ssize_t len;
+     Py_ssize_t itemsize;
+     int readonly;
+     int ndim;
+     char *format;
+     Py_ssize_t *shape;
+     Py_ssize_t *strides;
+     Py_ssize_t *suboffsets;
+     void *internal;
+  } Py_buffer;
+
+  #define PyBUF_SIMPLE 0
+  #define PyBUF_WRITABLE 0x0001
+  #define PyBUF_FORMAT 0x0004
+  #define PyBUF_ND 0x0008
+  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
+  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
+  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
+  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
+  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
+
+#endif
+
+#if PY_MAJOR_VERSION < 3
+  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+#else
+  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+  #define Py_TPFLAGS_CHECKTYPES 0
+  #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+
+#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+  #define PyBaseString_Type            PyUnicode_Type
+  #define PyString_Type                PyUnicode_Type
+  #define PyString_CheckExact          PyUnicode_CheckExact
+#else
+  #define PyBytes_Type                 PyString_Type
+  #define PyBytes_CheckExact           PyString_CheckExact
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+  #define PyInt_Type                   PyLong_Type
+  #define PyInt_Check(op)              PyLong_Check(op)
+  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
+  #define PyInt_FromString             PyLong_FromString
+  #define PyInt_FromUnicode            PyLong_FromUnicode
+  #define PyInt_FromLong               PyLong_FromLong
+  #define PyInt_FromSize_t             PyLong_FromSize_t
+  #define PyInt_FromSsize_t            PyLong_FromSsize_t
+  #define PyInt_AsLong                 PyLong_AsLong
+  #define PyInt_AS_LONG                PyLong_AS_LONG
+  #define PyInt_AsSsize_t              PyLong_AsSsize_t
+  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
+  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+  #define PyMethod_New(func, self, klass) PyInstanceMethod_New(func)
+#endif
+
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+  #ifndef __stdcall
+    #define __stdcall
+  #endif
+  #ifndef __cdecl
+    #define __cdecl
+  #endif
+  #ifndef __fastcall
+    #define __fastcall
+  #endif
+#else
+  #define _USE_MATH_DEFINES
+#endif
+
+#if PY_VERSION_HEX < 0x02050000
+  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
+  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
+  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
+#else
+  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
+  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
+  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
+#endif
+
+#if PY_VERSION_HEX < 0x02050000
+  #define __Pyx_NAMESTR(n) ((char *)(n))
+  #define __Pyx_DOCSTR(n)  ((char *)(n))
+#else
+  #define __Pyx_NAMESTR(n) (n)
+  #define __Pyx_DOCSTR(n)  (n)
+#endif
+#ifdef __cplusplus
+#define __PYX_EXTERN_C extern "C"
+#else
+#define __PYX_EXTERN_C extern
+#endif
+#include <math.h>
+#define __PYX_HAVE_API__sphinxbase
+#include "sphinxbase/logmath.h"
+#include "sphinxbase/cmd_ln.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/fsg_model.h"
+#include "sphinxbase/ngram_model.h"
+#include "sphinxbase/huff_code.h"
+
+#ifndef CYTHON_INLINE
+  #if defined(__GNUC__)
+    #define CYTHON_INLINE __inline__
+  #elif defined(_MSC_VER)
+    #define CYTHON_INLINE __inline
+  #else
+    #define CYTHON_INLINE 
+  #endif
+#endif
+
+typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
+
+
+/* Type Conversion Predeclarations */
+
+#if PY_MAJOR_VERSION < 3
+#define __Pyx_PyBytes_FromString          PyString_FromString
+#define __Pyx_PyBytes_FromStringAndSize   PyString_FromStringAndSize
+#define __Pyx_PyBytes_AsString            PyString_AsString
+#else
+#define __Pyx_PyBytes_FromString          PyBytes_FromString
+#define __Pyx_PyBytes_FromStringAndSize   PyBytes_FromStringAndSize
+#define __Pyx_PyBytes_AsString            PyBytes_AsString
+#endif
+
+#define __Pyx_PyBytes_FromUString(s)      __Pyx_PyBytes_FromString((char*)s)
+#define __Pyx_PyBytes_AsUString(s)        ((unsigned char*) __Pyx_PyBytes_AsString(s))
+
+#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
+
+#if !defined(T_PYSSIZET)
+#if PY_VERSION_HEX < 0x02050000
+#define T_PYSSIZET T_INT
+#elif !defined(T_LONGLONG)
+#define T_PYSSIZET \
+        ((sizeof(Py_ssize_t) == sizeof(int))  ? T_INT  : \
+        ((sizeof(Py_ssize_t) == sizeof(long)) ? T_LONG : -1))
+#else
+#define T_PYSSIZET \
+        ((sizeof(Py_ssize_t) == sizeof(int))          ? T_INT      : \
+        ((sizeof(Py_ssize_t) == sizeof(long))         ? T_LONG     : \
+        ((sizeof(Py_ssize_t) == sizeof(PY_LONG_LONG)) ? T_LONGLONG : -1)))
+#endif
+#endif
+
+
+#if !defined(T_ULONGLONG)
+#define __Pyx_T_UNSIGNED_INT(x) \
+        ((sizeof(x) == sizeof(unsigned char))  ? T_UBYTE : \
+        ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \
+        ((sizeof(x) == sizeof(unsigned int))   ? T_UINT : \
+        ((sizeof(x) == sizeof(unsigned long))  ? T_ULONG : -1))))
+#else
+#define __Pyx_T_UNSIGNED_INT(x) \
+        ((sizeof(x) == sizeof(unsigned char))  ? T_UBYTE : \
+        ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \
+        ((sizeof(x) == sizeof(unsigned int))   ? T_UINT : \
+        ((sizeof(x) == sizeof(unsigned long))  ? T_ULONG : \
+        ((sizeof(x) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1)))))
+#endif
+#if !defined(T_LONGLONG)
+#define __Pyx_T_SIGNED_INT(x) \
+        ((sizeof(x) == sizeof(char))  ? T_BYTE : \
+        ((sizeof(x) == sizeof(short)) ? T_SHORT : \
+        ((sizeof(x) == sizeof(int))   ? T_INT : \
+        ((sizeof(x) == sizeof(long))  ? T_LONG : -1))))
+#else
+#define __Pyx_T_SIGNED_INT(x) \
+        ((sizeof(x) == sizeof(char))  ? T_BYTE : \
+        ((sizeof(x) == sizeof(short)) ? T_SHORT : \
+        ((sizeof(x) == sizeof(int))   ? T_INT : \
+        ((sizeof(x) == sizeof(long))  ? T_LONG : \
+        ((sizeof(x) == sizeof(PY_LONG_LONG))   ? T_LONGLONG : -1)))))
+#endif
+
+#define __Pyx_T_FLOATING(x) \
+        ((sizeof(x) == sizeof(float)) ? T_FLOAT : \
+        ((sizeof(x) == sizeof(double)) ? T_DOUBLE : -1))
+
+#if !defined(T_SIZET)
+#if !defined(T_ULONGLONG)
+#define T_SIZET \
+        ((sizeof(size_t) == sizeof(unsigned int))  ? T_UINT  : \
+        ((sizeof(size_t) == sizeof(unsigned long)) ? T_ULONG : -1))
+#else
+#define T_SIZET \
+        ((sizeof(size_t) == sizeof(unsigned int))          ? T_UINT      : \
+        ((sizeof(size_t) == sizeof(unsigned long))         ? T_ULONG     : \
+        ((sizeof(size_t) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1)))
+#endif
+#endif
+
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
+
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+
+
+#ifdef __GNUC__
+/* Test for GCC > 2.95 */
+#if __GNUC__ > 2 ||               (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) 
+#define likely(x)   __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* __GNUC__ > 2 ... */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ > 2 ... */
+#else /* __GNUC__ */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ */
+    
+static PyObject *__pyx_m;
+static PyObject *__pyx_b;
+static PyObject *__pyx_empty_tuple;
+static PyObject *__pyx_empty_bytes;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+static const char **__pyx_f;
+
+
+typedef float __pyx_t_10sphinxbase_float32;
+
+typedef int __pyx_t_10sphinxbase_int32;
+
+typedef double __pyx_t_10sphinxbase_float64;
+
+/* Type declarations */
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pxd":149
+ *     cdef logmath_t *lmath
+ * 
+ * cdef class NGramIter:             # <<<<<<<<<<<<<<
+ *     cdef NGramModel lm
+ *     cdef ngram_iter_t *itor
+ */
+
+struct __pyx_obj_10sphinxbase_NGramIter {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_10sphinxbase_NGramIter *__pyx_vtab;
+  struct __pyx_obj_10sphinxbase_NGramModel *lm;
+  ngram_iter_t *itor;
+  int first_item;
+  int m;
+  float log_prob;
+  float log_bowt;
+  PyObject *words;
+};
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pxd":159
+ *     cdef set_iter(NGramIter self, ngram_iter_t *itor)
+ * 
+ * cdef class HuffCode:             # <<<<<<<<<<<<<<
+ *     cdef huff_code_t *hc
+ *     cdef object fh
+ */
+
+struct __pyx_obj_10sphinxbase_HuffCode {
+  PyObject_HEAD
+  huff_code_t *hc;
+  PyObject *fh;
+};
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pxd":138
+ * 
+ * # Extension classes
+ * cdef class NGramModel:             # <<<<<<<<<<<<<<
+ *     cdef ngram_model_t *lm
+ *     cdef logmath_t *lmath
+ */
+
+struct __pyx_obj_10sphinxbase_NGramModel {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_10sphinxbase_NGramModel *__pyx_vtab;
+  ngram_model_t *lm;
+  logmath_t *lmath;
+  float lw;
+  float wip;
+  float uw;
+};
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pxd":146
+ *     cdef set_lmath(NGramModel self, logmath_t *lmath)
+ * 
+ * cdef class LogMath:             # <<<<<<<<<<<<<<
+ *     cdef logmath_t *lmath
+ * 
+ */
+
+struct __pyx_obj_10sphinxbase_LogMath {
+  PyObject_HEAD
+  logmath_t *lmath;
+};
+
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":390
+ *             raise ValueError, "Write %s to file failed" % file_name
+ * 
+ * cdef class NGramIter:             # <<<<<<<<<<<<<<
+ *     """
+ *     N-Gram language model iterator class.
+ */
+
+struct __pyx_vtabstruct_10sphinxbase_NGramIter {
+  PyObject *(*set_iter)(struct __pyx_obj_10sphinxbase_NGramIter *, ngram_iter_t *);
+};
+static struct __pyx_vtabstruct_10sphinxbase_NGramIter *__pyx_vtabptr_10sphinxbase_NGramIter;
+
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":128
+ * LOWER = NGRAM_LOWER
+ * 
+ * cdef class NGramModel:             # <<<<<<<<<<<<<<
+ *     """
+ *     N-Gram language model class.
+ */
+
+struct __pyx_vtabstruct_10sphinxbase_NGramModel {
+  PyObject *(*set_lm)(struct __pyx_obj_10sphinxbase_NGramModel *, ngram_model_t *);
+  PyObject *(*set_lmath)(struct __pyx_obj_10sphinxbase_NGramModel *, logmath_t *);
+};
+static struct __pyx_vtabstruct_10sphinxbase_NGramModel *__pyx_vtabptr_10sphinxbase_NGramModel;
+
+#ifndef CYTHON_REFNANNY
+  #define CYTHON_REFNANNY 0
+#endif
+
+#if CYTHON_REFNANNY
+  typedef struct {
+    void (*INCREF)(void*, PyObject*, int);
+    void (*DECREF)(void*, PyObject*, int);
+    void (*GOTREF)(void*, PyObject*, int);
+    void (*GIVEREF)(void*, PyObject*, int);
+    void* (*SetupContext)(const char*, int, const char*);
+    void (*FinishContext)(void**);
+  } __Pyx_RefNannyAPIStruct;
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+  static __Pyx_RefNannyAPIStruct * __Pyx_RefNannyImportAPI(const char *modname) {
+    PyObject *m = NULL, *p = NULL;
+    void *r = NULL;
+    m = PyImport_ImportModule((char *)modname);
+    if (!m) goto end;
+    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
+    if (!p) goto end;
+    r = PyLong_AsVoidPtr(p);
+  end:
+    Py_XDECREF(p);
+    Py_XDECREF(m);
+    return (__Pyx_RefNannyAPIStruct *)r;
+  }
+  #define __Pyx_RefNannySetupContext(name)           void *__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+  #define __Pyx_RefNannyFinishContext()           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+  #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r);} } while(0)
+#else
+  #define __Pyx_RefNannySetupContext(name)
+  #define __Pyx_RefNannyFinishContext()
+  #define __Pyx_INCREF(r) Py_INCREF(r)
+  #define __Pyx_DECREF(r) Py_DECREF(r)
+  #define __Pyx_GOTREF(r)
+  #define __Pyx_GIVEREF(r)
+  #define __Pyx_XDECREF(r) Py_XDECREF(r)
+#endif /* CYTHON_REFNANNY */
+#define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);} } while(0)
+#define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r);} } while(0)
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name, PyObject* kw_name); /*proto*/
+
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
+
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
+
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
+    if (likely(PyList_CheckExact(L))) {
+        if (PyList_Append(L, x) < 0) return NULL;
+        Py_INCREF(Py_None);
+        return Py_None; /* this is just to have an accurate signature */
+    }
+    else {
+        PyObject *r, *m;
+        m = __Pyx_GetAttrString(L, "append");
+        if (!m) return NULL;
+        r = PyObject_CallFunctionObjArgs(m, x, NULL);
+        Py_DECREF(m);
+        return r;
+    }
+}
+
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(void);
+
+static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/
+static int __Pyx_EndUnpack(PyObject *); /*proto*/
+
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+
+
+#define __Pyx_GetItemInt_List(o, i, size, to_py_func) ((size <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_List_Fast(o, i, size <= sizeof(long)) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int fits_long) {
+    if (likely(o != Py_None)) {
+        if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+            PyObject *r = PyList_GET_ITEM(o, i);
+            Py_INCREF(r);
+            return r;
+        }
+        else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
+            PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    return __Pyx_GetItemInt_Generic(o, fits_long ? PyInt_FromLong(i) : PyLong_FromLongLong(i));
+}
+
+#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) ((size <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_Tuple_Fast(o, i, size <= sizeof(long)) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int fits_long) {
+    if (likely(o != Py_None)) {
+        if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, i);
+            Py_INCREF(r);
+            return r;
+        }
+        else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
+            PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    return __Pyx_GetItemInt_Generic(o, fits_long ? PyInt_FromLong(i) : PyLong_FromLongLong(i));
+}
+
+
+#define __Pyx_GetItemInt(o, i, size, to_py_func) ((size <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_Fast(o, i, size <= sizeof(long)) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int fits_long) {
+    PyObject *r;
+    if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+    }
+    else if (PyTuple_CheckExact(o) && ((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+        r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+    }
+    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0))) {
+        r = PySequence_GetItem(o, i);
+    }
+    else {
+        r = __Pyx_GetItemInt_Generic(o, fits_long ? PyInt_FromLong(i) : PyLong_FromLongLong(i));
+    }
+    return r;
+}
+
+static CYTHON_INLINE long __Pyx_div_long(long, long); /* proto */
+
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact); /*proto*/
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+
+static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
+
+static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
+
+static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
+
+static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
+
+static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
+
+static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
+
+static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
+
+static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
+
+static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
+
+static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
+
+static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
+
+static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
+
+static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
+
+static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
+
+static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+
+static void __Pyx_AddTraceback(const char *funcname); /*proto*/
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+/* Module declarations from sphinxbase */
+
+static PyTypeObject *__pyx_ptype_10sphinxbase_NGramModel = 0;
+static PyTypeObject *__pyx_ptype_10sphinxbase_LogMath = 0;
+static PyTypeObject *__pyx_ptype_10sphinxbase_NGramIter = 0;
+static PyTypeObject *__pyx_ptype_10sphinxbase_HuffCode = 0;
+#define __Pyx_MODULE_NAME "sphinxbase"
+int __pyx_module_is_main_sphinxbase = 0;
+
+/* Implementation of sphinxbase */
+static PyObject *__pyx_builtin_range;
+static PyObject *__pyx_builtin_ValueError;
+static PyObject *__pyx_builtin_StopIteration;
+static PyObject *__pyx_builtin_ord;
+static PyObject *__pyx_builtin_min;
+static PyObject *__pyx_builtin_enumerate;
+static PyObject *__pyx_builtin_RuntimeError;
+static char __pyx_k_9[] = "Recode from %s to %s failed";
+static char __pyx_k_10[] = "Casefolding failed";
+static char __pyx_k_12[] = "Write %s to file failed";
+static char __pyx_k_13[] = "";
+static char __pyx_k_14[] = "%d";
+static char __pyx_k_15[] = "%s";
+static char __pyx_k_16[] = "One of alphabet or infile must be passed to constructor";
+static char __pyx_k_17[] = "Only one of alphabet or infile must be passed to constructor";
+static char __pyx_k_18[] = "Invalid data at position %d";
+static char __pyx_k_19[] = "No file is attached";
+static char __pyx_k__a[] = "a";
+static char __pyx_k__b[] = "b";
+static char __pyx_k__m[] = "m";
+static char __pyx_k__w[] = "w";
+static char __pyx_k__cw[] = "cw";
+static char __pyx_k__fh[] = "fh";
+static char __pyx_k__hc[] = "hc";
+static char __pyx_k__lm[] = "lm";
+static char __pyx_k__lw[] = "lw";
+static char __pyx_k__rb[] = "rb";
+static char __pyx_k__uw[] = "uw";
+static char __pyx_k__wb[] = "wb";
+static char __pyx_k__DMP[] = "DMP";
+static char __pyx_k__min[] = "min";
+static char __pyx_k__ord[] = "ord";
+static char __pyx_k__too[] = "too";
+static char __pyx_k__val[] = "val";
+static char __pyx_k__wip[] = "wip";
+static char __pyx_k__ARPA[] = "ARPA";
+static char __pyx_k__AUTO[] = "AUTO";
+static char __pyx_k__base[] = "base";
+static char __pyx_k__file[] = "file";
+static char __pyx_k__frum[] = "frum";
+static char __pyx_k__itor[] = "itor";
+static char __pyx_k__mode[] = "mode";
+static char __pyx_k__read[] = "read";
+static char __pyx_k__word[] = "word";
+static char __pyx_k__LOWER[] = "LOWER";
+static char __pyx_k__UPPER[] = "UPPER";
+static char __pyx_k__lmath[] = "lmath";
+static char __pyx_k__lmctl[] = "lmctl";
+static char __pyx_k__nbits[] = "nbits";
+static char __pyx_k__range[] = "range";
+static char __pyx_k__shift[] = "shift";
+static char __pyx_k__words[] = "words";
+static char __pyx_k__detach[] = "detach";
+static char __pyx_k__format[] = "format";
+static char __pyx_k__infile[] = "infile";
+static char __pyx_k__weight[] = "weight";
+static char __pyx_k____main__[] = "__main__";
+static char __pyx_k__alphabet[] = "alphabet";
+static char __pyx_k__log_bowt[] = "log_bowt";
+static char __pyx_k__log_prob[] = "log_prob";
+static char __pyx_k__set_iter[] = "set_iter";
+static char __pyx_k__enumerate[] = "enumerate";
+static char __pyx_k__file_name[] = "file_name";
+static char __pyx_k__use_table[] = "use_table";
+static char __pyx_k__ValueError[] = "ValueError";
+static char __pyx_k__first_item[] = "first_item";
+static char __pyx_k__RuntimeError[] = "RuntimeError";
+static char __pyx_k__StopIteration[] = "StopIteration";
+static PyObject *__pyx_kp_s_10;
+static PyObject *__pyx_kp_s_12;
+static PyObject *__pyx_kp_s_13;
+static PyObject *__pyx_kp_s_14;
+static PyObject *__pyx_kp_s_15;
+static PyObject *__pyx_kp_s_16;
+static PyObject *__pyx_kp_s_17;
+static PyObject *__pyx_kp_s_18;
+static PyObject *__pyx_kp_s_19;
+static PyObject *__pyx_kp_s_9;
+static PyObject *__pyx_n_s__ARPA;
+static PyObject *__pyx_n_s__AUTO;
+static PyObject *__pyx_n_s__DMP;
+static PyObject *__pyx_n_s__LOWER;
+static PyObject *__pyx_n_s__RuntimeError;
+static PyObject *__pyx_n_s__StopIteration;
+static PyObject *__pyx_n_s__UPPER;
+static PyObject *__pyx_n_s__ValueError;
+static PyObject *__pyx_n_s____main__;
+static PyObject *__pyx_n_s__a;
+static PyObject *__pyx_n_s__alphabet;
+static PyObject *__pyx_n_s__b;
+static PyObject *__pyx_n_s__base;
+static PyObject *__pyx_n_s__cw;
+static PyObject *__pyx_n_s__detach;
+static PyObject *__pyx_n_s__enumerate;
+static PyObject *__pyx_n_s__fh;
+static PyObject *__pyx_n_s__file;
+static PyObject *__pyx_n_s__file_name;
+static PyObject *__pyx_n_s__first_item;
+static PyObject *__pyx_n_s__format;
+static PyObject *__pyx_n_s__frum;
+static PyObject *__pyx_n_s__hc;
+static PyObject *__pyx_n_s__infile;
+static PyObject *__pyx_n_s__itor;
+static PyObject *__pyx_n_s__lm;
+static PyObject *__pyx_n_s__lmath;
+static PyObject *__pyx_n_s__lmctl;
+static PyObject *__pyx_n_s__log_bowt;
+static PyObject *__pyx_n_s__log_prob;
+static PyObject *__pyx_n_s__lw;
+static PyObject *__pyx_n_s__m;
+static PyObject *__pyx_n_s__min;
+static PyObject *__pyx_n_s__mode;
+static PyObject *__pyx_n_s__nbits;
+static PyObject *__pyx_n_s__ord;
+static PyObject *__pyx_n_s__range;
+static PyObject *__pyx_n_s__rb;
+static PyObject *__pyx_n_s__read;
+static PyObject *__pyx_n_s__set_iter;
+static PyObject *__pyx_n_s__shift;
+static PyObject *__pyx_n_s__too;
+static PyObject *__pyx_n_s__use_table;
+static PyObject *__pyx_n_s__uw;
+static PyObject *__pyx_n_s__val;
+static PyObject *__pyx_n_s__w;
+static PyObject *__pyx_n_s__wb;
+static PyObject *__pyx_n_s__weight;
+static PyObject *__pyx_n_s__wip;
+static PyObject *__pyx_n_s__word;
+static PyObject *__pyx_n_s__words;
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_8;
+static PyObject *__pyx_k_1;
+static PyObject *__pyx_k_2;
+static PyObject *__pyx_k_3;
+static PyObject *__pyx_k_4;
+static PyObject *__pyx_k_5;
+static PyObject *__pyx_k_6;
+static PyObject *__pyx_k_7;
+static PyObject *__pyx_k_8;
+static PyObject *__pyx_k_11;
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":24
+ *     @type use_table: bool
+ *     """
+ *     def __init__(self, base=1.0001, shift=0, use_table=1):             # <<<<<<<<<<<<<<
+ *         self.lmath = logmath_init(base, shift, use_table)
+ * 
+ */
+
+static int __pyx_pf_10sphinxbase_7LogMath___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_10sphinxbase_7LogMath___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_base = 0;
+  PyObject *__pyx_v_shift = 0;
+  PyObject *__pyx_v_use_table = 0;
+  int __pyx_r;
+  __pyx_t_10sphinxbase_float64 __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__base,&__pyx_n_s__shift,&__pyx_n_s__use_table,0};
+  __Pyx_RefNannySetupContext("__init__");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[3] = {0,0,0};
+    values[0] = __pyx_k_1;
+    values[1] = ((PyObject *)__pyx_int_0);
+    values[2] = ((PyObject *)__pyx_int_1);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__base);
+        if (unlikely(value)) { values[0] = value; kw_args--; }
+      }
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__shift);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+      case  2:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__use_table);
+        if (unlikely(value)) { values[2] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_base = values[0];
+    __pyx_v_shift = values[1];
+    __pyx_v_use_table = values[2];
+  } else {
+    __pyx_v_base = __pyx_k_1;
+    __pyx_v_shift = ((PyObject *)__pyx_int_0);
+    __pyx_v_use_table = ((PyObject *)__pyx_int_1);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: __pyx_v_use_table = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: __pyx_v_shift = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_base = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.LogMath.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":25
+ *     """
+ *     def __init__(self, base=1.0001, shift=0, use_table=1):
+ *         self.lmath = logmath_init(base, shift, use_table)             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(self):
+ */
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_base); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_v_shift); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_v_use_table); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath = logmath_init(__pyx_t_1, __pyx_t_2, __pyx_t_3);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("sphinxbase.LogMath.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":27
+ *         self.lmath = logmath_init(base, shift, use_table)
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Destructor for LogMath class.
+ */
+
+static void __pyx_pf_10sphinxbase_7LogMath___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath___dealloc__[] = "\n        Destructor for LogMath class.\n        ";
+static void __pyx_pf_10sphinxbase_7LogMath___dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannySetupContext("__dealloc__");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":31
+ *         Destructor for LogMath class.
+ *         """
+ *         logmath_free(self.lmath)             # <<<<<<<<<<<<<<
+ * 
+ *     def get_zero(self):
+ */
+  logmath_free(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath);
+
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":33
+ *         logmath_free(self.lmath)
+ * 
+ *     def get_zero(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the log-zero value.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_get_zero(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath_get_zero[] = "\n        Get the log-zero value.\n\n        @return: Smallest number representable by this object.\n        @rtype: int\n        ";
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_get_zero(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("get_zero");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":40
+ *         @rtype: int
+ *         """
+ *         return logmath_get_zero(self.lmath)             # <<<<<<<<<<<<<<
+ * 
+ *     def add(self, a, b):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(logmath_get_zero(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("sphinxbase.LogMath.get_zero");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":42
+ *         return logmath_get_zero(self.lmath)
+ * 
+ *     def add(self, a, b):             # <<<<<<<<<<<<<<
+ *         """
+ *         Add two numbers in log-space.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath_add[] = "\n        Add two numbers in log-space.\n\n        @param a: Logarithm A.\n        @type a: int\n        @param b: Logarithm B.\n        @type b: int\n        @return: log(exp(a)+exp(b))\n        @rtype: int\n        ";
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_a = 0;
+  PyObject *__pyx_v_b = 0;
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__a,&__pyx_n_s__b,0};
+  __Pyx_RefNannySetupContext("add");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__a);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__b);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("add", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "add") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_a = values[0];
+    __pyx_v_b = values[1];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_a = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_b = PyTuple_GET_ITEM(__pyx_args, 1);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("add", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.LogMath.add");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":53
+ *         @rtype: int
+ *         """
+ *         return logmath_add(self.lmath, a, b)             # <<<<<<<<<<<<<<
+ * 
+ *     def log(self, x):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_a); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_v_b); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyInt_FromLong(logmath_add(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath, __pyx_t_1, __pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("sphinxbase.LogMath.add");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":55
+ *         return logmath_add(self.lmath, a, b)
+ * 
+ *     def log(self, x):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return log-value of a number.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_log(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath_log[] = "\n        Return log-value of a number.\n\n        @param x: Number (in linear space)\n        @type x: float\n        @return: Log-value of x.\n        @rtype: int\n        ";
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_log(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
+  PyObject *__pyx_r = NULL;
+  __pyx_t_10sphinxbase_float64 __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("log");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":64
+ *         @rtype: int
+ *         """
+ *         return logmath_log(self.lmath, x)             # <<<<<<<<<<<<<<
+ * 
+ *     def exp(self, x):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(logmath_log(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.LogMath.log");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":66
+ *         return logmath_log(self.lmath, x)
+ * 
+ *     def exp(self, x):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return linear of a log-value
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_exp(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath_exp[] = "\n        Return linear of a log-value\n\n        @param x: Logarithm X (in this object's base)\n        @type x: int\n        @return: Exponent (linear value) of X.\n        @rtype: float\n        ";
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_exp(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("exp");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":75
+ *         @rtype: float
+ *         """
+ *         return logmath_exp(self.lmath, x)             # <<<<<<<<<<<<<<
+ * 
+ *     def log_to_ln(self, x):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_x); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyFloat_FromDouble(logmath_exp(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.LogMath.exp");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":77
+ *         return logmath_exp(self.lmath, x)
+ * 
+ *     def log_to_ln(self, x):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return natural logarithm of a log-value.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_log_to_ln(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath_log_to_ln[] = "\n        Return natural logarithm of a log-value.\n\n        @param x: Logarithm X (in this object's base)\n        @type x: int\n        @return: Natural log equivalent of x.\n        @rtype: float\n        ";
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_log_to_ln(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("log_to_ln");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":86
+ *         @rtype: float
+ *         """
+ *         return logmath_log_to_ln(self.lmath, x)             # <<<<<<<<<<<<<<
+ * 
+ *     def log_to_log10(self, x):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_x); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyFloat_FromDouble(logmath_log_to_ln(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.LogMath.log_to_ln");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":88
+ *         return logmath_log_to_ln(self.lmath, x)
+ * 
+ *     def log_to_log10(self, x):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return logarithm in base 10 of a log-value.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_log_to_log10(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath_log_to_log10[] = "\n        Return logarithm in base 10 of a log-value.\n\n        @param x: Logarithm X (in this object's base)\n        @type x: int\n        @return: log10 equivalent of x.\n        @rtype: float\n        ";
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_log_to_log10(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("log_to_log10");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":97
+ *         @rtype: float
+ *         """
+ *         return logmath_log_to_log10(self.lmath, x)             # <<<<<<<<<<<<<<
+ * 
+ *     def ln_to_log(self, x):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_x); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyFloat_FromDouble(logmath_log_to_log10(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.LogMath.log_to_log10");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":99
+ *         return logmath_log_to_log10(self.lmath, x)
+ * 
+ *     def ln_to_log(self, x):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return log-value of a natural logarithm.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_ln_to_log(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath_ln_to_log[] = "\n        Return log-value of a natural logarithm.\n\n        @param x: Logarithm X (in base e)\n        @type x: float\n        @return: Log-value equivalent of x.\n        @rtype: int\n        ";
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_ln_to_log(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
+  PyObject *__pyx_r = NULL;
+  __pyx_t_10sphinxbase_float64 __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("ln_to_log");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":108
+ *         @rtype: int
+ *         """
+ *         return logmath_ln_to_log(self.lmath, x)             # <<<<<<<<<<<<<<
+ * 
+ *     def log10_to_log(self, x):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(logmath_ln_to_log(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.LogMath.ln_to_log");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":110
+ *         return logmath_ln_to_log(self.lmath, x)
+ * 
+ *     def log10_to_log(self, x):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return log-value of a base 10 logarithm.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_log10_to_log(PyObject *__pyx_v_self, PyObject *__pyx_v_x); /*proto*/
+static char __pyx_doc_10sphinxbase_7LogMath_log10_to_log[] = "\n        Return log-value of a base 10 logarithm.\n\n        @param x: Logarithm X (in base 10)\n        @type x: float\n        @return: Log-value equivalent of x.\n        @rtype: int\n        ";
+static PyObject *__pyx_pf_10sphinxbase_7LogMath_log10_to_log(PyObject *__pyx_v_self, PyObject *__pyx_v_x) {
+  PyObject *__pyx_r = NULL;
+  __pyx_t_10sphinxbase_float64 __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("log10_to_log");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":119
+ *         @rtype: int
+ *         """
+ *         return logmath_log10_to_log(self.lmath, x)             # <<<<<<<<<<<<<<
+ * 
+ * # Unfortunately, Cython doesn't actually export enums to Python...
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_x); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(logmath_log10_to_log(((struct __pyx_obj_10sphinxbase_LogMath *)__pyx_v_self)->lmath, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.LogMath.log10_to_log");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":146
+ *     @type uw: float
+ *     """
+ *     def __init__(self, file=None, lw=1.0, wip=1.0, uw=1.0, lmctl=None):             # <<<<<<<<<<<<<<
+ *         self.lmath = logmath_init(1.0001, 0, 0)
+ *         if file:
+ */
+
+static int __pyx_pf_10sphinxbase_10NGramModel___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_10sphinxbase_10NGramModel___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_file = 0;
+  PyObject *__pyx_v_lw = 0;
+  PyObject *__pyx_v_wip = 0;
+  PyObject *__pyx_v_uw = 0;
+  PyObject *__pyx_v_lmctl = 0;
+  int __pyx_r;
+  int __pyx_t_1;
+  char *__pyx_t_2;
+  __pyx_t_10sphinxbase_float32 __pyx_t_3;
+  __pyx_t_10sphinxbase_float32 __pyx_t_4;
+  __pyx_t_10sphinxbase_float32 __pyx_t_5;
+  float __pyx_t_6;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__file,&__pyx_n_s__lw,&__pyx_n_s__wip,&__pyx_n_s__uw,&__pyx_n_s__lmctl,0};
+  __Pyx_RefNannySetupContext("__init__");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[5] = {0,0,0,0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = __pyx_k_2;
+    values[2] = __pyx_k_3;
+    values[3] = __pyx_k_4;
+    values[4] = ((PyObject *)Py_None);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file);
+        if (unlikely(value)) { values[0] = value; kw_args--; }
+      }
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lw);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+      case  2:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__wip);
+        if (unlikely(value)) { values[2] = value; kw_args--; }
+      }
+      case  3:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__uw);
+        if (unlikely(value)) { values[3] = value; kw_args--; }
+      }
+      case  4:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lmctl);
+        if (unlikely(value)) { values[4] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_file = values[0];
+    __pyx_v_lw = values[1];
+    __pyx_v_wip = values[2];
+    __pyx_v_uw = values[3];
+    __pyx_v_lmctl = values[4];
+  } else {
+    __pyx_v_file = ((PyObject *)Py_None);
+    __pyx_v_lw = __pyx_k_2;
+    __pyx_v_wip = __pyx_k_3;
+    __pyx_v_uw = __pyx_k_4;
+    __pyx_v_lmctl = ((PyObject *)Py_None);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  5: __pyx_v_lmctl = PyTuple_GET_ITEM(__pyx_args, 4);
+      case  4: __pyx_v_uw = PyTuple_GET_ITEM(__pyx_args, 3);
+      case  3: __pyx_v_wip = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: __pyx_v_lw = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_file = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramModel.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_file);
+  __Pyx_INCREF(__pyx_v_lw);
+  __Pyx_INCREF(__pyx_v_wip);
+  __Pyx_INCREF(__pyx_v_uw);
+  __Pyx_INCREF(__pyx_v_lmctl);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":147
+ *     """
+ *     def __init__(self, file=None, lw=1.0, wip=1.0, uw=1.0, lmctl=None):
+ *         self.lmath = logmath_init(1.0001, 0, 0)             # <<<<<<<<<<<<<<
+ *         if file:
+ *             self.lm = ngram_model_read(NULL, file, NGRAM_AUTO, self.lmath)
+ */
+  ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lmath = logmath_init(1.0001, 0, 0);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":148
+ *     def __init__(self, file=None, lw=1.0, wip=1.0, uw=1.0, lmctl=None):
+ *         self.lmath = logmath_init(1.0001, 0, 0)
+ *         if file:             # <<<<<<<<<<<<<<
+ *             self.lm = ngram_model_read(NULL, file, NGRAM_AUTO, self.lmath)
+ *             ngram_model_apply_weights(self.lm, lw, wip, uw)
+ */
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_file); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_1) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":149
+ *         self.lmath = logmath_init(1.0001, 0, 0)
+ *         if file:
+ *             self.lm = ngram_model_read(NULL, file, NGRAM_AUTO, self.lmath)             # <<<<<<<<<<<<<<
+ *             ngram_model_apply_weights(self.lm, lw, wip, uw)
+ *         elif lmctl:
+ */
+    __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_v_file); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm = ngram_model_read(NULL, __pyx_t_2, NGRAM_AUTO, ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lmath);
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":150
+ *         if file:
+ *             self.lm = ngram_model_read(NULL, file, NGRAM_AUTO, self.lmath)
+ *             ngram_model_apply_weights(self.lm, lw, wip, uw)             # <<<<<<<<<<<<<<
+ *         elif lmctl:
+ *             self.lm = ngram_model_set_read(NULL, lmctl, self.lmath)
+ */
+    __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_lw); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_wip); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_uw); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    ngram_model_apply_weights(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_3, __pyx_t_4, __pyx_t_5);
+    goto __pyx_L6;
+  }
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":151
+ *             self.lm = ngram_model_read(NULL, file, NGRAM_AUTO, self.lmath)
+ *             ngram_model_apply_weights(self.lm, lw, wip, uw)
+ *         elif lmctl:             # <<<<<<<<<<<<<<
+ *             self.lm = ngram_model_set_read(NULL, lmctl, self.lmath)
+ *         else:
+ */
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_lmctl); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_1) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":152
+ *             ngram_model_apply_weights(self.lm, lw, wip, uw)
+ *         elif lmctl:
+ *             self.lm = ngram_model_set_read(NULL, lmctl, self.lmath)             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.lm = NULL
+ */
+    __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_v_lmctl); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm = ngram_model_set_read(NULL, __pyx_t_2, ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lmath);
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":154
+ *             self.lm = ngram_model_set_read(NULL, lmctl, self.lmath)
+ *         else:
+ *             self.lm = NULL             # <<<<<<<<<<<<<<
+ *         self.lw = lw
+ *         self.wip = wip
+ */
+    ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm = NULL;
+  }
+  __pyx_L6:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":155
+ *         else:
+ *             self.lm = NULL
+ *         self.lw = lw             # <<<<<<<<<<<<<<
+ *         self.wip = wip
+ *         self.uw = uw
+ */
+  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_lw); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lw = __pyx_t_6;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":156
+ *             self.lm = NULL
+ *         self.lw = lw
+ *         self.wip = wip             # <<<<<<<<<<<<<<
+ *         self.uw = uw
+ * 
+ */
+  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_wip); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->wip = __pyx_t_6;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":157
+ *         self.lw = lw
+ *         self.wip = wip
+ *         self.uw = uw             # <<<<<<<<<<<<<<
+ * 
+ *     cdef set_lm(NGramModel self, ngram_model_t *lm):
+ */
+  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_uw); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->uw = __pyx_t_6;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramModel.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_file);
+  __Pyx_DECREF(__pyx_v_lw);
+  __Pyx_DECREF(__pyx_v_wip);
+  __Pyx_DECREF(__pyx_v_uw);
+  __Pyx_DECREF(__pyx_v_lmctl);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":159
+ *         self.uw = uw
+ * 
+ *     cdef set_lm(NGramModel self, ngram_model_t *lm):             # <<<<<<<<<<<<<<
+ *         ngram_model_retain(lm)
+ *         ngram_model_free(self.lm)
+ */
+
+static  PyObject *__pyx_f_10sphinxbase_10NGramModel_set_lm(struct __pyx_obj_10sphinxbase_NGramModel *__pyx_v_self, ngram_model_t *__pyx_v_lm) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("set_lm");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":160
+ * 
+ *     cdef set_lm(NGramModel self, ngram_model_t *lm):
+ *         ngram_model_retain(lm)             # <<<<<<<<<<<<<<
+ *         ngram_model_free(self.lm)
+ *         self.lm = lm
+ */
+  ngram_model_retain(__pyx_v_lm);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":161
+ *     cdef set_lm(NGramModel self, ngram_model_t *lm):
+ *         ngram_model_retain(lm)
+ *         ngram_model_free(self.lm)             # <<<<<<<<<<<<<<
+ *         self.lm = lm
+ * 
+ */
+  ngram_model_free(__pyx_v_self->lm);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":162
+ *         ngram_model_retain(lm)
+ *         ngram_model_free(self.lm)
+ *         self.lm = lm             # <<<<<<<<<<<<<<
+ * 
+ *     cdef set_lmath(NGramModel self, logmath_t *lmath):
+ */
+  __pyx_v_self->lm = __pyx_v_lm;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":164
+ *         self.lm = lm
+ * 
+ *     cdef set_lmath(NGramModel self, logmath_t *lmath):             # <<<<<<<<<<<<<<
+ *         logmath_retain(lmath)
+ *         logmath_free(self.lmath)
+ */
+
+static  PyObject *__pyx_f_10sphinxbase_10NGramModel_set_lmath(struct __pyx_obj_10sphinxbase_NGramModel *__pyx_v_self, logmath_t *__pyx_v_lmath) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("set_lmath");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":165
+ * 
+ *     cdef set_lmath(NGramModel self, logmath_t *lmath):
+ *         logmath_retain(lmath)             # <<<<<<<<<<<<<<
+ *         logmath_free(self.lmath)
+ *         self.lmath = lmath
+ */
+  logmath_retain(__pyx_v_lmath);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":166
+ *     cdef set_lmath(NGramModel self, logmath_t *lmath):
+ *         logmath_retain(lmath)
+ *         logmath_free(self.lmath)             # <<<<<<<<<<<<<<
+ *         self.lmath = lmath
+ * 
+ */
+  logmath_free(__pyx_v_self->lmath);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":167
+ *         logmath_retain(lmath)
+ *         logmath_free(self.lmath)
+ *         self.lmath = lmath             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(self):
+ */
+  __pyx_v_self->lmath = __pyx_v_lmath;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":169
+ *         self.lmath = lmath
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Destructor for N-Gram model class.
+ */
+
+static void __pyx_pf_10sphinxbase_10NGramModel___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel___dealloc__[] = "\n        Destructor for N-Gram model class.\n        ";
+static void __pyx_pf_10sphinxbase_10NGramModel___dealloc__(PyObject *__pyx_v_self) {
+  __Pyx_RefNannySetupContext("__dealloc__");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":173
+ *         Destructor for N-Gram model class.
+ *         """
+ *         logmath_free(self.lmath)             # <<<<<<<<<<<<<<
+ *         ngram_model_free(self.lm)
+ * 
+ */
+  logmath_free(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lmath);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":174
+ *         """
+ *         logmath_free(self.lmath)
+ *         ngram_model_free(self.lm)             # <<<<<<<<<<<<<<
+ * 
+ *     def apply_weights(self, lw=1.0, wip=1.0, uw=1.0):
+ */
+  ngram_model_free(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm);
+
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":176
+ *         ngram_model_free(self.lm)
+ * 
+ *     def apply_weights(self, lw=1.0, wip=1.0, uw=1.0):             # <<<<<<<<<<<<<<
+ *         """
+ *         Change the language model weights applied in L{score}.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_apply_weights(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_apply_weights[] = "\n        Change the language model weights applied in L{score}.\n        \n        @param lw: Language weight to apply to model probabilities.\n        @type lw: float\n        @param wip: Word insertion penalty to add to model probabilities\n        @type wip: float\n        @param uw: Weight to give unigrams when interpolating with uniform distribution.\n        @type uw: float\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_apply_weights(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_lw = 0;
+  PyObject *__pyx_v_wip = 0;
+  PyObject *__pyx_v_uw = 0;
+  PyObject *__pyx_r = NULL;
+  float __pyx_t_1;
+  __pyx_t_10sphinxbase_float32 __pyx_t_2;
+  __pyx_t_10sphinxbase_float32 __pyx_t_3;
+  __pyx_t_10sphinxbase_float32 __pyx_t_4;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lw,&__pyx_n_s__wip,&__pyx_n_s__uw,0};
+  __Pyx_RefNannySetupContext("apply_weights");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[3] = {0,0,0};
+    values[0] = __pyx_k_5;
+    values[1] = __pyx_k_6;
+    values[2] = __pyx_k_7;
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lw);
+        if (unlikely(value)) { values[0] = value; kw_args--; }
+      }
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__wip);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+      case  2:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__uw);
+        if (unlikely(value)) { values[2] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "apply_weights") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_lw = values[0];
+    __pyx_v_wip = values[1];
+    __pyx_v_uw = values[2];
+  } else {
+    __pyx_v_lw = __pyx_k_5;
+    __pyx_v_wip = __pyx_k_6;
+    __pyx_v_uw = __pyx_k_7;
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: __pyx_v_uw = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: __pyx_v_wip = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_lw = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("apply_weights", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramModel.apply_weights");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":187
+ *         @type uw: float
+ *         """
+ *         self.lw = lw             # <<<<<<<<<<<<<<
+ *         self.wip = wip
+ *         self.uw = uw
+ */
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_lw); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lw = __pyx_t_1;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":188
+ *         """
+ *         self.lw = lw
+ *         self.wip = wip             # <<<<<<<<<<<<<<
+ *         self.uw = uw
+ *         ngram_model_apply_weights(self.lm, lw, wip, uw)
+ */
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_wip); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->wip = __pyx_t_1;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":189
+ *         self.lw = lw
+ *         self.wip = wip
+ *         self.uw = uw             # <<<<<<<<<<<<<<
+ *         ngram_model_apply_weights(self.lm, lw, wip, uw)
+ * 
+ */
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_uw); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->uw = __pyx_t_1;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":190
+ *         self.wip = wip
+ *         self.uw = uw
+ *         ngram_model_apply_weights(self.lm, lw, wip, uw)             # <<<<<<<<<<<<<<
+ * 
+ *     def get_size(self):
+ */
+  __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_lw); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_wip); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_uw); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ngram_model_apply_weights(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_2, __pyx_t_3, __pyx_t_4);
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramModel.apply_weights");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":192
+ *         ngram_model_apply_weights(self.lm, lw, wip, uw)
+ * 
+ *     def get_size(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the order of this model (i.e. the 'N' in 'N-gram')
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_get_size(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_get_size[] = "\n        Get the order of this model (i.e. the 'N' in 'N-gram')\n\n        @return: Order of this model\n        @rtype: int\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_get_size(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("get_size");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":199
+ *         @rtype: int
+ *         """
+ *         return ngram_model_get_size(self.lm)             # <<<<<<<<<<<<<<
+ * 
+ *     def get_counts(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(ngram_model_get_size(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.get_size");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":201
+ *         return ngram_model_get_size(self.lm)
+ * 
+ *     def get_counts(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the counts of each size of N-gram.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_get_counts(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_get_counts[] = "\n        Get the counts of each size of N-gram.\n\n        @return: Counts of 1, 2, ..., N grams\n        @rtype: tuple(int)\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_get_counts(PyObject *__pyx_v_self, PyObject *unused) {
+  int *__pyx_v_counts;
+  PyObject *__pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  Py_ssize_t __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  Py_ssize_t __pyx_t_5;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("get_counts");
+  __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":209
+ *         """
+ *         cdef int *counts
+ *         counts = ngram_model_get_counts(self.lm)             # <<<<<<<<<<<<<<
+ *         return tuple([counts[i] for i in range(ngram_model_get_size(self.lm))])
+ * 
+ */
+  __pyx_v_counts = ngram_model_get_counts(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":210
+ *         cdef int *counts
+ *         counts = ngram_model_get_counts(self.lm)
+ *         return tuple([counts[i] for i in range(ngram_model_get_size(self.lm))])             # <<<<<<<<<<<<<<
+ * 
+ *     def unknown_wid(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __pyx_t_3 = PyInt_FromLong(ngram_model_get_size(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_t_3 = PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
+    __pyx_t_2 = 0; __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4);
+  } else {
+    __pyx_t_2 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+  }
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  for (;;) {
+    if (likely(PyList_CheckExact(__pyx_t_4))) {
+      if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_4)) break;
+      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++;
+    } else if (likely(PyTuple_CheckExact(__pyx_t_4))) {
+      if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++;
+    } else {
+      __pyx_t_3 = PyIter_Next(__pyx_t_4);
+      if (!__pyx_t_3) {
+        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+    }
+    __Pyx_DECREF(__pyx_v_i);
+    __pyx_v_i = __pyx_t_3;
+    __pyx_t_3 = 0;
+    __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyInt_FromLong((__pyx_v_counts[__pyx_t_5])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_6 = PyList_Append(__pyx_t_1, (PyObject*)__pyx_t_3); if (unlikely(__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = ((PyObject *)PyList_AsTuple(__pyx_t_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  __pyx_r = ((PyObject *)__pyx_t_4);
+  __pyx_t_4 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.get_counts");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_i);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":212
+ *         return tuple([counts[i] for i in range(ngram_model_get_size(self.lm))])
+ * 
+ *     def unknown_wid(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the ID for an unknown word.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_unknown_wid(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_unknown_wid[] = "\n        Get the ID for an unknown word.\n\n        In the case of a closed-vocabulary language model this will be -1.\n\n        @return: Word ID for the unknown word.\n        @rtype: int\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_unknown_wid(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("unknown_wid");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":221
+ *         @rtype: int
+ *         """
+ *         return ngram_unknown_wid(self.lm)             # <<<<<<<<<<<<<<
+ * 
+ *     def zero(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(ngram_unknown_wid(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.unknown_wid");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":223
+ *         return ngram_unknown_wid(self.lm)
+ * 
+ *     def zero(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the log-zero value for this language model.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_zero(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_zero[] = "\n        Get the log-zero value for this language model.\n\n        @return: Log value used to represent zero.\n        @rtype: float\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_zero(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("zero");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":230
+ *         @rtype: float
+ *         """
+ *         return logmath_log_to_ln(self.lmath, ngram_zero(self.lm))             # <<<<<<<<<<<<<<
+ * 
+ *     def wid(self, word):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyFloat_FromDouble(logmath_log_to_ln(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lmath, ngram_zero(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.zero");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":232
+ *         return logmath_log_to_ln(self.lmath, ngram_zero(self.lm))
+ * 
+ *     def wid(self, word):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the internal ID for a word.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_wid(PyObject *__pyx_v_self, PyObject *__pyx_v_word); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_wid[] = "\n        Get the internal ID for a word.\n        \n        @param word: Word in question\n        @type word: string\n        @return: Internal ID for word, or -1 if not present\n        @rtype: int\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_wid(PyObject *__pyx_v_self, PyObject *__pyx_v_word) {
+  PyObject *__pyx_r = NULL;
+  char *__pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("wid");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":241
+ *         @rtype: int
+ *         """
+ *         return ngram_wid(self.lm, word)             # <<<<<<<<<<<<<<
+ * 
+ *     def word(self, wid):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_word); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(ngram_wid(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.wid");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":243
+ *         return ngram_wid(self.lm, word)
+ * 
+ *     def word(self, wid):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the string corresponding to an internal word ID.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_word(PyObject *__pyx_v_self, PyObject *__pyx_v_wid); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_word[] = "\n        Get the string corresponding to an internal word ID.\n        \n        @param word: Word ID in question\n        @type word: int\n        @return: String for word, or None if not present\n        @rtype: string\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_word(PyObject *__pyx_v_self, PyObject *__pyx_v_wid) {
+  PyObject *__pyx_r = NULL;
+  __pyx_t_10sphinxbase_int32 __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("word");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":252
+ *         @rtype: string
+ *         """
+ *         return ngram_word(self.lm, wid)             # <<<<<<<<<<<<<<
+ * 
+ *     # Note that this and prob() are almost exactly the same...
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_wid); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_FromString(ngram_word(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __pyx_r = ((PyObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.word");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":255
+ * 
+ *     # Note that this and prob() are almost exactly the same...
+ *     def score(self, word, *args):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the score for an N-Gram.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_score(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_score[] = "\n        Get the score for an N-Gram.\n\n        The argument list consists of the history words (as\n        null-terminated strings) of the N-Gram, in reverse order.\n        Therefore, if you wanted to get the N-Gram score for 'a whole\n        joy', you would call::\n\n         score, n_used = model.score('joy', 'whole', 'a')\n\n        This function returns a tuple, consisting of the score and the\n        number of words used in computing it (i.e. the effective size\n        of the N-Gram).  The score is returned in logarithmic form,\n        using base e.\n\n        If one of the words is not in the LM's vocabulary, the result\n        will depend on whether this is an open or closed vocabulary\n        language model.  For an open-vocabulary model, unknown words\n        are all mapped to the unigram <UNK> which has a non-zero\n        probability and also participates in higher-order N-Grams.\n        Therefore, you will get a score of some sort in this case.\n\n        For a closed-vocabulary model, unknown words are impossible\n        and thus have zero probability.  Therefore, if C{word} is\n        unknown, this function will return a 'zero' log-probability,\n        i.e. a large negative number.\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_score(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_word = 0;
+  PyObject *__pyx_v_args = 0;
+  __pyx_t_10sphinxbase_int32 __pyx_v_wid;
+  __pyx_t_10sphinxbase_int32 *__pyx_v_hist;
+  __pyx_t_10sphinxbase_int32 __pyx_v_n_hist;
+  __pyx_t_10sphinxbase_int32 __pyx_v_n_used;
+  __pyx_t_10sphinxbase_int32 __pyx_v_score;
+  PyObject *__pyx_v_i;
+  PyObject *__pyx_v_spam;
+  PyObject *__pyx_r = NULL;
+  char *__pyx_t_1;
+  Py_ssize_t __pyx_t_2;
+  __pyx_t_10sphinxbase_int32 __pyx_t_3;
+  long __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__word,0};
+  __Pyx_RefNannySetupContext("score");
+  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
+    __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); __Pyx_GOTREF(__pyx_v_args);
+    if (unlikely(!__pyx_v_args)) return NULL;
+  } else {
+    __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
+  }
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[1] = {0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      default:
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__word);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      const Py_ssize_t used_pos_args = (PyTuple_GET_SIZE(__pyx_args) < 1) ? PyTuple_GET_SIZE(__pyx_args) : 1;
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "score") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_word = values[0];
+  } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_word = PyTuple_GET_ITEM(__pyx_args, 0);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("score", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_DECREF(__pyx_v_args);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.score");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_word);
+  __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_spam = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":288
+ *         cdef int32 n_used
+ *         cdef int32 score
+ *         wid = ngram_wid(self.lm, word)             # <<<<<<<<<<<<<<
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ */
+  __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_word); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_wid = ngram_wid(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":289
+ *         cdef int32 score
+ *         wid = ngram_wid(self.lm, word)
+ *         n_hist = len(args)             # <<<<<<<<<<<<<<
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:
+ */
+  __pyx_t_2 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_n_hist = __pyx_t_2;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":290
+ *         wid = ngram_wid(self.lm, word)
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]
+ */
+  __pyx_v_hist = ((__pyx_t_10sphinxbase_int32 *)ckd_calloc(__pyx_v_n_hist, (sizeof(__pyx_t_10sphinxbase_int32))));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":291
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:             # <<<<<<<<<<<<<<
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ */
+  __pyx_t_3 = __pyx_v_n_hist;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+    __pyx_t_5 = PyInt_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_v_i);
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_5 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":292
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]             # <<<<<<<<<<<<<<
+ *             hist[i] = ngram_wid(self.lm, spam)
+ *         score = ngram_ng_score(self.lm, wid, hist, n_hist, &n_used)
+ */
+    __pyx_t_5 = PyObject_GetItem(__pyx_v_args, __pyx_v_i); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_v_spam);
+    __pyx_v_spam = __pyx_t_5;
+    __pyx_t_5 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":293
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)             # <<<<<<<<<<<<<<
+ *         score = ngram_ng_score(self.lm, wid, hist, n_hist, &n_used)
+ *         ckd_free(hist)
+ */
+    __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_spam); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    (__pyx_v_hist[__pyx_t_2]) = ngram_wid(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1);
+    __pyx_t_4 = __Pyx_PyInt_AsLong(__pyx_v_i); if (unlikely((__pyx_t_4 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":291
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:             # <<<<<<<<<<<<<<
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ */
+  __pyx_t_5 = PyInt_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_v_i);
+  __pyx_v_i = __pyx_t_5;
+  __pyx_t_5 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":294
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ *         score = ngram_ng_score(self.lm, wid, hist, n_hist, &n_used)             # <<<<<<<<<<<<<<
+ *         ckd_free(hist)
+ *         return logmath_log_to_ln(self.lmath, score), n_used
+ */
+  __pyx_v_score = ngram_ng_score(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_v_wid, __pyx_v_hist, __pyx_v_n_hist, (&__pyx_v_n_used));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":295
+ *             hist[i] = ngram_wid(self.lm, spam)
+ *         score = ngram_ng_score(self.lm, wid, hist, n_hist, &n_used)
+ *         ckd_free(hist)             # <<<<<<<<<<<<<<
+ *         return logmath_log_to_ln(self.lmath, score), n_used
+ * 
+ */
+  ckd_free(__pyx_v_hist);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":296
+ *         score = ngram_ng_score(self.lm, wid, hist, n_hist, &n_used)
+ *         ckd_free(hist)
+ *         return logmath_log_to_ln(self.lmath, score), n_used             # <<<<<<<<<<<<<<
+ * 
+ *     def prob(self, word, *args):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = PyFloat_FromDouble(logmath_log_to_ln(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lmath, __pyx_v_score)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_n_used); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_7);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_6);
+  __pyx_t_5 = 0;
+  __pyx_t_6 = 0;
+  __pyx_r = __pyx_t_7;
+  __pyx_t_7 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.score");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_args);
+  __Pyx_DECREF(__pyx_v_i);
+  __Pyx_DECREF(__pyx_v_spam);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_word);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":298
+ *         return logmath_log_to_ln(self.lmath, score), n_used
+ * 
+ *     def prob(self, word, *args):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get the log-probability for an N-Gram.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_prob(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_prob[] = "\n        Get the log-probability for an N-Gram.\n\n        This works effectively the same way as L{score}, except that\n        any weights (language weight, insertion penalty) applied to\n        the language model are ignored and the 'raw' probability value\n        is returned.\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_prob(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_word = 0;
+  PyObject *__pyx_v_args = 0;
+  __pyx_t_10sphinxbase_int32 __pyx_v_wid;
+  __pyx_t_10sphinxbase_int32 *__pyx_v_hist;
+  __pyx_t_10sphinxbase_int32 __pyx_v_n_hist;
+  __pyx_t_10sphinxbase_int32 __pyx_v_n_used;
+  __pyx_t_10sphinxbase_int32 __pyx_v_score;
+  PyObject *__pyx_v_i;
+  PyObject *__pyx_v_spam;
+  PyObject *__pyx_r = NULL;
+  char *__pyx_t_1;
+  Py_ssize_t __pyx_t_2;
+  __pyx_t_10sphinxbase_int32 __pyx_t_3;
+  long __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__word,0};
+  __Pyx_RefNannySetupContext("prob");
+  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
+    __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); __Pyx_GOTREF(__pyx_v_args);
+    if (unlikely(!__pyx_v_args)) return NULL;
+  } else {
+    __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
+  }
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[1] = {0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      default:
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__word);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      const Py_ssize_t used_pos_args = (PyTuple_GET_SIZE(__pyx_args) < 1) ? PyTuple_GET_SIZE(__pyx_args) : 1;
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "prob") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_word = values[0];
+  } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_word = PyTuple_GET_ITEM(__pyx_args, 0);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("prob", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_DECREF(__pyx_v_args);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.prob");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_word);
+  __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_spam = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":312
+ *         cdef int32 n_used
+ *         cdef int32 score
+ *         wid = ngram_wid(self.lm, word)             # <<<<<<<<<<<<<<
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ */
+  __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_word); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_wid = ngram_wid(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":313
+ *         cdef int32 score
+ *         wid = ngram_wid(self.lm, word)
+ *         n_hist = len(args)             # <<<<<<<<<<<<<<
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:
+ */
+  __pyx_t_2 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_n_hist = __pyx_t_2;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":314
+ *         wid = ngram_wid(self.lm, word)
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]
+ */
+  __pyx_v_hist = ((__pyx_t_10sphinxbase_int32 *)ckd_calloc(__pyx_v_n_hist, (sizeof(__pyx_t_10sphinxbase_int32))));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":315
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:             # <<<<<<<<<<<<<<
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ */
+  __pyx_t_3 = __pyx_v_n_hist;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+    __pyx_t_5 = PyInt_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_v_i);
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_5 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":316
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]             # <<<<<<<<<<<<<<
+ *             hist[i] = ngram_wid(self.lm, spam)
+ *         score = ngram_ng_prob(self.lm, wid, hist, n_hist, &n_used)
+ */
+    __pyx_t_5 = PyObject_GetItem(__pyx_v_args, __pyx_v_i); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_v_spam);
+    __pyx_v_spam = __pyx_t_5;
+    __pyx_t_5 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":317
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)             # <<<<<<<<<<<<<<
+ *         score = ngram_ng_prob(self.lm, wid, hist, n_hist, &n_used)
+ *         ckd_free(hist)
+ */
+    __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_spam); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    (__pyx_v_hist[__pyx_t_2]) = ngram_wid(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1);
+    __pyx_t_4 = __Pyx_PyInt_AsLong(__pyx_v_i); if (unlikely((__pyx_t_4 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":315
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:             # <<<<<<<<<<<<<<
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ */
+  __pyx_t_5 = PyInt_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_v_i);
+  __pyx_v_i = __pyx_t_5;
+  __pyx_t_5 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":318
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ *         score = ngram_ng_prob(self.lm, wid, hist, n_hist, &n_used)             # <<<<<<<<<<<<<<
+ *         ckd_free(hist)
+ *         return logmath_log_to_ln(self.lmath, score), n_used
+ */
+  __pyx_v_score = ngram_ng_prob(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_v_wid, __pyx_v_hist, __pyx_v_n_hist, (&__pyx_v_n_used));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":319
+ *             hist[i] = ngram_wid(self.lm, spam)
+ *         score = ngram_ng_prob(self.lm, wid, hist, n_hist, &n_used)
+ *         ckd_free(hist)             # <<<<<<<<<<<<<<
+ *         return logmath_log_to_ln(self.lmath, score), n_used
+ * 
+ */
+  ckd_free(__pyx_v_hist);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":320
+ *         score = ngram_ng_prob(self.lm, wid, hist, n_hist, &n_used)
+ *         ckd_free(hist)
+ *         return logmath_log_to_ln(self.lmath, score), n_used             # <<<<<<<<<<<<<<
+ * 
+ *     def mgrams(self, m):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_5 = PyFloat_FromDouble(logmath_log_to_ln(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lmath, __pyx_v_score)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = PyInt_FromLong(__pyx_v_n_used); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_7);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_6);
+  __pyx_t_5 = 0;
+  __pyx_t_6 = 0;
+  __pyx_r = __pyx_t_7;
+  __pyx_t_7 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.prob");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_args);
+  __Pyx_DECREF(__pyx_v_i);
+  __Pyx_DECREF(__pyx_v_spam);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_word);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":322
+ *         return logmath_log_to_ln(self.lmath, score), n_used
+ * 
+ *     def mgrams(self, m):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return an iterator over each N-gram of order m+1.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_mgrams(PyObject *__pyx_v_self, PyObject *__pyx_v_m); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_mgrams[] = "\n        Return an iterator over each N-gram of order m+1.\n\n        This allows Pythonic iteration over the parameters of an\n        N-Gram model.\n\n        @param m: Order of requested N-grams minus one\n        @type m: int\n        @return: Iterator over M+1-grams\n        @rtype: NGramIter\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_mgrams(PyObject *__pyx_v_self, PyObject *__pyx_v_m) {
+  struct __pyx_obj_10sphinxbase_NGramIter *__pyx_v_itor;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("mgrams");
+  __pyx_v_itor = ((struct __pyx_obj_10sphinxbase_NGramIter *)Py_None); __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":335
+ *         """
+ *         cdef NGramIter itor
+ *         itor = NGramIter(self, m)             # <<<<<<<<<<<<<<
+ *         itor.itor = ngram_model_mgrams(self.lm, m)
+ *         return itor
+ */
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(__pyx_v_self);
+  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self);
+  __Pyx_GIVEREF(__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_m);
+  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_m);
+  __Pyx_GIVEREF(__pyx_v_m);
+  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_10sphinxbase_NGramIter)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_v_itor));
+  __pyx_v_itor = ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":336
+ *         cdef NGramIter itor
+ *         itor = NGramIter(self, m)
+ *         itor.itor = ngram_model_mgrams(self.lm, m)             # <<<<<<<<<<<<<<
+ *         return itor
+ * 
+ */
+  __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_v_m); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_itor->itor = ngram_model_mgrams(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_3);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":337
+ *         itor = NGramIter(self, m)
+ *         itor.itor = ngram_model_mgrams(self.lm, m)
+ *         return itor             # <<<<<<<<<<<<<<
+ * 
+ *     def ngram(self, word, *args):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_itor));
+  __pyx_r = ((PyObject *)__pyx_v_itor);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.mgrams");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_itor);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":339
+ *         return itor
+ * 
+ *     def ngram(self, word, *args):             # <<<<<<<<<<<<<<
+ *         """
+ *         Return an N-Gram iterator pointing to a given N-gram.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_ngram(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_10sphinxbase_10NGramModel_ngram[] = "\n        Return an N-Gram iterator pointing to a given N-gram.\n\n        This allows you to iterate over its successors among other\n        things.\n\n        @param word: Head word of requested N-gram.\n        @type word: str\n        @param args: History words of requested N-gram\n        @type args: str\n        @return: Iterator pointing to N-gram.\n        ";
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_ngram(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_word = 0;
+  PyObject *__pyx_v_args = 0;
+  struct __pyx_obj_10sphinxbase_NGramIter *__pyx_v_itor;
+  __pyx_t_10sphinxbase_int32 __pyx_v_wid;
+  __pyx_t_10sphinxbase_int32 *__pyx_v_hist;
+  __pyx_t_10sphinxbase_int32 __pyx_v_n_hist;
+  PyObject *__pyx_v_i;
+  PyObject *__pyx_v_spam;
+  PyObject *__pyx_r = NULL;
+  char *__pyx_t_1;
+  Py_ssize_t __pyx_t_2;
+  __pyx_t_10sphinxbase_int32 __pyx_t_3;
+  long __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__word,0};
+  __Pyx_RefNannySetupContext("ngram");
+  if (PyTuple_GET_SIZE(__pyx_args) > 1) {
+    __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); __Pyx_GOTREF(__pyx_v_args);
+    if (unlikely(!__pyx_v_args)) return NULL;
+  } else {
+    __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
+  }
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[1] = {0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      default:
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__word);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      const Py_ssize_t used_pos_args = (PyTuple_GET_SIZE(__pyx_args) < 1) ? PyTuple_GET_SIZE(__pyx_args) : 1;
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "ngram") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_word = values[0];
+  } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_word = PyTuple_GET_ITEM(__pyx_args, 0);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("ngram", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_DECREF(__pyx_v_args);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.ngram");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_word);
+  __pyx_v_itor = ((struct __pyx_obj_10sphinxbase_NGramIter *)Py_None); __Pyx_INCREF(Py_None);
+  __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_spam = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":356
+ *         cdef int32 *hist
+ *         cdef int32 n_hist
+ *         wid = ngram_wid(self.lm, word)             # <<<<<<<<<<<<<<
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ */
+  __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_word); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_wid = ngram_wid(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":357
+ *         cdef int32 n_hist
+ *         wid = ngram_wid(self.lm, word)
+ *         n_hist = len(args)             # <<<<<<<<<<<<<<
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:
+ */
+  __pyx_t_2 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_n_hist = __pyx_t_2;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":358
+ *         wid = ngram_wid(self.lm, word)
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))             # <<<<<<<<<<<<<<
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]
+ */
+  __pyx_v_hist = ((__pyx_t_10sphinxbase_int32 *)ckd_calloc(__pyx_v_n_hist, (sizeof(__pyx_t_10sphinxbase_int32))));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":359
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:             # <<<<<<<<<<<<<<
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ */
+  __pyx_t_3 = __pyx_v_n_hist;
+  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+    __pyx_t_5 = PyInt_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_v_i);
+    __pyx_v_i = __pyx_t_5;
+    __pyx_t_5 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":360
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]             # <<<<<<<<<<<<<<
+ *             hist[i] = ngram_wid(self.lm, spam)
+ *         itor = NGramIter(self, n_hist)
+ */
+    __pyx_t_5 = PyObject_GetItem(__pyx_v_args, __pyx_v_i); if (!__pyx_t_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_v_spam);
+    __pyx_v_spam = __pyx_t_5;
+    __pyx_t_5 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":361
+ *         for i from 0 <= i < n_hist:
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)             # <<<<<<<<<<<<<<
+ *         itor = NGramIter(self, n_hist)
+ *         # We do set_iter here, because we're returning something the
+ */
+    __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_spam); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    (__pyx_v_hist[__pyx_t_2]) = ngram_wid(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1);
+    __pyx_t_4 = __Pyx_PyInt_AsLong(__pyx_v_i); if (unlikely((__pyx_t_4 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":359
+ *         n_hist = len(args)
+ *         hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+ *         for i from 0 <= i < n_hist:             # <<<<<<<<<<<<<<
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ */
+  __pyx_t_5 = PyInt_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_v_i);
+  __pyx_v_i = __pyx_t_5;
+  __pyx_t_5 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":362
+ *             spam = args[i]
+ *             hist[i] = ngram_wid(self.lm, spam)
+ *         itor = NGramIter(self, n_hist)             # <<<<<<<<<<<<<<
+ *         # We do set_iter here, because we're returning something the
+ *         # user is immediately going to do stuff with.
+ */
+  __pyx_t_5 = PyInt_FromLong(__pyx_v_n_hist); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_INCREF(__pyx_v_self);
+  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_self);
+  __Pyx_GIVEREF(__pyx_v_self);
+  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_5);
+  __pyx_t_5 = 0;
+  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_10sphinxbase_NGramIter)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_v_itor));
+  __pyx_v_itor = ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_t_5);
+  __pyx_t_5 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":365
+ *         # We do set_iter here, because we're returning something the
+ *         # user is immediately going to do stuff with.
+ *         itor.set_iter(ngram_ng_iter(self.lm, wid, hist, n_hist))             # <<<<<<<<<<<<<<
+ *         ckd_free(hist)
+ *         return itor
+ */
+  __pyx_t_5 = ((struct __pyx_vtabstruct_10sphinxbase_NGramIter *)__pyx_v_itor->__pyx_vtab)->set_iter(__pyx_v_itor, ngram_ng_iter(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_v_wid, __pyx_v_hist, __pyx_v_n_hist)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":366
+ *         # user is immediately going to do stuff with.
+ *         itor.set_iter(ngram_ng_iter(self.lm, wid, hist, n_hist))
+ *         ckd_free(hist)             # <<<<<<<<<<<<<<
+ *         return itor
+ * 
+ */
+  ckd_free(__pyx_v_hist);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":367
+ *         itor.set_iter(ngram_ng_iter(self.lm, wid, hist, n_hist))
+ *         ckd_free(hist)
+ *         return itor             # <<<<<<<<<<<<<<
+ * 
+ *     def add_word(self, word, weight=1.0):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_itor));
+  __pyx_r = ((PyObject *)__pyx_v_itor);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.ngram");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_args);
+  __Pyx_DECREF((PyObject *)__pyx_v_itor);
+  __Pyx_DECREF(__pyx_v_i);
+  __Pyx_DECREF(__pyx_v_spam);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_word);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":369
+ *         return itor
+ * 
+ *     def add_word(self, word, weight=1.0):             # <<<<<<<<<<<<<<
+ *         return ngram_model_add_word(self.lm, word, weight)
+ * 
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_add_word(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_add_word(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_word = 0;
+  PyObject *__pyx_v_weight = 0;
+  PyObject *__pyx_r = NULL;
+  char *__pyx_t_1;
+  __pyx_t_10sphinxbase_float32 __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__word,&__pyx_n_s__weight,0};
+  __Pyx_RefNannySetupContext("add_word");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    values[1] = __pyx_k_8;
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__word);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__weight);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "add_word") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_word = values[0];
+    __pyx_v_weight = values[1];
+  } else {
+    __pyx_v_weight = __pyx_k_8;
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: __pyx_v_weight = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_word = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("add_word", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramModel.add_word");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":370
+ * 
+ *     def add_word(self, word, weight=1.0):
+ *         return ngram_model_add_word(self.lm, word, weight)             # <<<<<<<<<<<<<<
+ * 
+ *     def recode(self, frum, too):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_word); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_PyFloat_AsDouble(__pyx_v_weight); if (unlikely((__pyx_t_2 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyInt_FromLong(ngram_model_add_word(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1, __pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.add_word");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":372
+ *         return ngram_model_add_word(self.lm, word, weight)
+ * 
+ *     def recode(self, frum, too):             # <<<<<<<<<<<<<<
+ *         cdef int rv
+ *         rv = ngram_model_recode(self.lm, frum, too)
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_recode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_recode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_frum = 0;
+  PyObject *__pyx_v_too = 0;
+  int __pyx_v_rv;
+  PyObject *__pyx_r = NULL;
+  char *__pyx_t_1;
+  char *__pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__frum,&__pyx_n_s__too,0};
+  __Pyx_RefNannySetupContext("recode");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__frum);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__too);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("recode", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "recode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_frum = values[0];
+    __pyx_v_too = values[1];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_frum = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_too = PyTuple_GET_ITEM(__pyx_args, 1);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("recode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramModel.recode");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_frum);
+  __Pyx_INCREF(__pyx_v_too);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":374
+ *     def recode(self, frum, too):
+ *         cdef int rv
+ *         rv = ngram_model_recode(self.lm, frum, too)             # <<<<<<<<<<<<<<
+ *         if rv == -1:
+ *             raise ValueError, "Recode from %s to %s failed" % (frum, too)
+ */
+  __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_frum); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_v_too); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_rv = ngram_model_recode(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1, __pyx_t_2);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":375
+ *         cdef int rv
+ *         rv = ngram_model_recode(self.lm, frum, too)
+ *         if rv == -1:             # <<<<<<<<<<<<<<
+ *             raise ValueError, "Recode from %s to %s failed" % (frum, too)
+ * 
+ */
+  __pyx_t_3 = (__pyx_v_rv == -1);
+  if (__pyx_t_3) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":376
+ *         rv = ngram_model_recode(self.lm, frum, too)
+ *         if rv == -1:
+ *             raise ValueError, "Recode from %s to %s failed" % (frum, too)             # <<<<<<<<<<<<<<
+ * 
+ *     def casefold(self, kase):
+ */
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_v_frum);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_frum);
+    __Pyx_GIVEREF(__pyx_v_frum);
+    __Pyx_INCREF(__pyx_v_too);
+    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_too);
+    __Pyx_GIVEREF(__pyx_v_too);
+    __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_9), __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_5, 0);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.recode");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_frum);
+  __Pyx_DECREF(__pyx_v_too);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":378
+ *             raise ValueError, "Recode from %s to %s failed" % (frum, too)
+ * 
+ *     def casefold(self, kase):             # <<<<<<<<<<<<<<
+ *         cdef int rv
+ *         rv = ngram_model_casefold(self.lm, kase)
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_casefold(PyObject *__pyx_v_self, PyObject *__pyx_v_kase); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_casefold(PyObject *__pyx_v_self, PyObject *__pyx_v_kase) {
+  int __pyx_v_rv;
+  PyObject *__pyx_r = NULL;
+  ngram_case_t __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("casefold");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_kase);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":380
+ *     def casefold(self, kase):
+ *         cdef int rv
+ *         rv = ngram_model_casefold(self.lm, kase)             # <<<<<<<<<<<<<<
+ *         if rv == -1:
+ *             raise ValueError, "Casefolding failed"
+ */
+  __pyx_t_1 = ((ngram_case_t)PyInt_AsLong(__pyx_v_kase)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_rv = ngram_model_casefold(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":381
+ *         cdef int rv
+ *         rv = ngram_model_casefold(self.lm, kase)
+ *         if rv == -1:             # <<<<<<<<<<<<<<
+ *             raise ValueError, "Casefolding failed"
+ * 
+ */
+  __pyx_t_2 = (__pyx_v_rv == -1);
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":382
+ *         rv = ngram_model_casefold(self.lm, kase)
+ *         if rv == -1:
+ *             raise ValueError, "Casefolding failed"             # <<<<<<<<<<<<<<
+ * 
+ *     def write(self, file_name, format=NGRAM_AUTO):
+ */
+    __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_10), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramModel.casefold");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_kase);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":384
+ *             raise ValueError, "Casefolding failed"
+ * 
+ *     def write(self, file_name, format=NGRAM_AUTO):             # <<<<<<<<<<<<<<
+ *         cdef int rv
+ *         rv = ngram_model_write(self.lm, file_name, format)
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_write(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_10NGramModel_write(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_file_name = 0;
+  PyObject *__pyx_v_format = 0;
+  int __pyx_v_rv;
+  PyObject *__pyx_r = NULL;
+  char *__pyx_t_1;
+  ngram_file_type_t __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__file_name,&__pyx_n_s__format,0};
+  __Pyx_RefNannySetupContext("write");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    values[1] = __pyx_k_11;
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__file_name);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__format);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "write") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_file_name = values[0];
+    __pyx_v_format = values[1];
+  } else {
+    __pyx_v_format = __pyx_k_11;
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: __pyx_v_format = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_file_name = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("write", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramModel.write");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_file_name);
+  __Pyx_INCREF(__pyx_v_format);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":386
+ *     def write(self, file_name, format=NGRAM_AUTO):
+ *         cdef int rv
+ *         rv = ngram_model_write(self.lm, file_name, format)             # <<<<<<<<<<<<<<
+ *         if rv == -1:
+ *             raise ValueError, "Write %s to file failed" % file_name
+ */
+  __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_file_name); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((ngram_file_type_t)PyInt_AsLong(__pyx_v_format)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_rv = ngram_model_write(((struct __pyx_obj_10sphinxbase_NGramModel *)__pyx_v_self)->lm, __pyx_t_1, __pyx_t_2);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":387
+ *         cdef int rv
+ *         rv = ngram_model_write(self.lm, file_name, format)
+ *         if rv == -1:             # <<<<<<<<<<<<<<
+ *             raise ValueError, "Write %s to file failed" % file_name
+ * 
+ */
+  __pyx_t_3 = (__pyx_v_rv == -1);
+  if (__pyx_t_3) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":388
+ *         rv = ngram_model_write(self.lm, file_name, format)
+ *         if rv == -1:
+ *             raise ValueError, "Write %s to file failed" % file_name             # <<<<<<<<<<<<<<
+ * 
+ * cdef class NGramIter:
+ */
+    __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_12), __pyx_v_file_name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_4, 0);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.NGramModel.write");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_file_name);
+  __Pyx_DECREF(__pyx_v_format);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":397
+ *     language model.
+ *     """
+ *     def __cinit__(self, NGramModel lm, int m):             # <<<<<<<<<<<<<<
+ *         self.itor = NULL
+ *         self.lm = lm
+ */
+
+static int __pyx_pf_10sphinxbase_9NGramIter___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_10sphinxbase_9NGramIter___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct __pyx_obj_10sphinxbase_NGramModel *__pyx_v_lm = 0;
+  int __pyx_v_m;
+  int __pyx_r;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__lm,&__pyx_n_s__m,0};
+  __Pyx_RefNannySetupContext("__cinit__");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__lm);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__m);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_lm = ((struct __pyx_obj_10sphinxbase_NGramModel *)values[0]);
+    __pyx_v_m = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_m == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_lm = ((struct __pyx_obj_10sphinxbase_NGramModel *)PyTuple_GET_ITEM(__pyx_args, 0));
+    __pyx_v_m = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_m == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramIter.__cinit__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lm), __pyx_ptype_10sphinxbase_NGramModel, 1, "lm", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":398
+ *     """
+ *     def __cinit__(self, NGramModel lm, int m):
+ *         self.itor = NULL             # <<<<<<<<<<<<<<
+ *         self.lm = lm
+ *         self.m = m
+ */
+  ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->itor = NULL;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":399
+ *     def __cinit__(self, NGramModel lm, int m):
+ *         self.itor = NULL
+ *         self.lm = lm             # <<<<<<<<<<<<<<
+ *         self.m = m
+ *         self.first_item = True
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_v_lm));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_lm));
+  __Pyx_GOTREF(((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->lm);
+  __Pyx_DECREF(((PyObject *)((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->lm));
+  ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->lm = __pyx_v_lm;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":400
+ *         self.itor = NULL
+ *         self.lm = lm
+ *         self.m = m             # <<<<<<<<<<<<<<
+ *         self.first_item = True
+ * 
+ */
+  ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->m = __pyx_v_m;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":401
+ *         self.lm = lm
+ *         self.m = m
+ *         self.first_item = True             # <<<<<<<<<<<<<<
+ * 
+ *     def __iter__(self):
+ */
+  ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->first_item = 1;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("sphinxbase.NGramIter.__cinit__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":403
+ *         self.first_item = True
+ * 
+ *     def __iter__(self):             # <<<<<<<<<<<<<<
+ *         self.first_item = True
+ *         return self
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_9NGramIter___iter__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_9NGramIter___iter__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("__iter__");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":404
+ * 
+ *     def __iter__(self):
+ *         self.first_item = True             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+  ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->first_item = 1;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":405
+ *     def __iter__(self):
+ *         self.first_item = True
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     cdef set_iter(NGramIter self, ngram_iter_t *itor):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self);
+  __pyx_r = __pyx_v_self;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":407
+ *         return self
+ * 
+ *     cdef set_iter(NGramIter self, ngram_iter_t *itor):             # <<<<<<<<<<<<<<
+ *         cdef int32 prob, bowt
+ *         cdef int32 *wids
+ */
+
+static  PyObject *__pyx_f_10sphinxbase_9NGramIter_set_iter(struct __pyx_obj_10sphinxbase_NGramIter *__pyx_v_self, ngram_iter_t *__pyx_v_itor) {
+  __pyx_t_10sphinxbase_int32 __pyx_v_prob;
+  __pyx_t_10sphinxbase_int32 __pyx_v_bowt;
+  __pyx_t_10sphinxbase_int32 *__pyx_v_wids;
+  PyObject *__pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  Py_ssize_t __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
+  __Pyx_RefNannySetupContext("set_iter");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":411
+ *         cdef int32 *wids
+ * 
+ *         if itor == NULL:             # <<<<<<<<<<<<<<
+ *             raise StopIteration
+ *         self.itor = itor
+ */
+  __pyx_t_1 = (__pyx_v_itor == NULL);
+  if (__pyx_t_1) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":412
+ * 
+ *         if itor == NULL:
+ *             raise StopIteration             # <<<<<<<<<<<<<<
+ *         self.itor = itor
+ *         if self.first_item:
+ */
+    __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":413
+ *         if itor == NULL:
+ *             raise StopIteration
+ *         self.itor = itor             # <<<<<<<<<<<<<<
+ *         if self.first_item:
+ *             self.first_item = False
+ */
+  __pyx_v_self->itor = __pyx_v_itor;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":414
+ *             raise StopIteration
+ *         self.itor = itor
+ *         if self.first_item:             # <<<<<<<<<<<<<<
+ *             self.first_item = False
+ *         wids = ngram_iter_get(itor, &prob, &bowt)
+ */
+  __pyx_t_2 = __pyx_v_self->first_item;
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":415
+ *         self.itor = itor
+ *         if self.first_item:
+ *             self.first_item = False             # <<<<<<<<<<<<<<
+ *         wids = ngram_iter_get(itor, &prob, &bowt)
+ *         self.log_prob = logmath_log_to_ln(self.lm.lmath, prob)
+ */
+    __pyx_v_self->first_item = 0;
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":416
+ *         if self.first_item:
+ *             self.first_item = False
+ *         wids = ngram_iter_get(itor, &prob, &bowt)             # <<<<<<<<<<<<<<
+ *         self.log_prob = logmath_log_to_ln(self.lm.lmath, prob)
+ *         self.log_bowt = logmath_log_to_ln(self.lm.lmath, bowt)
+ */
+  __pyx_v_wids = ngram_iter_get(__pyx_v_itor, (&__pyx_v_prob), (&__pyx_v_bowt));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":417
+ *             self.first_item = False
+ *         wids = ngram_iter_get(itor, &prob, &bowt)
+ *         self.log_prob = logmath_log_to_ln(self.lm.lmath, prob)             # <<<<<<<<<<<<<<
+ *         self.log_bowt = logmath_log_to_ln(self.lm.lmath, bowt)
+ *         self.words = []
+ */
+  __pyx_v_self->log_prob = logmath_log_to_ln(__pyx_v_self->lm->lmath, __pyx_v_prob);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":418
+ *         wids = ngram_iter_get(itor, &prob, &bowt)
+ *         self.log_prob = logmath_log_to_ln(self.lm.lmath, prob)
+ *         self.log_bowt = logmath_log_to_ln(self.lm.lmath, bowt)             # <<<<<<<<<<<<<<
+ *         self.words = []
+ *         for i in range(0, self.m+1):
+ */
+  __pyx_v_self->log_bowt = logmath_log_to_ln(__pyx_v_self->lm->lmath, __pyx_v_bowt);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":419
+ *         self.log_prob = logmath_log_to_ln(self.lm.lmath, prob)
+ *         self.log_bowt = logmath_log_to_ln(self.lm.lmath, bowt)
+ *         self.words = []             # <<<<<<<<<<<<<<
+ *         for i in range(0, self.m+1):
+ *             self.words.append(ngram_word(self.lm.lm, wids[i]))
+ */
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+  __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
+  __Pyx_GOTREF(__pyx_v_self->words);
+  __Pyx_DECREF(__pyx_v_self->words);
+  __pyx_v_self->words = ((PyObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":420
+ *         self.log_bowt = logmath_log_to_ln(self.lm.lmath, bowt)
+ *         self.words = []
+ *         for i in range(0, self.m+1):             # <<<<<<<<<<<<<<
+ *             self.words.append(ngram_word(self.lm.lm, wids[i]))
+ * 
+ */
+  __pyx_t_3 = PyInt_FromLong((__pyx_v_self->m + 1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_INCREF(__pyx_int_0);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_0);
+  __Pyx_GIVEREF(__pyx_int_0);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_t_3 = PyObject_Call(__pyx_builtin_range, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
+    __pyx_t_4 = 0; __pyx_t_5 = __pyx_t_3; __Pyx_INCREF(__pyx_t_5);
+  } else {
+    __pyx_t_4 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+  }
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  for (;;) {
+    if (likely(PyList_CheckExact(__pyx_t_5))) {
+      if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_5)) break;
+      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++;
+    } else if (likely(PyTuple_CheckExact(__pyx_t_5))) {
+      if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
+      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++;
+    } else {
+      __pyx_t_3 = PyIter_Next(__pyx_t_5);
+      if (!__pyx_t_3) {
+        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+    }
+    __Pyx_DECREF(__pyx_v_i);
+    __pyx_v_i = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":421
+ *         self.words = []
+ *         for i in range(0, self.m+1):
+ *             self.words.append(ngram_word(self.lm.lm, wids[i]))             # <<<<<<<<<<<<<<
+ * 
+ *     def __next__(self):
+ */
+    __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyBytes_FromString(ngram_word(__pyx_v_self->lm->lm, (__pyx_v_wids[__pyx_t_6]))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_self->words, ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("sphinxbase.NGramIter.set_iter");
+  __pyx_r = 0;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_i);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":423
+ *             self.words.append(ngram_word(self.lm.lm, wids[i]))
+ * 
+ *     def __next__(self):             # <<<<<<<<<<<<<<
+ *         if self.first_item:
+ *             self.set_iter(self.itor)
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_9NGramIter___next__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_9NGramIter___next__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("__next__");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":424
+ * 
+ *     def __next__(self):
+ *         if self.first_item:             # <<<<<<<<<<<<<<
+ *             self.set_iter(self.itor)
+ *         else:
+ */
+  __pyx_t_1 = ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->first_item;
+  if (__pyx_t_1) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":425
+ *     def __next__(self):
+ *         if self.first_item:
+ *             self.set_iter(self.itor)             # <<<<<<<<<<<<<<
+ *         else:
+ *             self.set_iter(ngram_iter_next(self.itor))
+ */
+    __pyx_t_2 = ((struct __pyx_vtabstruct_10sphinxbase_NGramIter *)((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->__pyx_vtab)->set_iter(((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self), ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->itor); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":427
+ *             self.set_iter(self.itor)
+ *         else:
+ *             self.set_iter(ngram_iter_next(self.itor))             # <<<<<<<<<<<<<<
+ *         return self
+ * 
+ */
+    __pyx_t_2 = ((struct __pyx_vtabstruct_10sphinxbase_NGramIter *)((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->__pyx_vtab)->set_iter(((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self), ngram_iter_next(((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->itor)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  }
+  __pyx_L5:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":428
+ *         else:
+ *             self.set_iter(ngram_iter_next(self.itor))
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def successors(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_self);
+  __pyx_r = __pyx_v_self;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.NGramIter.__next__");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":430
+ *         return self
+ * 
+ *     def successors(self):             # <<<<<<<<<<<<<<
+ *         """
+ *         Get an iterator over N+1-gram successors of an N-gram.
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_9NGramIter_successors(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_10sphinxbase_9NGramIter_successors[] = "\n        Get an iterator over N+1-gram successors of an N-gram.\n        ";
+static PyObject *__pyx_pf_10sphinxbase_9NGramIter_successors(PyObject *__pyx_v_self, PyObject *unused) {
+  struct __pyx_obj_10sphinxbase_NGramIter *__pyx_v_itor;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("successors");
+  __pyx_v_itor = ((struct __pyx_obj_10sphinxbase_NGramIter *)Py_None); __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":435
+ *         """
+ *         cdef NGramIter itor
+ *         itor = NGramIter(self.lm, self.m + 1)             # <<<<<<<<<<<<<<
+ *         itor.itor = ngram_iter_successors(self.itor)
+ *         return itor
+ */
+  __pyx_t_1 = PyInt_FromLong((((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->m + 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->lm));
+  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->lm));
+  __Pyx_GIVEREF(((PyObject *)((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->lm));
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_10sphinxbase_NGramIter)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(((PyObject *)__pyx_v_itor));
+  __pyx_v_itor = ((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":436
+ *         cdef NGramIter itor
+ *         itor = NGramIter(self.lm, self.m + 1)
+ *         itor.itor = ngram_iter_successors(self.itor)             # <<<<<<<<<<<<<<
+ *         return itor
+ * 
+ */
+  __pyx_v_itor->itor = ngram_iter_successors(((struct __pyx_obj_10sphinxbase_NGramIter *)__pyx_v_self)->itor);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":437
+ *         itor = NGramIter(self.lm, self.m + 1)
+ *         itor.itor = ngram_iter_successors(self.itor)
+ *         return itor             # <<<<<<<<<<<<<<
+ * 
+ * def binstr(str val, int nbits):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_itor));
+  __pyx_r = ((PyObject *)__pyx_v_itor);
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("sphinxbase.NGramIter.successors");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_itor);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":439
+ *         return itor
+ * 
+ * def binstr(str val, int nbits):             # <<<<<<<<<<<<<<
+ *     """
+ *     Silly function to format a string as a binary string
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_binstr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_10sphinxbase_binstr[] = "\n    Silly function to format a string as a binary string\n    ";
+static PyObject *__pyx_pf_10sphinxbase_binstr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_val = 0;
+  int __pyx_v_nbits;
+  int __pyx_v_i;
+  PyObject *__pyx_v_outstr;
+  PyObject *__pyx_v_c;
+  PyObject *__pyx_v_cval;
+  PyObject *__pyx_v_cnb;
+  PyObject *__pyx_r = NULL;
+  Py_ssize_t __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  long __pyx_t_5;
+  int __pyx_t_6;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__val,&__pyx_n_s__nbits,0};
+  __Pyx_RefNannySetupContext("binstr");
+  __pyx_self = __pyx_self;
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__val);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nbits);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("binstr", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "binstr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_val = ((PyObject *)values[0]);
+    __pyx_v_nbits = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_nbits == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_val = ((PyObject *)PyTuple_GET_ITEM(__pyx_args, 0));
+    __pyx_v_nbits = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_nbits == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("binstr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.binstr");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF(__pyx_v_val);
+  __pyx_v_outstr = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_c = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_cval = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_cnb = Py_None; __Pyx_INCREF(Py_None);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_val), &PyString_Type, 1, "val", 1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":444
+ *     """
+ *     cdef int i
+ *     outstr = ""             # <<<<<<<<<<<<<<
+ *     for c in val:
+ *         cval = ord(c)
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_13));
+  __Pyx_DECREF(__pyx_v_outstr);
+  __pyx_v_outstr = ((PyObject *)__pyx_kp_s_13);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":445
+ *     cdef int i
+ *     outstr = ""
+ *     for c in val:             # <<<<<<<<<<<<<<
+ *         cval = ord(c)
+ *         cnb = min(8, nbits)
+ */
+  __pyx_t_1 = -1; __pyx_t_2 = PyObject_GetIter(((PyObject *)__pyx_v_val)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  for (;;) {
+    {
+      __pyx_t_3 = PyIter_Next(__pyx_t_2);
+      if (!__pyx_t_3) {
+        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+    }
+    __Pyx_DECREF(__pyx_v_c);
+    __pyx_v_c = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":446
+ *     outstr = ""
+ *     for c in val:
+ *         cval = ord(c)             # <<<<<<<<<<<<<<
+ *         cnb = min(8, nbits)
+ *         for i in range(0,cnb):
+ */
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_c);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_c);
+    __Pyx_GIVEREF(__pyx_v_c);
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ord, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_v_cval);
+    __pyx_v_cval = __pyx_t_4;
+    __pyx_t_4 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":447
+ *     for c in val:
+ *         cval = ord(c)
+ *         cnb = min(8, nbits)             # <<<<<<<<<<<<<<
+ *         for i in range(0,cnb):
+ *             outstr += "%d" % ((cval & (1 << 7-i)) != 0)
+ */
+    __pyx_t_4 = PyInt_FromLong(__pyx_v_nbits); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_int_8);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_8);
+    __Pyx_GIVEREF(__pyx_int_8);
+    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_4);
+    __pyx_t_4 = 0;
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_min, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_v_cnb);
+    __pyx_v_cnb = __pyx_t_4;
+    __pyx_t_4 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":448
+ *         cval = ord(c)
+ *         cnb = min(8, nbits)
+ *         for i in range(0,cnb):             # <<<<<<<<<<<<<<
+ *             outstr += "%d" % ((cval & (1 << 7-i)) != 0)
+ *         nbits -= 8
+ */
+    __pyx_t_5 = __Pyx_PyInt_AsLong(__pyx_v_cnb); if (unlikely((__pyx_t_5 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+      __pyx_v_i = __pyx_t_6;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":449
+ *         cnb = min(8, nbits)
+ *         for i in range(0,cnb):
+ *             outstr += "%d" % ((cval & (1 << 7-i)) != 0)             # <<<<<<<<<<<<<<
+ *         nbits -= 8
+ *     return outstr
+ */
+      __pyx_t_4 = PyInt_FromLong((1 << (7 - __pyx_v_i))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_3 = PyNumber_And(__pyx_v_cval, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_int_0, Py_NE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_14), __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_outstr, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_v_outstr);
+      __pyx_v_outstr = __pyx_t_4;
+      __pyx_t_4 = 0;
+    }
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":450
+ *         for i in range(0,cnb):
+ *             outstr += "%d" % ((cval & (1 << 7-i)) != 0)
+ *         nbits -= 8             # <<<<<<<<<<<<<<
+ *     return outstr
+ * 
+ */
+    __pyx_v_nbits -= 8;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":451
+ *             outstr += "%d" % ((cval & (1 << 7-i)) != 0)
+ *         nbits -= 8
+ *     return outstr             # <<<<<<<<<<<<<<
+ * 
+ * def bincw(int cw, int nbits):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_outstr);
+  __pyx_r = __pyx_v_outstr;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.binstr");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_outstr);
+  __Pyx_DECREF(__pyx_v_c);
+  __Pyx_DECREF(__pyx_v_cval);
+  __Pyx_DECREF(__pyx_v_cnb);
+  __Pyx_DECREF(__pyx_v_val);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":453
+ *     return outstr
+ * 
+ * def bincw(int cw, int nbits):             # <<<<<<<<<<<<<<
+ *     """
+ *     Silly function to format an int as a binary string
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_bincw(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_10sphinxbase_bincw[] = "\n    Silly function to format an int as a binary string\n    ";
+static PyObject *__pyx_pf_10sphinxbase_bincw(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  int __pyx_v_cw;
+  int __pyx_v_nbits;
+  int __pyx_v_i;
+  PyObject *__pyx_v_outstr;
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__cw,&__pyx_n_s__nbits,0};
+  __Pyx_RefNannySetupContext("bincw");
+  __pyx_self = __pyx_self;
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__cw);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__nbits);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("bincw", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "bincw") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_cw = __Pyx_PyInt_AsInt(values[0]); if (unlikely((__pyx_v_cw == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_nbits = __Pyx_PyInt_AsInt(values[1]); if (unlikely((__pyx_v_nbits == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_cw = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 0)); if (unlikely((__pyx_v_cw == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_nbits = __Pyx_PyInt_AsInt(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_nbits == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("bincw", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.bincw");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_v_outstr = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":458
+ *     """
+ *     cdef int i
+ *     outstr = ""             # <<<<<<<<<<<<<<
+ *     for i in range(0,nbits):
+ *         outstr = "%s" % (cw & 1) + outstr
+ */
+  __Pyx_INCREF(((PyObject *)__pyx_kp_s_13));
+  __Pyx_DECREF(__pyx_v_outstr);
+  __pyx_v_outstr = ((PyObject *)__pyx_kp_s_13);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":459
+ *     cdef int i
+ *     outstr = ""
+ *     for i in range(0,nbits):             # <<<<<<<<<<<<<<
+ *         outstr = "%s" % (cw & 1) + outstr
+ *         cw >>= 1
+ */
+  __pyx_t_1 = __pyx_v_nbits;
+  for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
+    __pyx_v_i = __pyx_t_2;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":460
+ *     outstr = ""
+ *     for i in range(0,nbits):
+ *         outstr = "%s" % (cw & 1) + outstr             # <<<<<<<<<<<<<<
+ *         cw >>= 1
+ *     return outstr
+ */
+    __pyx_t_3 = PyInt_FromLong((__pyx_v_cw & 1)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_15), __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_v_outstr); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_v_outstr);
+    __pyx_v_outstr = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":461
+ *     for i in range(0,nbits):
+ *         outstr = "%s" % (cw & 1) + outstr
+ *         cw >>= 1             # <<<<<<<<<<<<<<
+ *     return outstr
+ * 
+ */
+    __pyx_v_cw >>= 1;
+  }
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":462
+ *         outstr = "%s" % (cw & 1) + outstr
+ *         cw >>= 1
+ *     return outstr             # <<<<<<<<<<<<<<
+ * 
+ * # FIXME: Due to the style of IO in huff_code API this part of the code
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_outstr);
+  __pyx_r = __pyx_v_outstr;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.bincw");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_outstr);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":482
+ *     @type infile: file | str
+ *     """
+ *     def __init__(self, alphabet=None, infile=None):             # <<<<<<<<<<<<<<
+ *         cdef char **symbols
+ *         cdef int *frequencies
+ */
+
+static int __pyx_pf_10sphinxbase_8HuffCode___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_10sphinxbase_8HuffCode___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_alphabet = 0;
+  PyObject *__pyx_v_infile = 0;
+  char **__pyx_v_symbols;
+  int *__pyx_v_frequencies;
+  int __pyx_v_nsym;
+  PyObject *__pyx_v_bogus;
+  PyObject *__pyx_v_i;
+  PyObject *__pyx_v_spam;
+  PyObject *__pyx_v_sym;
+  PyObject *__pyx_v_freq;
+  int __pyx_r;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  Py_ssize_t __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  int __pyx_t_10;
+  Py_ssize_t __pyx_t_11;
+  char *__pyx_t_12;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__alphabet,&__pyx_n_s__infile,0};
+  __Pyx_RefNannySetupContext("__init__");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    values[0] = ((PyObject *)Py_None);
+    values[1] = ((PyObject *)Py_None);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__alphabet);
+        if (unlikely(value)) { values[0] = value; kw_args--; }
+      }
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__infile);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_alphabet = values[0];
+    __pyx_v_infile = values[1];
+  } else {
+    __pyx_v_alphabet = ((PyObject *)Py_None);
+    __pyx_v_infile = ((PyObject *)Py_None);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: __pyx_v_infile = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_alphabet = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.HuffCode.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_alphabet);
+  __Pyx_INCREF(__pyx_v_infile);
+  __pyx_v_bogus = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_i = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_spam = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_sym = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_freq = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":487
+ *         cdef int nsym
+ * 
+ *         if alphabet == None and infile == None:             # <<<<<<<<<<<<<<
+ *             raise ValueError, "One of alphabet or infile must be passed to constructor"
+ *         if alphabet != None and infile != None:
+ */
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_alphabet, Py_None, Py_EQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+    __pyx_t_1 = PyObject_RichCompare(__pyx_v_infile, Py_None, Py_EQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_4 = __pyx_t_3;
+  } else {
+    __pyx_t_4 = __pyx_t_2;
+  }
+  if (__pyx_t_4) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":488
+ * 
+ *         if alphabet == None and infile == None:
+ *             raise ValueError, "One of alphabet or infile must be passed to constructor"             # <<<<<<<<<<<<<<
+ *         if alphabet != None and infile != None:
+ *             raise ValueError, "Only one of alphabet or infile must be passed to constructor"
+ */
+    __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_16), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":489
+ *         if alphabet == None and infile == None:
+ *             raise ValueError, "One of alphabet or infile must be passed to constructor"
+ *         if alphabet != None and infile != None:             # <<<<<<<<<<<<<<
+ *             raise ValueError, "Only one of alphabet or infile must be passed to constructor"
+ * 
+ */
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_alphabet, Py_None, Py_NE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_4) {
+    __pyx_t_1 = PyObject_RichCompare(__pyx_v_infile, Py_None, Py_NE); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_3 = __pyx_t_2;
+  } else {
+    __pyx_t_3 = __pyx_t_4;
+  }
+  if (__pyx_t_3) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":490
+ *             raise ValueError, "One of alphabet or infile must be passed to constructor"
+ *         if alphabet != None and infile != None:
+ *             raise ValueError, "Only one of alphabet or infile must be passed to constructor"             # <<<<<<<<<<<<<<
+ * 
+ *         self.fh = None
+ */
+    __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_s_17), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":492
+ *             raise ValueError, "Only one of alphabet or infile must be passed to constructor"
+ * 
+ *         self.fh = None             # <<<<<<<<<<<<<<
+ *         if infile:
+ *             self.read(infile)
+ */
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh);
+  __Pyx_DECREF(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh);
+  ((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh = Py_None;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":493
+ * 
+ *         self.fh = None
+ *         if infile:             # <<<<<<<<<<<<<<
+ *             self.read(infile)
+ *             return
+ */
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_infile); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_3) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":494
+ *         self.fh = None
+ *         if infile:
+ *             self.read(infile)             # <<<<<<<<<<<<<<
+ *             return
+ * 
+ */
+    __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__read); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_INCREF(__pyx_v_infile);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_infile);
+    __Pyx_GIVEREF(__pyx_v_infile);
+    __pyx_t_6 = PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":495
+ *         if infile:
+ *             self.read(infile)
+ *             return             # <<<<<<<<<<<<<<
+ * 
+ *         nsym = len(alphabet)
+ */
+    __pyx_r = 0;
+    goto __pyx_L0;
+    goto __pyx_L8;
+  }
+  __pyx_L8:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":497
+ *             return
+ * 
+ *         nsym = len(alphabet)             # <<<<<<<<<<<<<<
+ *         frequencies = <int *>ckd_calloc(nsym, sizeof(int))
+ *         symbols = <char **>ckd_calloc(nsym, sizeof(char *))
+ */
+  __pyx_t_7 = PyObject_Length(__pyx_v_alphabet); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_nsym = __pyx_t_7;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":498
+ * 
+ *         nsym = len(alphabet)
+ *         frequencies = <int *>ckd_calloc(nsym, sizeof(int))             # <<<<<<<<<<<<<<
+ *         symbols = <char **>ckd_calloc(nsym, sizeof(char *))
+ *         # Need to create separate Python objects for each string,
+ */
+  __pyx_v_frequencies = ((int *)ckd_calloc(__pyx_v_nsym, (sizeof(int))));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":499
+ *         nsym = len(alphabet)
+ *         frequencies = <int *>ckd_calloc(nsym, sizeof(int))
+ *         symbols = <char **>ckd_calloc(nsym, sizeof(char *))             # <<<<<<<<<<<<<<
+ *         # Need to create separate Python objects for each string,
+ *         # otherwise we get random duplicates of the codewords...
+ */
+  __pyx_v_symbols = ((char **)ckd_calloc(__pyx_v_nsym, (sizeof(char *))));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":502
+ *         # Need to create separate Python objects for each string,
+ *         # otherwise we get random duplicates of the codewords...
+ *         bogus = []             # <<<<<<<<<<<<<<
+ *         for i, spam in enumerate(alphabet):
+ *             sym, freq = spam
+ */
+  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_6));
+  __Pyx_DECREF(__pyx_v_bogus);
+  __pyx_v_bogus = ((PyObject *)__pyx_t_6);
+  __pyx_t_6 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":503
+ *         # otherwise we get random duplicates of the codewords...
+ *         bogus = []
+ *         for i, spam in enumerate(alphabet):             # <<<<<<<<<<<<<<
+ *             sym, freq = spam
+ *             bogus.append(repr(sym))
+ */
+  __Pyx_INCREF(__pyx_int_0);
+  __pyx_t_6 = __pyx_int_0;
+  if (PyList_CheckExact(__pyx_v_alphabet) || PyTuple_CheckExact(__pyx_v_alphabet)) {
+    __pyx_t_7 = 0; __pyx_t_5 = __pyx_v_alphabet; __Pyx_INCREF(__pyx_t_5);
+  } else {
+    __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_alphabet); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+  }
+  for (;;) {
+    if (likely(PyList_CheckExact(__pyx_t_5))) {
+      if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break;
+      __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++;
+    } else if (likely(PyTuple_CheckExact(__pyx_t_5))) {
+      if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
+      __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++;
+    } else {
+      __pyx_t_1 = PyIter_Next(__pyx_t_5);
+      if (!__pyx_t_1) {
+        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_1);
+    }
+    __Pyx_DECREF(__pyx_v_spam);
+    __pyx_v_spam = __pyx_t_1;
+    __pyx_t_1 = 0;
+    __Pyx_INCREF(__pyx_t_6);
+    __Pyx_DECREF(__pyx_v_i);
+    __pyx_v_i = __pyx_t_6;
+    __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_6);
+    __pyx_t_6 = __pyx_t_1;
+    __pyx_t_1 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":504
+ *         bogus = []
+ *         for i, spam in enumerate(alphabet):
+ *             sym, freq = spam             # <<<<<<<<<<<<<<
+ *             bogus.append(repr(sym))
+ *             frequencies[i] = freq
+ */
+    if (PyTuple_CheckExact(__pyx_v_spam) && likely(PyTuple_GET_SIZE(__pyx_v_spam) == 2)) {
+      PyObject* tuple = __pyx_v_spam;
+      __pyx_t_1 = PyTuple_GET_ITEM(tuple, 0); __Pyx_INCREF(__pyx_t_1);
+      __pyx_t_8 = PyTuple_GET_ITEM(tuple, 1); __Pyx_INCREF(__pyx_t_8);
+      __Pyx_DECREF(__pyx_v_sym);
+      __pyx_v_sym = __pyx_t_1;
+      __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_v_freq);
+      __pyx_v_freq = __pyx_t_8;
+      __pyx_t_8 = 0;
+    } else {
+      __pyx_t_9 = PyObject_GetIter(__pyx_v_spam); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_1 = __Pyx_UnpackItem(__pyx_t_9, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_8 = __Pyx_UnpackItem(__pyx_t_9, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_8);
+      if (__Pyx_EndUnpack(__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_DECREF(__pyx_v_sym);
+      __pyx_v_sym = __pyx_t_1;
+      __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_v_freq);
+      __pyx_v_freq = __pyx_t_8;
+      __pyx_t_8 = 0;
+    }
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":505
+ *         for i, spam in enumerate(alphabet):
+ *             sym, freq = spam
+ *             bogus.append(repr(sym))             # <<<<<<<<<<<<<<
+ *             frequencies[i] = freq
+ *             symbols[i] = bogus[-1]
+ */
+    __pyx_t_8 = PyObject_Repr(__pyx_v_sym); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_8);
+    __pyx_t_1 = __Pyx_PyObject_Append(__pyx_v_bogus, __pyx_t_8); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":506
+ *             sym, freq = spam
+ *             bogus.append(repr(sym))
+ *             frequencies[i] = freq             # <<<<<<<<<<<<<<
+ *             symbols[i] = bogus[-1]
+ *         self.hc = huff_code_build_str(symbols, frequencies, nsym)
+ */
+    __pyx_t_10 = __Pyx_PyInt_AsInt(__pyx_v_freq); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    (__pyx_v_frequencies[__pyx_t_11]) = __pyx_t_10;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":507
+ *             bogus.append(repr(sym))
+ *             frequencies[i] = freq
+ *             symbols[i] = bogus[-1]             # <<<<<<<<<<<<<<
+ *         self.hc = huff_code_build_str(symbols, frequencies, nsym)
+ *         ckd_free(frequencies)
+ */
+    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_bogus, -1, sizeof(long), PyInt_FromLong); if (!__pyx_t_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_12 = __Pyx_PyBytes_AsString(__pyx_t_1); if (unlikely((!__pyx_t_12) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    (__pyx_v_symbols[__pyx_t_11]) = __pyx_t_12;
+  }
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":508
+ *             frequencies[i] = freq
+ *             symbols[i] = bogus[-1]
+ *         self.hc = huff_code_build_str(symbols, frequencies, nsym)             # <<<<<<<<<<<<<<
+ *         ckd_free(frequencies)
+ *         ckd_free(symbols)
+ */
+  ((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc = huff_code_build_str(__pyx_v_symbols, __pyx_v_frequencies, __pyx_v_nsym);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":509
+ *             symbols[i] = bogus[-1]
+ *         self.hc = huff_code_build_str(symbols, frequencies, nsym)
+ *         ckd_free(frequencies)             # <<<<<<<<<<<<<<
+ *         ckd_free(symbols)
+ * 
+ */
+  ckd_free(__pyx_v_frequencies);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":510
+ *         self.hc = huff_code_build_str(symbols, frequencies, nsym)
+ *         ckd_free(frequencies)
+ *         ckd_free(symbols)             # <<<<<<<<<<<<<<
+ * 
+ *     def read(self, infile):
+ */
+  ckd_free(__pyx_v_symbols);
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_bogus);
+  __Pyx_DECREF(__pyx_v_i);
+  __Pyx_DECREF(__pyx_v_spam);
+  __Pyx_DECREF(__pyx_v_sym);
+  __Pyx_DECREF(__pyx_v_freq);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_alphabet);
+  __Pyx_DECREF(__pyx_v_infile);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":512
+ *         ckd_free(symbols)
+ * 
+ *     def read(self, infile):             # <<<<<<<<<<<<<<
+ *         if not isinstance(infile, file):
+ *             infile = file(infile, "rb")
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_read(PyObject *__pyx_v_self, PyObject *__pyx_v_infile); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_read(PyObject *__pyx_v_self, PyObject *__pyx_v_infile) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  huff_code_t *__pyx_t_5;
+  __Pyx_RefNannySetupContext("read");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_infile);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":513
+ * 
+ *     def read(self, infile):
+ *         if not isinstance(infile, file):             # <<<<<<<<<<<<<<
+ *             infile = file(infile, "rb")
+ *         huff_code_free(self.hc)
+ */
+  __pyx_t_1 = PyObject_TypeCheck(__pyx_v_infile, ((PyTypeObject *)((PyObject*)&PyFile_Type))); 
+  __pyx_t_2 = (!__pyx_t_1);
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":514
+ *     def read(self, infile):
+ *         if not isinstance(infile, file):
+ *             infile = file(infile, "rb")             # <<<<<<<<<<<<<<
+ *         huff_code_free(self.hc)
+ *         self.hc = huff_code_read(PyFile_AsFile(infile))
+ */
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_infile);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_infile);
+    __Pyx_GIVEREF(__pyx_v_infile);
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__rb));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__rb));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__rb));
+    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)&PyFile_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_v_infile);
+    __pyx_v_infile = __pyx_t_4;
+    __pyx_t_4 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":515
+ *         if not isinstance(infile, file):
+ *             infile = file(infile, "rb")
+ *         huff_code_free(self.hc)             # <<<<<<<<<<<<<<
+ *         self.hc = huff_code_read(PyFile_AsFile(infile))
+ * 
+ */
+  huff_code_free(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":516
+ *             infile = file(infile, "rb")
+ *         huff_code_free(self.hc)
+ *         self.hc = huff_code_read(PyFile_AsFile(infile))             # <<<<<<<<<<<<<<
+ * 
+ *     def write(self, outfile):
+ */
+  __pyx_t_5 = huff_code_read(PyFile_AsFile(__pyx_v_infile)); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc = __pyx_t_5;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.read");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_infile);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":518
+ *         self.hc = huff_code_read(PyFile_AsFile(infile))
+ * 
+ *     def write(self, outfile):             # <<<<<<<<<<<<<<
+ *         if not isinstance(outfile, file):
+ *             outfile = file(outfile, "wb")
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_write(PyObject *__pyx_v_self, PyObject *__pyx_v_outfile); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_write(PyObject *__pyx_v_self, PyObject *__pyx_v_outfile) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("write");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_outfile);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":519
+ * 
+ *     def write(self, outfile):
+ *         if not isinstance(outfile, file):             # <<<<<<<<<<<<<<
+ *             outfile = file(outfile, "wb")
+ *         huff_code_write(self.hc, PyFile_AsFile(outfile))
+ */
+  __pyx_t_1 = PyObject_TypeCheck(__pyx_v_outfile, ((PyTypeObject *)((PyObject*)&PyFile_Type))); 
+  __pyx_t_2 = (!__pyx_t_1);
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":520
+ *     def write(self, outfile):
+ *         if not isinstance(outfile, file):
+ *             outfile = file(outfile, "wb")             # <<<<<<<<<<<<<<
+ *         huff_code_write(self.hc, PyFile_AsFile(outfile))
+ * 
+ */
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_outfile);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_outfile);
+    __Pyx_GIVEREF(__pyx_v_outfile);
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__wb));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__wb));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__wb));
+    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)&PyFile_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_v_outfile);
+    __pyx_v_outfile = __pyx_t_4;
+    __pyx_t_4 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":521
+ *         if not isinstance(outfile, file):
+ *             outfile = file(outfile, "wb")
+ *         huff_code_write(self.hc, PyFile_AsFile(outfile))             # <<<<<<<<<<<<<<
+ * 
+ *     def dump(self, outfile):
+ */
+  __pyx_t_5 = huff_code_write(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc, PyFile_AsFile(__pyx_v_outfile)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.write");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_outfile);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":523
+ *         huff_code_write(self.hc, PyFile_AsFile(outfile))
+ * 
+ *     def dump(self, outfile):             # <<<<<<<<<<<<<<
+ *         if not isinstance(outfile, file):
+ *             outfile = file(outfile, "w")
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_dump(PyObject *__pyx_v_self, PyObject *__pyx_v_outfile); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_dump(PyObject *__pyx_v_self, PyObject *__pyx_v_outfile) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("dump");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_outfile);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":524
+ * 
+ *     def dump(self, outfile):
+ *         if not isinstance(outfile, file):             # <<<<<<<<<<<<<<
+ *             outfile = file(outfile, "w")
+ *         huff_code_dump(self.hc, PyFile_AsFile(outfile))
+ */
+  __pyx_t_1 = PyObject_TypeCheck(__pyx_v_outfile, ((PyTypeObject *)((PyObject*)&PyFile_Type))); 
+  __pyx_t_2 = (!__pyx_t_1);
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":525
+ *     def dump(self, outfile):
+ *         if not isinstance(outfile, file):
+ *             outfile = file(outfile, "w")             # <<<<<<<<<<<<<<
+ *         huff_code_dump(self.hc, PyFile_AsFile(outfile))
+ * 
+ */
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_outfile);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_outfile);
+    __Pyx_GIVEREF(__pyx_v_outfile);
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__w));
+    PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_n_s__w));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__w));
+    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)&PyFile_Type)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_v_outfile);
+    __pyx_v_outfile = __pyx_t_4;
+    __pyx_t_4 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":526
+ *         if not isinstance(outfile, file):
+ *             outfile = file(outfile, "w")
+ *         huff_code_dump(self.hc, PyFile_AsFile(outfile))             # <<<<<<<<<<<<<<
+ * 
+ *     def encode(self, seq):
+ */
+  __pyx_t_5 = huff_code_dump(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc, PyFile_AsFile(__pyx_v_outfile)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.dump");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_outfile);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":528
+ *         huff_code_dump(self.hc, PyFile_AsFile(outfile))
+ * 
+ *     def encode(self, seq):             # <<<<<<<<<<<<<<
+ *         """
+ *         Encode a sequence of symbols to a byte array, returning that
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_encode(PyObject *__pyx_v_self, PyObject *__pyx_v_seq); /*proto*/
+static char __pyx_doc_10sphinxbase_8HuffCode_encode[] = "\n        Encode a sequence of symbols to a byte array, returning that\n        array and the bit offset of the next codeword in the last\n        byte (i.e. 8 minutes the number of extra zero bits)\n        ";
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_encode(PyObject *__pyx_v_self, PyObject *__pyx_v_seq) {
+  unsigned int __pyx_v_cw;
+  int __pyx_v_cwlen;
+  int __pyx_v_nbits;
+  int __pyx_v_nbytes;
+  int __pyx_v_offset;
+  int __pyx_v_i;
+  unsigned char __pyx_v_buf;
+  char *__pyx_v_output;
+  PyObject *__pyx_v_sym;
+  PyObject *__pyx_v_sss;
+  PyObject *__pyx_v_outstr;
+  PyObject *__pyx_r = NULL;
+  Py_ssize_t __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  char *__pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("encode");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_seq);
+  __pyx_v_sym = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_sss = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_outstr = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":535
+ *         """
+ *         cdef unsigned int cw
+ *         cdef int cwlen, nbits = 0, nbytes, offset, i             # <<<<<<<<<<<<<<
+ *         cdef unsigned char buf = 0
+ *         cdef char *output
+ */
+  __pyx_v_nbits = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":536
+ *         cdef unsigned int cw
+ *         cdef int cwlen, nbits = 0, nbytes, offset, i
+ *         cdef unsigned char buf = 0             # <<<<<<<<<<<<<<
+ *         cdef char *output
+ * 
+ */
+  __pyx_v_buf = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":539
+ *         cdef char *output
+ * 
+ *         for sym in seq:             # <<<<<<<<<<<<<<
+ *             sss = repr(sym)
+ *             cwlen = huff_code_encode_str(self.hc, sss, &cw)
+ */
+  if (PyList_CheckExact(__pyx_v_seq) || PyTuple_CheckExact(__pyx_v_seq)) {
+    __pyx_t_1 = 0; __pyx_t_2 = __pyx_v_seq; __Pyx_INCREF(__pyx_t_2);
+  } else {
+    __pyx_t_1 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_seq); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+  }
+  for (;;) {
+    if (likely(PyList_CheckExact(__pyx_t_2))) {
+      if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_t_1++;
+    } else if (likely(PyTuple_CheckExact(__pyx_t_2))) {
+      if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_t_1++;
+    } else {
+      __pyx_t_3 = PyIter_Next(__pyx_t_2);
+      if (!__pyx_t_3) {
+        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 539; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+    }
+    __Pyx_DECREF(__pyx_v_sym);
+    __pyx_v_sym = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":540
+ * 
+ *         for sym in seq:
+ *             sss = repr(sym)             # <<<<<<<<<<<<<<
+ *             cwlen = huff_code_encode_str(self.hc, sss, &cw)
+ *             nbits += cwlen
+ */
+    __pyx_t_3 = PyObject_Repr(__pyx_v_sym); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_v_sss);
+    __pyx_v_sss = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":541
+ *         for sym in seq:
+ *             sss = repr(sym)
+ *             cwlen = huff_code_encode_str(self.hc, sss, &cw)             # <<<<<<<<<<<<<<
+ *             nbits += cwlen
+ *         nbytes = int((nbits + 7) / 8)
+ */
+    __pyx_t_4 = __Pyx_PyBytes_AsString(__pyx_v_sss); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_cwlen = huff_code_encode_str(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc, __pyx_t_4, (&__pyx_v_cw));
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":542
+ *             sss = repr(sym)
+ *             cwlen = huff_code_encode_str(self.hc, sss, &cw)
+ *             nbits += cwlen             # <<<<<<<<<<<<<<
+ *         nbytes = int((nbits + 7) / 8)
+ *         offset = 0
+ */
+    __pyx_v_nbits += __pyx_v_cwlen;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":543
+ *             cwlen = huff_code_encode_str(self.hc, sss, &cw)
+ *             nbits += cwlen
+ *         nbytes = int((nbits + 7) / 8)             # <<<<<<<<<<<<<<
+ *         offset = 0
+ *         output = <char *>PyMem_Malloc(nbytes + 1)
+ */
+  __pyx_v_nbytes = ((int)__Pyx_div_long((__pyx_v_nbits + 7), 8));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":544
+ *             nbits += cwlen
+ *         nbytes = int((nbits + 7) / 8)
+ *         offset = 0             # <<<<<<<<<<<<<<
+ *         output = <char *>PyMem_Malloc(nbytes + 1)
+ *         output[nbytes] = 0
+ */
+  __pyx_v_offset = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":545
+ *         nbytes = int((nbits + 7) / 8)
+ *         offset = 0
+ *         output = <char *>PyMem_Malloc(nbytes + 1)             # <<<<<<<<<<<<<<
+ *         output[nbytes] = 0
+ *         i = 0
+ */
+  __pyx_v_output = ((char *)PyMem_Malloc((__pyx_v_nbytes + 1)));
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":546
+ *         offset = 0
+ *         output = <char *>PyMem_Malloc(nbytes + 1)
+ *         output[nbytes] = 0             # <<<<<<<<<<<<<<
+ *         i = 0
+ *         nbits = 0
+ */
+  (__pyx_v_output[__pyx_v_nbytes]) = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":547
+ *         output = <char *>PyMem_Malloc(nbytes + 1)
+ *         output[nbytes] = 0
+ *         i = 0             # <<<<<<<<<<<<<<
+ *         nbits = 0
+ *         for sym in seq:
+ */
+  __pyx_v_i = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":548
+ *         output[nbytes] = 0
+ *         i = 0
+ *         nbits = 0             # <<<<<<<<<<<<<<
+ *         for sym in seq:
+ *             sss = repr(sym)
+ */
+  __pyx_v_nbits = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":549
+ *         i = 0
+ *         nbits = 0
+ *         for sym in seq:             # <<<<<<<<<<<<<<
+ *             sss = repr(sym)
+ *             cwlen = huff_code_encode_str(self.hc, sss, &cw)
+ */
+  if (PyList_CheckExact(__pyx_v_seq) || PyTuple_CheckExact(__pyx_v_seq)) {
+    __pyx_t_1 = 0; __pyx_t_2 = __pyx_v_seq; __Pyx_INCREF(__pyx_t_2);
+  } else {
+    __pyx_t_1 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_seq); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+  }
+  for (;;) {
+    if (likely(PyList_CheckExact(__pyx_t_2))) {
+      if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_t_1++;
+    } else if (likely(PyTuple_CheckExact(__pyx_t_2))) {
+      if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_1); __Pyx_INCREF(__pyx_t_3); __pyx_t_1++;
+    } else {
+      __pyx_t_3 = PyIter_Next(__pyx_t_2);
+      if (!__pyx_t_3) {
+        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_3);
+    }
+    __Pyx_DECREF(__pyx_v_sym);
+    __pyx_v_sym = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":550
+ *         nbits = 0
+ *         for sym in seq:
+ *             sss = repr(sym)             # <<<<<<<<<<<<<<
+ *             cwlen = huff_code_encode_str(self.hc, sss, &cw)
+ *             #print "sym: %s cw: %s buf: %s output: %s" \
+ */
+    __pyx_t_3 = PyObject_Repr(__pyx_v_sym); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_v_sss);
+    __pyx_v_sss = __pyx_t_3;
+    __pyx_t_3 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":551
+ *         for sym in seq:
+ *             sss = repr(sym)
+ *             cwlen = huff_code_encode_str(self.hc, sss, &cw)             # <<<<<<<<<<<<<<
+ *             #print "sym: %s cw: %s buf: %s output: %s" \
+ *             #      % (sym, bincw(cw, cwlen), bincw(buf >> (8-offset), offset),
+ */
+    __pyx_t_4 = __Pyx_PyBytes_AsString(__pyx_v_sss); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_cwlen = huff_code_encode_str(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc, __pyx_t_4, (&__pyx_v_cw));
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":557
+ *             #print "cwlen",cwlen
+ *             # Do one byte at a time while full bytes are available
+ *             while cwlen >= 8:             # <<<<<<<<<<<<<<
+ *                 # Fill low bits of buf with high bits of cw
+ *                 buf |= (cw >> (cwlen - (8 - offset))) & ((1 << (8 - offset)) - 1)
+ */
+    while (1) {
+      __pyx_t_5 = (__pyx_v_cwlen >= 8);
+      if (!__pyx_t_5) break;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":559
+ *             while cwlen >= 8:
+ *                 # Fill low bits of buf with high bits of cw
+ *                 buf |= (cw >> (cwlen - (8 - offset))) & ((1 << (8 - offset)) - 1)             # <<<<<<<<<<<<<<
+ *                 # Append buf to output
+ *                 output[i] = buf
+ */
+      __pyx_v_buf |= ((__pyx_v_cw >> (__pyx_v_cwlen - (8 - __pyx_v_offset))) & ((1 << (8 - __pyx_v_offset)) - 1));
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":561
+ *                 buf |= (cw >> (cwlen - (8 - offset))) & ((1 << (8 - offset)) - 1)
+ *                 # Append buf to output
+ *                 output[i] = buf             # <<<<<<<<<<<<<<
+ *                 i += 1
+ *                 nbits += 8
+ */
+      (__pyx_v_output[__pyx_v_i]) = __pyx_v_buf;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":562
+ *                 # Append buf to output
+ *                 output[i] = buf
+ *                 i += 1             # <<<<<<<<<<<<<<
+ *                 nbits += 8
+ *                 # Fill high bits of buf with low bits of this byte
+ */
+      __pyx_v_i += 1;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":563
+ *                 output[i] = buf
+ *                 i += 1
+ *                 nbits += 8             # <<<<<<<<<<<<<<
+ *                 # Fill high bits of buf with low bits of this byte
+ *                 cwlen -= 8
+ */
+      __pyx_v_nbits += 8;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":565
+ *                 nbits += 8
+ *                 # Fill high bits of buf with low bits of this byte
+ *                 cwlen -= 8             # <<<<<<<<<<<<<<
+ *                 buf = (cw >> cwlen) & ((1 << offset) - 1)
+ *                 buf <<= (8-offset)
+ */
+      __pyx_v_cwlen -= 8;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":566
+ *                 # Fill high bits of buf with low bits of this byte
+ *                 cwlen -= 8
+ *                 buf = (cw >> cwlen) & ((1 << offset) - 1)             # <<<<<<<<<<<<<<
+ *                 buf <<= (8-offset)
+ *                 #print "cwlen",cwlen
+ */
+      __pyx_v_buf = ((__pyx_v_cw >> __pyx_v_cwlen) & ((1 << __pyx_v_offset) - 1));
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":567
+ *                 cwlen -= 8
+ *                 buf = (cw >> cwlen) & ((1 << offset) - 1)
+ *                 buf <<= (8-offset)             # <<<<<<<<<<<<<<
+ *                 #print "cwlen",cwlen
+ *             # Now cwlen will be less than 8, but it might still be
+ */
+      __pyx_v_buf <<= (8 - __pyx_v_offset);
+    }
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":571
+ *             # Now cwlen will be less than 8, but it might still be
+ *             # more than the available space in buf.
+ *             if cwlen >= (8 - offset):             # <<<<<<<<<<<<<<
+ *                 # Fill low bits of buf with (8-offset) highest bits of cw
+ *                 buf |= (cw >> (cwlen - (8 - offset))) & ((1 << (8 - offset)) - 1)
+ */
+    __pyx_t_5 = (__pyx_v_cwlen >= (8 - __pyx_v_offset));
+    if (__pyx_t_5) {
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":573
+ *             if cwlen >= (8 - offset):
+ *                 # Fill low bits of buf with (8-offset) highest bits of cw
+ *                 buf |= (cw >> (cwlen - (8 - offset))) & ((1 << (8 - offset)) - 1)             # <<<<<<<<<<<<<<
+ *                 # Append buf to output
+ *                 output[i] = buf
+ */
+      __pyx_v_buf |= ((__pyx_v_cw >> (__pyx_v_cwlen - (8 - __pyx_v_offset))) & ((1 << (8 - __pyx_v_offset)) - 1));
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":575
+ *                 buf |= (cw >> (cwlen - (8 - offset))) & ((1 << (8 - offset)) - 1)
+ *                 # Append buf to output
+ *                 output[i] = buf             # <<<<<<<<<<<<<<
+ *                 i += 1
+ *                 nbits += 8
+ */
+      (__pyx_v_output[__pyx_v_i]) = __pyx_v_buf;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":576
+ *                 # Append buf to output
+ *                 output[i] = buf
+ *                 i += 1             # <<<<<<<<<<<<<<
+ *                 nbits += 8
+ *                 # cwlen is down to the remaining bits
+ */
+      __pyx_v_i += 1;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":577
+ *                 output[i] = buf
+ *                 i += 1
+ *                 nbits += 8             # <<<<<<<<<<<<<<
+ *                 # cwlen is down to the remaining bits
+ *                 cwlen -= (8 - offset)
+ */
+      __pyx_v_nbits += 8;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":579
+ *                 nbits += 8
+ *                 # cwlen is down to the remaining bits
+ *                 cwlen -= (8 - offset)             # <<<<<<<<<<<<<<
+ *                 # Offset is now zero since we just completed and emptied buf
+ *                 offset = 0
+ */
+      __pyx_v_cwlen -= (8 - __pyx_v_offset);
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":581
+ *                 cwlen -= (8 - offset)
+ *                 # Offset is now zero since we just completed and emptied buf
+ *                 offset = 0             # <<<<<<<<<<<<<<
+ *                 # buf is zero, because we just emptied it without putting stuff in
+ *                 buf = 0
+ */
+      __pyx_v_offset = 0;
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":583
+ *                 offset = 0
+ *                 # buf is zero, because we just emptied it without putting stuff in
+ *                 buf = 0             # <<<<<<<<<<<<<<
+ *                 #print "cwlen",cwlen
+ *                 # Any remaining  bits will be taken care of below (we hope)
+ */
+      __pyx_v_buf = 0;
+      goto __pyx_L11;
+    }
+    __pyx_L11:;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":588
+ *             # Add remaining high bits of cw to low bits of buf
+ *             #print "cwlen",cwlen
+ *             buf |= ((cw & ((1 << cwlen) - 1)) << (8 - offset - cwlen))             # <<<<<<<<<<<<<<
+ *             offset += cwlen
+ *             #print "after buf: %s output: %s" \
+ */
+    __pyx_v_buf |= ((__pyx_v_cw & ((1 << __pyx_v_cwlen) - 1)) << ((8 - __pyx_v_offset) - __pyx_v_cwlen));
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":589
+ *             #print "cwlen",cwlen
+ *             buf |= ((cw & ((1 << cwlen) - 1)) << (8 - offset - cwlen))
+ *             offset += cwlen             # <<<<<<<<<<<<<<
+ *             #print "after buf: %s output: %s" \
+ *             #      % (bincw(buf >> (8-offset), offset), binstr(output, nbits))
+ */
+    __pyx_v_offset += __pyx_v_cwlen;
+  }
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":592
+ *             #print "after buf: %s output: %s" \
+ *             #      % (bincw(buf >> (8-offset), offset), binstr(output, nbits))
+ *         if offset > 0:             # <<<<<<<<<<<<<<
+ *             # Append buf to output
+ *             output[i] = buf
+ */
+  __pyx_t_5 = (__pyx_v_offset > 0);
+  if (__pyx_t_5) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":594
+ *         if offset > 0:
+ *             # Append buf to output
+ *             output[i] = buf             # <<<<<<<<<<<<<<
+ *             nbits += offset
+ *             i += 1
+ */
+    (__pyx_v_output[__pyx_v_i]) = __pyx_v_buf;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":595
+ *             # Append buf to output
+ *             output[i] = buf
+ *             nbits += offset             # <<<<<<<<<<<<<<
+ *             i += 1
+ *         #print "output:", binstr(output, nbits)
+ */
+    __pyx_v_nbits += __pyx_v_offset;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":596
+ *             output[i] = buf
+ *             nbits += offset
+ *             i += 1             # <<<<<<<<<<<<<<
+ *         #print "output:", binstr(output, nbits)
+ *         outstr = PyString_FromStringAndSize(output, nbytes)
+ */
+    __pyx_v_i += 1;
+    goto __pyx_L12;
+  }
+  __pyx_L12:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":598
+ *             i += 1
+ *         #print "output:", binstr(output, nbits)
+ *         outstr = PyString_FromStringAndSize(output, nbytes)             # <<<<<<<<<<<<<<
+ *         PyMem_Free(output)
+ *         return (outstr, offset)
+ */
+  __pyx_t_2 = PyString_FromStringAndSize(__pyx_v_output, __pyx_v_nbytes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_v_outstr);
+  __pyx_v_outstr = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":599
+ *         #print "output:", binstr(output, nbits)
+ *         outstr = PyString_FromStringAndSize(output, nbytes)
+ *         PyMem_Free(output)             # <<<<<<<<<<<<<<
+ *         return (outstr, offset)
+ * 
+ */
+  PyMem_Free(__pyx_v_output);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":600
+ *         outstr = PyString_FromStringAndSize(output, nbytes)
+ *         PyMem_Free(output)
+ *         return (outstr, offset)             # <<<<<<<<<<<<<<
+ * 
+ *     def decode(self, data):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_offset); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_v_outstr);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_outstr);
+  __Pyx_GIVEREF(__pyx_v_outstr);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_2);
+  __pyx_t_2 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.encode");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_sym);
+  __Pyx_DECREF(__pyx_v_sss);
+  __Pyx_DECREF(__pyx_v_outstr);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_seq);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":602
+ *         return (outstr, offset)
+ * 
+ *     def decode(self, data):             # <<<<<<<<<<<<<<
+ *         """
+ *         Decode a sequence of symbols from a string, returning the
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_decode(PyObject *__pyx_v_self, PyObject *__pyx_v_data); /*proto*/
+static char __pyx_doc_10sphinxbase_8HuffCode_decode[] = "\n        Decode a sequence of symbols from a string, returning the\n        sequence and the bit offset of the next codeword in the last\n        byte (i.e. 8 minutes the number of remaining bits)\n        ";
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_decode(PyObject *__pyx_v_self, PyObject *__pyx_v_data) {
+  int __pyx_v_offset;
+  char *__pyx_v_dptr;
+  char *__pyx_v_strval;
+  size_t __pyx_v_dlen;
+  PyObject *__pyx_v_output;
+  PyObject *__pyx_r = NULL;
+  Py_ssize_t __pyx_t_1;
+  char *__pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("decode");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_data);
+  __pyx_v_output = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":613
+ *         cdef size_t dlen
+ * 
+ *         dlen = len(data)             # <<<<<<<<<<<<<<
+ *         offset = 0
+ *         dptr = data
+ */
+  __pyx_t_1 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_dlen = __pyx_t_1;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":614
+ * 
+ *         dlen = len(data)
+ *         offset = 0             # <<<<<<<<<<<<<<
+ *         dptr = data
+ *         output = []
+ */
+  __pyx_v_offset = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":615
+ *         dlen = len(data)
+ *         offset = 0
+ *         dptr = data             # <<<<<<<<<<<<<<
+ *         output = []
+ *         while True:
+ */
+  __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_v_data); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_dptr = __pyx_t_2;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":616
+ *         offset = 0
+ *         dptr = data
+ *         output = []             # <<<<<<<<<<<<<<
+ *         while True:
+ *             strval = huff_code_decode_str(self.hc, &dptr, &dlen, &offset)
+ */
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+  __Pyx_DECREF(__pyx_v_output);
+  __pyx_v_output = ((PyObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":617
+ *         dptr = data
+ *         output = []
+ *         while True:             # <<<<<<<<<<<<<<
+ *             strval = huff_code_decode_str(self.hc, &dptr, &dlen, &offset)
+ *             if strval == NULL:
+ */
+  while (1) {
+    __pyx_t_4 = 1;
+    if (!__pyx_t_4) break;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":618
+ *         output = []
+ *         while True:
+ *             strval = huff_code_decode_str(self.hc, &dptr, &dlen, &offset)             # <<<<<<<<<<<<<<
+ *             if strval == NULL:
+ *                 break
+ */
+    __pyx_v_strval = huff_code_decode_str(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc, (&__pyx_v_dptr), (&__pyx_v_dlen), (&__pyx_v_offset));
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":619
+ *         while True:
+ *             strval = huff_code_decode_str(self.hc, &dptr, &dlen, &offset)
+ *             if strval == NULL:             # <<<<<<<<<<<<<<
+ *                 break
+ *             output.append(strval)
+ */
+    __pyx_t_4 = (__pyx_v_strval == NULL);
+    if (__pyx_t_4) {
+
+      /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":620
+ *             strval = huff_code_decode_str(self.hc, &dptr, &dlen, &offset)
+ *             if strval == NULL:
+ *                 break             # <<<<<<<<<<<<<<
+ *             output.append(strval)
+ *         if dlen > 1:
+ */
+      goto __pyx_L6_break;
+      goto __pyx_L7;
+    }
+    __pyx_L7:;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":621
+ *             if strval == NULL:
+ *                 break
+ *             output.append(strval)             # <<<<<<<<<<<<<<
+ *         if dlen > 1:
+ *             raise ValueError, "Invalid data at position %d" % (len(data) - dlen)
+ */
+    __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_strval); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+    __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_output, ((PyObject *)__pyx_t_3)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  }
+  __pyx_L6_break:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":622
+ *                 break
+ *             output.append(strval)
+ *         if dlen > 1:             # <<<<<<<<<<<<<<
+ *             raise ValueError, "Invalid data at position %d" % (len(data) - dlen)
+ *         return (output, offset)
+ */
+  __pyx_t_4 = (__pyx_v_dlen > 1);
+  if (__pyx_t_4) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":623
+ *             output.append(strval)
+ *         if dlen > 1:
+ *             raise ValueError, "Invalid data at position %d" % (len(data) - dlen)             # <<<<<<<<<<<<<<
+ *         return (output, offset)
+ * 
+ */
+    __pyx_t_1 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyInt_FromSize_t((__pyx_t_1 - __pyx_v_dlen)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_18), __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_3, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L8;
+  }
+  __pyx_L8:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":624
+ *         if dlen > 1:
+ *             raise ValueError, "Invalid data at position %d" % (len(data) - dlen)
+ *         return (output, offset)             # <<<<<<<<<<<<<<
+ * 
+ *     def attach(self, fh, char *mode):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = PyInt_FromLong(__pyx_v_offset); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_INCREF(__pyx_v_output);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_output);
+  __Pyx_GIVEREF(__pyx_v_output);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.decode");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_output);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_data);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":626
+ *         return (output, offset)
+ * 
+ *     def attach(self, fh, char *mode):             # <<<<<<<<<<<<<<
+ *         if not isinstance(fh, file):
+ *             fh = file(fh, mode)
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_attach(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_attach(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_fh = 0;
+  char *__pyx_v_mode;
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__fh,&__pyx_n_s__mode,0};
+  __Pyx_RefNannySetupContext("attach");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__fh);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__mode);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("attach", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "attach") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_fh = values[0];
+    __pyx_v_mode = __Pyx_PyBytes_AsString(values[1]); if (unlikely((!__pyx_v_mode) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_fh = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_mode = __Pyx_PyBytes_AsString(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((!__pyx_v_mode) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("attach", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("sphinxbase.HuffCode.attach");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_fh);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":627
+ * 
+ *     def attach(self, fh, char *mode):
+ *         if not isinstance(fh, file):             # <<<<<<<<<<<<<<
+ *             fh = file(fh, mode)
+ *         self.fh = fh
+ */
+  __pyx_t_1 = PyObject_TypeCheck(__pyx_v_fh, ((PyTypeObject *)((PyObject*)&PyFile_Type))); 
+  __pyx_t_2 = (!__pyx_t_1);
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":628
+ *     def attach(self, fh, char *mode):
+ *         if not isinstance(fh, file):
+ *             fh = file(fh, mode)             # <<<<<<<<<<<<<<
+ *         self.fh = fh
+ *         huff_code_attach(self.hc, PyFile_AsFile(fh), mode)
+ */
+    __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_mode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_v_fh);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_fh);
+    __Pyx_GIVEREF(__pyx_v_fh);
+    PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_t_3));
+    __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
+    __pyx_t_3 = 0;
+    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)&PyFile_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_v_fh);
+    __pyx_v_fh = __pyx_t_3;
+    __pyx_t_3 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":629
+ *         if not isinstance(fh, file):
+ *             fh = file(fh, mode)
+ *         self.fh = fh             # <<<<<<<<<<<<<<
+ *         huff_code_attach(self.hc, PyFile_AsFile(fh), mode)
+ * 
+ */
+  __Pyx_INCREF(__pyx_v_fh);
+  __Pyx_GIVEREF(__pyx_v_fh);
+  __Pyx_GOTREF(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh);
+  __Pyx_DECREF(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh);
+  ((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh = __pyx_v_fh;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":630
+ *             fh = file(fh, mode)
+ *         self.fh = fh
+ *         huff_code_attach(self.hc, PyFile_AsFile(fh), mode)             # <<<<<<<<<<<<<<
+ * 
+ *     def detach(self):
+ */
+  huff_code_attach(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc, PyFile_AsFile(__pyx_v_fh), __pyx_v_mode);
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.attach");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_fh);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":632
+ *         huff_code_attach(self.hc, PyFile_AsFile(fh), mode)
+ * 
+ *     def detach(self):             # <<<<<<<<<<<<<<
+ *         huff_code_detach(self.hc)
+ *         self.fh = None
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_detach(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_detach(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("detach");
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":633
+ * 
+ *     def detach(self):
+ *         huff_code_detach(self.hc)             # <<<<<<<<<<<<<<
+ *         self.fh = None
+ * 
+ */
+  huff_code_detach(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":634
+ *     def detach(self):
+ *         huff_code_detach(self.hc)
+ *         self.fh = None             # <<<<<<<<<<<<<<
+ * 
+ *     def encode_to_file(self, seq):
+ */
+  __Pyx_INCREF(Py_None);
+  __Pyx_GIVEREF(Py_None);
+  __Pyx_GOTREF(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh);
+  __Pyx_DECREF(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh);
+  ((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh = Py_None;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":636
+ *         self.fh = None
+ * 
+ *     def encode_to_file(self, seq):             # <<<<<<<<<<<<<<
+ *         if self.fh == None:
+ *             raise RuntimeError, "No file is attached"
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_encode_to_file(PyObject *__pyx_v_self, PyObject *__pyx_v_seq); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_encode_to_file(PyObject *__pyx_v_self, PyObject *__pyx_v_seq) {
+  PyObject *__pyx_v_sym;
+  PyObject *__pyx_v_strsym;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  Py_ssize_t __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  char *__pyx_t_5;
+  __Pyx_RefNannySetupContext("encode_to_file");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_seq);
+  __pyx_v_sym = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_strsym = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":637
+ * 
+ *     def encode_to_file(self, seq):
+ *         if self.fh == None:             # <<<<<<<<<<<<<<
+ *             raise RuntimeError, "No file is attached"
+ *         for sym in seq:
+ */
+  __pyx_t_1 = PyObject_RichCompare(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh, Py_None, Py_EQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":638
+ *     def encode_to_file(self, seq):
+ *         if self.fh == None:
+ *             raise RuntimeError, "No file is attached"             # <<<<<<<<<<<<<<
+ *         for sym in seq:
+ *             strsym = repr(sym)
+ */
+    __Pyx_Raise(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_kp_s_19), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":639
+ *         if self.fh == None:
+ *             raise RuntimeError, "No file is attached"
+ *         for sym in seq:             # <<<<<<<<<<<<<<
+ *             strsym = repr(sym)
+ *             huff_code_encode_str(self.hc, strsym, NULL)
+ */
+  if (PyList_CheckExact(__pyx_v_seq) || PyTuple_CheckExact(__pyx_v_seq)) {
+    __pyx_t_3 = 0; __pyx_t_1 = __pyx_v_seq; __Pyx_INCREF(__pyx_t_1);
+  } else {
+    __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_seq); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+  }
+  for (;;) {
+    if (likely(PyList_CheckExact(__pyx_t_1))) {
+      if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
+      __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++;
+    } else if (likely(PyTuple_CheckExact(__pyx_t_1))) {
+      if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++;
+    } else {
+      __pyx_t_4 = PyIter_Next(__pyx_t_1);
+      if (!__pyx_t_4) {
+        if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_4);
+    }
+    __Pyx_DECREF(__pyx_v_sym);
+    __pyx_v_sym = __pyx_t_4;
+    __pyx_t_4 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":640
+ *             raise RuntimeError, "No file is attached"
+ *         for sym in seq:
+ *             strsym = repr(sym)             # <<<<<<<<<<<<<<
+ *             huff_code_encode_str(self.hc, strsym, NULL)
+ * 
+ */
+    __pyx_t_4 = PyObject_Repr(__pyx_v_sym); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_v_strsym);
+    __pyx_v_strsym = __pyx_t_4;
+    __pyx_t_4 = 0;
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":641
+ *         for sym in seq:
+ *             strsym = repr(sym)
+ *             huff_code_encode_str(self.hc, strsym, NULL)             # <<<<<<<<<<<<<<
+ * 
+ *     def decode_from_file(self):
+ */
+    __pyx_t_5 = __Pyx_PyBytes_AsString(__pyx_v_strsym); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    huff_code_encode_str(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc, __pyx_t_5, NULL);
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.encode_to_file");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_sym);
+  __Pyx_DECREF(__pyx_v_strsym);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_seq);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":643
+ *             huff_code_encode_str(self.hc, strsym, NULL)
+ * 
+ *     def decode_from_file(self):             # <<<<<<<<<<<<<<
+ *         cdef char *sym
+ *         if self.fh == None:
+ */
+
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_decode_from_file(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_10sphinxbase_8HuffCode_decode_from_file(PyObject *__pyx_v_self, PyObject *unused) {
+  char *__pyx_v_sym;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("decode_from_file");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":645
+ *     def decode_from_file(self):
+ *         cdef char *sym
+ *         if self.fh == None:             # <<<<<<<<<<<<<<
+ *             raise RuntimeError, "No file is attached"
+ *         sym = huff_code_decode_str(self.hc, NULL, NULL, NULL)
+ */
+  __pyx_t_1 = PyObject_RichCompare(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh, Py_None, Py_EQ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":646
+ *         cdef char *sym
+ *         if self.fh == None:
+ *             raise RuntimeError, "No file is attached"             # <<<<<<<<<<<<<<
+ *         sym = huff_code_decode_str(self.hc, NULL, NULL, NULL)
+ *         if sym == NULL:
+ */
+    __Pyx_Raise(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_kp_s_19), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":647
+ *         if self.fh == None:
+ *             raise RuntimeError, "No file is attached"
+ *         sym = huff_code_decode_str(self.hc, NULL, NULL, NULL)             # <<<<<<<<<<<<<<
+ *         if sym == NULL:
+ *             return None
+ */
+  __pyx_v_sym = huff_code_decode_str(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc, NULL, NULL, NULL);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":648
+ *             raise RuntimeError, "No file is attached"
+ *         sym = huff_code_decode_str(self.hc, NULL, NULL, NULL)
+ *         if sym == NULL:             # <<<<<<<<<<<<<<
+ *             return None
+ *         else:
+ */
+  __pyx_t_2 = (__pyx_v_sym == NULL);
+  if (__pyx_t_2) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":649
+ *         sym = huff_code_decode_str(self.hc, NULL, NULL, NULL)
+ *         if sym == NULL:
+ *             return None             # <<<<<<<<<<<<<<
+ *         else:
+ *             return sym
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(Py_None);
+    __pyx_r = Py_None;
+    goto __pyx_L0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":651
+ *             return None
+ *         else:
+ *             return sym             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(self):
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_sym); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+    __pyx_r = ((PyObject *)__pyx_t_1);
+    __pyx_t_1 = 0;
+    goto __pyx_L0;
+  }
+  __pyx_L6:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.decode_from_file");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":653
+ *             return sym
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         if self.fh:
+ *             self.detach()
+ */
+
+static void __pyx_pf_10sphinxbase_8HuffCode___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_10sphinxbase_8HuffCode___dealloc__(PyObject *__pyx_v_self) {
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__dealloc__");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":654
+ * 
+ *     def __dealloc__(self):
+ *         if self.fh:             # <<<<<<<<<<<<<<
+ *             self.detach()
+ *         huff_code_free(self.hc)
+ */
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->fh); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_1) {
+
+    /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":655
+ *     def __dealloc__(self):
+ *         if self.fh:
+ *             self.detach()             # <<<<<<<<<<<<<<
+ *         huff_code_free(self.hc)
+ */
+    __pyx_t_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s__detach); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":656
+ *         if self.fh:
+ *             self.detach()
+ *         huff_code_free(self.hc)             # <<<<<<<<<<<<<<
+ */
+  huff_code_free(((struct __pyx_obj_10sphinxbase_HuffCode *)__pyx_v_self)->hc);
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("sphinxbase.HuffCode.__dealloc__");
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_RefNannyFinishContext();
+}
+static struct __pyx_vtabstruct_10sphinxbase_NGramModel __pyx_vtable_10sphinxbase_NGramModel;
+
+static PyObject *__pyx_tp_new_10sphinxbase_NGramModel(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_10sphinxbase_NGramModel *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_10sphinxbase_NGramModel *)o);
+  p->__pyx_vtab = __pyx_vtabptr_10sphinxbase_NGramModel;
+  return o;
+}
+
+static void __pyx_tp_dealloc_10sphinxbase_NGramModel(PyObject *o) {
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pf_10sphinxbase_10NGramModel___dealloc__(o);
+    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static struct PyMethodDef __pyx_methods_10sphinxbase_NGramModel[] = {
+  {__Pyx_NAMESTR("apply_weights"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_apply_weights, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_apply_weights)},
+  {__Pyx_NAMESTR("get_size"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_get_size, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_get_size)},
+  {__Pyx_NAMESTR("get_counts"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_get_counts, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_get_counts)},
+  {__Pyx_NAMESTR("unknown_wid"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_unknown_wid, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_unknown_wid)},
+  {__Pyx_NAMESTR("zero"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_zero, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_zero)},
+  {__Pyx_NAMESTR("wid"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_wid, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_wid)},
+  {__Pyx_NAMESTR("word"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_word, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_word)},
+  {__Pyx_NAMESTR("score"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_score, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_score)},
+  {__Pyx_NAMESTR("prob"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_prob, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_prob)},
+  {__Pyx_NAMESTR("mgrams"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_mgrams, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_mgrams)},
+  {__Pyx_NAMESTR("ngram"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_ngram, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_10NGramModel_ngram)},
+  {__Pyx_NAMESTR("add_word"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_add_word, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("recode"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_recode, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("casefold"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_casefold, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pf_10sphinxbase_10NGramModel_write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyMemberDef __pyx_members_10sphinxbase_NGramModel[] = {
+  {(char *)"lw", T_FLOAT, offsetof(struct __pyx_obj_10sphinxbase_NGramModel, lw), READONLY, 0},
+  {(char *)"wip", T_FLOAT, offsetof(struct __pyx_obj_10sphinxbase_NGramModel, wip), READONLY, 0},
+  {(char *)"uw", T_FLOAT, offsetof(struct __pyx_obj_10sphinxbase_NGramModel, uw), READONLY, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_NGramModel = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION >= 3
+  0, /*reserved*/
+  #else
+  0, /*nb_long*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_NGramModel = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_NGramModel = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_NGramModel = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_10sphinxbase_NGramModel = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("sphinxbase.NGramModel"), /*tp_name*/
+  sizeof(struct __pyx_obj_10sphinxbase_NGramModel), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_10sphinxbase_NGramModel, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_NGramModel, /*tp_as_number*/
+  &__pyx_tp_as_sequence_NGramModel, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_NGramModel, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_NGramModel, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  __Pyx_DOCSTR("\n    N-Gram language model class.\n\n    This class provides access to N-Gram language models stored on\n    disk.  These can be in ARPABO text format or Sphinx DMP format.\n    Methods are provided for scoring N-Grams based on the model\n    and looking up words in the model.\n\n    @param file: Path to an N-Gram model file.\n    @type file: string\n    @param lw: Language weight to apply to model probabilities.\n    @type lw: float\n    @param wip: Word insertion penalty to add to model probabilities\n    @type wip: float\n    @param uw: Weight to give unigrams when interpolating with uniform distribution.\n    @type uw: float\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_10sphinxbase_NGramModel, /*tp_methods*/
+  __pyx_members_10sphinxbase_NGramModel, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_10sphinxbase_10NGramModel___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_10sphinxbase_NGramModel, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_10sphinxbase_LogMath(PyTypeObject *t, PyObject *a, PyObject *k) {
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  return o;
+}
+
+static void __pyx_tp_dealloc_10sphinxbase_LogMath(PyObject *o) {
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pf_10sphinxbase_7LogMath___dealloc__(o);
+    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static struct PyMethodDef __pyx_methods_10sphinxbase_LogMath[] = {
+  {__Pyx_NAMESTR("get_zero"), (PyCFunction)__pyx_pf_10sphinxbase_7LogMath_get_zero, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_7LogMath_get_zero)},
+  {__Pyx_NAMESTR("add"), (PyCFunction)__pyx_pf_10sphinxbase_7LogMath_add, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_7LogMath_add)},
+  {__Pyx_NAMESTR("log"), (PyCFunction)__pyx_pf_10sphinxbase_7LogMath_log, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_7LogMath_log)},
+  {__Pyx_NAMESTR("exp"), (PyCFunction)__pyx_pf_10sphinxbase_7LogMath_exp, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_7LogMath_exp)},
+  {__Pyx_NAMESTR("log_to_ln"), (PyCFunction)__pyx_pf_10sphinxbase_7LogMath_log_to_ln, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_7LogMath_log_to_ln)},
+  {__Pyx_NAMESTR("log_to_log10"), (PyCFunction)__pyx_pf_10sphinxbase_7LogMath_log_to_log10, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_7LogMath_log_to_log10)},
+  {__Pyx_NAMESTR("ln_to_log"), (PyCFunction)__pyx_pf_10sphinxbase_7LogMath_ln_to_log, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_7LogMath_ln_to_log)},
+  {__Pyx_NAMESTR("log10_to_log"), (PyCFunction)__pyx_pf_10sphinxbase_7LogMath_log10_to_log, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_7LogMath_log10_to_log)},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_LogMath = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION >= 3
+  0, /*reserved*/
+  #else
+  0, /*nb_long*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_LogMath = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_LogMath = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_LogMath = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_10sphinxbase_LogMath = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("sphinxbase.LogMath"), /*tp_name*/
+  sizeof(struct __pyx_obj_10sphinxbase_LogMath), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_10sphinxbase_LogMath, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_LogMath, /*tp_as_number*/
+  &__pyx_tp_as_sequence_LogMath, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_LogMath, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_LogMath, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  __Pyx_DOCSTR("\n    Log-space math class.\n    \n    This class provides fast logarithmic math functions in base\n    1.000+epsilon, useful for fixed point speech recognition.\n\n    @param base: The base B in which computation is to be done.\n    @type base: float\n    @param shift: Log values are shifted right by this many bits.\n    @type shift: int\n    @param use_table Whether to use an add table or not\n    @type use_table: bool\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_10sphinxbase_LogMath, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_10sphinxbase_7LogMath___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_10sphinxbase_LogMath, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+static struct __pyx_vtabstruct_10sphinxbase_NGramIter __pyx_vtable_10sphinxbase_NGramIter;
+
+static PyObject *__pyx_tp_new_10sphinxbase_NGramIter(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_10sphinxbase_NGramIter *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_10sphinxbase_NGramIter *)o);
+  p->__pyx_vtab = __pyx_vtabptr_10sphinxbase_NGramIter;
+  p->lm = ((struct __pyx_obj_10sphinxbase_NGramModel *)Py_None); Py_INCREF(Py_None);
+  p->words = Py_None; Py_INCREF(Py_None);
+  if (__pyx_pf_10sphinxbase_9NGramIter___cinit__(o, a, k) < 0) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
+
+static void __pyx_tp_dealloc_10sphinxbase_NGramIter(PyObject *o) {
+  struct __pyx_obj_10sphinxbase_NGramIter *p = (struct __pyx_obj_10sphinxbase_NGramIter *)o;
+  Py_XDECREF(((PyObject *)p->lm));
+  Py_XDECREF(p->words);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_10sphinxbase_NGramIter(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_10sphinxbase_NGramIter *p = (struct __pyx_obj_10sphinxbase_NGramIter *)o;
+  if (p->lm) {
+    e = (*v)(((PyObject*)p->lm), a); if (e) return e;
+  }
+  if (p->words) {
+    e = (*v)(p->words, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_10sphinxbase_NGramIter(PyObject *o) {
+  struct __pyx_obj_10sphinxbase_NGramIter *p = (struct __pyx_obj_10sphinxbase_NGramIter *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->lm);
+  p->lm = ((struct __pyx_obj_10sphinxbase_NGramModel *)Py_None); Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  tmp = ((PyObject*)p->words);
+  p->words = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static struct PyMethodDef __pyx_methods_10sphinxbase_NGramIter[] = {
+  {__Pyx_NAMESTR("__iter__"), (PyCFunction)__pyx_pf_10sphinxbase_9NGramIter___iter__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pf_10sphinxbase_9NGramIter___next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("successors"), (PyCFunction)__pyx_pf_10sphinxbase_9NGramIter_successors, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_9NGramIter_successors)},
+  {0, 0, 0, 0}
+};
+
+static struct PyMemberDef __pyx_members_10sphinxbase_NGramIter[] = {
+  {(char *)"log_prob", T_FLOAT, offsetof(struct __pyx_obj_10sphinxbase_NGramIter, log_prob), READONLY, 0},
+  {(char *)"log_bowt", T_FLOAT, offsetof(struct __pyx_obj_10sphinxbase_NGramIter, log_bowt), READONLY, 0},
+  {(char *)"words", T_OBJECT, offsetof(struct __pyx_obj_10sphinxbase_NGramIter, words), READONLY, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_NGramIter = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION >= 3
+  0, /*reserved*/
+  #else
+  0, /*nb_long*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_NGramIter = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_NGramIter = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_NGramIter = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_10sphinxbase_NGramIter = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("sphinxbase.NGramIter"), /*tp_name*/
+  sizeof(struct __pyx_obj_10sphinxbase_NGramIter), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_10sphinxbase_NGramIter, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_NGramIter, /*tp_as_number*/
+  &__pyx_tp_as_sequence_NGramIter, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_NGramIter, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_NGramIter, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("\n    N-Gram language model iterator class.\n\n    This class provides access to the individual N-grams stored in a\n    language model.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_10sphinxbase_NGramIter, /*tp_traverse*/
+  __pyx_tp_clear_10sphinxbase_NGramIter, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  __pyx_pf_10sphinxbase_9NGramIter___iter__, /*tp_iter*/
+  __pyx_pf_10sphinxbase_9NGramIter___next__, /*tp_iternext*/
+  __pyx_methods_10sphinxbase_NGramIter, /*tp_methods*/
+  __pyx_members_10sphinxbase_NGramIter, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_10sphinxbase_NGramIter, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_10sphinxbase_HuffCode(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_10sphinxbase_HuffCode *p;
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  p = ((struct __pyx_obj_10sphinxbase_HuffCode *)o);
+  p->fh = Py_None; Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_10sphinxbase_HuffCode(PyObject *o) {
+  struct __pyx_obj_10sphinxbase_HuffCode *p = (struct __pyx_obj_10sphinxbase_HuffCode *)o;
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pf_10sphinxbase_8HuffCode___dealloc__(o);
+    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_XDECREF(p->fh);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_10sphinxbase_HuffCode(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_10sphinxbase_HuffCode *p = (struct __pyx_obj_10sphinxbase_HuffCode *)o;
+  if (p->fh) {
+    e = (*v)(p->fh, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_10sphinxbase_HuffCode(PyObject *o) {
+  struct __pyx_obj_10sphinxbase_HuffCode *p = (struct __pyx_obj_10sphinxbase_HuffCode *)o;
+  PyObject* tmp;
+  tmp = ((PyObject*)p->fh);
+  p->fh = Py_None; Py_INCREF(Py_None);
+  Py_XDECREF(tmp);
+  return 0;
+}
+
+static struct PyMethodDef __pyx_methods_10sphinxbase_HuffCode[] = {
+  {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_read, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_write, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("dump"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_dump, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("encode"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_encode, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_8HuffCode_encode)},
+  {__Pyx_NAMESTR("decode"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_decode, METH_O, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_8HuffCode_decode)},
+  {__Pyx_NAMESTR("attach"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_attach, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("detach"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_detach, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("encode_to_file"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_encode_to_file, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("decode_from_file"), (PyCFunction)__pyx_pf_10sphinxbase_8HuffCode_decode_from_file, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_HuffCode = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION >= 3
+  0, /*reserved*/
+  #else
+  0, /*nb_long*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_HuffCode = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_HuffCode = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_HuffCode = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_10sphinxbase_HuffCode = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("sphinxbase.HuffCode"), /*tp_name*/
+  sizeof(struct __pyx_obj_10sphinxbase_HuffCode), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_10sphinxbase_HuffCode, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_HuffCode, /*tp_as_number*/
+  &__pyx_tp_as_sequence_HuffCode, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_HuffCode, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_HuffCode, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("\n    Huffman coding class.\n\n    You can either construct a Huffman code from an alphabet of\n    symbols with frequencies, or read one from a file.  Either the\n    alphabet or infile argument (but not both) must be passed to the\n    constructor.\n\n    @param alphabet: Alphabet of (symbol, frequency) pairs\n    @type alphabet: [(str, int)]\n    @param infile: File handle or filename to read from\n    @type infile: file | str\n    "), /*tp_doc*/
+  __pyx_tp_traverse_10sphinxbase_HuffCode, /*tp_traverse*/
+  __pyx_tp_clear_10sphinxbase_HuffCode, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_10sphinxbase_HuffCode, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_10sphinxbase_8HuffCode___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_10sphinxbase_HuffCode, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+
+static struct PyMethodDef __pyx_methods[] = {
+  {__Pyx_NAMESTR("binstr"), (PyCFunction)__pyx_pf_10sphinxbase_binstr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_binstr)},
+  {__Pyx_NAMESTR("bincw"), (PyCFunction)__pyx_pf_10sphinxbase_bincw, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_10sphinxbase_bincw)},
+  {0, 0, 0, 0}
+};
+
+static void __pyx_init_filenames(void); /*proto*/
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+    PyModuleDef_HEAD_INIT,
+    __Pyx_NAMESTR("sphinxbase"),
+    0, /* m_doc */
+    -1, /* m_size */
+    __pyx_methods /* m_methods */,
+    NULL, /* m_reload */
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    NULL /* m_free */
+};
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 0},
+  {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0},
+  {&__pyx_kp_s_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 0, 1, 0},
+  {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0},
+  {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0},
+  {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0},
+  {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0},
+  {&__pyx_kp_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 0},
+  {&__pyx_kp_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 0},
+  {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0},
+  {&__pyx_n_s__ARPA, __pyx_k__ARPA, sizeof(__pyx_k__ARPA), 0, 0, 1, 1},
+  {&__pyx_n_s__AUTO, __pyx_k__AUTO, sizeof(__pyx_k__AUTO), 0, 0, 1, 1},
+  {&__pyx_n_s__DMP, __pyx_k__DMP, sizeof(__pyx_k__DMP), 0, 0, 1, 1},
+  {&__pyx_n_s__LOWER, __pyx_k__LOWER, sizeof(__pyx_k__LOWER), 0, 0, 1, 1},
+  {&__pyx_n_s__RuntimeError, __pyx_k__RuntimeError, sizeof(__pyx_k__RuntimeError), 0, 0, 1, 1},
+  {&__pyx_n_s__StopIteration, __pyx_k__StopIteration, sizeof(__pyx_k__StopIteration), 0, 0, 1, 1},
+  {&__pyx_n_s__UPPER, __pyx_k__UPPER, sizeof(__pyx_k__UPPER), 0, 0, 1, 1},
+  {&__pyx_n_s__ValueError, __pyx_k__ValueError, sizeof(__pyx_k__ValueError), 0, 0, 1, 1},
+  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
+  {&__pyx_n_s__a, __pyx_k__a, sizeof(__pyx_k__a), 0, 0, 1, 1},
+  {&__pyx_n_s__alphabet, __pyx_k__alphabet, sizeof(__pyx_k__alphabet), 0, 0, 1, 1},
+  {&__pyx_n_s__b, __pyx_k__b, sizeof(__pyx_k__b), 0, 0, 1, 1},
+  {&__pyx_n_s__base, __pyx_k__base, sizeof(__pyx_k__base), 0, 0, 1, 1},
+  {&__pyx_n_s__cw, __pyx_k__cw, sizeof(__pyx_k__cw), 0, 0, 1, 1},
+  {&__pyx_n_s__detach, __pyx_k__detach, sizeof(__pyx_k__detach), 0, 0, 1, 1},
+  {&__pyx_n_s__enumerate, __pyx_k__enumerate, sizeof(__pyx_k__enumerate), 0, 0, 1, 1},
+  {&__pyx_n_s__fh, __pyx_k__fh, sizeof(__pyx_k__fh), 0, 0, 1, 1},
+  {&__pyx_n_s__file, __pyx_k__file, sizeof(__pyx_k__file), 0, 0, 1, 1},
+  {&__pyx_n_s__file_name, __pyx_k__file_name, sizeof(__pyx_k__file_name), 0, 0, 1, 1},
+  {&__pyx_n_s__first_item, __pyx_k__first_item, sizeof(__pyx_k__first_item), 0, 0, 1, 1},
+  {&__pyx_n_s__format, __pyx_k__format, sizeof(__pyx_k__format), 0, 0, 1, 1},
+  {&__pyx_n_s__frum, __pyx_k__frum, sizeof(__pyx_k__frum), 0, 0, 1, 1},
+  {&__pyx_n_s__hc, __pyx_k__hc, sizeof(__pyx_k__hc), 0, 0, 1, 1},
+  {&__pyx_n_s__infile, __pyx_k__infile, sizeof(__pyx_k__infile), 0, 0, 1, 1},
+  {&__pyx_n_s__itor, __pyx_k__itor, sizeof(__pyx_k__itor), 0, 0, 1, 1},
+  {&__pyx_n_s__lm, __pyx_k__lm, sizeof(__pyx_k__lm), 0, 0, 1, 1},
+  {&__pyx_n_s__lmath, __pyx_k__lmath, sizeof(__pyx_k__lmath), 0, 0, 1, 1},
+  {&__pyx_n_s__lmctl, __pyx_k__lmctl, sizeof(__pyx_k__lmctl), 0, 0, 1, 1},
+  {&__pyx_n_s__log_bowt, __pyx_k__log_bowt, sizeof(__pyx_k__log_bowt), 0, 0, 1, 1},
+  {&__pyx_n_s__log_prob, __pyx_k__log_prob, sizeof(__pyx_k__log_prob), 0, 0, 1, 1},
+  {&__pyx_n_s__lw, __pyx_k__lw, sizeof(__pyx_k__lw), 0, 0, 1, 1},
+  {&__pyx_n_s__m, __pyx_k__m, sizeof(__pyx_k__m), 0, 0, 1, 1},
+  {&__pyx_n_s__min, __pyx_k__min, sizeof(__pyx_k__min), 0, 0, 1, 1},
+  {&__pyx_n_s__mode, __pyx_k__mode, sizeof(__pyx_k__mode), 0, 0, 1, 1},
+  {&__pyx_n_s__nbits, __pyx_k__nbits, sizeof(__pyx_k__nbits), 0, 0, 1, 1},
+  {&__pyx_n_s__ord, __pyx_k__ord, sizeof(__pyx_k__ord), 0, 0, 1, 1},
+  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
+  {&__pyx_n_s__rb, __pyx_k__rb, sizeof(__pyx_k__rb), 0, 0, 1, 1},
+  {&__pyx_n_s__read, __pyx_k__read, sizeof(__pyx_k__read), 0, 0, 1, 1},
+  {&__pyx_n_s__set_iter, __pyx_k__set_iter, sizeof(__pyx_k__set_iter), 0, 0, 1, 1},
+  {&__pyx_n_s__shift, __pyx_k__shift, sizeof(__pyx_k__shift), 0, 0, 1, 1},
+  {&__pyx_n_s__too, __pyx_k__too, sizeof(__pyx_k__too), 0, 0, 1, 1},
+  {&__pyx_n_s__use_table, __pyx_k__use_table, sizeof(__pyx_k__use_table), 0, 0, 1, 1},
+  {&__pyx_n_s__uw, __pyx_k__uw, sizeof(__pyx_k__uw), 0, 0, 1, 1},
+  {&__pyx_n_s__val, __pyx_k__val, sizeof(__pyx_k__val), 0, 0, 1, 1},
+  {&__pyx_n_s__w, __pyx_k__w, sizeof(__pyx_k__w), 0, 0, 1, 1},
+  {&__pyx_n_s__wb, __pyx_k__wb, sizeof(__pyx_k__wb), 0, 0, 1, 1},
+  {&__pyx_n_s__weight, __pyx_k__weight, sizeof(__pyx_k__weight), 0, 0, 1, 1},
+  {&__pyx_n_s__wip, __pyx_k__wip, sizeof(__pyx_k__wip), 0, 0, 1, 1},
+  {&__pyx_n_s__word, __pyx_k__word, sizeof(__pyx_k__word), 0, 0, 1, 1},
+  {&__pyx_n_s__words, __pyx_k__words, sizeof(__pyx_k__words), 0, 0, 1, 1},
+  {0, 0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_n_s__ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_StopIteration = __Pyx_GetName(__pyx_b, __pyx_n_s__StopIteration); if (!__pyx_builtin_StopIteration) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ord = __Pyx_GetName(__pyx_b, __pyx_n_s__ord); if (!__pyx_builtin_ord) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_min = __Pyx_GetName(__pyx_b, __pyx_n_s__min); if (!__pyx_builtin_min) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_enumerate = __Pyx_GetName(__pyx_b, __pyx_n_s__enumerate); if (!__pyx_builtin_enumerate) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_n_s__RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC initsphinxbase(void); /*proto*/
+PyMODINIT_FUNC initsphinxbase(void)
+#else
+PyMODINIT_FUNC PyInit_sphinxbase(void); /*proto*/
+PyMODINIT_FUNC PyInit_sphinxbase(void)
+#endif
+{
+  PyObject *__pyx_t_1 = NULL;
+  #if CYTHON_REFNANNY
+  void* __pyx_refnanny = NULL;
+  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+  if (!__Pyx_RefNanny) {
+      PyErr_Clear();
+      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+      if (!__Pyx_RefNanny)
+          Py_FatalError("failed to import 'refnanny' module");
+  }
+  __pyx_refnanny = __Pyx_RefNanny->SetupContext("PyMODINIT_FUNC PyInit_sphinxbase(void)", __LINE__, __FILE__);
+  #endif
+  __pyx_init_filenames();
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #if PY_MAJOR_VERSION < 3
+  __pyx_empty_bytes = PyString_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #else
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  /*--- Library function declarations ---*/
+  /*--- Threads initialization code ---*/
+  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+  #ifdef WITH_THREAD /* Python build with threading support? */
+  PyEval_InitThreads();
+  #endif
+  #endif
+  /*--- Module creation code ---*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("sphinxbase"), __pyx_methods, 0, 0, PYTHON_API_VERSION);
+  #else
+  __pyx_m = PyModule_Create(&__pyx_moduledef);
+  #endif
+  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  #if PY_MAJOR_VERSION < 3
+  Py_INCREF(__pyx_m);
+  #endif
+  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME));
+  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  /*--- Initialize various global constants etc. ---*/
+  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_module_is_main_sphinxbase) {
+    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  }
+  /*--- Builtin init code ---*/
+  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Global init code ---*/
+  /*--- Function export code ---*/
+  /*--- Type init code ---*/
+  __pyx_vtabptr_10sphinxbase_NGramModel = &__pyx_vtable_10sphinxbase_NGramModel;
+  #if PY_MAJOR_VERSION >= 3
+  __pyx_vtable_10sphinxbase_NGramModel.set_lm = (PyObject *(*)(struct __pyx_obj_10sphinxbase_NGramModel *, ngram_model_t *))__pyx_f_10sphinxbase_10NGramModel_set_lm;
+  __pyx_vtable_10sphinxbase_NGramModel.set_lmath = (PyObject *(*)(struct __pyx_obj_10sphinxbase_NGramModel *, logmath_t *))__pyx_f_10sphinxbase_10NGramModel_set_lmath;
+  #else
+  *(void(**)(void))&__pyx_vtable_10sphinxbase_NGramModel.set_lm = (void(*)(void))__pyx_f_10sphinxbase_10NGramModel_set_lm;
+  *(void(**)(void))&__pyx_vtable_10sphinxbase_NGramModel.set_lmath = (void(*)(void))__pyx_f_10sphinxbase_10NGramModel_set_lmath;
+  #endif
+  if (PyType_Ready(&__pyx_type_10sphinxbase_NGramModel) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_10sphinxbase_NGramModel.tp_dict, __pyx_vtabptr_10sphinxbase_NGramModel) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "NGramModel", (PyObject *)&__pyx_type_10sphinxbase_NGramModel) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_10sphinxbase_NGramModel = &__pyx_type_10sphinxbase_NGramModel;
+  if (PyType_Ready(&__pyx_type_10sphinxbase_LogMath) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "LogMath", (PyObject *)&__pyx_type_10sphinxbase_LogMath) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_10sphinxbase_LogMath = &__pyx_type_10sphinxbase_LogMath;
+  __pyx_vtabptr_10sphinxbase_NGramIter = &__pyx_vtable_10sphinxbase_NGramIter;
+  #if PY_MAJOR_VERSION >= 3
+  __pyx_vtable_10sphinxbase_NGramIter.set_iter = (PyObject *(*)(struct __pyx_obj_10sphinxbase_NGramIter *, ngram_iter_t *))__pyx_f_10sphinxbase_9NGramIter_set_iter;
+  #else
+  *(void(**)(void))&__pyx_vtable_10sphinxbase_NGramIter.set_iter = (void(*)(void))__pyx_f_10sphinxbase_9NGramIter_set_iter;
+  #endif
+  if (PyType_Ready(&__pyx_type_10sphinxbase_NGramIter) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_10sphinxbase_NGramIter.tp_dict, __pyx_vtabptr_10sphinxbase_NGramIter) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "NGramIter", (PyObject *)&__pyx_type_10sphinxbase_NGramIter) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_10sphinxbase_NGramIter = &__pyx_type_10sphinxbase_NGramIter;
+  if (PyType_Ready(&__pyx_type_10sphinxbase_HuffCode) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "HuffCode", (PyObject *)&__pyx_type_10sphinxbase_HuffCode) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_10sphinxbase_HuffCode = &__pyx_type_10sphinxbase_HuffCode;
+  /*--- Type import code ---*/
+  /*--- Function import code ---*/
+  /*--- Execution code ---*/
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":24
+ *     @type use_table: bool
+ *     """
+ *     def __init__(self, base=1.0001, shift=0, use_table=1):             # <<<<<<<<<<<<<<
+ *         self.lmath = logmath_init(base, shift, use_table)
+ * 
+ */
+  __pyx_t_1 = PyFloat_FromDouble(1.0001); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_1 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":122
+ * 
+ * # Unfortunately, Cython doesn't actually export enums to Python...
+ * AUTO = NGRAM_AUTO             # <<<<<<<<<<<<<<
+ * ARPA = NGRAM_ARPA
+ * DMP = NGRAM_DMP
+ */
+  __pyx_t_1 = PyInt_FromLong(NGRAM_AUTO); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__AUTO, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":123
+ * # Unfortunately, Cython doesn't actually export enums to Python...
+ * AUTO = NGRAM_AUTO
+ * ARPA = NGRAM_ARPA             # <<<<<<<<<<<<<<
+ * DMP = NGRAM_DMP
+ * UPPER = NGRAM_UPPER
+ */
+  __pyx_t_1 = PyInt_FromLong(NGRAM_ARPA); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__ARPA, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":124
+ * AUTO = NGRAM_AUTO
+ * ARPA = NGRAM_ARPA
+ * DMP = NGRAM_DMP             # <<<<<<<<<<<<<<
+ * UPPER = NGRAM_UPPER
+ * LOWER = NGRAM_LOWER
+ */
+  __pyx_t_1 = PyInt_FromLong(NGRAM_DMP); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__DMP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":125
+ * ARPA = NGRAM_ARPA
+ * DMP = NGRAM_DMP
+ * UPPER = NGRAM_UPPER             # <<<<<<<<<<<<<<
+ * LOWER = NGRAM_LOWER
+ * 
+ */
+  __pyx_t_1 = PyInt_FromLong(NGRAM_UPPER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__UPPER, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":126
+ * DMP = NGRAM_DMP
+ * UPPER = NGRAM_UPPER
+ * LOWER = NGRAM_LOWER             # <<<<<<<<<<<<<<
+ * 
+ * cdef class NGramModel:
+ */
+  __pyx_t_1 = PyInt_FromLong(NGRAM_LOWER); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__LOWER, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":146
+ *     @type uw: float
+ *     """
+ *     def __init__(self, file=None, lw=1.0, wip=1.0, uw=1.0, lmctl=None):             # <<<<<<<<<<<<<<
+ *         self.lmath = logmath_init(1.0001, 0, 0)
+ *         if file:
+ */
+  __pyx_t_1 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_2 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_3 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_4 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":176
+ *         ngram_model_free(self.lm)
+ * 
+ *     def apply_weights(self, lw=1.0, wip=1.0, uw=1.0):             # <<<<<<<<<<<<<<
+ *         """
+ *         Change the language model weights applied in L{score}.
+ */
+  __pyx_t_1 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_5 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_6 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_t_1 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_7 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":369
+ *         return itor
+ * 
+ *     def add_word(self, word, weight=1.0):             # <<<<<<<<<<<<<<
+ *         return ngram_model_add_word(self.lm, word, weight)
+ * 
+ */
+  __pyx_t_1 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_8 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pyx":384
+ *             raise ValueError, "Casefolding failed"
+ * 
+ *     def write(self, file_name, format=NGRAM_AUTO):             # <<<<<<<<<<<<<<
+ *         cdef int rv
+ *         rv = ngram_model_write(self.lm, file_name, format)
+ */
+  __pyx_t_1 = PyInt_FromLong(NGRAM_AUTO); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_k_11 = __pyx_t_1;
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "/home/nshmyrev/projects/cmusphinx-dist/t/sphinxbase/python/sphinxbase.pxd":1
+ * # Copyright (c) 2008 Carnegie Mellon University. All rights             # <<<<<<<<<<<<<<
+ * # reserved.
+ * #
+ */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  if (__pyx_m) {
+    __Pyx_AddTraceback("init sphinxbase");
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init sphinxbase");
+  }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
+}
+
+static const char *__pyx_filenames[] = {
+  "sphinxbase.pyx",
+};
+
+/* Runtime support code */
+
+static void __pyx_init_filenames(void) {
+  __pyx_f = __pyx_filenames;
+}
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AS_STRING(kw_name));
+        #endif
+}
+
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *number, *more_or_less;
+
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    number = (num_expected == 1) ? "" : "s";
+    PyErr_Format(PyExc_TypeError,
+        #if PY_VERSION_HEX < 0x02050000
+            "%s() takes %s %d positional argument%s (%d given)",
+        #else
+            "%s() takes %s %zd positional argument%s (%zd given)",
+        #endif
+        func_name, more_or_less, num_expected, number, num_found);
+}
+
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        name = first_kw_arg;
+        while (*name && (**name != key)) name++;
+        if (*name) {
+            values[name-argnames] = value;
+        } else {
+            #if PY_MAJOR_VERSION < 3
+            if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
+            #else
+            if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
+            #endif
+                goto invalid_keyword_type;
+            } else {
+                for (name = first_kw_arg; *name; name++) {
+                    #if PY_MAJOR_VERSION >= 3
+                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                        PyUnicode_Compare(**name, key) == 0) break;
+                    #else
+                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                        _PyString_Eq(**name, key)) break;
+                    #endif
+                }
+                if (*name) {
+                    values[name-argnames] = value;
+                } else {
+                    /* unexpected keyword found */
+                    for (name=argnames; name != first_kw_arg; name++) {
+                        if (**name == key) goto arg_passed_twice;
+                        #if PY_MAJOR_VERSION >= 3
+                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
+                        #else
+                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                            _PyString_Eq(**name, key)) goto arg_passed_twice;
+                        #endif
+                    }
+                    if (kwds2) {
+                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+                    } else {
+                        goto invalid_keyword;
+                    }
+                }
+            }
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%s() got an unexpected keyword argument '%s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
+    PyErr_Format(PyExc_ValueError,
+        #if PY_VERSION_HEX < 0x02050000
+                 "need more than %d value%s to unpack", (int)index,
+        #else
+                 "need more than %zd value%s to unpack", index,
+        #endif
+                 (index == 1) ? "" : "s");
+}
+
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(void) {
+    PyErr_SetString(PyExc_ValueError, "too many values to unpack");
+}
+
+static PyObject *__Pyx_UnpackItem(PyObject *iter, Py_ssize_t index) {
+    PyObject *item;
+    if (!(item = PyIter_Next(iter))) {
+        if (!PyErr_Occurred()) {
+            __Pyx_RaiseNeedMoreValuesError(index);
+        }
+    }
+    return item;
+}
+
+static int __Pyx_EndUnpack(PyObject *iter) {
+    PyObject *item;
+    if ((item = PyIter_Next(iter))) {
+        Py_DECREF(item);
+        __Pyx_RaiseTooManyValuesError();
+        return -1;
+    }
+    else if (!PyErr_Occurred())
+        return 0;
+    else
+        return -1;
+}
+
+
+static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
+    long q = a / b;
+    long r = a - q*b;
+    q -= ((r != 0) & ((r ^ b) < 0));
+    return q;
+}
+
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact)
+{
+    if (!type) {
+        PyErr_Format(PyExc_SystemError, "Missing type object");
+        return 0;
+    }
+    if (none_allowed && obj == Py_None) return 1;
+    else if (exact) {
+        if (Py_TYPE(obj) == type) return 1;
+    }
+    else {
+        if (PyObject_TypeCheck(obj, type)) return 1;
+    }
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%s' has incorrect type (expected %s, got %s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
+    return 0;
+}
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
+    PyObject *result;
+    result = PyObject_GetAttr(dict, name);
+    if (!result)
+        PyErr_SetObject(PyExc_NameError, name);
+    return result;
+}
+
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+}
+
+
+#if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
+    Py_XINCREF(type);
+    Py_XINCREF(value);
+    Py_XINCREF(tb);
+    /* First, check the traceback argument, replacing None with NULL. */
+    if (tb == Py_None) {
+        Py_DECREF(tb);
+        tb = 0;
+    }
+    else if (tb != NULL && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto raise_error;
+    }
+    /* Next, replace a missing value with None */
+    if (value == NULL) {
+        value = Py_None;
+        Py_INCREF(value);
+    }
+    #if PY_VERSION_HEX < 0x02050000
+    if (!PyClass_Check(type))
+    #else
+    if (!PyType_Check(type))
+    #endif
+    {
+        /* Raising an instance.  The value should be a dummy. */
+        if (value != Py_None) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto raise_error;
+        }
+        /* Normalize to raise <class>, <instance> */
+        Py_DECREF(value);
+        value = type;
+        #if PY_VERSION_HEX < 0x02050000
+            if (PyInstance_Check(type)) {
+                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
+                Py_INCREF(type);
+            }
+            else {
+                type = 0;
+                PyErr_SetString(PyExc_TypeError,
+                    "raise: exception must be an old-style class or instance");
+                goto raise_error;
+            }
+        #else
+            type = (PyObject*) Py_TYPE(type);
+            Py_INCREF(type);
+            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+                PyErr_SetString(PyExc_TypeError,
+                    "raise: exception class must be a subclass of BaseException");
+                goto raise_error;
+            }
+        #endif
+    }
+
+    __Pyx_ErrRestore(type, value, tb);
+    return;
+raise_error:
+    Py_XDECREF(value);
+    Py_XDECREF(type);
+    Py_XDECREF(tb);
+    return;
+}
+
+#else /* Python 3+ */
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
+    if (tb == Py_None) {
+        tb = 0;
+    } else if (tb && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto bad;
+    }
+    if (value == Py_None)
+        value = 0;
+
+    if (PyExceptionInstance_Check(type)) {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto bad;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(value);
+    } else if (!PyExceptionClass_Check(type)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: exception class must be a subclass of BaseException");
+        goto bad;
+    }
+
+    PyErr_SetObject(type, value);
+
+    if (tb) {
+        PyThreadState *tstate = PyThreadState_GET();
+        PyObject* tmp_tb = tstate->curexc_traceback;
+        if (tb != tmp_tb) {
+            Py_INCREF(tb);
+            tstate->curexc_traceback = tb;
+            Py_XDECREF(tmp_tb);
+        }
+    }
+
+bad:
+    return;
+}
+#endif
+
+static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
+    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned char" :
+                    "value too large to convert to unsigned char");
+            }
+            return (unsigned char)-1;
+        }
+        return (unsigned char)val;
+    }
+    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
+    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned short" :
+                    "value too large to convert to unsigned short");
+            }
+            return (unsigned short)-1;
+        }
+        return (unsigned short)val;
+    }
+    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
+    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned int" :
+                    "value too large to convert to unsigned int");
+            }
+            return (unsigned int)-1;
+        }
+        return (unsigned int)val;
+    }
+    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
+    const char neg_one = (char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to char" :
+                    "value too large to convert to char");
+            }
+            return (char)-1;
+        }
+        return (char)val;
+    }
+    return (char)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
+    const short neg_one = (short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to short" :
+                    "value too large to convert to short");
+            }
+            return (short)-1;
+        }
+        return (short)val;
+    }
+    return (short)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
+    const int neg_one = (int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to int" :
+                    "value too large to convert to int");
+            }
+            return (int)-1;
+        }
+        return (int)val;
+    }
+    return (int)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
+    const signed char neg_one = (signed char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed char" :
+                    "value too large to convert to signed char");
+            }
+            return (signed char)-1;
+        }
+        return (signed char)val;
+    }
+    return (signed char)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
+    const signed short neg_one = (signed short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed short" :
+                    "value too large to convert to signed short");
+            }
+            return (signed short)-1;
+        }
+        return (signed short)val;
+    }
+    return (signed short)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
+    const signed int neg_one = (signed int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed int" :
+                    "value too large to convert to signed int");
+            }
+            return (signed int)-1;
+        }
+        return (signed int)val;
+    }
+    return (signed int)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
+    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to unsigned long");
+            return (unsigned long)-1;
+        }
+        return (unsigned long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to unsigned long");
+                return (unsigned long)-1;
+            }
+            return PyLong_AsUnsignedLong(x);
+        } else {
+            return PyLong_AsLong(x);
+        }
+    } else {
+        unsigned long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (unsigned long)-1;
+        val = __Pyx_PyInt_AsUnsignedLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
+    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to unsigned PY_LONG_LONG");
+            return (unsigned PY_LONG_LONG)-1;
+        }
+        return (unsigned PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to unsigned PY_LONG_LONG");
+                return (unsigned PY_LONG_LONG)-1;
+            }
+            return PyLong_AsUnsignedLongLong(x);
+        } else {
+            return PyLong_AsLongLong(x);
+        }
+    } else {
+        unsigned PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (unsigned PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
+    const long neg_one = (long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to long");
+            return (long)-1;
+        }
+        return (long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to long");
+                return (long)-1;
+            }
+            return PyLong_AsUnsignedLong(x);
+        } else {
+            return PyLong_AsLong(x);
+        }
+    } else {
+        long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (long)-1;
+        val = __Pyx_PyInt_AsLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
+    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to PY_LONG_LONG");
+            return (PY_LONG_LONG)-1;
+        }
+        return (PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to PY_LONG_LONG");
+                return (PY_LONG_LONG)-1;
+            }
+            return PyLong_AsUnsignedLongLong(x);
+        } else {
+            return PyLong_AsLongLong(x);
+        }
+    } else {
+        PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
+    const signed long neg_one = (signed long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to signed long");
+            return (signed long)-1;
+        }
+        return (signed long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to signed long");
+                return (signed long)-1;
+            }
+            return PyLong_AsUnsignedLong(x);
+        } else {
+            return PyLong_AsLong(x);
+        }
+    } else {
+        signed long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (signed long)-1;
+        val = __Pyx_PyInt_AsSignedLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
+    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to signed PY_LONG_LONG");
+            return (signed PY_LONG_LONG)-1;
+        }
+        return (signed PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to signed PY_LONG_LONG");
+                return (signed PY_LONG_LONG)-1;
+            }
+            return PyLong_AsUnsignedLongLong(x);
+        } else {
+            return PyLong_AsLongLong(x);
+        }
+    } else {
+        signed PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (signed PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsSignedLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+#if PY_VERSION_HEX < 0x03010000
+    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+#else
+    PyObject *ob = PyCapsule_New(vtable, 0, 0);
+#endif
+    if (!ob)
+        goto bad;
+    if (PyDict_SetItemString(dict, "__pyx_vtable__", ob) < 0)
+        goto bad;
+    Py_DECREF(ob);
+    return 0;
+bad:
+    Py_XDECREF(ob);
+    return -1;
+}
+
+#include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+
+static void __Pyx_AddTraceback(const char *funcname) {
+    PyObject *py_srcfile = 0;
+    PyObject *py_funcname = 0;
+    PyObject *py_globals = 0;
+    PyCodeObject *py_code = 0;
+    PyFrameObject *py_frame = 0;
+
+    #if PY_MAJOR_VERSION < 3
+    py_srcfile = PyString_FromString(__pyx_filename);
+    #else
+    py_srcfile = PyUnicode_FromString(__pyx_filename);
+    #endif
+    if (!py_srcfile) goto bad;
+    if (__pyx_clineno) {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+        #else
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+        #endif
+    }
+    else {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromString(funcname);
+        #else
+        py_funcname = PyUnicode_FromString(funcname);
+        #endif
+    }
+    if (!py_funcname) goto bad;
+    py_globals = PyModule_GetDict(__pyx_m);
+    if (!py_globals) goto bad;
+    py_code = PyCode_New(
+        0,            /*int argcount,*/
+        #if PY_MAJOR_VERSION >= 3
+        0,            /*int kwonlyargcount,*/
+        #endif
+        0,            /*int nlocals,*/
+        0,            /*int stacksize,*/
+        0,            /*int flags,*/
+        __pyx_empty_bytes, /*PyObject *code,*/
+        __pyx_empty_tuple,  /*PyObject *consts,*/
+        __pyx_empty_tuple,  /*PyObject *names,*/
+        __pyx_empty_tuple,  /*PyObject *varnames,*/
+        __pyx_empty_tuple,  /*PyObject *freevars,*/
+        __pyx_empty_tuple,  /*PyObject *cellvars,*/
+        py_srcfile,   /*PyObject *filename,*/
+        py_funcname,  /*PyObject *name,*/
+        __pyx_lineno,   /*int firstlineno,*/
+        __pyx_empty_bytes  /*PyObject *lnotab*/
+    );
+    if (!py_code) goto bad;
+    py_frame = PyFrame_New(
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
+        py_code,             /*PyCodeObject *code,*/
+        py_globals,          /*PyObject *globals,*/
+        0                    /*PyObject *locals*/
+    );
+    if (!py_frame) goto bad;
+    py_frame->f_lineno = __pyx_lineno;
+    PyTraceBack_Here(py_frame);
+bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
+    Py_XDECREF(py_code);
+    Py_XDECREF(py_frame);
+}
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+    while (t->p) {
+        #if PY_MAJOR_VERSION < 3
+        if (t->is_unicode) {
+            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
+        } else if (t->intern) {
+            *t->p = PyString_InternFromString(t->s);
+        } else {
+            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
+        }
+        #else  /* Python 3+ has unicode identifiers */
+        if (t->is_unicode | t->is_str) {
+            if (t->intern) {
+                *t->p = PyUnicode_InternFromString(t->s);
+            } else if (t->encoding) {
+                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
+            } else {
+                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
+            }
+        } else {
+            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
+        }
+        #endif
+        if (!*t->p)
+            return -1;
+        ++t;
+    }
+    return 0;
+}
+
+/* Type Conversion Functions */
+
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+   if (x == Py_True) return 1;
+   else if ((x == Py_False) | (x == Py_None)) return 0;
+   else return PyObject_IsTrue(x);
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
+  PyNumberMethods *m;
+  const char *name = NULL;
+  PyObject *res = NULL;
+#if PY_VERSION_HEX < 0x03000000
+  if (PyInt_Check(x) || PyLong_Check(x))
+#else
+  if (PyLong_Check(x))
+#endif
+    return Py_INCREF(x), x;
+  m = Py_TYPE(x)->tp_as_number;
+#if PY_VERSION_HEX < 0x03000000
+  if (m && m->nb_int) {
+    name = "int";
+    res = PyNumber_Int(x);
+  }
+  else if (m && m->nb_long) {
+    name = "long";
+    res = PyNumber_Long(x);
+  }
+#else
+  if (m && m->nb_int) {
+    name = "int";
+    res = PyNumber_Long(x);
+  }
+#endif
+  if (res) {
+#if PY_VERSION_HEX < 0x03000000
+    if (!PyInt_Check(res) && !PyLong_Check(res)) {
+#else
+    if (!PyLong_Check(res)) {
+#endif
+      PyErr_Format(PyExc_TypeError,
+                   "__%s__ returned non-%s (type %.200s)",
+                   name, name, Py_TYPE(res)->tp_name);
+      Py_DECREF(res);
+      return NULL;
+    }
+  }
+  else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_TypeError,
+                    "an integer is required");
+  }
+  return res;
+}
+
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
+  Py_ssize_t ival;
+  PyObject* x = PyNumber_Index(b);
+  if (!x) return -1;
+  ival = PyInt_AsSsize_t(x);
+  Py_DECREF(x);
+  return ival;
+}
+
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
+#if PY_VERSION_HEX < 0x02050000
+   if (ival <= LONG_MAX)
+       return PyInt_FromLong((long)ival);
+   else {
+       unsigned char *bytes = (unsigned char *) &ival;
+       int one = 1; int little = (int)*(unsigned char*)&one;
+       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
+   }
+#else
+   return PyInt_FromSize_t(ival);
+#endif
+}
+
+static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
+   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
+   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
+       return (size_t)-1;
+   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
+       PyErr_SetString(PyExc_OverflowError,
+                       "value too large to convert to size_t");
+       return (size_t)-1;
+   }
+   return (size_t)val;
+}
+
+
+#endif /* Py_PYTHON_H */
diff --git a/python/sphinxbase.pxd b/python/sphinxbase.pxd
new file mode 100644 (file)
index 0000000..3b0b235
--- /dev/null
@@ -0,0 +1,161 @@
+# Copyright (c) 2008 Carnegie Mellon University. All rights
+# reserved.
+#
+# You may copy, modify, and distribute this code under the same terms
+# as PocketSphinx or Python, at your convenience, as long as this
+# notice is not removed.
+#
+# Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+
+# C declarations
+ctypedef float float32
+ctypedef int int32
+ctypedef double float64
+
+# Get Python stuff to access stdio
+cdef extern from "Python.h":
+    ctypedef struct FILE
+    FILE *PyFile_AsFile(object)
+    void *PyMem_Malloc(size_t n)
+    void PyMem_Free(void *p)
+    object PyString_FromStringAndSize(char *v, Py_ssize_t len)
+
+cdef extern from "sphinxbase/logmath.h":
+    ctypedef struct logmath_t
+    logmath_t *logmath_init(float64 base, int shift, int use_table)
+    logmath_t *logmath_retain(logmath_t *lmath)
+    int logmath_free(logmath_t *lmath)
+
+    int logmath_log(logmath_t *lmath, float64 p)
+    float64 logmath_exp(logmath_t *lmath, int p)
+
+    int logmath_ln_to_log(logmath_t *lmath, float64 p)
+    float64 logmath_log_to_ln(logmath_t *lmath, int p)
+
+    int logmath_log10_to_log(logmath_t *lmath, float64 p)
+    float64 logmath_log_to_log10(logmath_t *lmath, int p)
+
+    int logmath_add(logmath_t *lmath, int p, int q)
+
+    int logmath_get_zero(logmath_t *lmath)
+
+cdef extern from "sphinxbase/cmd_ln.h":
+    ctypedef struct cmd_ln_t
+    ctypedef struct arg_t
+    cmd_ln_t *cmd_ln_parse_r(cmd_ln_t *inout_cmdln, arg_t * defn,
+                             int argc, char **argv, int strict)
+    void cmd_ln_free_r(cmd_ln_t *cmdln)
+    float32 cmd_ln_float32_r(cmd_ln_t *cmdln, char *key)
+    int32 cmd_ln_int32_r(cmd_ln_t *cmdln, char *key)
+    int cmd_ln_boolean_r(cmd_ln_t *cmdln, char *key)
+    char *cmd_ln_str_r(cmd_ln_t *cmdln, char *key)
+
+cdef extern from "sphinxbase/ckd_alloc.h":
+    void *ckd_calloc(int n, int size)
+    char *ckd_salloc(char *str)
+    void ckd_free(void *ptr)
+
+cdef extern from "sphinxbase/fsg_model.h":
+    ctypedef struct fsg_model_t
+
+cdef extern from "sphinxbase/ngram_model.h":
+    ctypedef enum ngram_file_type_t:
+        NGRAM_AUTO
+        NGRAM_ARPA
+        NGRAM_DMP
+        NGRAM_DMP32
+    ctypedef enum ngram_case_t:
+        NGRAM_UPPER
+        NGRAM_LOWER
+    ctypedef struct ngram_model_t
+    ngram_model_t *ngram_model_read(cmd_ln_t *config,
+                                    char *file_name,
+                                    ngram_file_type_t file_type,
+                                    logmath_t *lmath)
+    ngram_model_t *ngram_model_set_read(cmd_ln_t *config,
+                                        char *lmctlfile,
+                                        logmath_t *lmath)
+    ngram_model_t *ngram_model_retain(ngram_model_t *model)
+    int ngram_model_free(ngram_model_t *model)
+
+    int ngram_model_recode(ngram_model_t *model, char *frum, char *too)
+    int ngram_model_casefold(ngram_model_t *model, ngram_case_t kase)
+    int ngram_model_write(ngram_model_t *model, char *file_name,
+                          ngram_file_type_t format)
+
+    int ngram_model_apply_weights(ngram_model_t *model,
+                                  float32 lw, float32 wip, float32 uw)
+    float32 ngram_model_get_weights(ngram_model_t *model, int32 *out_log_wip,
+                                    int32 *out_log_uw)
+
+    int32 ngram_wid(ngram_model_t *model, char *word)
+    char *ngram_word(ngram_model_t *model, int32 wid)
+    int32 ngram_unknown_wid(ngram_model_t *model)
+    int32 ngram_zero(ngram_model_t *model)
+
+    int32 ngram_ng_score(ngram_model_t *model, int32 wid,
+                         int32 *history, int32 n_hist, int32 *n_used)
+    int32 ngram_ng_prob(ngram_model_t *model, int32 wid,
+                        int32 *history, int32 n_hist, int32 *n_used)
+
+    int32 ngram_model_add_word(ngram_model_t *model,
+                               char *word, float32 weight)
+
+    int32 ngram_model_get_size(ngram_model_t *model)
+    int32 *ngram_model_get_counts(ngram_model_t *model)
+    ctypedef struct ngram_iter_t
+    ngram_iter_t *ngram_ng_iter(ngram_model_t *model, int32 wid,
+                                int32 *history, int32 n_hist)
+    ngram_iter_t *ngram_model_mgrams(ngram_model_t *model, int m)
+    int32 *ngram_iter_get(ngram_iter_t *itor,
+                          int32 *out_score,
+                          int32 *out_bowt)
+    ngram_iter_t *ngram_iter_next(ngram_iter_t *itor)
+    ngram_iter_t *ngram_iter_successors(ngram_iter_t *itor)
+    void ngram_iter_free(ngram_iter_t *itor)
+
+cdef extern from "sphinxbase/huff_code.h":
+    ctypedef struct huff_code_t
+    huff_code_t *huff_code_build_int(int *values, int *frequencies, int nvals)
+    huff_code_t *huff_code_build_str(char **values, int *frequencies, int nvals)
+    huff_code_t *huff_code_read(FILE *infh) except NULL
+    int huff_code_write(huff_code_t *hc, FILE *outfh) except -1
+    int huff_code_dump(huff_code_t *hc, FILE *dumpfh) except -1
+    huff_code_t *huff_code_retain(huff_code_t *hc)
+    int huff_code_free(huff_code_t *hc)
+    FILE *huff_code_attach(huff_code_t *hc, FILE *fh, char *mode)
+    FILE *huff_code_detach(huff_code_t *hc)
+    int huff_code_encode_int(huff_code_t *hc, int sym, unsigned int *outcw)
+    int huff_code_encode_str(huff_code_t *hc, char *sym, unsigned int *outcw)
+    int huff_code_decode_int(huff_code_t *hc, int *outval,
+                             char **inout_data, size_t *inout_dlen,
+                             int *inout_offset)
+    char *huff_code_decode_str(huff_code_t *hc,
+                               char **inout_data, size_t *inout_dlen,
+                               int *inout_offset)
+
+# Extension classes
+cdef class NGramModel:
+    cdef ngram_model_t *lm
+    cdef logmath_t *lmath
+    cdef readonly float lw, wip, uw
+
+    cdef set_lm(NGramModel self, ngram_model_t *lm)
+    cdef set_lmath(NGramModel self, logmath_t *lmath)
+
+cdef class LogMath:
+    cdef logmath_t *lmath
+
+cdef class NGramIter:
+    cdef NGramModel lm
+    cdef ngram_iter_t *itor
+    cdef int first_item
+    cdef int m
+    cdef readonly float log_prob, log_bowt
+    cdef readonly object words
+
+    cdef set_iter(NGramIter self, ngram_iter_t *itor)
+
+cdef class HuffCode:
+    cdef huff_code_t *hc
+    cdef object fh
diff --git a/python/sphinxbase.pyx b/python/sphinxbase.pyx
new file mode 100644 (file)
index 0000000..bd35be1
--- /dev/null
@@ -0,0 +1,656 @@
+# Copyright (c) 2008 Carnegie Mellon University. All rights
+# reserved.
+#
+# You may copy, modify, and distribute this code under the same terms
+# as PocketSphinx or Python, at your convenience, as long as this
+# notice is not removed.
+#
+# Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+
+cdef class LogMath:
+    """
+    Log-space math class.
+    
+    This class provides fast logarithmic math functions in base
+    1.000+epsilon, useful for fixed point speech recognition.
+
+    @param base: The base B in which computation is to be done.
+    @type base: float
+    @param shift: Log values are shifted right by this many bits.
+    @type shift: int
+    @param use_table Whether to use an add table or not
+    @type use_table: bool
+    """
+    def __init__(self, base=1.0001, shift=0, use_table=1):
+        self.lmath = logmath_init(base, shift, use_table)
+
+    def __dealloc__(self):
+        """
+        Destructor for LogMath class.
+        """
+        logmath_free(self.lmath)
+
+    def get_zero(self):
+        """
+        Get the log-zero value.
+
+        @return: Smallest number representable by this object.
+        @rtype: int
+        """
+        return logmath_get_zero(self.lmath)
+
+    def add(self, a, b):
+        """
+        Add two numbers in log-space.
+
+        @param a: Logarithm A.
+        @type a: int
+        @param b: Logarithm B.
+        @type b: int
+        @return: log(exp(a)+exp(b))
+        @rtype: int
+        """
+        return logmath_add(self.lmath, a, b)
+
+    def log(self, x):
+        """
+        Return log-value of a number.
+
+        @param x: Number (in linear space)
+        @type x: float
+        @return: Log-value of x.
+        @rtype: int
+        """
+        return logmath_log(self.lmath, x)
+
+    def exp(self, x):
+        """
+        Return linear of a log-value
+
+        @param x: Logarithm X (in this object's base)
+        @type x: int
+        @return: Exponent (linear value) of X.
+        @rtype: float
+        """
+        return logmath_exp(self.lmath, x)
+
+    def log_to_ln(self, x):
+        """
+        Return natural logarithm of a log-value.
+
+        @param x: Logarithm X (in this object's base)
+        @type x: int
+        @return: Natural log equivalent of x.
+        @rtype: float
+        """
+        return logmath_log_to_ln(self.lmath, x)
+
+    def log_to_log10(self, x):
+        """
+        Return logarithm in base 10 of a log-value.
+
+        @param x: Logarithm X (in this object's base)
+        @type x: int
+        @return: log10 equivalent of x.
+        @rtype: float
+        """
+        return logmath_log_to_log10(self.lmath, x)
+
+    def ln_to_log(self, x):
+        """
+        Return log-value of a natural logarithm.
+
+        @param x: Logarithm X (in base e)
+        @type x: float
+        @return: Log-value equivalent of x.
+        @rtype: int
+        """
+        return logmath_ln_to_log(self.lmath, x)
+
+    def log10_to_log(self, x):
+        """
+        Return log-value of a base 10 logarithm.
+
+        @param x: Logarithm X (in base 10)
+        @type x: float
+        @return: Log-value equivalent of x.
+        @rtype: int
+        """
+        return logmath_log10_to_log(self.lmath, x)
+
+# Unfortunately, Cython doesn't actually export enums to Python...
+AUTO = NGRAM_AUTO
+ARPA = NGRAM_ARPA
+DMP = NGRAM_DMP
+UPPER = NGRAM_UPPER
+LOWER = NGRAM_LOWER
+
+cdef class NGramModel:
+    """
+    N-Gram language model class.
+
+    This class provides access to N-Gram language models stored on
+    disk.  These can be in ARPABO text format or Sphinx DMP format.
+    Methods are provided for scoring N-Grams based on the model
+    and looking up words in the model.
+
+    @param file: Path to an N-Gram model file.
+    @type file: string
+    @param lw: Language weight to apply to model probabilities.
+    @type lw: float
+    @param wip: Word insertion penalty to add to model probabilities
+    @type wip: float
+    @param uw: Weight to give unigrams when interpolating with uniform distribution.
+    @type uw: float
+    """
+    def __init__(self, file=None, lw=1.0, wip=1.0, uw=1.0, lmctl=None):
+        self.lmath = logmath_init(1.0001, 0, 0)
+        if file:
+            self.lm = ngram_model_read(NULL, file, NGRAM_AUTO, self.lmath)
+            ngram_model_apply_weights(self.lm, lw, wip, uw)
+        elif lmctl:
+            self.lm = ngram_model_set_read(NULL, lmctl, self.lmath)
+        else:
+            self.lm = NULL
+        self.lw = lw
+        self.wip = wip
+        self.uw = uw
+
+    cdef set_lm(NGramModel self, ngram_model_t *lm):
+        ngram_model_retain(lm)
+        ngram_model_free(self.lm)
+        self.lm = lm
+
+    cdef set_lmath(NGramModel self, logmath_t *lmath):
+        logmath_retain(lmath)
+        logmath_free(self.lmath)
+        self.lmath = lmath
+
+    def __dealloc__(self):
+        """
+        Destructor for N-Gram model class.
+        """
+        logmath_free(self.lmath)
+        ngram_model_free(self.lm)
+
+    def apply_weights(self, lw=1.0, wip=1.0, uw=1.0):
+        """
+        Change the language model weights applied in L{score}.
+        
+        @param lw: Language weight to apply to model probabilities.
+        @type lw: float
+        @param wip: Word insertion penalty to add to model probabilities
+        @type wip: float
+        @param uw: Weight to give unigrams when interpolating with uniform distribution.
+        @type uw: float
+        """
+        self.lw = lw
+        self.wip = wip
+        self.uw = uw
+        ngram_model_apply_weights(self.lm, lw, wip, uw)
+
+    def get_size(self):
+        """
+        Get the order of this model (i.e. the 'N' in 'N-gram')
+
+        @return: Order of this model
+        @rtype: int
+        """
+        return ngram_model_get_size(self.lm)
+
+    def get_counts(self):
+        """
+        Get the counts of each size of N-gram.
+
+        @return: Counts of 1, 2, ..., N grams
+        @rtype: tuple(int)
+        """
+        cdef int *counts
+        counts = ngram_model_get_counts(self.lm)
+        return tuple([counts[i] for i in range(ngram_model_get_size(self.lm))])
+
+    def unknown_wid(self):
+        """
+        Get the ID for an unknown word.
+
+        In the case of a closed-vocabulary language model this will be -1.
+
+        @return: Word ID for the unknown word.
+        @rtype: int
+        """
+        return ngram_unknown_wid(self.lm)
+
+    def zero(self):
+        """
+        Get the log-zero value for this language model.
+
+        @return: Log value used to represent zero.
+        @rtype: float
+        """
+        return logmath_log_to_ln(self.lmath, ngram_zero(self.lm))
+
+    def wid(self, word):
+        """
+        Get the internal ID for a word.
+        
+        @param word: Word in question
+        @type word: string
+        @return: Internal ID for word, or -1 if not present
+        @rtype: int
+        """
+        return ngram_wid(self.lm, word)
+
+    def word(self, wid):
+        """
+        Get the string corresponding to an internal word ID.
+        
+        @param word: Word ID in question
+        @type word: int
+        @return: String for word, or None if not present
+        @rtype: string
+        """
+        return ngram_word(self.lm, wid)
+
+    # Note that this and prob() are almost exactly the same...
+    def score(self, word, *args):
+        """
+        Get the score for an N-Gram.
+
+        The argument list consists of the history words (as
+        null-terminated strings) of the N-Gram, in reverse order.
+        Therefore, if you wanted to get the N-Gram score for 'a whole
+        joy', you would call::
+
+         score, n_used = model.score('joy', 'whole', 'a')
+
+        This function returns a tuple, consisting of the score and the
+        number of words used in computing it (i.e. the effective size
+        of the N-Gram).  The score is returned in logarithmic form,
+        using base e.
+
+        If one of the words is not in the LM's vocabulary, the result
+        will depend on whether this is an open or closed vocabulary
+        language model.  For an open-vocabulary model, unknown words
+        are all mapped to the unigram <UNK> which has a non-zero
+        probability and also participates in higher-order N-Grams.
+        Therefore, you will get a score of some sort in this case.
+
+        For a closed-vocabulary model, unknown words are impossible
+        and thus have zero probability.  Therefore, if C{word} is
+        unknown, this function will return a 'zero' log-probability,
+        i.e. a large negative number.
+        """
+        cdef int32 wid
+        cdef int32 *hist
+        cdef int32 n_hist
+        cdef int32 n_used
+        cdef int32 score
+        wid = ngram_wid(self.lm, word)
+        n_hist = len(args)
+        hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+        for i from 0 <= i < n_hist:
+            spam = args[i]
+            hist[i] = ngram_wid(self.lm, spam)
+        score = ngram_ng_score(self.lm, wid, hist, n_hist, &n_used)
+        ckd_free(hist)
+        return logmath_log_to_ln(self.lmath, score), n_used
+
+    def prob(self, word, *args):
+        """
+        Get the log-probability for an N-Gram.
+
+        This works effectively the same way as L{score}, except that
+        any weights (language weight, insertion penalty) applied to
+        the language model are ignored and the 'raw' probability value
+        is returned.
+        """
+        cdef int32 wid
+        cdef int32 *hist
+        cdef int32 n_hist
+        cdef int32 n_used
+        cdef int32 score
+        wid = ngram_wid(self.lm, word)
+        n_hist = len(args)
+        hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+        for i from 0 <= i < n_hist:
+            spam = args[i]
+            hist[i] = ngram_wid(self.lm, spam)
+        score = ngram_ng_prob(self.lm, wid, hist, n_hist, &n_used)
+        ckd_free(hist)
+        return logmath_log_to_ln(self.lmath, score), n_used
+
+    def mgrams(self, m):
+        """
+        Return an iterator over each N-gram of order m+1.
+
+        This allows Pythonic iteration over the parameters of an
+        N-Gram model.
+
+        @param m: Order of requested N-grams minus one
+        @type m: int
+        @return: Iterator over M+1-grams
+        @rtype: NGramIter
+        """
+        cdef NGramIter itor
+        itor = NGramIter(self, m)
+        itor.itor = ngram_model_mgrams(self.lm, m)
+        return itor
+
+    def ngram(self, word, *args):
+        """
+        Return an N-Gram iterator pointing to a given N-gram.
+
+        This allows you to iterate over its successors among other
+        things.
+
+        @param word: Head word of requested N-gram.
+        @type word: str
+        @param args: History words of requested N-gram
+        @type args: str
+        @return: Iterator pointing to N-gram.
+        """
+        cdef NGramIter itor
+        cdef int32 wid
+        cdef int32 *hist
+        cdef int32 n_hist
+        wid = ngram_wid(self.lm, word)
+        n_hist = len(args)
+        hist = <int32 *>ckd_calloc(n_hist, sizeof(int32))
+        for i from 0 <= i < n_hist:
+            spam = args[i]
+            hist[i] = ngram_wid(self.lm, spam)
+        itor = NGramIter(self, n_hist)
+        # We do set_iter here, because we're returning something the
+        # user is immediately going to do stuff with.
+        itor.set_iter(ngram_ng_iter(self.lm, wid, hist, n_hist))
+        ckd_free(hist)
+        return itor
+
+    def add_word(self, word, weight=1.0):
+        return ngram_model_add_word(self.lm, word, weight)
+
+    def recode(self, frum, too):
+        cdef int rv
+        rv = ngram_model_recode(self.lm, frum, too)
+        if rv == -1:
+            raise ValueError, "Recode from %s to %s failed" % (frum, too)
+
+    def casefold(self, kase):
+        cdef int rv
+        rv = ngram_model_casefold(self.lm, kase)
+        if rv == -1:
+            raise ValueError, "Casefolding failed"
+
+    def write(self, file_name, format=NGRAM_AUTO):
+        cdef int rv
+        rv = ngram_model_write(self.lm, file_name, format)
+        if rv == -1:
+            raise ValueError, "Write %s to file failed" % file_name
+
+cdef class NGramIter:
+    """
+    N-Gram language model iterator class.
+
+    This class provides access to the individual N-grams stored in a
+    language model.
+    """
+    def __cinit__(self, NGramModel lm, int m):
+        self.itor = NULL
+        self.lm = lm
+        self.m = m
+        self.first_item = True
+
+    def __iter__(self):
+        self.first_item = True
+        return self
+
+    cdef set_iter(NGramIter self, ngram_iter_t *itor):
+        cdef int32 prob, bowt
+        cdef int32 *wids
+
+        if itor == NULL:
+            raise StopIteration
+        self.itor = itor
+        if self.first_item:
+            self.first_item = False
+        wids = ngram_iter_get(itor, &prob, &bowt)
+        self.log_prob = logmath_log_to_ln(self.lm.lmath, prob)
+        self.log_bowt = logmath_log_to_ln(self.lm.lmath, bowt)
+        self.words = []
+        for i in range(0, self.m+1):
+            self.words.append(ngram_word(self.lm.lm, wids[i]))
+
+    def __next__(self):
+        if self.first_item:
+            self.set_iter(self.itor)
+        else:
+            self.set_iter(ngram_iter_next(self.itor))
+        return self
+
+    def successors(self):
+        """
+        Get an iterator over N+1-gram successors of an N-gram.
+        """
+        cdef NGramIter itor
+        itor = NGramIter(self.lm, self.m + 1)
+        itor.itor = ngram_iter_successors(self.itor)
+        return itor
+
+def binstr(str val, int nbits):
+    """
+    Silly function to format a string as a binary string
+    """
+    cdef int i
+    outstr = ""
+    for c in val:
+        cval = ord(c)
+        cnb = min(8, nbits)
+        for i in range(0,cnb):
+            outstr += "%d" % ((cval & (1 << 7-i)) != 0)
+        nbits -= 8
+    return outstr
+
+def bincw(int cw, int nbits):
+    """
+    Silly function to format an int as a binary string
+    """
+    cdef int i
+    outstr = ""
+    for i in range(0,nbits):
+        outstr = "%s" % (cw & 1) + outstr
+        cw >>= 1
+    return outstr
+
+# FIXME: Due to the style of IO in huff_code API this part of the code
+# is not compatible with Python 3. This needs to be converted to
+# the new Python io module.
+
+cdef class HuffCode:
+    """
+    Huffman coding class.
+
+    You can either construct a Huffman code from an alphabet of
+    symbols with frequencies, or read one from a file.  Either the
+    alphabet or infile argument (but not both) must be passed to the
+    constructor.
+
+    @param alphabet: Alphabet of (symbol, frequency) pairs
+    @type alphabet: [(str, int)]
+    @param infile: File handle or filename to read from
+    @type infile: file | str
+    """
+    def __init__(self, alphabet=None, infile=None):
+        cdef char **symbols
+        cdef int *frequencies
+        cdef int nsym
+
+        if alphabet == None and infile == None:
+            raise ValueError, "One of alphabet or infile must be passed to constructor"
+        if alphabet != None and infile != None:
+            raise ValueError, "Only one of alphabet or infile must be passed to constructor"
+
+        self.fh = None
+        if infile:
+            self.read(infile)
+            return
+
+        nsym = len(alphabet)
+        frequencies = <int *>ckd_calloc(nsym, sizeof(int))
+        symbols = <char **>ckd_calloc(nsym, sizeof(char *))
+        # Need to create separate Python objects for each string,
+        # otherwise we get random duplicates of the codewords...
+        bogus = []
+        for i, spam in enumerate(alphabet):
+            sym, freq = spam
+            bogus.append(repr(sym))
+            frequencies[i] = freq
+            symbols[i] = bogus[-1]
+        self.hc = huff_code_build_str(symbols, frequencies, nsym)
+        ckd_free(frequencies)
+        ckd_free(symbols)
+
+    def read(self, infile):
+        if not isinstance(infile, file):
+            infile = file(infile, "rb")
+        huff_code_free(self.hc)
+        self.hc = huff_code_read(PyFile_AsFile(infile))
+
+    def write(self, outfile):
+        if not isinstance(outfile, file):
+            outfile = file(outfile, "wb")
+        huff_code_write(self.hc, PyFile_AsFile(outfile))
+
+    def dump(self, outfile):
+        if not isinstance(outfile, file):
+            outfile = file(outfile, "w")
+        huff_code_dump(self.hc, PyFile_AsFile(outfile))
+
+    def encode(self, seq):
+        """
+        Encode a sequence of symbols to a byte array, returning that
+        array and the bit offset of the next codeword in the last
+        byte (i.e. 8 minutes the number of extra zero bits)
+        """
+        cdef unsigned int cw
+        cdef int cwlen, nbits = 0, nbytes, offset, i
+        cdef unsigned char buf = 0
+        cdef char *output
+        
+        for sym in seq:
+            sss = repr(sym)
+            cwlen = huff_code_encode_str(self.hc, sss, &cw)
+            nbits += cwlen
+        nbytes = int((nbits + 7) / 8)
+        offset = 0
+        output = <char *>PyMem_Malloc(nbytes + 1)
+        output[nbytes] = 0
+        i = 0
+        nbits = 0
+        for sym in seq:
+            sss = repr(sym)
+            cwlen = huff_code_encode_str(self.hc, sss, &cw)
+            #print "sym: %s cw: %s buf: %s output: %s" \
+            #      % (sym, bincw(cw, cwlen), bincw(buf >> (8-offset), offset),
+            #         binstr(output, nbits))
+            #print "cwlen",cwlen
+            # Do one byte at a time while full bytes are available
+            while cwlen >= 8:
+                # Fill low bits of buf with high bits of cw
+                buf |= (cw >> (cwlen - (8 - offset))) & ((1 << (8 - offset)) - 1)
+                # Append buf to output
+                output[i] = buf
+                i += 1
+                nbits += 8
+                # Fill high bits of buf with low bits of this byte
+                cwlen -= 8
+                buf = (cw >> cwlen) & ((1 << offset) - 1)
+                buf <<= (8-offset)
+                #print "cwlen",cwlen
+            # Now cwlen will be less than 8, but it might still be
+            # more than the available space in buf.
+            if cwlen >= (8 - offset):
+                # Fill low bits of buf with (8-offset) highest bits of cw
+                buf |= (cw >> (cwlen - (8 - offset))) & ((1 << (8 - offset)) - 1)
+                # Append buf to output
+                output[i] = buf
+                i += 1
+                nbits += 8
+                # cwlen is down to the remaining bits
+                cwlen -= (8 - offset)
+                # Offset is now zero since we just completed and emptied buf
+                offset = 0
+                # buf is zero, because we just emptied it without putting stuff in
+                buf = 0
+                #print "cwlen",cwlen
+                # Any remaining  bits will be taken care of below (we hope)
+            # Add remaining high bits of cw to low bits of buf
+            #print "cwlen",cwlen
+            buf |= ((cw & ((1 << cwlen) - 1)) << (8 - offset - cwlen))
+            offset += cwlen
+            #print "after buf: %s output: %s" \
+            #      % (bincw(buf >> (8-offset), offset), binstr(output, nbits))
+        if offset > 0:
+            # Append buf to output
+            output[i] = buf
+            nbits += offset
+            i += 1
+        #print "output:", binstr(output, nbits)
+        outstr = PyString_FromStringAndSize(output, nbytes)
+        PyMem_Free(output)
+        return (outstr, offset)
+
+    def decode(self, data):
+        """
+        Decode a sequence of symbols from a string, returning the
+        sequence and the bit offset of the next codeword in the last
+        byte (i.e. 8 minutes the number of remaining bits)
+        """
+        cdef int offset
+        cdef char *dptr
+        cdef char *strval
+        cdef size_t dlen
+
+        dlen = len(data)
+        offset = 0
+        dptr = data
+        output = []
+        while True:
+            strval = huff_code_decode_str(self.hc, &dptr, &dlen, &offset)
+            if strval == NULL:
+                break
+            output.append(strval)
+        if dlen > 1:
+            raise ValueError, "Invalid data at position %d" % (len(data) - dlen)
+        return (output, offset)
+
+    def attach(self, fh, char *mode):
+        if not isinstance(fh, file):
+            fh = file(fh, mode)
+        self.fh = fh
+        huff_code_attach(self.hc, PyFile_AsFile(fh), mode)
+
+    def detach(self):
+        huff_code_detach(self.hc)
+        self.fh = None
+
+    def encode_to_file(self, seq):
+        if self.fh == None:
+            raise RuntimeError, "No file is attached"
+        for sym in seq:
+            strsym = repr(sym)
+            huff_code_encode_str(self.hc, strsym, NULL)
+
+    def decode_from_file(self):
+        cdef char *sym
+        if self.fh == None:
+            raise RuntimeError, "No file is attached"
+        sym = huff_code_decode_str(self.hc, NULL, NULL, NULL)
+        if sym == NULL:
+            return None
+        else:
+            return sym
+
+    def __dealloc__(self):
+        if self.fh:
+            self.detach()
+        huff_code_free(self.hc)
diff --git a/sphinxbase.pc.in b/sphinxbase.pc.in
new file mode 100644 (file)
index 0000000..0637190
--- /dev/null
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+libs="@LIBS@ @ad_libs@"
+
+Name: SphinxBase
+Description: Shared components for Sphinx speech recognition
+Version: @VERSION@
+URL: http://www.cmusphinx.org/
+Libs: -L${libdir} -lsphinxbase -lsphinxad
+Libs.private: ${libs}
+Cflags: -I${includedir} -I${includedir}/sphinxbase
diff --git a/sphinxbase.sln b/sphinxbase.sln
new file mode 100644 (file)
index 0000000..4cc9589
--- /dev/null
@@ -0,0 +1,65 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 11.00\r
+# Visual C++ Express 2010\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sphinx_cepview", "win32\sphinx_cepview\sphinx_cepview.vcxproj", "{06364F13-FBCE-4E2B-9289-0DD39E246205}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sphinx_fe", "win32\sphinx_fe\sphinx_fe.vcxproj", "{D088C451-BB4D-4379-AFFA-C7523DBD35DD}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sphinxbase", "win32\sphinxbase\sphinxbase.vcxproj", "{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sphinx_jsgf2fsg", "win32\sphinx_jsgf2fsg\sphinx_jsgf2fsg.vcxproj", "{0E6AF9F5-8904-4873-8856-7216415782B4}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sphinx_lm_convert", "win32\sphinx_lm_convert\sphinx_lm_convert.vcxproj", "{AFB07B69-EDC1-4E99-B0F3-E6B14FF07C5D}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sphinx_pitch", "win32\sphinx_pitch\sphinx_pitch.vcxproj", "{AF17E630-A43F-4E0A-9BC4-67CD4E2E7FA1}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}\r
+       EndProjectSection\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Win32 = Debug|Win32\r
+               Release|Win32 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {06364F13-FBCE-4E2B-9289-0DD39E246205}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {06364F13-FBCE-4E2B-9289-0DD39E246205}.Debug|Win32.Build.0 = Debug|Win32\r
+               {06364F13-FBCE-4E2B-9289-0DD39E246205}.Release|Win32.ActiveCfg = Release|Win32\r
+               {06364F13-FBCE-4E2B-9289-0DD39E246205}.Release|Win32.Build.0 = Release|Win32\r
+               {D088C451-BB4D-4379-AFFA-C7523DBD35DD}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {D088C451-BB4D-4379-AFFA-C7523DBD35DD}.Debug|Win32.Build.0 = Debug|Win32\r
+               {D088C451-BB4D-4379-AFFA-C7523DBD35DD}.Release|Win32.ActiveCfg = Release|Win32\r
+               {D088C451-BB4D-4379-AFFA-C7523DBD35DD}.Release|Win32.Build.0 = Release|Win32\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.Build.0 = Debug|Win32\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.ActiveCfg = Release|Win32\r
+               {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.Build.0 = Release|Win32\r
+               {0E6AF9F5-8904-4873-8856-7216415782B4}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {0E6AF9F5-8904-4873-8856-7216415782B4}.Debug|Win32.Build.0 = Debug|Win32\r
+               {0E6AF9F5-8904-4873-8856-7216415782B4}.Release|Win32.ActiveCfg = Release|Win32\r
+               {0E6AF9F5-8904-4873-8856-7216415782B4}.Release|Win32.Build.0 = Release|Win32\r
+               {AFB07B69-EDC1-4E99-B0F3-E6B14FF07C5D}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {AFB07B69-EDC1-4E99-B0F3-E6B14FF07C5D}.Debug|Win32.Build.0 = Debug|Win32\r
+               {AFB07B69-EDC1-4E99-B0F3-E6B14FF07C5D}.Release|Win32.ActiveCfg = Release|Win32\r
+               {AFB07B69-EDC1-4E99-B0F3-E6B14FF07C5D}.Release|Win32.Build.0 = Release|Win32\r
+               {AF17E630-A43F-4E0A-9BC4-67CD4E2E7FA1}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {AF17E630-A43F-4E0A-9BC4-67CD4E2E7FA1}.Debug|Win32.Build.0 = Debug|Win32\r
+               {AF17E630-A43F-4E0A-9BC4-67CD4E2E7FA1}.Release|Win32.ActiveCfg = Release|Win32\r
+               {AF17E630-A43F-4E0A-9BC4-67CD4E2E7FA1}.Release|Win32.Build.0 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..4640539
--- /dev/null
@@ -0,0 +1,3 @@
+SUBDIRS = libsphinxbase libsphinxad \
+       sphinx_fe sphinx_cepview sphinx_jsgf2fsg \
+       sphinx_adtools sphinx_lmtools
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..aabbb05
--- /dev/null
@@ -0,0 +1,506 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = libsphinxbase libsphinxad \
+       sphinx_fe sphinx_cepview sphinx_jsgf2fsg \
+       sphinx_adtools sphinx_lmtools
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/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
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+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: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am
+
+# 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/src/libsphinxad/Makefile.am b/src/libsphinxad/Makefile.am
new file mode 100644 (file)
index 0000000..c707351
--- /dev/null
@@ -0,0 +1,28 @@
+
+# libsphinxad: Audio Device interface for Sphinx
+
+lib_LTLIBRARIES = libsphinxad.la
+
+# Confusing libtool version info means:
+#
+# This is API version 2, software release 1, which also supports API version 1
+libsphinxad_la_LDFLAGS = -version-info 0:1:0
+
+libsphinxad_la_SOURCES = cont_ad_base.c
+
+EXTRA_libsphinxad_la_SOURCES = ad_base.c \
+       ad_oss.c \
+       ad_alsa.c
+
+EXTRA_DIST = ad_s60.cpp \
+       play_win32.c \
+       rec_win32.c
+
+libsphinxad_la_DEPENDENCIES = @ad_files@
+
+libsphinxad_la_LIBADD = @ad_files@ @ad_libs@ \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
diff --git a/src/libsphinxad/Makefile.in b/src/libsphinxad/Makefile.in
new file mode 100644 (file)
index 0000000..e50a265
--- /dev/null
@@ -0,0 +1,513 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+# libsphinxad: Audio Device interface for Sphinx
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = src/libsphinxad
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am_libsphinxad_la_OBJECTS = cont_ad_base.lo
+libsphinxad_la_OBJECTS = $(am_libsphinxad_la_OBJECTS)
+libsphinxad_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libsphinxad_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libsphinxad_la_SOURCES) $(EXTRA_libsphinxad_la_SOURCES)
+DIST_SOURCES = $(libsphinxad_la_SOURCES) \
+       $(EXTRA_libsphinxad_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libsphinxad.la
+
+# Confusing libtool version info means:
+#
+# This is API version 2, software release 1, which also supports API version 1
+libsphinxad_la_LDFLAGS = -version-info 0:1:0
+libsphinxad_la_SOURCES = cont_ad_base.c
+EXTRA_libsphinxad_la_SOURCES = ad_base.c \
+       ad_oss.c \
+       ad_alsa.c
+
+EXTRA_DIST = ad_s60.cpp \
+       play_win32.c \
+       rec_win32.c
+
+libsphinxad_la_DEPENDENCIES = @ad_files@
+libsphinxad_la_LIBADD = @ad_files@ @ad_libs@ \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/libsphinxad/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/libsphinxad/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
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+           $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libsphinxad.la: $(libsphinxad_la_OBJECTS) $(libsphinxad_la_DEPENDENCIES) 
+       $(libsphinxad_la_LINK) -rpath $(libdir) $(libsphinxad_la_OBJECTS) $(libsphinxad_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ad_alsa.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ad_base.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ad_oss.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cont_ad_base.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(LTLIBRARIES)
+installdirs:
+       for dir in "$(DESTDIR)$(libdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+
+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: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libLTLIBRARIES clean-libtool ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am \
+       install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-libLTLIBRARIES
+
+# 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/src/libsphinxad/ad_alsa.c b/src/libsphinxad/ad_alsa.c
new file mode 100644 (file)
index 0000000..f107efa
--- /dev/null
@@ -0,0 +1,412 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/* -*- mode:c; indent-tabs-mode:t; c-basic-offset:4; comment-column:40 -*-
+ *
+ * Sphinx II libad (Linux)
+ * ^^^^^^^^^^^^^^^^^^^^^^^
+ * $Id: ad_alsa.c,v 1.6 2001/12/11 00:24:48 lenzo Exp $
+ *
+ * John G. Dorsey (jd5q+@andrew.cmu.edu)
+ * Engineering Design Research Center
+ * Carnegie Mellon University
+ * ***************************************************************************
+ * 
+ * REVISION HISTORY
+ *
+ * 18-Mar-2006  David Huggins-Daines <dhuggins@cs.cmu.edu>
+ *             Update this to the ALSA 1.0 API.
+ *
+ * 12-Dec-2000  David Huggins-Daines <dhd@cepstral.com> at Cepstral LLC
+ *             Make this at least compile with the new ALSA API.
+ *
+ * 05-Nov-1999 Sean Levy (snl@stalphonsos.com) at St. Alphonsos, LLC.
+ *             Ported to ALSA so I can actually get working full-duplex.
+ *
+ * 09-Aug-1999  Kevin Lenzo (lenzo@cs.cmu.edu) at Cernegie Mellon University.
+ *              Incorporated nickr@cs.cmu.edu's changes (marked below) and
+ *              SPS_EPSILON to allow for sample rates that are "close enough".
+ * 
+ * 15-Jun-1999 M. K. Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon Univ.
+ *             Consolidated all ad functions into
+ *             this one file.  Added ad_open_sps().
+ *             Other cosmetic changes for consistency (e.g., use of err.h).
+ * 
+ * 18-May-1999 Kevin Lenzo (lenzo@cs.cmu.edu) added <errno.h>.
+ */
+
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <alsa/asoundlib.h>
+#include <errno.h>
+#include <config.h>
+#include <unistd.h>
+
+#include "prim_type.h"
+#include "ad.h"
+
+
+#define AUDIO_FORMAT SND_PCM_SFMT_S16_LE        /* 16-bit signed, little endian */
+#define INPUT_GAIN   (85)
+#define SPS_EPSILON   200
+
+static int
+setparams(int32 sps, snd_pcm_t * handle)
+{
+    snd_pcm_hw_params_t *hwparams;
+    unsigned int out_sps, buffer_time, period_time;
+    int err;
+
+    snd_pcm_hw_params_alloca(&hwparams);
+    err = snd_pcm_hw_params_any(handle, hwparams);
+    if (err < 0) {
+        fprintf(stderr, "Can not configure this PCM device: %s\n",
+                snd_strerror(err));
+        return -1;
+    }
+
+    err =
+        snd_pcm_hw_params_set_access(handle, hwparams,
+                                     SND_PCM_ACCESS_RW_INTERLEAVED);
+    if (err < 0) {
+        fprintf(stderr,
+                "Failed to set PCM device to interleaved: %s\n",
+                snd_strerror(err));
+        return -1;
+    }
+
+    err =
+        snd_pcm_hw_params_set_format(handle, hwparams, SND_PCM_FORMAT_S16);
+    if (err < 0) {
+        fprintf(stderr,
+                "Failed to set PCM device to 16-bit signed PCM: %s\n",
+                snd_strerror(err));
+        return -1;
+    }
+
+    err = snd_pcm_hw_params_set_channels(handle, hwparams, 1);
+    if (err < 0) {
+        fprintf(stderr, "Failed to set PCM device to mono: %s\n",
+                snd_strerror(err));
+        return -1;
+    }
+
+    out_sps = sps;
+    err =
+        snd_pcm_hw_params_set_rate_near(handle, hwparams, &out_sps, NULL);
+    if (err < 0) {
+        fprintf(stderr, "Failed to set sampling rate: %s\n",
+                snd_strerror(err));
+        return -1;
+    }
+    if (abs(out_sps - sps) > SPS_EPSILON) {
+        fprintf(stderr,
+                "Available samping rate %d is too far from requested %d\n",
+                out_sps, sps);
+        return -1;
+    }
+
+    /* Set buffer time to the maximum. */
+    err = snd_pcm_hw_params_get_buffer_time_max(hwparams, &buffer_time, 0);
+    period_time = buffer_time / 4;
+    err = snd_pcm_hw_params_set_period_time_near(handle, hwparams,
+                                                 &period_time, 0);
+    if (err < 0) {
+        fprintf(stderr, "Failed to set period time to %u: %s\n",
+                period_time, snd_strerror(err));
+        return -1;
+    }
+    err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams,
+                                                 &buffer_time, 0);
+    if (err < 0) {
+        fprintf(stderr, "Failed to set buffer time to %u: %s\n",
+                buffer_time, snd_strerror(err));
+        return -1;
+    }
+
+    err = snd_pcm_hw_params(handle, hwparams);
+    if (err < 0) {
+        fprintf(stderr, "Failed to set hwparams: %s\n", snd_strerror(err));
+        return -1;
+    }
+
+    err = snd_pcm_nonblock(handle, 1);
+    if (err < 0) {
+        fprintf(stderr, "Failed to set non-blocking mode: %s\n",
+                snd_strerror(err));
+        return -1;
+    }
+    return 0;
+}
+
+static int
+setlevels(const char *dev)
+{
+    snd_mixer_t *handle;
+    snd_mixer_selem_id_t *sid;
+    snd_mixer_elem_t *elem;
+    int err;
+    char *mixer_dev, *c;
+
+    /* Basically we just want to turn on Mic capture. */
+    if ((err = snd_mixer_open(&handle, 0)) < 0) {
+        fprintf(stderr, "Mixer open failed: %s\n", snd_strerror(err));
+        return -1;
+    }
+
+    mixer_dev = strdup(dev);
+    if (strncmp(mixer_dev, "plug", 4) == 0)
+        memmove(mixer_dev, mixer_dev + 4, strlen(mixer_dev) - 4 + 1);
+    if ((c = strchr(mixer_dev, ',')))
+        *c = '\0';
+    if ((err = snd_mixer_attach(handle, mixer_dev)) < 0) {
+        fprintf(stderr, "Mixer attach to %s failed: %s\n",
+                mixer_dev, snd_strerror(err));
+        free(mixer_dev);
+        snd_mixer_close(handle);
+        return -1;
+    }
+    free(mixer_dev);
+    if ((err = snd_mixer_selem_register(handle, NULL, NULL)) < 0) {
+        fprintf(stderr, "Mixer register failed: %s\n", snd_strerror(err));
+        snd_mixer_close(handle);
+        return -1;
+    }
+    if ((err = snd_mixer_load(handle)) < 0) {
+        fprintf(stderr, "Mixer load failed: %s\n", snd_strerror(err));
+        snd_mixer_close(handle);
+        return -1;
+    }
+    snd_mixer_selem_id_alloca(&sid);
+    snd_mixer_selem_id_set_name(sid, "Mic");
+    if ((elem = snd_mixer_find_selem(handle, sid)) == NULL) {
+        fprintf(stderr, "Warning: Could not find Mic element\n");
+    }
+    else {
+       if (snd_mixer_selem_has_capture_switch(elem)) {
+            if ((err = snd_mixer_selem_set_capture_switch_all(elem, 1)) < 0) { 
+                fprintf(stderr,
+                       "Failed to enable microphone capture: %s\n",
+                       snd_strerror(err));
+               snd_mixer_close(handle); 
+               return -1;
+           }
+        }
+    }
+    snd_mixer_selem_id_set_name(sid, "Capture");
+    if ((elem = snd_mixer_find_selem(handle, sid)) == NULL) {
+        fprintf(stderr, "Warning: Could not find Capture element\n");
+    }
+    else {
+       if (snd_mixer_selem_has_capture_switch(elem)) {
+           if ((err = snd_mixer_selem_set_capture_switch_all(elem, 1)) < 0) {
+               fprintf(stderr,
+                       "Failed to enable microphone capture: %s\n",
+                       snd_strerror(err));
+               snd_mixer_close(handle);
+               return -1;
+           }
+        }
+    }
+
+    return 0;
+}
+
+ad_rec_t *
+ad_open_dev(const char *dev, int32 sps)
+{
+    ad_rec_t *handle;
+    snd_pcm_t *dspH;
+
+    int err;
+
+    if (dev == NULL)
+        dev = DEFAULT_DEVICE;
+
+    err = snd_pcm_open(&dspH, dev, SND_PCM_STREAM_CAPTURE, 0);
+    if (err < 0) {
+        fprintf(stderr,
+                "Error opening audio device %s for capture: %s\n",
+                dev, snd_strerror(err));
+        return NULL;
+    }
+
+    if (setparams(sps, dspH) < 0) {
+        return NULL;
+    }
+    if (setlevels(dev) < 0) {
+        return NULL;
+    }
+    if ((handle = (ad_rec_t *) calloc(1, sizeof(ad_rec_t))) == NULL) {
+        fprintf(stderr, "calloc(%d) failed\n", (int)sizeof(ad_rec_t));
+        abort();
+    }
+
+    handle->dspH = dspH;
+    handle->recording = 0;
+    handle->sps = sps;
+    handle->bps = sizeof(int16);
+
+    return (handle);
+}
+
+ad_rec_t *
+ad_open_sps(int32 sps)
+{
+    return ad_open_dev(DEFAULT_DEVICE, sps);
+}
+
+ad_rec_t *
+ad_open(void)
+{
+    return ad_open_sps(DEFAULT_SAMPLES_PER_SEC);
+}
+
+
+int32
+ad_close(ad_rec_t * handle)
+{
+    if (handle->dspH == NULL)
+        return AD_ERR_NOT_OPEN;
+
+    if (handle->recording) {
+        if (ad_stop_rec(handle) < 0)
+            return AD_ERR_GEN;
+    }
+    snd_pcm_close(handle->dspH);
+    free(handle);
+
+    return (0);
+}
+
+
+int32
+ad_start_rec(ad_rec_t * handle)
+{
+    int err;
+
+    if (handle->dspH == NULL)
+        return AD_ERR_NOT_OPEN;
+
+    if (handle->recording)
+        return AD_ERR_GEN;
+
+    err = snd_pcm_prepare(handle->dspH);
+    if (err < 0) {
+        fprintf(stderr, "snd_pcm_prepare failed: %s\n", snd_strerror(err));
+        return AD_ERR_GEN;
+    }
+    err = snd_pcm_start(handle->dspH);
+    if (err < 0) {
+        fprintf(stderr, "snd_pcm_start failed: %s\n", snd_strerror(err));
+        return AD_ERR_GEN;
+    }
+    handle->recording = 1;
+
+    return (0);
+}
+
+
+int32
+ad_stop_rec(ad_rec_t * handle)
+{
+    int err;
+
+    if (handle->dspH == NULL)
+        return AD_ERR_NOT_OPEN;
+
+    if (!handle->recording)
+        return AD_ERR_GEN;
+
+    err = snd_pcm_drop(handle->dspH);
+    if (err < 0) {
+        fprintf(stderr, "snd_pcm_drop failed: %s\n", snd_strerror(err));
+        return AD_ERR_GEN;
+    }
+    handle->recording = 0;
+
+    return (0);
+}
+
+
+int32
+ad_read(ad_rec_t * handle, int16 * buf, int32 max)
+{
+    int32 length, err;
+
+    if (!handle->recording) {
+       fprintf(stderr, "Recording is stopped, start recording with ad_start_rec\n");
+       return AD_EOF;
+    }
+
+    length = snd_pcm_readi(handle->dspH, buf, max);
+    if (length == -EAGAIN) {
+        length = 0;
+    }
+    else if (length == -EPIPE) {
+        fprintf(stderr, "Input overrun, read calls are too rare (non-fatal)\n");
+        err = snd_pcm_prepare(handle->dspH);
+       if (err < 0) {
+               fprintf(stderr, "Can't recover from underrun: %s\n",
+                       snd_strerror(err));
+               return AD_ERR_GEN;
+       }
+        length = 0;
+    }
+    else if (length == -ESTRPIPE) {
+        fprintf(stderr, "Resuming sound driver (non-fatal)\n");
+       while ((err = snd_pcm_resume(handle->dspH)) == -EAGAIN)
+               usleep(10000); /* Wait for the driver to wake up */
+       if (err < 0) {
+               err = snd_pcm_prepare(handle->dspH);
+               if (err < 0) {
+                       fprintf(stderr, "Can't recover from underrun: %s\n",
+                               snd_strerror(err));
+                       return AD_ERR_GEN;
+               }
+       }
+       length = 0;
+    }
+    else if (length < 0) {
+       fprintf(stderr, "Audio read error: %s\n",
+               snd_strerror(length));
+       return AD_ERR_GEN;
+    }
+    return length;
+}
diff --git a/src/libsphinxad/ad_base.c b/src/libsphinxad/ad_base.c
new file mode 100644 (file)
index 0000000..57ed656
--- /dev/null
@@ -0,0 +1,108 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/*
+ * ad.c -- Wraps a "sphinx-II standard" audio interface around the basic audio
+ *             utilities.
+ *
+ * HISTORY
+ * 
+ * 11-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University.
+ *             Modified to conform to new A/D API.
+ * 
+ * 12-May-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University.
+ *             Dummy template created.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <config.h>
+
+#include "prim_type.h"
+#include "ad.h"
+
+#define QUIT(x)                {fprintf x; exit(-1);}
+
+
+ad_rec_t *
+ad_open_dev(const char *dev, int32 samples_per_sec)
+{
+    fprintf(stderr, "A/D library not implemented\n");
+    return NULL;
+}
+
+
+ad_rec_t *
+ad_open_sps(int32 samples_per_sec)
+{
+    fprintf(stderr, "A/D library not implemented\n");
+    return NULL;
+}
+
+ad_rec_t *
+ad_open(void)
+{
+    return ad_open_sps(DEFAULT_SAMPLES_PER_SEC);
+}
+
+
+int32
+ad_start_rec(ad_rec_t * r)
+{
+    return -1;
+}
+
+
+int32
+ad_stop_rec(ad_rec_t * r)
+{
+    return -1;
+}
+
+
+int32
+ad_read(ad_rec_t * r, int16 * buf, int32 max)
+{
+    return -1;
+}
+
+
+int32
+ad_close(ad_rec_t * r)
+{
+    return 0;
+}
diff --git a/src/libsphinxad/ad_oss.c b/src/libsphinxad/ad_oss.c
new file mode 100644 (file)
index 0000000..9a869a2
--- /dev/null
@@ -0,0 +1,378 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/* Sphinx II libad (Linux)
+ * ^^^^^^^^^^^^^^^^^^^^^^^
+ * $Id: ad_oss.c,v 1.9 2004/07/16 00:57:12 egouvea Exp $
+ *
+ * John G. Dorsey (jd5q+@andrew.cmu.edu)
+ * Engineering Design Research Center
+ * Carnegie Mellon University
+ * ********************************************************************
+ * 
+ * REVISION HISTORY
+ *
+ * 09-Aug-1999  Kevin Lenzo (lenzo@cs.cmu.edu) at Cernegie Mellon University.
+ *              Incorporated nickr@cs.cmu.edu's changes (marked below) and
+ *              SPS_EPSILON to allow for sample rates that are "close enough".
+ * 
+ * 15-Jun-1999 M. K. Ravishankar (rkm@cs.cmu.edu) Consolidated all ad functions into
+ *             this one file.  Added ad_open_sps().
+ *             Other cosmetic changes for consistency (e.g., use of err.h).
+ * 
+ * 18-May-1999 Kevin Lenzo (lenzo@cs.cmu.edu) added <errno.h>.
+ */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/soundcard.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <config.h>
+
+#include "prim_type.h"
+#include "ad.h"
+
+#define AUDIO_FORMAT AFMT_S16_LE        /* 16-bit signed, little endian */
+#define INPUT_GAIN   (80)
+
+#define SPS_EPSILON   200
+#define SAMPLERATE_TOLERANCE 0.01
+
+ad_rec_t *
+ad_open_dev(const char *dev, int32 sps)
+{
+    ad_rec_t *handle;
+    int32 dspFD, mixerFD;
+    int32 nonBlocking = 1, sourceMic = SOUND_MASK_MIC, inputGain =
+        INPUT_GAIN, devMask = 0;
+    int32 audioFormat = AUDIO_FORMAT;
+    int32 dspCaps = 0;
+    int32 sampleRate;
+    int32 numberChannels = 1;
+
+    sampleRate = sps;
+
+    if (dev == NULL)
+        dev = DEFAULT_DEVICE;
+
+    /* Used to have O_NDELAY. */
+    if ((dspFD = open(dev, O_RDONLY)) < 0) {
+        if (errno == EBUSY)
+            fprintf(stderr, "%s(%d): Audio device(%s) busy\n",
+                    __FILE__, __LINE__, dev);
+        else
+            fprintf(stderr,
+                    "%s(%d): Failed to open audio device(%s): %s\n",
+                    __FILE__, __LINE__, dev, strerror(errno));
+        return NULL;
+    }
+
+    if (ioctl(dspFD, SNDCTL_DSP_SYNC, 0) < 0) {
+        fprintf(stderr, "Audio ioctl(SYNC) failed: %s\n", strerror(errno));
+        close(dspFD);
+        return NULL;
+    }
+
+    if (ioctl(dspFD, SNDCTL_DSP_RESET, 0) < 0) {
+        fprintf(stderr, "Audio ioctl(RESET) failed: %s\n",
+                strerror(errno));
+        close(dspFD);
+        return NULL;
+    }
+
+    if (ioctl(dspFD, SNDCTL_DSP_SETFMT, &audioFormat) < 0) {
+        fprintf(stderr, "Audio ioctl(SETFMT 0x%x) failed: %s\n",
+                audioFormat, strerror(errno));
+        close(dspFD);
+        return NULL;
+    }
+    if (audioFormat != AUDIO_FORMAT) {
+        fprintf(stderr,
+                "Audio ioctl(SETFMT): 0x%x, expected: 0x%x\n",
+                audioFormat, AUDIO_FORMAT);
+        close(dspFD);
+        return NULL;
+    }
+
+    if (ioctl(dspFD, SNDCTL_DSP_SPEED, &sampleRate) < 0) {
+        fprintf(stderr, "Audio ioctl(SPEED %d) failed %s\n",
+                sampleRate, strerror(errno));
+        close(dspFD);
+        return NULL;
+    }
+    if (sampleRate != sps) {
+        if (abs(sampleRate - sps) <= (sampleRate * SAMPLERATE_TOLERANCE)) {
+            fprintf(stderr,
+                    "Audio ioctl(SPEED) not perfect, but is acceptable. "
+                    "(Wanted %d, but got %d)\n", sampleRate, sps);
+        }
+        else {
+            fprintf(stderr,
+                    "Audio ioctl(SPEED): %d, expected: %d\n",
+                    sampleRate, sps);
+            close(dspFD);
+            return NULL;
+        }
+    }
+
+    if (ioctl(dspFD, SNDCTL_DSP_CHANNELS, &numberChannels) < 0) {
+        fprintf(stderr, "Audio ioctl(CHANNELS %d) failed %s\n",
+                numberChannels, strerror(errno));
+        close(dspFD);
+        return NULL;
+    }
+
+    if (ioctl(dspFD, SNDCTL_DSP_NONBLOCK, &nonBlocking) < 0) {
+        fprintf(stderr, "ioctl(NONBLOCK) failed: %s\n", strerror(errno));
+        close(dspFD);
+        return NULL;
+    }
+
+    if (ioctl(dspFD, SNDCTL_DSP_GETCAPS, &dspCaps) < 0) {
+        fprintf(stderr, "ioctl(GETCAPS) failed: %s\n", strerror(errno));
+        close(dspFD);
+        return NULL;
+    }
+#if 0
+    printf("DSP Revision %d:\n", dspCaps & DSP_CAP_REVISION);
+    printf("DSP %s duplex capability.\n",
+           (dspCaps & DSP_CAP_DUPLEX) ? "has" : "does not have");
+    printf("DSP %s real time capability.\n",
+           (dspCaps & DSP_CAP_REALTIME) ? "has" : "does not have");
+    printf("DSP %s batch capability.\n",
+           (dspCaps & DSP_CAP_BATCH) ? "has" : "does not have");
+    printf("DSP %s coprocessor capability.\n",
+           (dspCaps & DSP_CAP_COPROC) ? "has" : "does not have");
+    printf("DSP %s trigger capability.\n",
+           (dspCaps & DSP_CAP_TRIGGER) ? "has" : "does not have");
+    printf("DSP %s memory map capability.\n",
+           (dspCaps & DSP_CAP_MMAP) ? "has" : "does not have");
+#endif
+
+    if ((dspCaps & DSP_CAP_DUPLEX)
+        && (ioctl(dspFD, SNDCTL_DSP_SETDUPLEX, 0) < 0))
+        fprintf(stderr, "ioctl(SETDUPLEX) failed: %s\n", strerror(errno));
+
+    /* Patched by N. Roy (nickr@ri.cmu.edu), 99/7/23. 
+       Previously, mixer was set through dspFD. This is incorrect. Should
+       be set through mixerFD, /dev/mixer. 
+       Also, only the left channel volume was being set.
+     */
+
+    if ((mixerFD = open("/dev/mixer", O_RDONLY)) < 0) {
+        if (errno == EBUSY) {
+            fprintf(stderr, "%s %d: mixer device busy.\n",
+                    __FILE__, __LINE__);
+            fprintf(stderr, "%s %d: Using current setting.\n",
+                    __FILE__, __LINE__);
+        }
+        else {
+            fprintf(stderr, "%s %d: %s\n", __FILE__, __LINE__,
+                    strerror(errno));
+            exit(1);
+        }
+    }
+
+    if (mixerFD >= 0) {
+        if (ioctl(mixerFD, SOUND_MIXER_WRITE_RECSRC, &sourceMic) < 0) {
+            if (errno == ENXIO)
+                fprintf(stderr,
+                        "%s %d: can't set mic source for this device.\n",
+                        __FILE__, __LINE__);
+            else {
+                fprintf(stderr,
+                        "%s %d: mixer set to mic: %s\n",
+                        __FILE__, __LINE__, strerror(errno));
+                exit(1);
+            }
+        }
+
+        /* Set the same gain for left and right channels. */
+        inputGain = inputGain << 8 | inputGain;
+
+        /* Some OSS devices have no input gain control, but do have a
+           recording level control.  Find out if this is one of them and
+           adjust accordingly. */
+        if (ioctl(mixerFD, SOUND_MIXER_READ_DEVMASK, &devMask) < 0) {
+            fprintf(stderr,
+                    "%s %d: failed to read device mask: %s\n",
+                    __FILE__, __LINE__, strerror(errno));
+            exit(1);            /* FIXME: not a well-behaved-library thing to do! */
+        }
+        if (devMask & SOUND_MASK_IGAIN) {
+            if (ioctl(mixerFD, SOUND_MIXER_WRITE_IGAIN, &inputGain) < 0) {
+                fprintf(stderr,
+                        "%s %d: mixer input gain to %d: %s\n",
+                        __FILE__, __LINE__, inputGain, strerror(errno));
+                exit(1);
+            }
+        }
+        else if (devMask & SOUND_MASK_RECLEV) {
+            if (ioctl(mixerFD, SOUND_MIXER_WRITE_RECLEV, &inputGain) < 0) {
+                fprintf(stderr,
+                        "%s %d: mixer record level to %d: %s\n",
+                        __FILE__, __LINE__, inputGain, strerror(errno));
+                exit(1);
+            }
+        }
+        else {
+            fprintf(stderr,
+                    "%s %d: can't set input gain/recording level for this device.\n",
+                    __FILE__, __LINE__);
+        }
+
+        close(mixerFD);
+    }
+
+    if ((handle = (ad_rec_t *) calloc(1, sizeof(ad_rec_t))) == NULL) {
+        fprintf(stderr, "calloc(%ld) failed\n", sizeof(ad_rec_t));
+        abort();
+    }
+
+    handle->dspFD = dspFD;
+    handle->recording = 0;
+    handle->sps = sps;
+    handle->bps = sizeof(int16);
+
+    return (handle);
+}
+
+ad_rec_t *
+ad_open_sps(int32 sps)
+{
+    return ad_open_dev(DEFAULT_DEVICE, sps);
+}
+
+ad_rec_t *
+ad_open(void)
+{
+    return ad_open_sps(DEFAULT_SAMPLES_PER_SEC);
+}
+
+int32
+ad_close(ad_rec_t * handle)
+{
+    if (handle->dspFD < 0)
+        return AD_ERR_NOT_OPEN;
+
+    if (handle->recording) {
+        if (ad_stop_rec(handle) < 0)
+            return AD_ERR_GEN;
+    }
+
+    close(handle->dspFD);
+    free(handle);
+
+    return (0);
+}
+
+int32
+ad_start_rec(ad_rec_t * handle)
+{
+    if (handle->dspFD < 0)
+        return AD_ERR_NOT_OPEN;
+
+    if (handle->recording)
+        return AD_ERR_GEN;
+
+    /* Sample rate, format, input mix settings, &c. are configured
+     * with ioctl(2) calls under Linux. It makes more sense to handle
+     * these at device open time and consider the state of the device
+     * to be fixed until closed.
+     */
+
+    handle->recording = 1;
+
+    /* rkm@cs: This doesn't actually do anything.  How do we turn recording on/off? */
+
+    return (0);
+}
+
+int32
+ad_stop_rec(ad_rec_t * handle)
+{
+    if (handle->dspFD < 0)
+        return AD_ERR_NOT_OPEN;
+
+    if (!handle->recording)
+        return AD_ERR_GEN;
+
+    if (ioctl(handle->dspFD, SNDCTL_DSP_SYNC, 0) < 0) {
+        fprintf(stderr, "Audio ioctl(SYNC) failed: %s\n", strerror(errno));
+        return AD_ERR_GEN;
+    }
+
+    handle->recording = 0;
+
+    return (0);
+}
+
+int32
+ad_read(ad_rec_t * handle, int16 * buf, int32 max)
+{
+    int32 length;
+
+    length = max * handle->bps; /* #samples -> #bytes */
+
+    if ((length = read(handle->dspFD, buf, length)) > 0) {
+#if 0
+        if ((length % handle->bps) != 0)
+            fprintf(stderr,
+                    "Audio read returned non-integral #sample bytes (%d)\n",
+                    length);
+#endif
+        length /= handle->bps;
+    }
+
+    if (length < 0) {
+        if (errno != EAGAIN) {
+            fprintf(stderr, "Audio read error");
+            return AD_ERR_GEN;
+        }
+        else {
+            length = 0;
+        }
+    }
+
+    if ((length == 0) && (!handle->recording))
+        return AD_EOF;
+
+    return length;
+}
diff --git a/src/libsphinxad/ad_s60.cpp b/src/libsphinxad/ad_s60.cpp
new file mode 100644 (file)
index 0000000..170bc25
--- /dev/null
@@ -0,0 +1,443 @@
+/*
+   This file is part of the imp project.
+   Copyright (C) 2009 Università degli Studi di Bergamo, Politecnico di Milano
+   Authors:
+       Cristian Gatti, gatti DOT kris AT gmail DOT com
+       Silvio Moioli, silvio AT moioli DOT net, <http://www.moioli.net>
+ */
+
+#include "config.h"
+
+#if defined(AD_BACKEND_S60)
+
+/*
+    S60 Sphinx audio backend.
+    Currently it is limited to recording 8kHz PCM16 mono audio data.
+ */
+
+//Symbian includes must go first
+#include <e32base.h>
+#include <e32msgqueue.h>
+#include <e32debug.h>
+#include <MdaAudioInputStream.h>
+#include <mda/common/audio.h>
+
+#include "ad.h"
+
+/* 
+ * Implementation notes
+ * Since Symbian uses a callback system based on Active Objects to carry out asynchronous
+ * operations we must make use of a helper thread, which is also useful for priority reasons.
+ * 
+ * Sphinxbase functions are implemented through the CAudioDevice class that communicates
+ * with the helper thread, which is encapsulated in CHelperThreadHost. Threads use:
+ *  - a synchronized temporaryBuffer and
+ *  - Symbian thread-safe queues (RMsgQueues)
+ * to communicate.
+ */
+
+//constants
+
+/* 
+ * Messages sent through RMsgQueues.
+ */
+enum TMessage {
+    ENullMessage = 0,
+    EInited,
+    EStartRecording,
+    ERecordingStarted,
+    EStopRecording,
+    ERecordingStopped,
+    EClose,
+    EClosed
+};
+
+/* 
+ * Max RMsgQueue size (will block if full).
+ */
+const TInt KQueueLength = 10;
+
+/* 
+ * Only PCM16 is supported at the moment.
+ */
+const TInt KBytesPerSample = 2;
+
+/* 
+ * Only 16kHz audio is supported at the moment.
+ */
+const TInt KSampleRate = 16000;
+
+/* 
+ * Temporary buffer length in milliseconds. The temporary buffer is filled
+ * by the OS and then copied to the main buffer where it is read by Sphinxbase
+ * functions.
+ */
+const TInt KTemporaryBufferTime = 150;
+
+/* 
+ * Temporary buffer length in bytes.
+ */
+const TInt KTemporaryBufferSize = (KTemporaryBufferTime * KSampleRate * KBytesPerSample) / 1000;
+
+/* 
+ * Helper thread name.
+ */
+_LIT(KHelperThreadName, "HelperThread");
+
+/* 
+ * Possible helper thread states.
+ */
+enum THelperThreadState {EPaused = 0, ERecording, EClosing};
+
+//classes
+
+/* 
+ * Helper thread wrapper class.
+ */
+class CHelperThreadHost : public MMdaAudioInputStreamCallback {
+    public:
+        CHelperThreadHost(CBufSeg*, RFastLock*, RMsgQueue<TInt>*, RMsgQueue<TInt>*);
+        virtual ~CHelperThreadHost();
+        static TInt ThreadFunction(TAny*);
+        void InitializeL();
+        void DestroyL();
+        
+        virtual void MaiscOpenComplete(TInt);
+        virtual void MaiscBufferCopied(TInt, const TDesC8&);
+        virtual void MaiscRecordComplete(TInt);
+        
+    private:
+        CMdaAudioInputStream* iStream;
+        TMdaAudioDataSettings iStreamSettings;
+        THelperThreadState iState;
+
+        RBuf8 iTemporaryBuffer;
+
+        CBufSeg* iBuffer;
+        RFastLock* iBufferLock;
+
+        RMsgQueue<TInt>* iCommandQueue;
+        RMsgQueue<TInt>* iNotificationQueue;
+};
+
+/* 
+ * Class used to invoke Symbian functions from Sphinx functions.
+ */
+class CAudioDevice {
+    public:
+        CAudioDevice();
+        void ConstructL();
+        static CAudioDevice* NewL();
+        virtual ~CAudioDevice();
+        
+        void ResumeRecording();
+        void PauseRecording();
+        TInt ReadSamples(TAny*, TInt);
+        
+    private:
+        RThread iThread;
+        CHelperThreadHost* iThreadHost;
+        
+        CBufSeg* iBuffer;
+        RFastLock iBufferLock;
+        
+        RMsgQueue<TInt> iCommandQueue;
+        RMsgQueue<TInt> iNotificationQueue;
+};
+
+CAudioDevice::CAudioDevice(){
+    iCommandQueue.CreateLocal(KQueueLength);
+    iNotificationQueue.CreateLocal(KQueueLength);
+}
+
+void CAudioDevice::ConstructL(){
+    iBuffer = CBufSeg::NewL(KTemporaryBufferSize);
+    iBufferLock.CreateLocal();
+    
+    iThreadHost = new (ELeave) CHelperThreadHost(iBuffer, &(iBufferLock), &(iCommandQueue), &(iNotificationQueue));
+    iThread.Create(KHelperThreadName, CHelperThreadHost::ThreadFunction, KDefaultStackSize, NULL, iThreadHost);
+    iThread.Resume(); //new thread starts at ThreadFunction
+    
+    //wait until init is done
+    TInt message = ENullMessage;
+    iNotificationQueue.ReceiveBlocking(message);
+    if(message != EInited){
+        RDebug::Print(_L("expecting %d, got %d"), EInited, message);
+    }
+}
+
+CAudioDevice* CAudioDevice::NewL(){
+    CAudioDevice* self = new (ELeave) CAudioDevice();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+/*
+ * Request to record samples.
+ */
+void CAudioDevice::ResumeRecording(){
+    iCommandQueue.SendBlocking(EStartRecording);
+    
+    TInt message = ENullMessage;
+    iNotificationQueue.ReceiveBlocking(message);
+    if(message != ERecordingStarted){
+        RDebug::Print(_L("expecting %d, got %d"), ERecordingStarted, message);
+    }
+}
+
+/*
+ * Request to stop recording samples. Note that actually we don't stop the recording,
+ * but just discard incoming data until ResumeRecording is called again.
+ */
+void CAudioDevice::PauseRecording(){
+    iCommandQueue.SendBlocking(EStopRecording);
+    
+    TInt message = ENullMessage;
+    iNotificationQueue.ReceiveBlocking(message);
+    if(message != ERecordingStopped){
+        RDebug::Print(_L("expecting %d, got %d"), ERecordingStopped, message);
+    }
+}
+
+/*
+ * Reads at most maxSamples samples into destinationBuffer, returning
+ * the actual number of samples read.
+ */
+TInt CAudioDevice::ReadSamples(TAny* aDestinationBuffer, TInt aMaxSamples){
+    iBufferLock.Wait();
+        TInt availableSamples = iBuffer->Size() / KBytesPerSample;
+        TInt samplesToCopy = aMaxSamples;
+        if (availableSamples < aMaxSamples){
+            samplesToCopy = availableSamples;
+        }
+        TInt bytesToCopy = samplesToCopy * KBytesPerSample;
+        iBuffer->Read(0, aDestinationBuffer, bytesToCopy);
+        iBuffer->Delete(0, bytesToCopy);
+    iBufferLock.Signal();
+
+    return samplesToCopy;
+}
+
+CAudioDevice::~CAudioDevice(){
+    //tell the thread to stop operations
+    iCommandQueue.SendBlocking(EClose);
+
+    TInt message = ENullMessage;
+    iNotificationQueue.ReceiveBlocking(message);
+    if(message != EClosed){
+        RDebug::Print(_L("expecting %d, got %d"), EClosed, message);
+    }
+    
+    //join thread
+    TRequestStatus status;
+    iThread.Logon(status);
+    User::WaitForRequest(status);
+    
+    //destroy fields
+    delete iThreadHost;
+    iThread.Close();
+    iBufferLock.Close();
+    delete iBuffer;
+    iNotificationQueue.Close();
+    iCommandQueue.Close();
+}
+
+CHelperThreadHost::CHelperThreadHost(CBufSeg* aBuffer, RFastLock* aBufferLock, RMsgQueue<TInt>* aCommandQueue, RMsgQueue<TInt>* aNotificationQueue){
+    iBuffer = aBuffer;
+    iBufferLock = aBufferLock;
+    iCommandQueue = aCommandQueue;
+    iNotificationQueue = aNotificationQueue;
+    iState = EPaused;
+}
+
+TInt CHelperThreadHost::ThreadFunction(TAny* aParam){
+    CHelperThreadHost* host = (CHelperThreadHost*) aParam;
+
+    //add cleanup stack support
+    CTrapCleanup* cleanupStack = CTrapCleanup::New();
+    
+    //add active objects suppport
+    TRAPD(error,   
+        CActiveScheduler* activeScheduler = new (ELeave) CActiveScheduler;
+        CleanupStack::PushL(activeScheduler);
+        CActiveScheduler::Install(activeScheduler);
+        
+        //init multimedia system
+        host->InitializeL();
+        
+        //run active scheduler
+        CActiveScheduler::Start();
+        
+        //thread execution ended
+        CleanupStack::PopAndDestroy(activeScheduler);
+    );
+    if(error != KErrNone){
+        RDebug::Print(_L("thread error: %d"), error);
+    }
+    
+    delete cleanupStack;
+    return KErrNone;
+}
+
+/*
+ * Inits iStream and iTemporaryBuffer.
+ */
+void CHelperThreadHost::InitializeL(){
+    iStream = CMdaAudioInputStream::NewL(*this, EMdaPriorityMax, EMdaPriorityPreferenceTime);
+    iStream->Open(&(iStreamSettings)); //calls MaiscOpenComplete asynchronously
+    iTemporaryBuffer.CreateL(KTemporaryBufferSize);
+}
+
+/*
+ * Destroys iStream and iTemporaryBuffer.
+ */
+void CHelperThreadHost::DestroyL(){
+    iTemporaryBuffer.Close();
+#if defined(__WINSCW__)
+    iStream->Stop();
+    CMdaAudioInputStream::Delete(iStream);
+#else
+    delete iStream;
+#endif
+}
+
+/*
+ * Called by the OS when iStream has been opened.
+ */
+void CHelperThreadHost::MaiscOpenComplete(TInt aError){
+    if (aError == KErrNone){
+        iNotificationQueue->SendBlocking(EInited);
+                
+        iStream->SetAudioPropertiesL(TMdaAudioDataSettings::ESampleRate16000Hz, TMdaAudioDataSettings::EChannelsMono);
+        iStream->SetGain(iStream->MaxGain());
+
+        iStream->ReadL(iTemporaryBuffer); //calls MaiscBufferCopied asynchronously
+    }
+    else{
+        RDebug::Print(_L("error %d in MaiscOpenComplete"), aError);
+    }
+}
+
+/*
+ * Called by the OS when iTemporaryBuffer has been filled.
+ */
+void CHelperThreadHost::MaiscBufferCopied(TInt aError, const TDesC8 &aBuffer){
+    if (aError == KErrNone){
+        //if needed, record data
+        if(iState == ERecording){
+            TInt availableBytes = aBuffer.Size();
+            iBufferLock->Wait();
+                TInt bufferSize = iBuffer->Size();
+                iBuffer->ExpandL(bufferSize, availableBytes);
+                iBuffer->Write(bufferSize, aBuffer, availableBytes);
+            iBufferLock->Signal();
+        }
+        
+        //empty buffer
+        iTemporaryBuffer.Zero();
+        
+        //process pending messages
+        TInt message = ENullMessage;
+        TInt result = iCommandQueue->Receive(message);
+        if (result == KErrNone){
+            if(message == EStartRecording){
+                iState = ERecording;
+                iNotificationQueue->SendBlocking(ERecordingStarted);
+            }
+            else if(message == EStopRecording){
+                iState = EPaused;
+                iNotificationQueue->SendBlocking(ERecordingStopped);
+            }
+            else if(message == EClose){
+                iState = EClosing;
+                iStream->Stop(); //calls MaiscRecordComplete asynchronously
+                this->DestroyL();
+                iNotificationQueue->SendBlocking(EClosed);
+                User::Exit(0);
+            }
+            else{
+                RDebug::Print(_L("received unexpected %d"), message);
+            }
+        }
+        
+        //unless stopping, request filling the next buffer
+        if (iState != EClosing){
+            iStream->ReadL(iTemporaryBuffer); //calls MaiscBufferCopied asynchronously
+        }
+    }
+    else if (aError == KErrAbort){
+        //sent when discarding data during close, nothing to do here
+    }
+    else{
+        RDebug::Print(_L("error %d in MaiscBufferCopied"), aError);
+    }
+}
+
+/*
+ * Should be called by the OS when the recording is finished.
+ * Due to a bug, this method never gets called.
+ * http://carbidehelp.nokia.com/help/index.jsp?topic=/S60_5th_Edition_Cpp_Developers_Library/GUID-441D327D-D737-42A2-BCEA-FE89FBCA2F35/AudioStreamExample/doc/index.html
+ */
+void CHelperThreadHost::MaiscRecordComplete(TInt aError){
+    //nothing to do here
+}
+
+CHelperThreadHost::~CHelperThreadHost(){
+    //nothing to do here
+}
+
+//Sphinxbase methods
+
+ad_rec_t* ad_open(void){
+    ad_rec_t* result = new ad_rec_t;
+    result->recorder = CAudioDevice::NewL();
+    result->recording = FALSE;
+    result->sps = KSampleRate;
+    result->bps = KBytesPerSample;
+    return result;
+}
+
+ad_rec_t* ad_open_dev(const char* dev, int32 sps){
+    //dummy
+    return ad_open();
+}
+
+ad_rec_t* ad_open_sps(int32 sps){
+    //dummy
+    return ad_open();
+}
+
+ad_rec_t* ad_open_sps_bufsize(int32 sps, int32 bufsize_msec){
+    //dummy
+    return ad_open();
+}
+
+int32 ad_start_rec(ad_rec_t* r){
+    ((CAudioDevice*)r->recorder)->ResumeRecording();
+    r->recording = TRUE;
+    return AD_OK;
+}
+
+int32 ad_read(ad_rec_t* r, int16* buf, int32 max){
+    int32 result = (int32) ((CAudioDevice*)r->recorder)->ReadSamples((TAny*) buf, (TInt)max);
+    if(result == 0 && r->recording == FALSE){
+        result = AD_EOF;
+    }
+    return result;
+}
+
+int32 ad_stop_rec(ad_rec_t* r){
+    ((CAudioDevice*)r->recorder)->PauseRecording();
+    r->recording = FALSE;
+    return AD_OK;
+}
+
+int32 ad_close(ad_rec_t* r){
+    delete ((CAudioDevice*)r->recorder);
+    delete r;
+    return AD_OK;
+}
+
+#endif //defined(AD_BACKEND_S60)
diff --git a/src/libsphinxad/cont_ad_base.c b/src/libsphinxad/cont_ad_base.c
new file mode 100644 (file)
index 0000000..95e658c
--- /dev/null
@@ -0,0 +1,1468 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * cont_ad.c -- Continuous A/D listening and silence filtering module.
+ * 
+ * HISTORY
+ * 
+ * $Log: cont_ad_base.c,v $
+ * Revision 1.14  2005/07/02 03:51:32  rkm
+ * Slowed down power histogram decay rate
+ *
+ * Revision 1.13  2005/06/30 00:27:17  rkm
+ * Fixed silence handling in rawmode; added extra state variables
+ *
+ * 
+ * 28-Jun-2005 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University.
+ *             - Changed rawmode handling to simply copy data even for silence
+ *             segments.
+ *             - Moved definitions of CONT_AD_STATE_{SIL,SPEECH} from .c to .h.
+ * 
+ * Revision 1.12  2005/06/29 23:48:04  egouvea
+ * Revert changes: variables defined in cont_ad_base.c should not be accessible by the application
+ *
+ * Revision 1.10  2005/02/13 01:29:48  rkm
+ * Fixed cont_ad_read to never cross sil/speech boundary, and rawmode
+ *
+ * Revision 1.9  2005/02/01 22:21:19  rkm
+ * Added raw data logging, and raw data pass-through mode to cont_ad
+ *
+ * Revision 1.8  2004/07/23 23:36:34  egouvea
+ * Ravi's merge, with the latest fixes in the FSG code, and making the log files generated by FSG, LM, and allphone have the same 'look and feel', with the backtrace information presented consistently
+ *
+ * 23-Jul-2004 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed default adapt_rate from 0.5 to 0.2.
+ *
+ * Revision 1.7  2004/07/16 00:57:12  egouvea
+ * Added Ravi's implementation of FSG support.
+ *
+ * Revision 1.2  2004/06/23 20:31:18  rkm
+ * Added adapt_rate parameter; restructured frame processing to include threshold update
+ *
+ * 
+ * 23-Oct-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Small change in the way the noiselevel is updated in find_thresh().
+ * 
+ * 26-Aug-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Separated computation of "frame power" into a separate low-level
+ *             function.
+ * 
+ * 13-Jul-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Modified to allow frame size to depend on audio sampling rate.
+ * 
+ * 01-Jul-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed CONT_AD_DELTA_SPEECH back to 20.
+ * 
+ * 30-Jun-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed CONT_AD_DELTA_SPEECH from 10 to 15.
+ *             Added FILE* argument to cont_ad_powhist_dump().
+ * 
+ * 19-Jun-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed CONT_AD_DELTA_SPEECH from 20 to 10, to increase sensitivity
+ *             to very short utterances.
+ * 
+ * 16-Jan-98   Paul Placeway (pwp@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed to use dB instead of the weird power measure.
+ *             Changed analysis window size, tuned default settings of most
+ *             parameters to make the system less sensitive to noise, changed
+ *             the histogram update frequency and decay to make the system
+ *             adapt more rapidly to changes in the environment.
+ *             Added cont_ad_set_params() and cont_ad_get_params().
+ * 
+ * 28-Jul-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added FRMPOW2SIGLVL, max_siglvl(), and cont_ad_t.siglvl.
+ *             Changed min signal energy/frame to CONT_AD_SPF.
+ * 
+ * 27-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added the option for cont_ad_read to return -1 on EOF.
+ * 
+ * 21-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added cont_ad_set_thresh().
+ *             Bugfix: n_other is recomputed after updating thresholds.
+ * 
+ * 20-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Separated thresholds for speech and silence.
+ *             Fixed bug in moving analysis window upon transition to speech state.
+ * 
+ * 17-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created, based loosely on Steve Reed's original implementation.
+ */
+
+/*
+ * This module is intended to be interposed as a filter between any raw A/D source and the
+ * application to remove silence regions.  It is initialized with a raw A/D source function
+ * (during the cont_ad_init call).  Filtered A/D data can be read by the application using
+ * the cont_ad_read function.  This module assumes that the A/D source function supplies an
+ * endless stream of data.  The application is responsible for setting up the A/D source,
+ * turning recording on and off as it desires.  It is also responsible for invoking the
+ * cont_ad_read function frequently enough to avoid buffer overruns and dropping A/D data.
+ * This continuous listening module has an internal buffer of about 4 sec.
+ * 
+ * This module must be initialized and calibrated at first (cont_ad_init and cont_ad_calib
+ * functions).  Raw samples are grouped into frames, the signal power in each frame is
+ * computed and accumulated in a histogram.  The module is always in one of two states:
+ * SILENCE or SPEECH.  Transitions between the two states are detected by looking for a
+ * contiguous window of several frames that is predominantly of the other type.  The type
+ * is determined by comparing frame power to either of two thresholds, thresh_sil and
+ * thresh_speech, as appropriate for the current state.  These thresholds are set from the
+ * first peak in the low-end of the power histogram, and are updated every few seconds.
+ * Separate thresholds are used to provide some hysteresis.
+ * 
+ * The module maintains a linked list of speech (non-silence) segments not yet read by the
+ * application.  The cont_ad_read function returns speech data, if any available, by
+ * following this list.  It also updates an "absolute" timestamp at the end of the
+ * cont_ad_read operation.  The timestamp indicates the total #samples of A/D data read
+ * until this point, including data discarded as silence frames.  The application is
+ * responsible for using this timestamp to make any policy decisions regarding utterance
+ * boundaries or whatever.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4305)
+#endif
+
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/ad.h"
+#include "sphinxbase/cont_ad.h"
+#include "sphinxbase/err.h"
+
+
+#ifndef _ABS
+#define _ABS(x) ((x) >= 0 ? (x) : -(x))
+#endif
+
+
+/* Various parameters, including defaults for many cont_ad_t member variables */
+
+#define CONT_AD_ADFRMSIZE      256     /* #Frames of internal A/D buffer maintained */
+
+#define CONT_AD_POWHISTSIZE    98      /* #Powhist bins: ~ FRMPOW(65536^2*CONT_AD_SPF) */
+/* Maximum level is 96.3 dB full-scale; 97 for safety, plus 1 for zero-based */
+
+#define CONT_AD_CALIB_FRAMES   (CONT_AD_POWHISTSIZE * 2)
+
+#define CONT_AD_THRESH_UPDATE  100     /* Update thresholds approx every so many frames */
+        /* PWP: update was 200 frames, or 3.2 seconds.  Now about every 1.6 sec. */
+
+#define CONT_AD_ADAPT_RATE     0.2     /* Interpolation of new and old noiselevel */
+
+#define CONT_AD_SPS             16000
+
+#define CONT_AD_DEFAULT_NOISE  30      /* Default background noise power level */
+#define CONT_AD_DELTA_SIL      10      /* Initial default for cont_ad_t.delta_sil */
+#define CONT_AD_DELTA_SPEECH   17      /* Initial default for cont_ad_t.delta_speech */
+#define CONT_AD_MIN_NOISE      2       /* Expected minimum background noise level */
+#define CONT_AD_MAX_NOISE      70      /* Maximum background noise level */
+
+#define CONT_AD_HIST_INERTIA   3       /* Used in decaying the power histogram */
+
+#define CONT_AD_WINSIZE                21      /* Analysis window for state transitions */
+                                /* rkm had 16 */
+
+#define CONT_AD_SPEECH_ONSET   9       /* Min #speech frames in analysis window for
+                                           SILENCE -> SPEECH state transition */
+/*
+ * SReed had 100 ms == 6.25 fr contiguous; rkm had 9 (out of 16+10) with a
+ * lower threshold.
+ */
+
+#define CONT_AD_SIL_ONSET      18      /* Min #silence frames in analysis window for
+                                           SPEECH -> SILENCE state transition
+                                           MUST BE <= CONT_AD_WINSIZE */
+/*
+ * SReed had 400 ms == 25 fr contiguous; rkm had 14 out of 16
+ */
+
+#define CONT_AD_LEADER         5       /* On transition to SPEECH state, so many frames
+                                           BEFORE window included in speech data (>0) */
+                                /* SReed had 200 ms == 12.5 fr; rkm had 5 */
+
+#define CONT_AD_TRAILER                10      /* On transition to SILENCE state, so many frames
+                                           of silence included in speech data (>0).
+                                           NOTE: Ensure (0 < TRAILER+LEADER <= WINSIZE) */
+                                /* SReed had 100 ms == 6.25 fr; rkm had 10 */
+
+
+void
+cont_ad_powhist_dump(FILE * fp, cont_ad_t * r)
+{
+    int32 i, j;
+
+    fprintf(fp, "PowHist:\n");
+    for (i = 0, j = 0; i < CONT_AD_POWHISTSIZE; i++) {
+        if (r->pow_hist[i] > 0) {
+            fprintf(fp, "\t%3d %6d\n", i, r->pow_hist[i]);
+            j = i;
+        }
+    }
+
+    fprintf(fp, "PH[%7.2f]:",
+            (double) (r->tot_frm * r->spf) / (double) (r->sps));
+    for (i = 0; i <= j; i++)
+        fprintf(fp, " %2d", r->pow_hist[i]);
+    fprintf(fp, "\n");
+
+    fflush(fp);
+}
+
+
+/*
+ * Compute frame power.  Interface deliberately kept low level to allow arbitrary
+ * users to call this function with appropriate data.
+ */
+int32
+cont_ad_frame_pow(int16 * buf, int32 * prev, int32 spf)
+{
+    double sumsq, v;
+    int32 i;
+    int32 p;
+
+    sumsq = 0.0;
+    p = *prev;
+    for (i = 0; i < spf; i++) {
+        /* Note: pre-emphasis done to remove low-frequency noise. */
+        v = (double) (buf[i] - p);
+        sumsq += v * v;
+        p = buf[i];
+    }
+    *prev = p;
+
+    if (sumsq < spf)            /* Make sure FRMPOW(sumsq) >= 0 */
+        sumsq = spf;
+
+    /*
+     * PWP: Units changed to dB
+     *
+     * Now the units of measurement of an input sample are volts (really!),
+     * so the power in dB is p = 20*log10(samp).  Further, we want the RMS
+     * (root-mean-squared) average power across the frame.
+     *
+     * "sumsq" is the sum of the sum of the squares, so we want
+     *
+     *   i = 20 * log10( sqrt ( sumsq / n_samps) )
+     *
+     * (Stephen Reed's code actually had 
+     *    i = 20 * log10( sqrt (sumsq) / n_samps )
+     *  but this only produced an additive error.)
+     *
+     * i = 20 * log10( sqrt ( sumsq / n_samps) )
+     *   = 20 * log10( ( sumsq / n_samps) ^ 0.5 )
+     *   = 20 * log10( ( sumsq / n_samps) ) * 0.5 )
+     *   = 10 * log10( ( sumsq / n_samps) )
+     *   = 10 * ( log10( sumsq) - log10(n_samps) )
+     */
+    i = (int32) ((10.0 * (log10(sumsq) - log10((double) spf))) + 0.5);
+    if (i < 0)
+        i = 0;                  /* trim lower bound again to be safe. */
+    assert(i < 97);
+
+    return (i);
+}
+
+
+/*
+ * Classify frame (id=frm, starting at sample position s) as sil/nonsil.  Classification
+ * done in isolation, independent of any other frame, based only on power histogram.
+ */
+static void
+compute_frame_pow(cont_ad_t * r, int32 frm)
+{
+    int32 i;
+
+    i = cont_ad_frame_pow(r->adbuf + (frm * r->spf), &(r->prev_sample),
+                          r->spf);
+
+    r->frm_pow[frm] = (char) i;
+    (r->pow_hist[i])++;
+    r->thresh_update--;
+}
+
+
+/* PWP: $$$ check this */
+/*
+ * PWP: in SReed's code, decay was done by zeroing the histogram,
+ * i.e. no history.
+ */
+static void
+decay_hist(cont_ad_t * r)
+{
+    int32 i;
+
+    for (i = 0; i < CONT_AD_POWHISTSIZE; i++)
+        r->pow_hist[i] -= (r->pow_hist[i] >> CONT_AD_HIST_INERTIA);
+}
+
+
+/*
+ * Find silence threshold from power histogram.
+ */
+static int32
+find_thresh(cont_ad_t * r)
+{
+    int32 i, j, max, th;
+    int32 old_noise_level, old_thresh_sil, old_thresh_speech;
+
+    if (!r->auto_thresh)
+        return 0;
+
+    /*
+     * Find smallest non-zero histogram entry, but starting at some minimum power.
+     * Power lower than CONT_AD_MIN_NOISE indicates bad A/D input (eg, mic off...).
+     * Too high a minimum power is also bad.
+     */
+    for (i = r->min_noise;
+         (i < CONT_AD_POWHISTSIZE) && (r->pow_hist[i] == 0); i++);
+    if (i > r->max_noise)       /* Bad signal? */
+        return -1;
+
+    /* PWP: Hmmmmm.... SReed's code looks over the lower 20 dB */
+    /* PWP: 1/14/98  Made to work like Stephen Reed's code */
+
+    /* This method of detecting the noise level is VERY unsatisfactory */
+    max = 0;
+    for (j = i, th = i; (j < CONT_AD_POWHISTSIZE) && (j < i + 20); j++) {       /* PWP: was i+6, which was 9 dB */
+        if (max < r->pow_hist[j]) {
+            max = r->pow_hist[j];
+            th = j;
+        }
+    }
+
+    /* "Don't change the threshold too fast" */
+    old_noise_level = r->noise_level;
+    old_thresh_sil = r->thresh_sil;
+    old_thresh_speech = r->thresh_speech;
+    /* r->noise_level = (int32) (th * r->adapt_rate + r->noise_level * (1.0 - r->adapt_rate)); */
+    r->noise_level =
+        (int32) (r->noise_level +
+                 r->adapt_rate * (th - r->noise_level) + 0.5);
+
+    /* update thresholds */
+    r->thresh_sil = r->noise_level + r->delta_sil;
+    r->thresh_speech = r->noise_level + r->delta_speech;
+
+    if (r->logfp) {
+        fprintf(r->logfp,
+                "%7.2fs %8df: NoisePeak: %d, Noiselevel: %d -> %d, Th-Sil: %d -> %d, Th-Sp: %d -> %d\n",
+                (double) (r->tot_frm * r->spf) / (double) (r->sps),
+                r->tot_frm, th, old_noise_level, r->noise_level,
+                old_thresh_sil, r->thresh_sil, old_thresh_speech,
+                r->thresh_speech);
+
+        cont_ad_powhist_dump(r->logfp, r);
+
+        fflush(r->logfp);
+    }
+
+    /*
+     * PWP: in SReed's original, he cleared the histogram here.
+     * I can't fathom why.
+     */
+
+    return 0;
+}
+
+
+/*
+ * Silence to speech transition
+ */
+static void
+sil2speech_transition(cont_ad_t *r, int frm)
+{
+    spseg_t *seg;
+
+    /* Speech detected; create speech segment description */
+    seg = malloc(sizeof(*seg));
+
+    seg->startfrm = r->win_startfrm - r->leader;
+    if (seg->startfrm < 0)
+        seg->startfrm += CONT_AD_ADFRMSIZE;
+    seg->nfrm = r->leader + r->winsize;
+    seg->next = NULL;
+
+    if (!r->spseg_head)
+        r->spseg_head = seg;
+    else
+        r->spseg_tail->next = seg;
+    r->spseg_tail = seg;
+
+    r->tail_state = CONT_AD_STATE_SPEECH;
+
+    if (r->logfp) {
+        int32 n;
+
+        /* Where (in absolute time) this speech segment starts */
+        n = frm - seg->startfrm;
+        if (n < 0)
+            n += CONT_AD_ADFRMSIZE;
+        n = r->tot_frm - n - 1;
+
+        fprintf(r->logfp,
+                "%7.2fs %8d[%3d]f: Sil -> Sp detect; seg start: %7.2fs %8d\n",
+                (double) (r->tot_frm *
+                          r->spf) /
+                (double) (r->sps),
+                r->tot_frm, frm,
+                (double) (n * r->spf) / (double) (r->sps), n);
+    }
+
+    /* Now in SPEECH state; want to look for silence from end of this window */
+    r->win_validfrm = 1;
+    r->win_startfrm = frm;
+
+    /* Count #sil frames remaining in reduced window (of 1 frame) */
+    r->n_other = (r->frm_pow[frm] <= r->thresh_sil) ? 1 : 0;
+}
+
+/*
+ * Speech to silence transition
+ */
+static void
+speech2sil_transition(cont_ad_t *r, int frm)
+{
+    int f;
+
+    /* End of speech detected; speech->sil transition */
+    r->spseg_tail->nfrm += r->trailer;
+
+    r->tail_state = CONT_AD_STATE_SIL;
+
+    if (r->logfp) {
+        int32 n;
+
+        /* Where (in absolute time) this speech segment ends */
+        n = r->spseg_tail->startfrm + r->spseg_tail->nfrm - 1;
+        if (n >= CONT_AD_ADFRMSIZE)
+            n -= CONT_AD_ADFRMSIZE;
+        n = frm - n;
+        if (n < 0)
+            n += CONT_AD_ADFRMSIZE;
+        n = r->tot_frm - n;
+
+        fprintf(r->logfp,
+                "%7.2fs %8d[%3d]f: Sp -> Sil detect; seg end: %7.2fs %8d\n",
+                (double) (r->tot_frm * r->spf) /
+                (double) (r->sps), r->tot_frm, frm,
+                (double) (n * r->spf) / (double) (r->sps), n);
+    }
+
+    /* Now in SILENCE state; start looking for speech trailer+leader frames later */
+    r->win_validfrm -= (r->trailer + r->leader - 1);
+    r->win_startfrm += (r->trailer + r->leader - 1);
+    if (r->win_startfrm >= CONT_AD_ADFRMSIZE)
+        r->win_startfrm -= CONT_AD_ADFRMSIZE;
+
+    /* Count #speech frames remaining in reduced window */
+    r->n_other = 0;
+    for (f = r->win_startfrm;;) {
+        if (r->frm_pow[f] >= r->thresh_speech)
+            r->n_other++;
+
+        if (f == frm)
+            break;
+
+        f++;
+        if (f >= CONT_AD_ADFRMSIZE)
+            f = 0;
+    }
+}
+
+
+/*
+ * Main silence/speech region detection routine.  If currently in
+ * SILENCE state, switch to SPEECH state if a window (r->winsize)
+ * of frames is mostly non-silence.  If in SPEECH state, switch to
+ * SILENCE state if the window is mostly silence.
+ */
+static void
+boundary_detect(cont_ad_t * r, int32 frm)
+{
+    assert(r->n_other >= 0);
+
+    r->win_validfrm++;
+    if (r->tail_state == CONT_AD_STATE_SIL) {
+        if (r->frm_pow[frm] >= r->thresh_speech)
+            r->n_other++;
+    }
+    else {
+        if (r->frm_pow[frm] <= r->thresh_sil)
+            r->n_other++;
+    }
+
+    if (r->logfp) {
+        fprintf(r->logfp,
+                "%7.2fs %8d[%3d]f: P: %2d, N: %2d, T+: %2d, T-: %2d, #O: %2d, %s\n",
+                (double) (r->tot_frm * r->spf) / (double) (r->sps),
+                r->tot_frm, frm, r->frm_pow[frm], r->noise_level,
+                r->thresh_speech, r->thresh_sil, r->n_other,
+                (r->tail_state == CONT_AD_STATE_SIL) ? "--" : "Sp");
+    }
+
+    if (r->win_validfrm < r->winsize)   /* Not reached full analysis window size */
+        return;
+    assert(r->win_validfrm == r->winsize);
+
+    if (r->tail_state == CONT_AD_STATE_SIL) {   /* Currently in SILENCE state */
+        if (r->n_frm >= r->winsize + r->leader
+            && r->n_other >= r->speech_onset) {
+            sil2speech_transition(r, frm);
+        }
+    }
+    else {
+        if (r->n_other >= r->sil_onset) {
+            speech2sil_transition(r, frm);
+        }
+        else {
+            /* In speech state, and staying there; add this frame to segment */
+            r->spseg_tail->nfrm++;
+        }
+    }
+
+    /*
+     * Get rid of oldest frame in analysis window.  Not quite correct;
+     * thresholds could have changed over the window; should preserve
+     * the original speech/silence label for the frame and undo it.  Later..
+     */
+    if (r->tail_state == CONT_AD_STATE_SIL) {
+        if (r->frm_pow[r->win_startfrm] >= r->thresh_speech) {
+            if (r->n_other > 0)
+                r->n_other--;
+        }
+    }
+    else {
+        if (r->frm_pow[r->win_startfrm] <= r->thresh_sil) {
+            if (r->n_other > 0)
+                r->n_other--;
+        }
+    }
+    r->win_validfrm--;
+    r->win_startfrm++;
+    if (r->win_startfrm >= CONT_AD_ADFRMSIZE)
+        r->win_startfrm = 0;
+
+    if (r->logfp)
+        fflush(r->logfp);
+}
+
+
+static int32
+max_siglvl(cont_ad_t * r, int32 startfrm, int32 nfrm)
+{
+    int32 siglvl, i, f;
+
+    siglvl = 0;
+    if (nfrm > 0) {
+        for (i = 0, f = startfrm; i < nfrm; i++, f++) {
+            if (f >= CONT_AD_ADFRMSIZE)
+                f -= CONT_AD_ADFRMSIZE;
+            if (r->frm_pow[f] > siglvl)
+                siglvl = r->frm_pow[f];
+        }
+    }
+    return siglvl;
+}
+
+
+#if 0
+/*
+ * RKM(2005/01/31): Where did this come from?  If needed, it should be called
+ * cont_ad_get_audio_data.
+ */
+void
+get_audio_data(cont_ad_t * r, int16 * buf, int32 max)
+{
+}
+#endif
+
+
+static void
+cont_ad_read_log(cont_ad_t * r, int32 retval)
+{
+    spseg_t *seg;
+
+    fprintf(r->logfp, "return from cont_ad_read() -> %d:\n", retval);
+    fprintf(r->logfp, "\tstate: %d\n", r->state);
+    fprintf(r->logfp, "\tread_ts: %d (%.2fs)\n",
+            r->read_ts, (float32) r->read_ts / (float32) r->sps);
+    fprintf(r->logfp, "\tseglen: %d (%.2fs)\n",
+            r->seglen, (float32) r->seglen / (float32) r->sps);
+    fprintf(r->logfp, "\tsiglvl: %d\n", r->siglvl);
+    fprintf(r->logfp, "\theadfrm: %d\n", r->headfrm);
+    fprintf(r->logfp, "\tn_frm: %d\n", r->n_frm);
+    fprintf(r->logfp, "\tn_sample: %d\n", r->n_sample);
+    fprintf(r->logfp, "\twin_startfrm: %d\n", r->win_startfrm);
+    fprintf(r->logfp, "\twin_validfrm: %d\n", r->win_validfrm);
+    fprintf(r->logfp, "\tnoise_level: %d\n", r->noise_level);
+    fprintf(r->logfp, "\tthresh_sil: %d\n", r->thresh_sil);
+    fprintf(r->logfp, "\tthresh_speech: %d\n", r->thresh_speech);
+    fprintf(r->logfp, "\tn_other: %d\n", r->n_other);
+    fprintf(r->logfp, "\ttail_state: %d\n", r->tail_state);
+    fprintf(r->logfp, "\ttot_frm: %d\n", r->tot_frm);
+
+    fprintf(r->logfp, "\tspseg:");
+    for (seg = r->spseg_head; seg; seg = seg->next)
+        fprintf(r->logfp, " %d[%d]", seg->startfrm, seg->nfrm);
+    fprintf(r->logfp, "\n");
+
+    fflush(r->logfp);
+}
+
+
+/*
+ * Copy data from r->adbuf[sf], for nf frames, into buf.
+ * All length checks must have been completed before this call; hence, this
+ * function will copy exactly the specified number of frames.
+ * 
+ * Return value: Index of frame just after the segment copied, possibly wrapped
+ * around to 0.
+ */
+static int32
+buf_copy(cont_ad_t * r, int32 sf, int32 nf, int16 * buf)
+{
+    int32 f, l;
+
+    assert((sf >= 0) && (sf < CONT_AD_ADFRMSIZE));
+    assert(nf >= 0);
+
+    if (sf + nf > CONT_AD_ADFRMSIZE) {
+        /* Amount to be copied wraps around adbuf; copy in two stages */
+        f = CONT_AD_ADFRMSIZE - sf;
+        l = (f * r->spf);
+        memcpy(buf, r->adbuf + (sf * r->spf), l * sizeof(int16));
+
+        if (r->logfp) {
+            fprintf(r->logfp,
+                    "return %d speech frames [%d..%d]; %d samples\n",
+                    f, sf, sf + f - 1, l);
+        }
+
+        buf += l;
+        sf = 0;
+        nf -= f;
+    }
+
+    if (nf > 0) {
+        l = (nf * r->spf);
+        memcpy(buf, r->adbuf + (sf * r->spf), l * sizeof(int16));
+
+        if (r->logfp) {
+            fprintf(r->logfp,
+                    "return %d speech frames [%d..%d]; %d samples\n",
+                    nf, sf, sf + nf - 1, l);
+        }
+    }
+
+    if ((sf + nf) >= CONT_AD_ADFRMSIZE) {
+        assert((sf + nf) == CONT_AD_ADFRMSIZE);
+        return 0;
+    }
+    else
+        return (sf + nf);
+}
+
+int32
+cont_ad_buffer_space(cont_ad_t *r)
+{
+    return r->adbufsize - r->n_sample;
+}
+
+/*
+ * Read as much data as possible from r->adfunc into r->adbuf.
+ */
+static int32
+cont_ad_read_internal(cont_ad_t *r, int16 *buf, int32 max)
+{
+    int32 head, tail, len, l;
+
+    /*
+     * First read as much of raw A/D as possible and available.  adbuf is not
+     * really a circular buffer, so may have to read in two steps for wrapping
+     * around.
+     */
+    head = r->headfrm * r->spf;
+    tail = head + r->n_sample;
+    len = r->n_sample - (r->n_frm * r->spf);    /* #partial frame samples at the tail */
+    assert((len >= 0) && (len < r->spf));
+
+    if ((tail < r->adbufsize) && (!r->eof)) {
+        if (r->adfunc) {
+            if ((l =
+                 (*(r->adfunc)) (r->ad, r->adbuf + tail,
+                                 r->adbufsize - tail)) < 0) {
+                r->eof = 1;
+                l = 0;
+            }
+        }
+        else {
+            l = r->adbufsize - tail;
+            if (l > max) {
+                l = max;
+                max = 0;
+            }
+            else {
+                max -= l;
+            }
+            memcpy(r->adbuf + tail, buf, l * sizeof(int16));
+            buf += l;
+        }
+        if ((l > 0) && r->rawfp) {
+            fwrite(r->adbuf + tail, sizeof(int16), l, r->rawfp);
+            fflush(r->rawfp);
+        }
+
+        tail += l;
+        len += l;
+        r->n_sample += l;
+    }
+    if ((tail >= r->adbufsize) && (!r->eof)) {
+        tail -= r->adbufsize;
+        if (tail < head) {
+            if (r->adfunc) {
+                if ((l =
+                     (*(r->adfunc)) (r->ad,
+                                     r->adbuf + tail, head - tail)) < 0) {
+                    r->eof = 1;
+                    l = 0;
+                }
+            }
+            else {
+                l = head - tail;
+                if (l > max)
+                    l = max;
+                memcpy(r->adbuf + tail, buf, l * sizeof(int16));
+            }
+            if ((l > 0) && r->rawfp) {
+                fwrite(r->adbuf + tail, sizeof(int16), l, r->rawfp);
+                fflush(r->rawfp);
+            }
+
+            tail += l;
+            len += l;
+            r->n_sample += l;
+        }
+    }
+
+    return len;
+}
+
+/*
+ * Classify incoming frames as silence or speech.
+ */
+int32
+cont_ad_classify(cont_ad_t *r, int32 len)
+{
+    int32 tailfrm;
+
+    tailfrm = (r->headfrm + r->n_frm);  /* Next free frame slot to be filled */
+    if (tailfrm >= CONT_AD_ADFRMSIZE)
+        tailfrm -= CONT_AD_ADFRMSIZE;
+
+    for (; len >= r->spf; len -= r->spf) {
+        compute_frame_pow(r, tailfrm);
+        r->n_frm++;
+        r->tot_frm++;
+
+        /*
+         * Find speech/sil state change, if any.  Also, if staying in speech state
+         * add this frame to current speech segment.
+         */
+        boundary_detect(r, tailfrm);
+
+        if (++tailfrm >= CONT_AD_ADFRMSIZE)
+            tailfrm = 0;
+
+        /* Update thresholds if time to do so */
+        if (r->thresh_update <= 0) {
+            int32 i, f;
+            find_thresh(r);
+            decay_hist(r);
+            r->thresh_update = CONT_AD_THRESH_UPDATE;
+
+#if 1
+            /*
+             * Since threshold has been updated, recompute r->n_other.
+             * (RKM: Is this really necessary?  Comment out??)
+             */
+            r->n_other = 0;
+            if (r->tail_state == CONT_AD_STATE_SIL) {
+                for (i = r->win_validfrm, f = r->win_startfrm; i > 0; --i) {
+                    if (r->frm_pow[f] >= r->thresh_speech)
+                        r->n_other++;
+
+                    f++;
+                    if (f >= CONT_AD_ADFRMSIZE)
+                        f = 0;
+                }
+            }
+            else {
+                for (i = r->win_validfrm, f = r->win_startfrm; i > 0; --i) {
+                    if (r->frm_pow[f] <= r->thresh_sil)
+                        r->n_other++;
+
+                    f++;
+                    if (f >= CONT_AD_ADFRMSIZE)
+                        f = 0;
+                }
+            }
+#endif
+        }
+    }
+
+    return r->tail_state;
+}
+
+/*
+ * Main function called by the application to filter out silence regions.
+ * Maintains a linked list of speech segments pointing into r->adbuf and feeds
+ * data to application from them.
+ */
+int32
+cont_ad_read(cont_ad_t * r, int16 * buf, int32 max)
+{
+    int32 flen, len, retval, newstate;
+    spseg_t *seg;
+
+    if ((r == NULL) || (buf == NULL))
+        return -1;
+
+    if (max < r->spf) {
+        E_ERROR
+            ("cont_ad_read requires buffer of at least %d samples\n",
+             r->spf);
+        return -1;
+    }
+
+    if (r->logfp) {
+        fprintf(r->logfp, "cont_ad_read(,, %d)\n", max);
+        fflush(r->logfp);
+    }
+
+    /* Read data from adfunc or from buf. */
+    len = cont_ad_read_internal(r, buf, max);
+
+    /* Compute frame power for unprocessed+new data and find speech/silence boundaries */
+    cont_ad_classify(r, len);
+
+    /*
+     * If eof on input data source, cleanup the final segment.
+     */
+    if (r->eof) {
+        if (r->tail_state == CONT_AD_STATE_SPEECH) {
+            /*
+             * Still inside a speech segment when input data got over.  Absort any
+             * remaining frames into the final speech segment.
+             */
+            assert(r->spseg_tail != NULL);
+
+            /* Absorb frames still in analysis window into final speech seg */
+            assert((r->win_validfrm >= 0)
+                   && (r->win_validfrm < r->winsize));
+            r->spseg_tail->nfrm += r->win_validfrm;
+
+            r->tail_state = CONT_AD_STATE_SIL;
+        }
+
+        r->win_startfrm += r->win_validfrm;
+        if (r->win_startfrm >= CONT_AD_ADFRMSIZE)
+            r->win_startfrm -= CONT_AD_ADFRMSIZE;
+        r->win_validfrm = 0;
+        r->n_other = 0;
+    }
+
+    /*
+     * At last ready to copy speech data, if any, into caller's buffer.  Raw
+     * speech data is segmented into alternating speech and silence segments.
+     * But any single call to cont_ad_read will never cross a speech/silence
+     * boundary.
+     */
+    seg = r->spseg_head;        /* first speech segment available, if any */
+
+    if ((seg == NULL) || (r->headfrm != seg->startfrm)) {
+        /*
+         * Either no speech data available, or inside a silence segment.  Find
+         * length of silence segment.
+         */
+        if (seg == NULL) {
+            assert(r->tail_state == CONT_AD_STATE_SIL);
+
+            flen =
+                (r->eof) ? r->n_frm : r->n_frm - (r->winsize +
+                                                  r->leader - 1);
+            if (flen < 0)
+                flen = 0;
+        }
+        else {
+            flen = seg->startfrm - r->headfrm;
+            if (flen < 0)
+                flen += CONT_AD_ADFRMSIZE;
+        }
+
+        if (r->rawmode) {
+            /* Restrict silence segment to user buffer size, integral #frames */
+            int32 f = max / r->spf;
+            if (flen > f)
+                flen = f;
+        }
+
+        newstate = CONT_AD_STATE_SIL;
+    }
+    else {
+        flen = max / r->spf;    /* truncate read-size to integral #frames */
+        if (flen > seg->nfrm)
+            flen = seg->nfrm;   /* truncate further to this segment size */
+
+        newstate = CONT_AD_STATE_SPEECH;
+    }
+
+    len = flen * r->spf;        /* #samples being consumed */
+
+    r->siglvl = max_siglvl(r, r->headfrm, flen);
+
+    if ((newstate == CONT_AD_STATE_SIL) && (!r->rawmode)) {
+        /* Skip silence data */
+        r->headfrm += flen;
+        if (r->headfrm >= CONT_AD_ADFRMSIZE)
+            r->headfrm -= CONT_AD_ADFRMSIZE;
+
+        retval = 0;             /* #samples being copied/returned */
+    }
+    else {
+        /* Copy speech/silence(in rawmode) data */
+        r->headfrm = buf_copy(r, r->headfrm, flen, buf);
+
+        retval = len;           /* #samples being copied/returned */
+    }
+
+    r->n_frm -= flen;
+    r->n_sample -= len;
+    assert((r->n_frm >= 0) && (r->n_sample >= 0));
+    assert(r->win_validfrm <= r->n_frm);
+
+    if (r->state == newstate)
+        r->seglen += len;
+    else
+        r->seglen = len;
+    r->state = newstate;
+
+    if (newstate == CONT_AD_STATE_SPEECH) {
+        seg->startfrm = r->headfrm;
+        assert(seg->startfrm >= 0);
+        seg->nfrm -= flen;
+
+        /* Free seg if empty and not recording into it */
+        if ((seg->nfrm == 0)
+            && (seg->next || (r->tail_state == CONT_AD_STATE_SIL))) {
+            r->spseg_head = seg->next;
+            if (seg->next == NULL)
+                r->spseg_tail = NULL;
+            free(seg);
+        }
+    }
+
+    /* Update timestamp.  Total raw A/D read - those remaining to be consumed */
+    r->read_ts = (r->tot_frm - r->n_frm) * r->spf;
+
+    if (retval == 0)
+        retval = (r->eof && (r->spseg_head == NULL)) ? -1 : 0;
+
+    if (r->logfp)
+        cont_ad_read_log(r, retval);
+
+    return retval;
+}
+
+
+/*
+ * Calibrate input channel for silence threshold.
+ */
+int32
+cont_ad_calib(cont_ad_t * r)
+{
+    int32 i, s, k, len, tailfrm;
+
+    if (r == NULL)
+        return -1;
+
+    /* clear histogram */
+    for (i = 0; i < CONT_AD_POWHISTSIZE; i++)
+        r->pow_hist[i] = 0;
+    tailfrm = r->headfrm + r->n_frm;
+    if (tailfrm >= CONT_AD_ADFRMSIZE)
+        tailfrm -= CONT_AD_ADFRMSIZE;
+    s = (tailfrm * r->spf);
+
+    for (r->n_calib_frame = 0;
+         r->n_calib_frame < CONT_AD_CALIB_FRAMES;
+         ++r->n_calib_frame) {
+        len = r->spf;
+        while (len > 0) {
+            /*Trouble */
+            if ((k = (*(r->adfunc)) (r->ad, r->adbuf + s, len)) < 0)
+                return -1;
+            len -= k;
+            s += k;
+        }
+        s -= r->spf;
+
+        compute_frame_pow(r, tailfrm);
+    }
+
+    r->thresh_update = CONT_AD_THRESH_UPDATE;
+    return find_thresh(r);
+}
+
+int32
+cont_ad_calib_size(cont_ad_t *r)
+{
+    return r->spf * CONT_AD_CALIB_FRAMES;
+}
+
+int32
+cont_ad_calib_loop(cont_ad_t * r, int16 * buf, int32 max)
+{
+    int32 i, s, len, tailfrm;
+
+    if (r->n_calib_frame == CONT_AD_CALIB_FRAMES) {
+        /* If calibration previously succeeded, then this is a
+         * recalibration, so start again. */
+        r->n_calib_frame = 0;
+        /* clear histogram */
+        for (i = 0; i < CONT_AD_POWHISTSIZE; i++)
+            r->pow_hist[i] = 0;
+    }
+
+    tailfrm = r->headfrm + r->n_frm;
+    if (tailfrm >= CONT_AD_ADFRMSIZE)
+        tailfrm -= CONT_AD_ADFRMSIZE;
+    s = (tailfrm * r->spf);
+
+    len = r->spf;
+    for (; r->n_calib_frame < CONT_AD_CALIB_FRAMES;
+         ++r->n_calib_frame) {
+        if (max < len)
+            return 1;
+        memcpy(r->adbuf + s, buf, len * sizeof(int16));
+        max -= len;
+        buf += len;
+        compute_frame_pow(r, tailfrm);
+    }
+
+    r->thresh_update = CONT_AD_THRESH_UPDATE;
+    return find_thresh(r);
+}
+
+
+/* PWP 1/14/98 -- modified for compatibility with old code */
+int32
+cont_ad_set_thresh(cont_ad_t * r, int32 sil, int32 speech)
+{
+    if (r == NULL)
+        return -1;
+
+    if ((sil < 0) || (speech < 0)) {
+        fprintf(stderr,
+                "cont_ad_set_thresh: invalid threshold arguments: %d, %d\n",
+                sil, speech);
+        return -1;
+    }
+    r->delta_sil = (3 * sil) / 2;
+    r->delta_speech = (3 * speech) / 2;
+
+    return 0;
+}
+
+
+/*
+ * PWP 1/14/98 -- set the changable params.
+ *
+ *   delta_sil, delta_speech, min_noise, and max_noise are in dB,
+ *   winsize, speech_onset, sil_onset, leader and trailer are in frames of
+ *   16 ms length (256 samples @ 16kHz sampling).
+ */
+int32
+cont_ad_set_params(cont_ad_t * r, int32 delta_sil,
+                   int32 delta_speech, int32 min_noise,
+                   int32 max_noise, int32 winsize,
+                   int32 speech_onset, int32 sil_onset, int32 leader,
+                   int32 trailer, float32 adapt_rate)
+{
+    if ((delta_sil < 0) || (delta_speech < 0) || (min_noise < 0)
+        || (max_noise < 0)) {
+        E_ERROR("threshold arguments: "
+                "%d, %d, %d, %d must all be >=0\n", delta_sil,
+                delta_speech, min_noise, max_noise);
+        return -1;
+    }
+
+    if ((speech_onset > winsize) || (speech_onset <= 0)
+        || (winsize <= 0)) {
+        E_ERROR
+            ("speech_onset, %d, must be <= winsize, %d, and both >0\n",
+             speech_onset, winsize);
+        return -1;
+    }
+
+    if ((sil_onset > winsize) || (sil_onset <= 0) || (winsize <= 0)) {
+        E_ERROR
+            ("sil_onset, %d, must be <= winsize, %d, and both >0\n",
+             sil_onset, winsize);
+        return -1;
+    }
+
+    if (((leader + trailer) > winsize) || (leader <= 0)
+        || (trailer <= 0)) {
+        E_ERROR
+            ("leader, %d, plus trailer, %d, must be <= winsize, %d, and both >0\n",
+             leader, trailer, winsize);
+        return -1;
+    }
+
+    if ((adapt_rate < 0.0) || (adapt_rate > 1.0)) {
+        E_ERROR("adapt_rate, %e; must be in range 0..1\n", adapt_rate);
+        return -1;
+    }
+
+    if (r == NULL)
+        return -1;
+
+    r->delta_sil = delta_sil;
+    r->delta_speech = delta_speech;
+    r->min_noise = min_noise;
+    r->max_noise = max_noise;
+
+    r->winsize = winsize;
+    r->speech_onset = speech_onset;
+    r->sil_onset = sil_onset;
+    r->leader = leader;
+    r->trailer = trailer;
+
+    r->adapt_rate = adapt_rate;
+
+    if (r->win_validfrm >= r->winsize)
+        r->win_validfrm = r->winsize - 1;
+
+    return 0;
+}
+
+
+/*
+ * PWP 1/14/98 -- get the changable params.
+ *
+ *   delta_sil, delta_speech, min_noise, and max_noise are in dB,
+ *   winsize, speech_onset, sil_onset, leader and trailer are in frames of
+ *   16 ms length (256 samples @ 16kHz sampling).
+ */
+int32
+cont_ad_get_params(cont_ad_t * r, int32 * delta_sil,
+                   int32 * delta_speech, int32 * min_noise,
+                   int32 * max_noise, int32 * winsize,
+                   int32 * speech_onset, int32 * sil_onset,
+                   int32 * leader, int32 * trailer, float32 * adapt_rate)
+{
+    if (!delta_sil || !delta_speech || !min_noise || !max_noise
+        || !winsize || !speech_onset || !sil_onset || !leader
+        || !trailer || !adapt_rate) {
+        fprintf(stderr, "cont_ad_get_params: some param slots are NULL\n");
+        return (-1);
+    }
+
+    if (r == NULL)
+        return -1;
+
+    *delta_sil = r->delta_sil;
+    *delta_speech = r->delta_speech;
+    *min_noise = r->min_noise;
+    *max_noise = r->max_noise;
+
+    *winsize = r->winsize;
+    *speech_onset = r->speech_onset;
+    *sil_onset = r->sil_onset;
+    *leader = r->leader;
+    *trailer = r->trailer;
+
+    *adapt_rate = r->adapt_rate;
+
+    return 0;
+}
+
+
+/*
+ * Reset, discarded any accumulated speech.
+ */
+int32
+cont_ad_reset(cont_ad_t * r)
+{
+    spseg_t *seg;
+
+    if (r == NULL)
+        return -1;
+
+    while (r->spseg_head) {
+        seg = r->spseg_head;
+        r->spseg_head = seg->next;
+        free(seg);
+    }
+    r->spseg_tail = NULL;
+
+    r->headfrm = 0;
+    r->n_frm = 0;
+    r->n_sample = 0;
+    r->win_startfrm = 0;
+    r->win_validfrm = 0;
+    r->n_other = 0;
+
+    r->tail_state = CONT_AD_STATE_SIL;
+
+    return 0;
+}
+
+
+int32
+cont_ad_close(cont_ad_t * cont)
+{
+    if (cont == NULL)
+        return -1;
+
+    cont_ad_reset(cont);        /* Frees any remaining speech segments */
+
+    free(cont->adbuf);
+    free(cont->pow_hist);
+    free(cont->frm_pow);
+    free(cont);
+
+    return 0;
+}
+
+
+int32
+cont_ad_detach(cont_ad_t * c)
+{
+    if (c == NULL)
+        return -1;
+
+    c->ad = NULL;
+    c->adfunc = NULL;
+    return 0;
+}
+
+
+int32
+cont_ad_attach(cont_ad_t * c, ad_rec_t * a,
+               int32(*func) (ad_rec_t *, int16 *, int32))
+{
+    if (c == NULL)
+        return -1;
+
+    c->ad = a;
+    c->adfunc = func;
+    c->eof = 0;
+
+    return 0;
+}
+
+
+int32
+cont_set_thresh(cont_ad_t * r, int32 silence, int32 speech)
+{
+    int32 i, f;
+
+    r->thresh_speech = speech;
+    r->thresh_sil = silence;
+
+    /* Since threshold has been updated, recompute r->n_other */
+    r->n_other = 0;
+    if (r->tail_state == CONT_AD_STATE_SIL) {
+        for (i = r->win_validfrm, f = r->win_startfrm; i > 0; --i) {
+            if (r->frm_pow[f] >= r->thresh_speech)
+                r->n_other++;
+
+            f++;
+            if (f >= CONT_AD_ADFRMSIZE)
+                f = 0;
+        }
+    }
+    else if (r->tail_state == CONT_AD_STATE_SPEECH) {
+        for (i = r->win_validfrm, f = r->win_startfrm; i > 0; --i) {
+            if (r->frm_pow[f] <= r->thresh_sil)
+                r->n_other++;
+
+            f++;
+            if (f >= CONT_AD_ADFRMSIZE)
+                f = 0;
+        }
+    }
+
+    return 0;
+}
+
+
+/*
+ * Set the file pointer for dumping the raw input audio stream.
+ */
+int32
+cont_ad_set_rawfp(cont_ad_t * r, FILE * fp)
+{
+    if (r == NULL)
+        return -1;
+
+    r->rawfp = fp;
+    return 0;
+}
+
+
+/*
+ * Set the file pointer for logging cont_ad progress.
+ */
+int32
+cont_ad_set_logfp(cont_ad_t * r, FILE * fp)
+{
+    if (r == NULL)
+        return -1;
+
+    r->logfp = fp;
+    return 0;
+}
+
+
+/*
+ * One-time initialization.
+ */
+cont_ad_t *
+cont_ad_init(ad_rec_t * a, int32(*func) (ad_rec_t *, int16 *, int32))
+{
+    cont_ad_t *r;
+
+    if ((r = malloc(sizeof(*r))) == NULL) {
+               E_ERROR_SYSTEM("allocation of cont_ad_t failed");
+        return NULL;
+    }
+
+    r->ad = a;
+    r->adfunc = func;
+    r->eof = 0;
+    r->rawmode = 0;
+
+    if (a != NULL)
+        r->sps = a->sps;
+    else
+        r->sps = CONT_AD_SPS;
+
+    /* Set samples/frame such that when sps=16000, spf=256 */
+    r->spf = (r->sps * 256) / CONT_AD_SPS;
+    r->adbufsize = CONT_AD_ADFRMSIZE * r->spf;
+
+    if ((r->adbuf = malloc(r->adbufsize * sizeof(*r->adbuf))) == NULL) {
+        E_ERROR_SYSTEM("allocation of audio buffer failed");
+        free(r);
+        return NULL;
+    }
+    if ((r->pow_hist =
+         calloc(CONT_AD_POWHISTSIZE, sizeof(*r->pow_hist))) == NULL) {
+        E_ERROR_SYSTEM("allocation of power history buffer failed");
+        free(r->adbuf);
+        free(r);
+        return NULL;
+    }
+    if ((r->frm_pow =
+         calloc(CONT_AD_ADFRMSIZE, sizeof(*r->frm_pow))) == NULL) {
+        E_ERROR_SYSTEM("allocation of frame power buffer failed");
+        free(r->pow_hist);
+        free(r->adbuf);
+        free(r);
+        return NULL;
+    }
+
+    r->state = CONT_AD_STATE_SIL;
+    r->read_ts = 0;
+    r->seglen = 0;
+    r->siglvl = 0;
+    r->prev_sample = 0;
+    r->tot_frm = 0;
+    r->noise_level = CONT_AD_DEFAULT_NOISE;
+
+    r->auto_thresh = 1;
+    r->delta_sil = CONT_AD_DELTA_SIL;
+    r->delta_speech = CONT_AD_DELTA_SPEECH;
+    r->min_noise = CONT_AD_MIN_NOISE;
+    r->max_noise = CONT_AD_MAX_NOISE;
+    r->winsize = CONT_AD_WINSIZE;
+    r->speech_onset = CONT_AD_SPEECH_ONSET;
+    r->sil_onset = CONT_AD_SIL_ONSET;
+    r->leader = CONT_AD_LEADER;
+    r->trailer = CONT_AD_TRAILER;
+
+    r->thresh_sil = r->noise_level + r->delta_sil;
+    r->thresh_speech = r->noise_level + r->delta_speech;
+    r->thresh_update = CONT_AD_THRESH_UPDATE;
+    r->adapt_rate = CONT_AD_ADAPT_RATE;
+
+    r->tail_state = CONT_AD_STATE_SIL;
+
+    r->spseg_head = NULL;
+    r->spseg_tail = NULL;
+
+    r->rawfp = NULL;
+    r->logfp = NULL;
+
+    r->n_calib_frame = 0;
+
+    cont_ad_reset(r);
+
+    return r;
+}
+
+
+cont_ad_t *
+cont_ad_init_rawmode(ad_rec_t * a,
+                     int32(*func) (ad_rec_t *, int16 *, int32))
+{
+    cont_ad_t *r;
+
+    r = cont_ad_init(a, func);
+    r->rawmode = 1;
+
+    return r;
+}
diff --git a/src/libsphinxad/play_win32.c b/src/libsphinxad/play_win32.c
new file mode 100644 (file)
index 0000000..b2a29d3
--- /dev/null
@@ -0,0 +1,418 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/*
+ * HISTORY
+ * 
+ * 17-Apr-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ad_open_play_sps(), and made ad_open_play() call it.
+ * 
+ * 10-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ad_play_t type to all calls.
+ * 
+ * 03-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+
+#include <windows.h>
+#include <mmsystem.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/ad.h"
+
+
+#define WO_BUFSIZE     3200    /* Samples/buf */
+#define N_WO_BUF       2       /* #Playback bufs */
+
+/* Silvio Moioli: using OutputDebugStringW instead of OutputDebugString */
+#ifdef _WIN32_WCE
+#include "ckd_alloc.h"
+static void
+waveout_error(char *src, int32 ret)
+{
+    TCHAR errbuf[512];
+    wchar_t* werrbuf;
+    size_t len;
+
+    waveOutGetErrorText(ret, errbuf, sizeof(errbuf));
+    len = mbstowcs(NULL, errbuf, 0) + 1;
+    werrbuf = ckd_calloc(len, sizeof(*werrbuf));
+    mbstowcs(werrbuf, errbuf, len);
+
+    OutputDebugStringW(werrbuf);
+ }
+
+#else
+static void
+waveout_error(char *src, int32 ret)
+{
+    char errbuf[1024];
+
+    waveOutGetErrorText(ret, errbuf, sizeof(errbuf));
+    fprintf(stderr, "%s error %d: %s\n", src, ret, errbuf);
+}
+#endif
+
+
+static void
+waveout_free_buf(ad_wbuf_t * b)
+{
+    GlobalUnlock(b->h_whdr);
+    GlobalFree(b->h_whdr);
+    GlobalUnlock(b->h_buf);
+    GlobalFree(b->h_buf);
+}
+
+
+static int32
+waveout_alloc_buf(ad_wbuf_t * b, int32 samples_per_buf)
+{
+    HGLOBAL h_buf;
+    LPSTR p_buf;
+    HGLOBAL h_whdr;
+    LPWAVEHDR p_whdr;
+
+    /* Allocate data buffer */
+    h_buf =
+        GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE,
+                    samples_per_buf * sizeof(int16));
+    if (!h_buf) {
+        fprintf(stderr, "GlobalAlloc failed\n");
+        return -1;
+    }
+    if ((p_buf = GlobalLock(h_buf)) == NULL) {
+        GlobalFree(h_buf);
+        fprintf(stderr, "GlobalLock failed\n");
+        return -1;
+    }
+
+    /* Allocate WAVEHDR structure */
+    h_whdr = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, sizeof(WAVEHDR));
+    if (h_whdr == NULL) {
+        GlobalUnlock(h_buf);
+        GlobalFree(h_buf);
+
+        fprintf(stderr, "GlobalAlloc failed\n");
+        return -1;
+    }
+    if ((p_whdr = GlobalLock(h_whdr)) == NULL) {
+        GlobalUnlock(h_buf);
+        GlobalFree(h_buf);
+        GlobalFree(h_whdr);
+
+        fprintf(stderr, "GlobalLock failed\n");
+        return -1;
+    }
+
+    b->h_buf = h_buf;
+    b->p_buf = p_buf;
+    b->h_whdr = h_whdr;
+    b->p_whdr = p_whdr;
+
+    p_whdr->lpData = p_buf;
+    p_whdr->dwBufferLength = samples_per_buf * sizeof(int16);
+    p_whdr->dwUser = 0L;
+    p_whdr->dwFlags = 0L;
+    p_whdr->dwLoops = 0L;
+
+    return 0;
+}
+
+
+static int32
+waveout_enqueue_buf(HWAVEOUT h, LPWAVEHDR whdr)
+{
+    int32 st;
+
+    if ((st = waveOutPrepareHeader(h, whdr, sizeof(WAVEHDR))) != 0) {
+        waveout_error("waveOutPrepareHeader", st);
+        return -1;
+    }
+
+    if ((st = waveOutWrite(h, whdr, sizeof(WAVEHDR))) != 0) {
+        waveout_error("waveOutWrite", st);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+static HWAVEOUT
+waveout_open(int32 samples_per_sec, int32 bytes_per_sample)
+{
+    WAVEFORMATEX wfmt;
+    int32 st;
+    HWAVEOUT h;
+
+    if (bytes_per_sample != sizeof(int16)) {
+        fprintf(stderr, "bytes/sample != %d\n", sizeof(int16));
+        return NULL;
+    }
+
+    wfmt.wFormatTag = WAVE_FORMAT_PCM;
+    wfmt.nChannels = 1;
+    wfmt.nSamplesPerSec = samples_per_sec;
+    wfmt.nAvgBytesPerSec = samples_per_sec * bytes_per_sample;
+    wfmt.nBlockAlign = bytes_per_sample;
+    wfmt.wBitsPerSample = 8 * bytes_per_sample;
+    wfmt.cbSize = 0;
+
+    /* There should be a check here for a device of the desired type; later... */
+
+    st = waveOutOpen((LPHWAVEOUT) & h, WAVE_MAPPER,
+                     (LPWAVEFORMATEX) & wfmt, (DWORD) 0L, 0L,
+                     (DWORD) CALLBACK_NULL);
+    if (st != 0) {
+        waveout_error("waveOutOpen", st);
+        return NULL;
+    }
+
+    return h;
+}
+
+
+static void
+waveout_mem_cleanup(ad_play_t * p, int32 n_buf)
+{
+    int32 i;
+
+    for (i = 0; i < n_buf; i++)
+        waveout_free_buf(&(p->wo_buf[i]));
+    if (p->wo_buf)
+        free(p->wo_buf);
+    if (p->busy)
+        free(p->busy);
+}
+
+
+static int32
+waveout_close(ad_play_t * p)
+{
+    int32 st;
+
+    waveout_mem_cleanup(p, N_WO_BUF);
+
+    if ((st = waveOutClose(p->h_waveout)) != 0) {
+        waveout_error("waveOutClose", st);
+        return -1;
+    }
+
+    free(p);
+
+    return 0;
+}
+
+
+ad_play_t *
+ad_open_play_sps(int32 sps)
+{
+    ad_play_t *p;
+    int32 i;
+    HWAVEOUT h;
+
+    if ((h = waveout_open(sps, sizeof(int16))) == NULL)
+        return NULL;
+
+    if ((p = (ad_play_t *) calloc(1, sizeof(ad_play_t))) == NULL) {
+        fprintf(stderr, "calloc(1,%d) failed\n", sizeof(ad_play_t));
+        waveOutClose(h);
+        return NULL;
+    }
+    if ((p->wo_buf =
+         (ad_wbuf_t *) calloc(N_WO_BUF, sizeof(ad_wbuf_t))) == NULL) {
+        fprintf(stderr, "calloc(%d,%d) failed\n", N_WO_BUF,
+                sizeof(ad_wbuf_t));
+        free(p);
+        waveOutClose(h);
+
+        return NULL;
+    }
+    if ((p->busy = (char *) calloc(N_WO_BUF, sizeof(char))) == NULL) {
+        fprintf(stderr, "calloc(%d,%d) failed\n", N_WO_BUF, sizeof(char));
+        waveout_mem_cleanup(p, 0);
+        free(p);
+        waveOutClose(h);
+
+        return NULL;
+    }
+    for (i = 0; i < N_WO_BUF; i++) {
+        if (waveout_alloc_buf(&(p->wo_buf[i]), WO_BUFSIZE) < 0) {
+            waveout_mem_cleanup(p, i);
+            free(p);
+            waveOutClose(h);
+
+            return NULL;
+        }
+    }
+
+    p->h_waveout = h;
+    p->playing = 0;
+    p->opened = 1;
+    p->nxtbuf = 0;
+    p->sps = sps;
+    p->bps = sizeof(int16);     /* HACK!! Hardwired value for bytes/sec */
+
+    return p;
+}
+
+
+ad_play_t *
+ad_open_play(void)
+{
+    return (ad_open_play_sps(DEFAULT_SAMPLES_PER_SEC));
+}
+
+
+int32
+ad_close_play(ad_play_t * p)
+{
+    if (!p->opened)
+        return 0;
+
+    if (p->playing)
+        if (ad_stop_play(p) < 0)
+            return -1;
+
+    if (waveout_close(p) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+int32
+ad_start_play(ad_play_t * p)
+{
+    int32 i;
+
+    if ((!p->opened) || p->playing)
+        return -1;
+
+    for (i = 0; i < N_WO_BUF; i++)
+        p->busy[i] = 0;
+    p->nxtbuf = 0;
+    p->playing = 1;
+
+    return 0;
+}
+
+
+int32
+ad_stop_play(ad_play_t * p)
+{
+    int32 i, st;
+    LPWAVEHDR whdr;
+
+    if ((!p->opened) || (!p->playing))
+        return -1;
+
+#if 0
+    whdr->dwUser = (plen <= 0) ? 1 : 0;
+#endif
+
+    /* Wait for all buffers to be emptied and unprepare them */
+    for (i = 0; i < N_WO_BUF; i++) {
+        whdr = p->wo_buf[i].p_whdr;
+
+        while (p->busy[i] && (!(whdr->dwFlags & WHDR_DONE)))
+            Sleep(100);
+
+        st = waveOutUnprepareHeader(p->h_waveout, whdr, sizeof(WAVEHDR));
+        if (st != 0) {
+            waveout_error("waveOutUnprepareHeader", st);
+            return -1;
+        }
+
+        p->busy[i] = 0;
+    }
+
+    return 0;
+}
+
+
+int32
+ad_write(ad_play_t * p, int16 * buf, int32 size)
+{
+    int32 i, k, len, st;
+    LPWAVEHDR whdr;
+
+    if ((!p->opened) || (!p->playing))
+        return -1;
+
+    len = 0;
+
+    for (i = 0; (i < N_WO_BUF) && (size > 0); i++) {
+        whdr = p->wo_buf[p->nxtbuf].p_whdr;
+
+        if (p->busy[p->nxtbuf]) {
+            if (!(whdr->dwFlags & WHDR_DONE))
+                return len;
+
+            st = waveOutUnprepareHeader(p->h_waveout, whdr,
+                                        sizeof(WAVEHDR));
+            if (st != 0) {
+                waveout_error("waveOutUnprepareHeader", st);
+                return -1;
+            }
+
+            p->busy[p->nxtbuf] = 0;
+        }
+
+        k = (size > WO_BUFSIZE) ? WO_BUFSIZE : size;
+
+        whdr->dwBufferLength = k * sizeof(int16);
+        memcpy(whdr->lpData, (LPSTR) buf, k * sizeof(int16));
+
+        if (waveout_enqueue_buf(p->h_waveout, whdr) < 0)
+            return -1;
+
+        buf += k;
+        size -= k;
+        len += k;
+
+        p->busy[(p->nxtbuf)++] = 1;
+        if (p->nxtbuf >= N_WO_BUF)
+            p->nxtbuf = 0;
+    }
+
+    return len;
+}
diff --git a/src/libsphinxad/rec_win32.c b/src/libsphinxad/rec_win32.c
new file mode 100644 (file)
index 0000000..3d5d2ca
--- /dev/null
@@ -0,0 +1,472 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/*
+ * rec.c -- low level audio recording for Windows NT/95.
+ *
+ * HISTORY
+ * 
+ * 19-Jan-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added AD_ return codes.  Added ad_open_sps_bufsize(), and
+ *             ad_rec_t.n_buf.
+ * 
+ * 07-Mar-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ad_open_sps(), and made ad_open() call it.
+ * 
+ * 10-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ad_rec_t type to all calls.
+ * 
+ * 03-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+
+#include <windows.h>
+#include <mmsystem.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/ad.h"
+
+
+#define DEFAULT_N_WI_BUF       32      /* #Recording bufs */
+#define WI_BUFSIZE             2500    /* Samples/buf (Why this specific value??
+                                           So that at reasonable sampling rates
+                                           data is returned frequently enough.) */
+
+/* Silvio Moioli: using OutputDebugStringW instead of OutputDebugString */
+#ifdef _WIN32_WCE
+#include "ckd_alloc.h"
+static void
+wavein_error(char *src, int32 ret)
+{
+    TCHAR errbuf[512];
+    wchar_t* werrbuf;
+    size_t len;
+
+    waveOutGetErrorText(ret, errbuf, sizeof(errbuf));
+    len = mbstowcs(NULL, errbuf, 0) + 1;
+    werrbuf = ckd_calloc(len, sizeof(*werrbuf));
+    mbstowcs(werrbuf, errbuf, len);
+
+    OutputDebugStringW(werrbuf);
+}
+
+#else
+static void
+wavein_error(char *src, int32 ret)
+{
+    char errbuf[1024];
+
+    waveInGetErrorText(ret, errbuf, sizeof(errbuf));
+    fprintf(stderr, "%s error %d: %s\n", src, ret, errbuf);
+}
+#endif
+
+
+static void
+wavein_free_buf(ad_wbuf_t * b)
+{
+    GlobalUnlock(b->h_whdr);
+    GlobalFree(b->h_whdr);
+    GlobalUnlock(b->h_buf);
+    GlobalFree(b->h_buf);
+}
+
+
+static int32
+wavein_alloc_buf(ad_wbuf_t * b, int32 samples_per_buf)
+{
+    HGLOBAL h_buf;              /* handle to data buffer */
+    LPSTR p_buf;                /* pointer to data buffer */
+    HGLOBAL h_whdr;             /* handle to header */
+    LPWAVEHDR p_whdr;           /* pointer to header */
+
+    /* Allocate data buffer */
+    h_buf =
+        GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE,
+                    samples_per_buf * sizeof(int16));
+    if (!h_buf) {
+        fprintf(stderr, "GlobalAlloc failed\n");
+        return -1;
+    }
+    if ((p_buf = GlobalLock(h_buf)) == NULL) {
+        GlobalFree(h_buf);
+        fprintf(stderr, "GlobalLock failed\n");
+        return -1;
+    }
+
+    /* Allocate WAVEHDR structure */
+    h_whdr = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, sizeof(WAVEHDR));
+    if (h_whdr == NULL) {
+        GlobalUnlock(h_buf);
+        GlobalFree(h_buf);
+
+        fprintf(stderr, "GlobalAlloc failed\n");
+        return -1;
+    }
+    if ((p_whdr = GlobalLock(h_whdr)) == NULL) {
+        GlobalUnlock(h_buf);
+        GlobalFree(h_buf);
+        GlobalFree(h_whdr);
+
+        fprintf(stderr, "GlobalLock failed\n");
+        return -1;
+    }
+
+    b->h_buf = h_buf;
+    b->p_buf = p_buf;
+    b->h_whdr = h_whdr;
+    b->p_whdr = p_whdr;
+
+    p_whdr->lpData = p_buf;
+    p_whdr->dwBufferLength = samples_per_buf * sizeof(int16);
+    p_whdr->dwUser = 0L;
+    p_whdr->dwFlags = 0L;
+    p_whdr->dwLoops = 0L;
+
+    return 0;
+}
+
+
+static int32
+wavein_enqueue_buf(HWAVEIN h, LPWAVEHDR whdr)
+{
+    int32 st;
+
+    if ((st = waveInPrepareHeader(h, whdr, sizeof(WAVEHDR))) != 0) {
+        wavein_error("waveInPrepareHeader", st);
+        return -1;
+    }
+    if ((st = waveInAddBuffer(h, whdr, sizeof(WAVEHDR))) != 0) {
+        wavein_error("waveInAddBuffer", st);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+static HWAVEIN
+wavein_open(int32 samples_per_sec, int32 bytes_per_sample)
+{
+    WAVEFORMATEX wfmt;
+    int32 st;
+    HWAVEIN h;
+
+    if (bytes_per_sample != sizeof(int16)) {
+        fprintf(stderr, "bytes/sample != %d\n", sizeof(int16));
+        return NULL;
+    }
+
+    wfmt.wFormatTag = WAVE_FORMAT_PCM;
+    wfmt.nChannels = 1;
+    wfmt.nSamplesPerSec = samples_per_sec;
+    wfmt.nAvgBytesPerSec = samples_per_sec * bytes_per_sample;
+    wfmt.nBlockAlign = bytes_per_sample;
+    wfmt.wBitsPerSample = 8 * bytes_per_sample;
+
+    /* There should be a check here for a device of the desired type; later... */
+
+    st = waveInOpen((LPHWAVEIN) & h, WAVE_MAPPER,
+                    (LPWAVEFORMATEX) & wfmt, (DWORD) 0L, 0L,
+                    (DWORD) CALLBACK_NULL);
+    if (st != 0) {
+        wavein_error("waveInOpen", st);
+        return NULL;
+    }
+
+    return h;
+}
+
+
+static int32
+wavein_close(ad_rec_t * r)
+{
+    int32 i, st;
+
+    /* Unprepare all buffers; multiple unprepares of the same buffer are benign */
+    for (i = 0; i < r->n_buf; i++) {
+        /* Unpreparing an unprepared buffer, on the other hand, fails
+           on Win98/WinME, though this is not documented - dhuggins@cs,
+           2004-07-14 */
+        if (!(r->wi_buf[i].p_whdr->dwFlags & WHDR_PREPARED))
+            continue;
+        st = waveInUnprepareHeader(r->h_wavein,
+                                   r->wi_buf[i].p_whdr, sizeof(WAVEHDR));
+        if (st != 0) {
+            wavein_error("waveInUnprepareHeader", st);
+            return -1;
+        }
+    }
+
+    /* Free buffers */
+    for (i = 0; i < r->n_buf; i++)
+        wavein_free_buf(&(r->wi_buf[i]));
+    free(r->wi_buf);
+
+    if ((st = waveInClose(r->h_wavein)) != 0) {
+        wavein_error("waveInClose", st);
+        return -1;
+    }
+
+    free(r);
+
+    return 0;
+}
+
+
+ad_rec_t *
+ad_open_sps_bufsize(int32 sps, int32 bufsize_msec)
+{
+    ad_rec_t *r;
+    int32 i, j;
+    HWAVEIN h;
+
+    if ((h = wavein_open(sps, sizeof(int16))) == NULL)
+        return NULL;
+
+    if ((r = (ad_rec_t *) malloc(sizeof(ad_rec_t))) == NULL) {
+        fprintf(stderr, "malloc(%d) failed\n", sizeof(ad_rec_t));
+        waveInClose(h);
+        return NULL;
+    }
+
+    r->n_buf = ((sps * bufsize_msec) / 1000) / WI_BUFSIZE;
+    if (r->n_buf < DEFAULT_N_WI_BUF)
+        r->n_buf = DEFAULT_N_WI_BUF;
+    printf("Allocating %d buffers of %d samples each\n", r->n_buf,
+           WI_BUFSIZE);
+
+    if ((r->wi_buf =
+         (ad_wbuf_t *) calloc(r->n_buf, sizeof(ad_wbuf_t))) == NULL) {
+        fprintf(stderr, "calloc(%d,%d) failed\n", r->n_buf,
+                sizeof(ad_wbuf_t));
+        free(r);
+        waveInClose(h);
+
+        return NULL;
+    }
+    for (i = 0; i < r->n_buf; i++) {
+        if (wavein_alloc_buf(&(r->wi_buf[i]), WI_BUFSIZE) < 0) {
+            for (j = 0; j < i; j++)
+                wavein_free_buf(&(r->wi_buf[j]));
+            free(r->wi_buf);
+            free(r);
+            waveInClose(h);
+
+            return NULL;
+        }
+    }
+
+    r->h_wavein = h;
+    r->opened = 1;
+    r->recording = 0;
+    r->curbuf = r->n_buf - 1;   /* current buffer with data for application */
+    r->curlen = 0;              /* #samples in curbuf remaining to be consumed */
+    r->lastbuf = r->curbuf;
+    r->sps = sps;
+    r->bps = sizeof(int16);     /* HACK!! Hardwired value for bytes/sec */
+
+    return r;
+}
+
+/* FIXME: Dummy function, doesn't actually use dev. */
+ad_rec_t *
+ad_open_dev(const char *dev, int32 sps)
+{
+    return (ad_open_sps_bufsize
+            (sps, WI_BUFSIZE * DEFAULT_N_WI_BUF * 1000 / sps));
+}
+
+
+ad_rec_t *
+ad_open_sps(int32 sps)
+{
+    return (ad_open_sps_bufsize
+            (sps, WI_BUFSIZE * DEFAULT_N_WI_BUF * 1000 / sps));
+}
+
+
+ad_rec_t *
+ad_open(void)
+{
+    return (ad_open_sps(DEFAULT_SAMPLES_PER_SEC));      /* HACK!! Rename this constant */
+}
+
+
+int32
+ad_close(ad_rec_t * r)
+{
+    if (!r->opened)
+        return AD_ERR_NOT_OPEN;
+
+    if (r->recording)
+        if (ad_stop_rec(r) < 0)
+            return AD_ERR_WAVE;
+
+    if (wavein_close(r) < 0)
+        return AD_ERR_WAVE;
+
+    return 0;
+}
+
+
+int32
+ad_start_rec(ad_rec_t * r)
+{
+    int32 i;
+
+    if ((!r->opened) || r->recording)
+        return -1;
+
+    for (i = 0; i < r->n_buf; i++)
+        if (wavein_enqueue_buf(r->h_wavein, r->wi_buf[i].p_whdr) < 0)
+            return AD_ERR_WAVE;
+    r->curbuf = r->n_buf - 1;   /* current buffer with data for application */
+    r->curlen = 0;              /* #samples in curbuf remaining to be consumed */
+
+    if (waveInStart(r->h_wavein) != 0)
+        return AD_ERR_WAVE;
+
+    r->recording = 1;
+
+    return 0;
+}
+
+
+int32
+ad_stop_rec(ad_rec_t * r)
+{
+    int32 i, st;
+
+    if ((!r->opened) || (!r->recording))
+        return -1;
+
+    if (waveInStop(r->h_wavein) != 0)
+        return AD_ERR_WAVE;
+
+    if ((st = waveInReset(r->h_wavein)) != 0) {
+        wavein_error("waveInReset", st);
+        return AD_ERR_WAVE;
+    }
+
+    /* Wait until all buffers marked done */
+    for (i = 0; i < r->n_buf; i++)
+        while (!(r->wi_buf[i].p_whdr->dwFlags & WHDR_DONE));
+
+    if ((r->lastbuf = r->curbuf - 1) < 0)
+        r->lastbuf = r->n_buf - 1;
+
+    r->recording = 0;
+
+    return 0;
+}
+
+
+int32
+ad_read(ad_rec_t * r, int16 * buf, int32 max)
+{
+    int32 t, st, len;
+    LPWAVEHDR whdr;
+    int16 *sysbufp;
+
+    if (!r->opened)
+        return AD_ERR_NOT_OPEN;
+
+    /* Check if all recorded data exhausted */
+    if ((!r->recording) && (r->curbuf == r->lastbuf)
+        && (r->curlen == 0))
+        return AD_EOF;
+
+    len = 0;
+    while (max > 0) {
+        /* Look for next buffer with recording data */
+        if (r->curlen == 0) {
+            /* No current buffer with data; get next buffer in sequence if available */
+            t = r->curbuf + 1;
+            if (t >= r->n_buf)
+                t = 0;
+
+            if (!(r->wi_buf[t].p_whdr->dwFlags & WHDR_DONE))
+                return len;
+
+            r->curbuf = t;
+            r->curlen = r->wi_buf[t].p_whdr->dwBytesRecorded >> 1;
+            r->curoff = 0;
+        }
+
+        /* Copy data from curbuf to buf */
+        whdr = r->wi_buf[r->curbuf].p_whdr;
+        t = (max < r->curlen) ? max : r->curlen;        /* #Samples to copy */
+
+        if (t > 0) {
+            sysbufp = (int16 *) (whdr->lpData);
+            memcpy(buf, sysbufp + r->curoff, t * sizeof(int16));
+
+            buf += t;
+            max -= t;
+            r->curoff += t;
+            r->curlen -= t;
+            len += t;
+        }
+
+        /* If curbuf empty recycle it to system if still recording */
+        if (r->curlen == 0) {
+            if (r->recording) {
+                /* Return empty buffer to system */
+                st = waveInUnprepareHeader(r->h_wavein,
+                                           whdr, sizeof(WAVEHDR));
+                if (st != 0) {
+                    wavein_error("waveInUnprepareHeader", st);
+                    return AD_ERR_WAVE;
+                }
+
+                if (wavein_enqueue_buf(r->h_wavein, whdr) < 0)
+                    return AD_ERR_WAVE;
+
+            }
+            else if (r->curbuf == r->lastbuf) {
+                return len;
+            }
+        }
+    }
+
+    return len;
+}
diff --git a/src/libsphinxbase/Makefile.am b/src/libsphinxbase/Makefile.am
new file mode 100644 (file)
index 0000000..52ee3e1
--- /dev/null
@@ -0,0 +1,14 @@
+SUBDIRS = util fe feat lm
+
+lib_LTLIBRARIES = libsphinxbase.la
+
+libsphinxbase_la_SOURCES =
+# Confusing libtool version info means:
+#
+# This is API version 2, software release 1, which also supports API version 1
+libsphinxbase_la_LDFLAGS = -version-info 2:1:1
+libsphinxbase_la_LIBADD = $(LTLIBICONV) \
+       util/libsphinxutil.la \
+       fe/libsphinxfe.la \
+       feat/libsphinxfeat.la \
+       lm/libsphinxlm.la
diff --git a/src/libsphinxbase/Makefile.in b/src/libsphinxbase/Makefile.in
new file mode 100644 (file)
index 0000000..5a0d1f2
--- /dev/null
@@ -0,0 +1,587 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = src/libsphinxbase
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libsphinxbase_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       util/libsphinxutil.la fe/libsphinxfe.la feat/libsphinxfeat.la \
+       lm/libsphinxlm.la
+am_libsphinxbase_la_OBJECTS =
+libsphinxbase_la_OBJECTS = $(am_libsphinxbase_la_OBJECTS)
+libsphinxbase_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libsphinxbase_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libsphinxbase_la_SOURCES)
+DIST_SOURCES = $(libsphinxbase_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = util fe feat lm
+lib_LTLIBRARIES = libsphinxbase.la
+libsphinxbase_la_SOURCES = 
+# Confusing libtool version info means:
+#
+# This is API version 2, software release 1, which also supports API version 1
+libsphinxbase_la_LDFLAGS = -version-info 2:1:1
+libsphinxbase_la_LIBADD = $(LTLIBICONV) \
+       util/libsphinxutil.la \
+       fe/libsphinxfe.la \
+       feat/libsphinxfeat.la \
+       lm/libsphinxlm.la
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/libsphinxbase/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/libsphinxbase/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
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         if test -f $$p; then \
+           f=$(am__strip_dir) \
+           echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+           $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         p=$(am__strip_dir) \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libsphinxbase.la: $(libsphinxbase_la_OBJECTS) $(libsphinxbase_la_DEPENDENCIES) 
+       $(libsphinxbase_la_LINK) -rpath $(libdir) $(libsphinxbase_la_OBJECTS) $(libsphinxbase_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(libdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+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: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic \
+       clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-libLTLIBRARIES install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+       uninstall-libLTLIBRARIES
+
+# 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/src/libsphinxbase/fe/Makefile.am b/src/libsphinxbase/fe/Makefile.am
new file mode 100644 (file)
index 0000000..863721d
--- /dev/null
@@ -0,0 +1,24 @@
+noinst_LTLIBRARIES = libsphinxfe.la
+
+libsphinxfe_la_SOURCES =                       \
+       fe_interface.c                          \
+       fe_sigproc.c                            \
+       fe_warp_affine.c                        \
+       fe_warp.c                               \
+       fe_warp_inverse_linear.c                \
+       fe_warp_piecewise_linear.c              \
+       fixlog.c                                \
+       yin.c
+
+noinst_HEADERS =                               \
+       fe_internal.h                           \
+       fe_warp_affine.h                        \
+       fe_warp.h                               \
+       fe_warp_inverse_linear.h                \
+       fe_warp_piecewise_linear.h
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+          -I$(top_srcdir)/include \
+           -I$(top_builddir)/include 
+
+LIBOBJS = @LIBOBJS@
diff --git a/src/libsphinxbase/fe/Makefile.in b/src/libsphinxbase/fe/Makefile.in
new file mode 100644 (file)
index 0000000..3701dff
--- /dev/null
@@ -0,0 +1,486 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = src/libsphinxbase/fe
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsphinxfe_la_LIBADD =
+am_libsphinxfe_la_OBJECTS = fe_interface.lo fe_sigproc.lo \
+       fe_warp_affine.lo fe_warp.lo fe_warp_inverse_linear.lo \
+       fe_warp_piecewise_linear.lo fixlog.lo yin.lo
+libsphinxfe_la_OBJECTS = $(am_libsphinxfe_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libsphinxfe_la_SOURCES)
+DIST_SOURCES = $(libsphinxfe_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libsphinxfe.la
+libsphinxfe_la_SOURCES = \
+       fe_interface.c                          \
+       fe_sigproc.c                            \
+       fe_warp_affine.c                        \
+       fe_warp.c                               \
+       fe_warp_inverse_linear.c                \
+       fe_warp_piecewise_linear.c              \
+       fixlog.c                                \
+       yin.c
+
+noinst_HEADERS = \
+       fe_internal.h                           \
+       fe_warp_affine.h                        \
+       fe_warp.h                               \
+       fe_warp_inverse_linear.h                \
+       fe_warp_piecewise_linear.h
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+          -I$(top_srcdir)/include \
+           -I$(top_builddir)/include 
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/libsphinxbase/fe/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/libsphinxbase/fe/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
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libsphinxfe.la: $(libsphinxfe_la_OBJECTS) $(libsphinxfe_la_DEPENDENCIES) 
+       $(LINK)  $(libsphinxfe_la_OBJECTS) $(libsphinxfe_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fe_interface.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fe_sigproc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fe_warp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fe_warp_affine.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fe_warp_inverse_linear.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fe_warp_piecewise_linear.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixlog.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yin.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(LTLIBRARIES) $(HEADERS)
+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:
+
+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: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# 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/src/libsphinxbase/fe/fe_interface.c b/src/libsphinxbase/fe/fe_interface.c
new file mode 100644 (file)
index 0000000..7a9a03a
--- /dev/null
@@ -0,0 +1,655 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1996-2004 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <stdlib.h>
+#include <assert.h>
+#ifdef _WIN32_WCE
+#include <windows.h>
+#else
+#include <time.h>
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/byteorder.h"
+#include "sphinxbase/fixpoint.h"
+#include "sphinxbase/genrand.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/cmd_ln.h"
+#include "sphinxbase/ckd_alloc.h"
+
+#include "fe_internal.h"
+#include "fe_warp.h"
+
+static const arg_t fe_args[] = {
+    waveform_to_cepstral_command_line_macro(),
+    { NULL, 0, NULL, NULL }
+};
+
+int
+fe_parse_general_params(cmd_ln_t *config, fe_t * fe)
+{
+    int j;
+
+    fe->config = config;
+    fe->sampling_rate = cmd_ln_float32_r(config, "-samprate");
+    fe->frame_rate = (int16)cmd_ln_int32_r(config, "-frate");
+    if (cmd_ln_boolean_r(config, "-dither")) {
+        fe->dither = 1;
+        fe->seed = cmd_ln_int32_r(config, "-seed");
+    }
+#ifdef WORDS_BIGENDIAN
+    fe->swap = strcmp("big", cmd_ln_str_r(config, "-input_endian")) == 0 ? 0 : 1;
+#else        
+    fe->swap = strcmp("little", cmd_ln_str_r(config, "-input_endian")) == 0 ? 0 : 1;
+#endif
+    fe->window_length = cmd_ln_float32_r(config, "-wlen");
+    fe->pre_emphasis_alpha = cmd_ln_float32_r(config, "-alpha");
+
+    fe->num_cepstra = (uint8)cmd_ln_int32_r(config, "-ncep");
+    fe->fft_size = (int16)cmd_ln_int32_r(config, "-nfft");
+
+    /* Check FFT size, compute FFT order (log_2(n)) */
+    for (j = fe->fft_size, fe->fft_order = 0; j > 1; j >>= 1, fe->fft_order++) {
+        if (((j % 2) != 0) || (fe->fft_size <= 0)) {
+            E_ERROR("fft: number of points must be a power of 2 (is %d)\n",
+                    fe->fft_size);
+            return -1;
+        }
+    }
+    /* Verify that FFT size is greater or equal to window length. */
+    if (fe->fft_size < (int)(fe->window_length * fe->sampling_rate)) {
+        E_ERROR("FFT: Number of points must be greater or equal to frame size (%d samples)\n",
+                (int)(fe->window_length * fe->sampling_rate));
+        return -1;
+    }
+
+    fe->remove_dc = cmd_ln_boolean_r(config, "-remove_dc");
+
+    if (0 == strcmp(cmd_ln_str_r(config, "-transform"), "dct"))
+        fe->transform = DCT_II;
+    else if (0 == strcmp(cmd_ln_str_r(config, "-transform"), "legacy"))
+        fe->transform = LEGACY_DCT;
+    else if (0 == strcmp(cmd_ln_str_r(config, "-transform"), "htk"))
+        fe->transform = DCT_HTK;
+    else {
+        E_ERROR("Invalid transform type (values are 'dct', 'legacy', 'htk')\n");
+        return -1;
+    }
+
+    if (cmd_ln_boolean_r(config, "-logspec"))
+        fe->log_spec = RAW_LOG_SPEC;
+    if (cmd_ln_boolean_r(config, "-smoothspec"))
+        fe->log_spec = SMOOTH_LOG_SPEC;
+
+    return 0;
+}
+
+static int
+fe_parse_melfb_params(cmd_ln_t *config, fe_t *fe, melfb_t * mel)
+{
+    mel->sampling_rate = fe->sampling_rate;
+    mel->fft_size = fe->fft_size;
+    mel->num_cepstra = fe->num_cepstra;
+    mel->num_filters = cmd_ln_int32_r(config, "-nfilt");
+
+    if (fe->log_spec)
+        fe->feature_dimension = mel->num_filters;
+    else
+        fe->feature_dimension = fe->num_cepstra;
+
+    mel->upper_filt_freq = cmd_ln_float32_r(config, "-upperf");
+    mel->lower_filt_freq = cmd_ln_float32_r(config, "-lowerf");
+
+    mel->doublewide = cmd_ln_boolean_r(config, "-doublebw");
+
+    mel->warp_type = cmd_ln_str_r(config, "-warp_type");
+    mel->warp_params = cmd_ln_str_r(config, "-warp_params");
+    mel->lifter_val = cmd_ln_int32_r(config, "-lifter");
+
+    mel->unit_area = cmd_ln_boolean_r(config, "-unit_area");
+    mel->round_filters = cmd_ln_boolean_r(config, "-round_filters");
+
+    if (fe_warp_set(mel, mel->warp_type) != FE_SUCCESS) {
+        E_ERROR("Failed to initialize the warping function.\n");
+        return -1;
+    }
+    fe_warp_set_parameters(mel, mel->warp_params, mel->sampling_rate);
+    return 0;
+}
+
+void
+fe_print_current(fe_t const *fe)
+{
+    E_INFO("Current FE Parameters:\n");
+    E_INFO("\tSampling Rate:             %f\n", fe->sampling_rate);
+    E_INFO("\tFrame Size:                %d\n", fe->frame_size);
+    E_INFO("\tFrame Shift:               %d\n", fe->frame_shift);
+    E_INFO("\tFFT Size:                  %d\n", fe->fft_size);
+    E_INFO("\tLower Frequency:           %g\n",
+           fe->mel_fb->lower_filt_freq);
+    E_INFO("\tUpper Frequency:           %g\n",
+           fe->mel_fb->upper_filt_freq);
+    E_INFO("\tNumber of filters:         %d\n", fe->mel_fb->num_filters);
+    E_INFO("\tNumber of Overflow Samps:  %d\n", fe->num_overflow_samps);
+    E_INFO("\tStart Utt Status:          %d\n", fe->start_flag);
+    E_INFO("Will %sremove DC offset at frame level\n",
+           fe->remove_dc ? "" : "not ");
+    if (fe->dither) {
+        E_INFO("Will add dither to audio\n");
+        E_INFO("Dither seeded with %d\n", fe->seed);
+    }
+    else {
+        E_INFO("Will not add dither to audio\n");
+    }
+    if (fe->mel_fb->lifter_val) {
+        E_INFO("Will apply sine-curve liftering, period %d\n",
+               fe->mel_fb->lifter_val);
+    }
+    E_INFO("Will %snormalize filters to unit area\n",
+           fe->mel_fb->unit_area ? "" : "not ");
+    E_INFO("Will %sround filter frequencies to DFT points\n",
+           fe->mel_fb->round_filters ? "" : "not ");
+    E_INFO("Will %suse double bandwidth in mel filter\n",
+           fe->mel_fb->doublewide ? "" : "not ");
+}
+
+fe_t *
+fe_init_auto()
+{
+    return fe_init_auto_r(cmd_ln_retain(cmd_ln_get()));
+}
+
+fe_t *
+fe_init_auto_r(cmd_ln_t *config)
+{
+    fe_t *fe;
+
+    fe = ckd_calloc(1, sizeof(*fe));
+    fe->refcount = 1;
+
+    /* transfer params to front end */
+    if (fe_parse_general_params(config, fe) < 0) {
+        fe_free(fe);
+        return NULL;
+    }
+
+    /* compute remaining fe parameters */
+    /* We add 0.5 so approximate the float with the closest
+     * integer. E.g., 2.3 is truncate to 2, whereas 3.7 becomes 4
+     */
+    fe->frame_shift = (int32) (fe->sampling_rate / fe->frame_rate + 0.5);
+    fe->frame_size = (int32) (fe->window_length * fe->sampling_rate + 0.5);
+    fe->prior = 0;
+    fe->frame_counter = 0;
+
+    if (fe->frame_size > (fe->fft_size)) {
+        E_WARN
+            ("Number of FFT points has to be a power of 2 higher than %d\n",
+             (fe->frame_size));
+        fe_free(fe);
+        return (NULL);
+    }
+
+    if (fe->dither)
+        fe_init_dither(fe->seed);
+
+    /* establish buffers for overflow samps and hamming window */
+    fe->overflow_samps = ckd_calloc(fe->frame_size, sizeof(int16));
+    fe->hamming_window = ckd_calloc(fe->frame_size/2, sizeof(window_t));
+
+    /* create hamming window */
+    fe_create_hamming(fe->hamming_window, fe->frame_size);
+
+    /* init and fill appropriate filter structure */
+    fe->mel_fb = ckd_calloc(1, sizeof(*fe->mel_fb));
+
+    /* transfer params to mel fb */
+    fe_parse_melfb_params(config, fe, fe->mel_fb);
+    fe_build_melfilters(fe->mel_fb);
+    fe_compute_melcosine(fe->mel_fb);
+
+    /* Create temporary FFT, spectrum and mel-spectrum buffers. */
+    /* FIXME: Gosh there are a lot of these. */
+    fe->spch = ckd_calloc(fe->frame_size, sizeof(*fe->spch));
+    fe->frame = ckd_calloc(fe->fft_size, sizeof(*fe->frame));
+    fe->spec = ckd_calloc(fe->fft_size, sizeof(*fe->spec));
+    fe->mfspec = ckd_calloc(fe->mel_fb->num_filters, sizeof(*fe->mfspec));
+
+    /* create twiddle factors */
+    fe->ccc = ckd_calloc(fe->fft_size / 4, sizeof(*fe->ccc));
+    fe->sss = ckd_calloc(fe->fft_size / 4, sizeof(*fe->sss));
+    fe_create_twiddle(fe);
+
+    if (cmd_ln_boolean_r(config, "-verbose")) {
+        fe_print_current(fe);
+    }
+
+    /*** Z.A.B. ***/
+    /*** Initialize the overflow buffers ***/
+    fe_start_utt(fe);
+    return fe;
+}
+
+arg_t const *
+fe_get_args(void)
+{
+    return fe_args;
+}
+
+cmd_ln_t *
+fe_get_config(fe_t *fe)
+{
+    return fe->config;
+}
+
+void
+fe_init_dither(int32 seed)
+{
+    if (seed < 0) {
+        E_INFO("You are using the internal mechanism to generate the seed.\n");
+#ifdef _WIN32_WCE
+        s3_rand_seed(GetTickCount());
+#else
+        s3_rand_seed((long) time(0));
+#endif
+    }
+    else {
+        E_INFO("You are using %d as the seed.\n", seed);
+        s3_rand_seed(seed);
+    }
+}
+
+int32
+fe_start_utt(fe_t * fe)
+{
+    fe->num_overflow_samps = 0;
+    memset(fe->overflow_samps, 0, fe->frame_size * sizeof(int16));
+    fe->start_flag = 1;
+    fe->prior = 0;
+    return 0;
+}
+
+int
+fe_get_output_size(fe_t *fe)
+{
+    return (int)fe->feature_dimension;
+}
+
+void
+fe_get_input_size(fe_t *fe, int *out_frame_shift,
+                  int *out_frame_size)
+{
+    if (out_frame_shift)
+        *out_frame_shift = fe->frame_shift;
+    if (out_frame_size)
+        *out_frame_size = fe->frame_size;
+}
+
+int32
+fe_process_frame(fe_t * fe, int16 const *spch, int32 nsamps, mfcc_t * fr_cep)
+{
+    fe_read_frame(fe, spch, nsamps);
+    return fe_write_frame(fe, fr_cep);
+}
+
+int
+fe_process_frames(fe_t *fe,
+                  int16 const **inout_spch,
+                  size_t *inout_nsamps,
+                  mfcc_t **buf_cep,
+                  int32 *inout_nframes)
+{
+    int32 frame_count;
+    int outidx, i, n, n_overflow, orig_n_overflow;
+    int16 const *orig_spch;
+
+    /* In the special case where there is no output buffer, return the
+     * maximum number of frames which would be generated. */
+    if (buf_cep == NULL) {
+        if (*inout_nsamps + fe->num_overflow_samps < (size_t)fe->frame_size)
+            *inout_nframes = 0;
+        else 
+            *inout_nframes = 1
+                + ((*inout_nsamps + fe->num_overflow_samps - fe->frame_size)
+                   / fe->frame_shift);
+        return *inout_nframes;
+    }
+
+    /* Are there not enough samples to make at least 1 frame? */
+    if (*inout_nsamps + fe->num_overflow_samps < (size_t)fe->frame_size) {
+        if (*inout_nsamps > 0) {
+            /* Append them to the overflow buffer. */
+            memcpy(fe->overflow_samps + fe->num_overflow_samps,
+                   *inout_spch, *inout_nsamps * (sizeof(int16)));
+            fe->num_overflow_samps += *inout_nsamps;
+            /* Update input-output pointers and counters. */
+            *inout_spch += *inout_nsamps;
+            *inout_nsamps = 0;
+        }
+        /* We produced no frames of output, sorry! */
+        *inout_nframes = 0;
+        return 0;
+    }
+
+    /* Can't write a frame?  Then do nothing! */
+    if (*inout_nframes < 1) {
+        *inout_nframes = 0;
+        return 0;
+    }
+
+    /* Keep track of the original start of the buffer. */
+    orig_spch = *inout_spch;
+    orig_n_overflow = fe->num_overflow_samps;
+    /* How many frames will we be able to get? */
+    frame_count = 1
+        + ((*inout_nsamps + fe->num_overflow_samps - fe->frame_size)
+           / fe->frame_shift);
+    /* Limit it to the number of output frames available. */
+    if (frame_count > *inout_nframes)
+        frame_count = *inout_nframes;
+    /* Index of output frame. */
+    outidx = 0;
+
+    /* Start processing, taking care of any incoming overflow. */
+    if (fe->num_overflow_samps) {
+        int offset = fe->frame_size - fe->num_overflow_samps;
+
+        /* Append start of spch to overflow samples to make a full frame. */
+        memcpy(fe->overflow_samps + fe->num_overflow_samps,
+               *inout_spch, offset * sizeof(**inout_spch));
+        fe_read_frame(fe, fe->overflow_samps, fe->frame_size);
+        assert(outidx < frame_count);
+        if ((n = fe_write_frame(fe, buf_cep[outidx])) < 0)
+            return -1;
+        outidx += n;
+        /* Update input-output pointers and counters. */
+        *inout_spch += offset;
+        *inout_nsamps -= offset;
+        fe->num_overflow_samps -= fe->frame_shift;
+    }
+    else {
+        fe_read_frame(fe, *inout_spch, fe->frame_size);
+        assert(outidx < frame_count);
+        if ((n = fe_write_frame(fe, buf_cep[outidx])) < 0)
+            return -1;
+        outidx += n;
+        /* Update input-output pointers and counters. */
+        *inout_spch += fe->frame_size;
+        *inout_nsamps -= fe->frame_size;
+    }
+
+    /* Process all remaining frames. */
+    for (i = 1; i < frame_count; ++i) {
+        assert(*inout_nsamps >= (size_t)fe->frame_shift);
+
+        fe_shift_frame(fe, *inout_spch, fe->frame_shift);
+        assert(outidx < frame_count);
+        if ((n = fe_write_frame(fe, buf_cep[outidx])) < 0)
+            return -1;
+        outidx += n;
+        /* Update input-output pointers and counters. */
+        *inout_spch += fe->frame_shift;
+        *inout_nsamps -= fe->frame_shift;
+        /* Amount of data behind the original input which is still needed. */
+        if (fe->num_overflow_samps > 0)
+            fe->num_overflow_samps -= fe->frame_shift;
+    }
+
+    /* How many relevant overflow samples are there left? */
+    if (fe->num_overflow_samps <= 0) {
+        /* Maximum number of overflow samples past *inout_spch to save. */
+        n_overflow = *inout_nsamps;
+        if (n_overflow > fe->frame_shift)
+            n_overflow = fe->frame_shift;
+        fe->num_overflow_samps = fe->frame_size - fe->frame_shift;
+        /* Make sure this isn't an illegal read! */
+        if (fe->num_overflow_samps > *inout_spch - orig_spch)
+            fe->num_overflow_samps = *inout_spch - orig_spch;
+        fe->num_overflow_samps += n_overflow;
+        if (fe->num_overflow_samps > 0) {
+            memcpy(fe->overflow_samps,
+                   *inout_spch - (fe->frame_size - fe->frame_shift),
+                   fe->num_overflow_samps * sizeof(**inout_spch));
+            /* Update the input pointer to cover this stuff. */
+            *inout_spch += n_overflow;
+            *inout_nsamps -= n_overflow;
+        }
+    }
+    else {
+        /* There is still some relevant data left in the overflow buffer. */
+        /* Shift existing data to the beginning. */
+        memmove(fe->overflow_samps,
+                fe->overflow_samps + orig_n_overflow - fe->num_overflow_samps,
+                fe->num_overflow_samps * sizeof(*fe->overflow_samps));
+        /* Copy in whatever we had in the original speech buffer. */
+        n_overflow = *inout_spch - orig_spch + *inout_nsamps;
+        if (n_overflow > fe->frame_size - fe->num_overflow_samps)
+            n_overflow = fe->frame_size - fe->num_overflow_samps;
+        memcpy(fe->overflow_samps + fe->num_overflow_samps,
+               orig_spch, n_overflow * sizeof(*orig_spch));
+        fe->num_overflow_samps += n_overflow;
+        /* Advance the input pointers. */
+        if (n_overflow > *inout_spch - orig_spch) {
+            n_overflow -= (*inout_spch - orig_spch);
+            *inout_spch += n_overflow;
+            *inout_nsamps -= n_overflow;
+        }
+    }
+
+    /* Finally update the frame counter with the number of frames we procesed. */
+    *inout_nframes = outidx; /* FIXME: Not sure why I wrote it this way... */
+    return 0;
+}
+
+int
+fe_process_utt(fe_t * fe, int16 const * spch, size_t nsamps,
+               mfcc_t *** cep_block, int32 * nframes)
+{
+    mfcc_t **cep;
+    int rv;
+
+    /* Figure out how many frames we will need. */
+    fe_process_frames(fe, NULL, &nsamps, NULL, nframes);
+    /* Create the output buffer (it has to exist, even if there are no output frames). */
+    if (*nframes)
+        cep = (mfcc_t **)ckd_calloc_2d(*nframes, fe->feature_dimension, sizeof(**cep));
+    else
+        cep = (mfcc_t **)ckd_calloc_2d(1, fe->feature_dimension, sizeof(**cep));
+    /* Now just call fe_process_frames() with the allocated buffer. */
+    rv = fe_process_frames(fe, &spch, &nsamps, cep, nframes);
+    *cep_block = cep;
+
+    return rv;
+}
+
+
+int32
+fe_end_utt(fe_t * fe, mfcc_t * cepvector, int32 * nframes)
+{
+    /* Process any remaining data. */
+    if (fe->num_overflow_samps > 0) {
+        fe_read_frame(fe, fe->overflow_samps, fe->num_overflow_samps);
+        *nframes = fe_write_frame(fe, cepvector);
+    }
+    else {
+        *nframes = 0;
+    }
+
+    /* reset overflow buffers... */
+    fe->num_overflow_samps = 0;
+    fe->start_flag = 0;
+
+    return 0;
+}
+
+fe_t *
+fe_retain(fe_t *fe)
+{
+    ++fe->refcount;
+    return fe;
+}
+
+int
+fe_free(fe_t * fe)
+{
+    if (fe == NULL)
+        return 0;
+    if (--fe->refcount > 0)
+        return fe->refcount;
+
+    /* kill FE instance - free everything... */
+    if (fe->mel_fb) {
+        if (fe->mel_fb->mel_cosine)
+            fe_free_2d((void *) fe->mel_fb->mel_cosine);
+        ckd_free(fe->mel_fb->lifter);
+        ckd_free(fe->mel_fb->spec_start);
+        ckd_free(fe->mel_fb->filt_start);
+        ckd_free(fe->mel_fb->filt_width);
+        ckd_free(fe->mel_fb->filt_coeffs);
+        ckd_free(fe->mel_fb);
+    }
+    ckd_free(fe->spch);
+    ckd_free(fe->frame);
+    ckd_free(fe->ccc);
+    ckd_free(fe->sss);
+    ckd_free(fe->spec);
+    ckd_free(fe->mfspec);
+    ckd_free(fe->overflow_samps);
+    ckd_free(fe->hamming_window);
+    cmd_ln_free_r(fe->config);
+    ckd_free(fe);
+
+    return 0;
+}
+
+/**
+ * Convert a block of mfcc_t to float32 (can be done in-place)
+ **/
+int32
+fe_mfcc_to_float(fe_t * fe,
+                 mfcc_t ** input, float32 ** output, int32 nframes)
+{
+    int32 i;
+
+#ifndef FIXED_POINT
+    if ((void *) input == (void *) output)
+        return nframes * fe->feature_dimension;
+#endif
+    for (i = 0; i < nframes * fe->feature_dimension; ++i)
+        output[0][i] = MFCC2FLOAT(input[0][i]);
+
+    return i;
+}
+
+/**
+ * Convert a block of float32 to mfcc_t (can be done in-place)
+ **/
+int32
+fe_float_to_mfcc(fe_t * fe,
+                 float32 ** input, mfcc_t ** output, int32 nframes)
+{
+    int32 i;
+
+#ifndef FIXED_POINT
+    if ((void *) input == (void *) output)
+        return nframes * fe->feature_dimension;
+#endif
+    for (i = 0; i < nframes * fe->feature_dimension; ++i)
+        output[0][i] = FLOAT2MFCC(input[0][i]);
+
+    return i;
+}
+
+int32
+fe_logspec_to_mfcc(fe_t * fe, const mfcc_t * fr_spec, mfcc_t * fr_cep)
+{
+#ifdef FIXED_POINT
+    fe_spec2cep(fe, fr_spec, fr_cep);
+#else                           /* ! FIXED_POINT */
+    powspec_t *powspec;
+    int32 i;
+
+    powspec = ckd_malloc(fe->mel_fb->num_filters * sizeof(powspec_t));
+    for (i = 0; i < fe->mel_fb->num_filters; ++i)
+        powspec[i] = (powspec_t) fr_spec[i];
+    fe_spec2cep(fe, powspec, fr_cep);
+    ckd_free(powspec);
+#endif                          /* ! FIXED_POINT */
+    return 0;
+}
+
+int32
+fe_logspec_dct2(fe_t * fe, const mfcc_t * fr_spec, mfcc_t * fr_cep)
+{
+#ifdef FIXED_POINT
+    fe_dct2(fe, fr_spec, fr_cep, 0);
+#else                           /* ! FIXED_POINT */
+    powspec_t *powspec;
+    int32 i;
+
+    powspec = ckd_malloc(fe->mel_fb->num_filters * sizeof(powspec_t));
+    for (i = 0; i < fe->mel_fb->num_filters; ++i)
+        powspec[i] = (powspec_t) fr_spec[i];
+    fe_dct2(fe, powspec, fr_cep, 0);
+    ckd_free(powspec);
+#endif                          /* ! FIXED_POINT */
+    return 0;
+}
+
+int32
+fe_mfcc_dct3(fe_t * fe, const mfcc_t * fr_cep, mfcc_t * fr_spec)
+{
+#ifdef FIXED_POINT
+    fe_dct3(fe, fr_cep, fr_spec);
+#else                           /* ! FIXED_POINT */
+    powspec_t *powspec;
+    int32 i;
+
+    powspec = ckd_malloc(fe->mel_fb->num_filters * sizeof(powspec_t));
+    fe_dct3(fe, fr_cep, powspec);
+    for (i = 0; i < fe->mel_fb->num_filters; ++i)
+        fr_spec[i] = (mfcc_t) powspec[i];
+    ckd_free(powspec);
+#endif                          /* ! FIXED_POINT */
+    return 0;
+}
diff --git a/src/libsphinxbase/fe/fe_internal.h b/src/libsphinxbase/fe/fe_internal.h
new file mode 100644 (file)
index 0000000..0d45ef4
--- /dev/null
@@ -0,0 +1,212 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1996-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef __FE_INTERNAL_H__
+#define __FE_INTERNAL_H__
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "sphinxbase/fe.h"
+#include "sphinxbase/fixpoint.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#ifdef FIXED16
+/* Q15 format */
+typedef int16 frame_t;
+typedef int16 window_t;
+typedef int32 powspec_t;
+typedef struct { int16 r, i; } complex;
+#elif defined(FIXED_POINT)
+typedef fixed32 frame_t;
+typedef int32 powspec_t;
+typedef fixed32 window_t;
+typedef struct { fixed32 r, i; } complex;
+#else /* FIXED_POINT */
+typedef float64 frame_t;
+typedef float64 powspec_t;
+typedef float64 window_t;
+typedef struct { float64 r, i; } complex;
+#endif /* FIXED_POINT */
+
+/* Values for the 'logspec' field. */
+enum {
+       RAW_LOG_SPEC = 1,
+       SMOOTH_LOG_SPEC = 2
+};
+
+/* Values for the 'transform' field. */
+enum {
+       LEGACY_DCT = 0,
+       DCT_II = 1,
+        DCT_HTK = 2
+};
+
+typedef struct melfb_s melfb_t;
+/** Base Struct to hold all structure for MFCC computation. */
+struct melfb_s {
+    float32 sampling_rate;
+    int32 num_cepstra;
+    int32 num_filters;
+    int32 fft_size;
+    float32 lower_filt_freq;
+    float32 upper_filt_freq;
+    /* DCT coefficients. */
+    mfcc_t **mel_cosine;
+    /* Filter coefficients. */
+    mfcc_t *filt_coeffs;
+    int16 *spec_start;
+    int16 *filt_start;
+    int16 *filt_width;
+    /* Luxury mobile home. */
+    int32 doublewide;
+    char const *warp_type;
+    char const *warp_params;
+    uint32 warp_id;
+    /* Precomputed normalization constants for unitary DCT-II/DCT-III */
+    mfcc_t sqrt_inv_n, sqrt_inv_2n;
+    /* Value and coefficients for HTK-style liftering */
+    int32 lifter_val;
+    mfcc_t *lifter;
+    /* Normalize filters to unit area */
+    int32 unit_area;
+    /* Round filter frequencies to DFT points (hurts accuracy, but is
+       useful for legacy purposes) */
+    int32 round_filters;
+};
+
+/* sqrt(1/2), also used for unitary DCT-II/DCT-III */
+#define SQRT_HALF FLOAT2MFCC(0.707106781186548)
+
+/** Structure for the front-end computation. */
+struct fe_s {
+    cmd_ln_t *config;
+    int refcount;
+
+    float32 sampling_rate;
+    int16 frame_rate;
+    int16 frame_shift;
+
+    float32 window_length;
+    int16 frame_size;
+    int16 fft_size;
+
+    uint8 fft_order;
+    uint8 feature_dimension;
+    uint8 num_cepstra;
+    uint8 remove_dc;
+    uint8 log_spec;
+    uint8 swap;
+    uint8 dither;
+    uint8 transform;
+
+    float32 pre_emphasis_alpha;
+    int32 seed;
+
+    int16 frame_counter;
+    uint8 start_flag;
+    uint8 reserved;
+
+    /* Twiddle factors for FFT. */
+    frame_t *ccc, *sss;
+    /* Mel filter parameters. */
+    melfb_t *mel_fb;
+    /* Half of a Hamming Window. */
+    window_t *hamming_window;
+
+    /* Temporary buffers for processing. */
+    /* FIXME: too many of these. */
+    int16 *spch;
+    frame_t *frame;
+    powspec_t *spec, *mfspec;
+    int16 *overflow_samps;
+    int16 num_overflow_samps;    
+    int16 prior;
+};
+
+#define BB_SAMPLING_RATE 16000
+#define DEFAULT_BB_FFT_SIZE 512
+#define DEFAULT_BB_FRAME_SHIFT 160
+#define DEFAULT_BB_NUM_FILTERS 40
+#define DEFAULT_BB_LOWER_FILT_FREQ 133.33334
+#define DEFAULT_BB_UPPER_FILT_FREQ 6855.4976
+
+#define NB_SAMPLING_RATE 8000
+#define DEFAULT_NB_FFT_SIZE 256
+#define DEFAULT_NB_FRAME_SHIFT 80
+#define DEFAULT_NB_NUM_FILTERS 31
+#define DEFAULT_NB_LOWER_FILT_FREQ 200
+#define DEFAULT_NB_UPPER_FILT_FREQ 3500
+
+void fe_init_dither(int32 seed);
+
+/* Apply 1/2 bit noise to a buffer of audio. */
+int32 fe_dither(int16 *buffer, int32 nsamps);
+
+/* Load a frame of data into the fe. */
+int fe_read_frame(fe_t *fe, int16 const *in, int32 len);
+
+/* Shift the input buffer back and read more data. */
+int fe_shift_frame(fe_t *fe, int16 const *in, int32 len);
+
+/* Process a frame of data into features. */
+int32 fe_write_frame(fe_t *fe, mfcc_t *fea);
+
+/* Initialization functions. */
+int32 fe_build_melfilters(melfb_t *MEL_FB);
+int32 fe_compute_melcosine(melfb_t *MEL_FB);
+void fe_create_hamming(window_t *in, int32 in_len);
+void fe_create_twiddle(fe_t *fe);
+
+/* Miscellaneous processing functions. */
+void fe_spec2cep(fe_t * fe, const powspec_t * mflogspec, mfcc_t * mfcep);
+void fe_dct2(fe_t *fe, const powspec_t *mflogspec, mfcc_t *mfcep, int htk);
+void fe_dct3(fe_t *fe, const mfcc_t *mfcep, powspec_t *mflogspec);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __FE_INTERNAL_H__ */
diff --git a/src/libsphinxbase/fe/fe_sigproc.c b/src/libsphinxbase/fe/fe_sigproc.c
new file mode 100644 (file)
index 0000000..05e6fd4
--- /dev/null
@@ -0,0 +1,1118 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1996-2004 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4244)
+#endif
+
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/byteorder.h"
+#include "sphinxbase/fixpoint.h"
+#include "sphinxbase/fe.h"
+#include "sphinxbase/genrand.h"
+#include "sphinxbase/libutil.h"
+#include "sphinxbase/err.h"
+
+#include "fe_internal.h"
+#include "fe_warp.h"
+
+/* Use extra precision for cosines, Hamming window, pre-emphasis
+ * coefficient, twiddle factors. */
+#ifdef FIXED_POINT
+#define FLOAT2COS(x) FLOAT2FIX_ANY(x,30)
+#define COSMUL(x,y) FIXMUL_ANY(x,y,30)
+#else
+#define FLOAT2COS(x) (x)
+#define COSMUL(x,y) ((x)*(y))
+#endif
+
+#ifdef FIXED_POINT
+/* Internal log-addition table for natural log with radix point at 8
+ * bits.  Each entry is 256 * log(1 + e^{-n/256}).  This is used in the
+ * log-add computation:
+ *
+ * e^z = e^x + e^y
+ * e^z = e^x(1 + e^{y-x})     = e^y(1 + e^{x-y})
+ * z   = x + log(1 + e^{y-x}) = y + log(1 + e^{x-y})
+ *
+ * So when y > x, z = y + logadd_table[-(x-y)]
+ *    when x > y, z = x + logadd_table[-(y-x)]
+ */
+static const unsigned char fe_logadd_table[] = {
+177, 177, 176, 176, 175, 175, 174, 174, 173, 173,
+172, 172, 172, 171, 171, 170, 170, 169, 169, 168,
+168, 167, 167, 166, 166, 165, 165, 164, 164, 163,
+163, 162, 162, 161, 161, 161, 160, 160, 159, 159,
+158, 158, 157, 157, 156, 156, 155, 155, 155, 154,
+154, 153, 153, 152, 152, 151, 151, 151, 150, 150,
+149, 149, 148, 148, 147, 147, 147, 146, 146, 145,
+145, 144, 144, 144, 143, 143, 142, 142, 141, 141,
+141, 140, 140, 139, 139, 138, 138, 138, 137, 137,
+136, 136, 136, 135, 135, 134, 134, 134, 133, 133,
+132, 132, 131, 131, 131, 130, 130, 129, 129, 129,
+128, 128, 128, 127, 127, 126, 126, 126, 125, 125,
+124, 124, 124, 123, 123, 123, 122, 122, 121, 121,
+121, 120, 120, 119, 119, 119, 118, 118, 118, 117,
+117, 117, 116, 116, 115, 115, 115, 114, 114, 114,
+113, 113, 113, 112, 112, 112, 111, 111, 110, 110,
+110, 109, 109, 109, 108, 108, 108, 107, 107, 107,
+106, 106, 106, 105, 105, 105, 104, 104, 104, 103,
+103, 103, 102, 102, 102, 101, 101, 101, 100, 100,
+100, 99, 99, 99, 98, 98, 98, 97, 97, 97,
+96, 96, 96, 96, 95, 95, 95, 94, 94, 94,
+93, 93, 93, 92, 92, 92, 92, 91, 91, 91,
+90, 90, 90, 89, 89, 89, 89, 88, 88, 88,
+87, 87, 87, 87, 86, 86, 86, 85, 85, 85,
+85, 84, 84, 84, 83, 83, 83, 83, 82, 82,
+82, 82, 81, 81, 81, 80, 80, 80, 80, 79,
+79, 79, 79, 78, 78, 78, 78, 77, 77, 77,
+77, 76, 76, 76, 75, 75, 75, 75, 74, 74,
+74, 74, 73, 73, 73, 73, 72, 72, 72, 72,
+71, 71, 71, 71, 71, 70, 70, 70, 70, 69,
+69, 69, 69, 68, 68, 68, 68, 67, 67, 67,
+67, 67, 66, 66, 66, 66, 65, 65, 65, 65,
+64, 64, 64, 64, 64, 63, 63, 63, 63, 63,
+62, 62, 62, 62, 61, 61, 61, 61, 61, 60,
+60, 60, 60, 60, 59, 59, 59, 59, 59, 58,
+58, 58, 58, 58, 57, 57, 57, 57, 57, 56,
+56, 56, 56, 56, 55, 55, 55, 55, 55, 54,
+54, 54, 54, 54, 53, 53, 53, 53, 53, 52,
+52, 52, 52, 52, 52, 51, 51, 51, 51, 51,
+50, 50, 50, 50, 50, 50, 49, 49, 49, 49,
+49, 49, 48, 48, 48, 48, 48, 48, 47, 47,
+47, 47, 47, 47, 46, 46, 46, 46, 46, 46,
+45, 45, 45, 45, 45, 45, 44, 44, 44, 44,
+44, 44, 43, 43, 43, 43, 43, 43, 43, 42,
+42, 42, 42, 42, 42, 41, 41, 41, 41, 41,
+41, 41, 40, 40, 40, 40, 40, 40, 40, 39,
+39, 39, 39, 39, 39, 39, 38, 38, 38, 38,
+38, 38, 38, 37, 37, 37, 37, 37, 37, 37,
+37, 36, 36, 36, 36, 36, 36, 36, 35, 35,
+35, 35, 35, 35, 35, 35, 34, 34, 34, 34,
+34, 34, 34, 34, 33, 33, 33, 33, 33, 33,
+33, 33, 32, 32, 32, 32, 32, 32, 32, 32,
+32, 31, 31, 31, 31, 31, 31, 31, 31, 31,
+30, 30, 30, 30, 30, 30, 30, 30, 30, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 25, 25,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 24,
+24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
+23, 23, 22, 22, 22, 22, 22, 22, 22, 22,
+22, 22, 22, 22, 21, 21, 21, 21, 21, 21,
+21, 21, 21, 21, 21, 21, 21, 20, 20, 20,
+20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
+19, 19, 19, 19, 18, 18, 18, 18, 18, 18,
+18, 18, 18, 18, 18, 18, 18, 18, 18, 17,
+17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+17, 17, 17, 17, 16, 16, 16, 16, 16, 16,
+16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+16, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 12, 12, 12,
+12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+12, 12, 12, 12, 12, 12, 12, 12, 12, 11,
+11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+11, 11, 11, 10, 10, 10, 10, 10, 10, 10,
+10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+10, 10, 10, 10, 10, 10, 10, 10, 10, 9,
+9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+9, 9, 9, 9, 9, 9, 9, 9, 8, 8,
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+7, 7, 7, 7, 7, 7, 7, 7, 6, 6,
+6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+6, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+5, 5, 5, 4, 4, 4, 4, 4, 4, 4,
+4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+4, 4, 4, 4, 4, 4, 4, 4, 3, 3,
+3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+1, 1, 1, 1, 1, 1, 1, 0
+};
+static const int fe_logadd_table_size = sizeof(fe_logadd_table) / sizeof(fe_logadd_table[0]);
+
+static fixed32
+fe_log_add(fixed32 x, fixed32 y)
+{
+    fixed32 d, r;
+
+    if (x > y) {
+        d = (x - y) >> (DEFAULT_RADIX - 8);
+        r = x;
+    }
+    else {
+        d = (y - x) >> (DEFAULT_RADIX - 8);
+        r = y;
+    }
+    if (d > fe_logadd_table_size)
+        return r;
+    else {
+        r += ((fixed32)fe_logadd_table[d] << (DEFAULT_RADIX - 8));
+/*
+        printf("%d + %d = %d | %f + %f = %f | %f + %f = %f\n",
+               x, y, r, FIX2FLOAT(x), FIX2FLOAT(y), FIX2FLOAT(r),
+               exp(FIX2FLOAT(x)), exp(FIX2FLOAT(y)), exp(FIX2FLOAT(r)));
+*/
+        return r;
+    }
+}
+
+static fixed32
+fe_log(float32 x)
+{
+    if (x <= 0) {
+        return MIN_FIXLOG;
+    }
+    else {
+        return FLOAT2FIX(log(x));
+    }
+}
+#endif
+
+static float32
+fe_mel(melfb_t *mel, float32 x)
+{
+    float32 warped = fe_warp_unwarped_to_warped(mel, x);
+
+    return (float32) (2595.0 * log10(1.0 + warped / 700.0));
+}
+
+static float32
+fe_melinv(melfb_t *mel, float32 x)
+{
+    float32 warped = (float32) (700.0 * (pow(10.0, x / 2595.0) - 1.0));
+    return fe_warp_warped_to_unwarped(mel, warped);
+}
+
+int32
+fe_build_melfilters(melfb_t *mel_fb)
+{
+    float32 melmin, melmax, melbw, fftfreq;
+    int n_coeffs, i, j;
+
+    /* Filter coefficient matrix, in flattened form. */
+    mel_fb->spec_start = ckd_malloc(mel_fb->num_filters * sizeof(*mel_fb->spec_start));
+    mel_fb->filt_start = ckd_malloc(mel_fb->num_filters * sizeof(*mel_fb->filt_start));
+    mel_fb->filt_width = ckd_malloc(mel_fb->num_filters * sizeof(*mel_fb->filt_width));
+
+    /* First calculate the widths of each filter. */
+    /* Minimum and maximum frequencies in mel scale. */
+    melmin = fe_mel(mel_fb, mel_fb->lower_filt_freq);
+    melmax = fe_mel(mel_fb, mel_fb->upper_filt_freq);
+
+    /* Width of filters in mel scale */
+    melbw = (melmax - melmin) / (mel_fb->num_filters + 1);
+    if (mel_fb->doublewide) {
+        melmin -= melbw;
+        melmax += melbw;
+        if ((fe_melinv(mel_fb, melmin) < 0) ||
+            (fe_melinv(mel_fb, melmax) > mel_fb->sampling_rate / 2)) {
+            E_WARN
+                ("Out of Range: low  filter edge = %f (%f)\n",
+                 fe_melinv(mel_fb, melmin), 0.0);
+            E_WARN
+                ("              high filter edge = %f (%f)\n",
+                 fe_melinv(mel_fb, melmax), mel_fb->sampling_rate / 2);
+            return FE_INVALID_PARAM_ERROR;
+        }
+    }
+
+    /* DFT point spacing */
+    fftfreq = mel_fb->sampling_rate / (float32) mel_fb->fft_size;
+
+    /* Count and place filter coefficients. */
+    n_coeffs = 0;
+    for (i = 0; i < mel_fb->num_filters; ++i) {
+        float32 freqs[3];
+
+        /* Left, center, right frequencies in Hertz */
+        for (j = 0; j < 3; ++j) {
+            if (mel_fb->doublewide)
+                freqs[j] = fe_melinv(mel_fb, (i + j * 2) * melbw + melmin);
+            else
+                freqs[j] = fe_melinv(mel_fb, (i + j) * melbw + melmin);
+            /* Round them to DFT points if requested */
+            if (mel_fb->round_filters)
+                freqs[j] = ((int)(freqs[j] / fftfreq + 0.5)) * fftfreq;
+        }
+
+        /* spec_start is the start of this filter in the power spectrum. */
+        mel_fb->spec_start[i] = -1;
+        /* There must be a better way... */
+        for (j = 0; j < mel_fb->fft_size/2+1; ++j) {
+            float32 hz = j * fftfreq;
+            if (hz < freqs[0])
+                continue;
+            else if (hz > freqs[2] || j == mel_fb->fft_size/2) {
+                /* filt_width is the width in DFT points of this filter. */
+                mel_fb->filt_width[i] = j - mel_fb->spec_start[i];
+                /* filt_start is the start of this filter in the filt_coeffs array. */
+                mel_fb->filt_start[i] = n_coeffs;
+                n_coeffs += mel_fb->filt_width[i];
+                break;
+            }
+            if (mel_fb->spec_start[i] == -1)
+                mel_fb->spec_start[i] = j;
+        }
+    }
+
+    /* Now go back and allocate the coefficient array. */
+    mel_fb->filt_coeffs = ckd_malloc(n_coeffs * sizeof(*mel_fb->filt_coeffs));
+
+    /* And now generate the coefficients. */
+    n_coeffs = 0;
+    for (i = 0; i < mel_fb->num_filters; ++i) {
+        float32 freqs[3];
+
+        /* Left, center, right frequencies in Hertz */
+        for (j = 0; j < 3; ++j) {
+            if (mel_fb->doublewide)
+                freqs[j] = fe_melinv(mel_fb, (i + j * 2) * melbw + melmin);
+            else
+                freqs[j] = fe_melinv(mel_fb, (i + j) * melbw + melmin);
+            /* Round them to DFT points if requested */
+            if (mel_fb->round_filters)
+                freqs[j] = ((int)(freqs[j] / fftfreq + 0.5)) * fftfreq;
+        }
+
+        for (j = 0; j < mel_fb->filt_width[i]; ++j) {
+            float32 hz, loslope, hislope;
+
+            hz = (mel_fb->spec_start[i] + j) * fftfreq;
+            if (hz < freqs[0] || hz > freqs[2]) {
+                E_FATAL("WTF, %f < %f > %f\n", freqs[0], hz, freqs[2]);
+            }
+            loslope = (hz - freqs[0]) / (freqs[1] - freqs[0]);
+            hislope = (freqs[2] - hz) / (freqs[2] - freqs[1]);
+            if (mel_fb->unit_area) {
+                loslope *= 2 / (freqs[2] - freqs[0]);
+                hislope *= 2 / (freqs[2] - freqs[0]);
+            }
+            if (loslope < hislope) {
+#ifdef FIXED_POINT
+                mel_fb->filt_coeffs[n_coeffs] = fe_log(loslope);
+#else
+                mel_fb->filt_coeffs[n_coeffs] = loslope;
+#endif
+            }
+            else {
+#ifdef FIXED_POINT
+                mel_fb->filt_coeffs[n_coeffs] = fe_log(hislope);
+#else
+                mel_fb->filt_coeffs[n_coeffs] = hislope;
+#endif
+            }
+            ++n_coeffs;
+        }
+    }
+    
+
+    return FE_SUCCESS;
+}
+
+int32
+fe_compute_melcosine(melfb_t * mel_fb)
+{
+
+    float64 freqstep;
+    int32 i, j;
+
+    mel_fb->mel_cosine =
+        (mfcc_t **) ckd_calloc_2d(mel_fb->num_cepstra,
+                                  mel_fb->num_filters,
+                                  sizeof(mfcc_t));
+
+    freqstep = M_PI / mel_fb->num_filters;
+    /* NOTE: The first row vector is actually unnecessary but we leave
+     * it in to avoid confusion. */
+    for (i = 0; i < mel_fb->num_cepstra; i++) {
+        for (j = 0; j < mel_fb->num_filters; j++) {
+            float64 cosine;
+
+            cosine = cos(freqstep * i * (j + 0.5));
+            mel_fb->mel_cosine[i][j] = FLOAT2COS(cosine);
+        }
+    }
+
+    /* Also precompute normalization constants for unitary DCT. */
+    mel_fb->sqrt_inv_n = FLOAT2COS(sqrt(1.0 / mel_fb->num_filters));
+    mel_fb->sqrt_inv_2n = FLOAT2COS(sqrt(2.0 / mel_fb->num_filters));
+
+    /* And liftering weights */
+    if (mel_fb->lifter_val) {
+        mel_fb->lifter = calloc(mel_fb->num_cepstra, sizeof(*mel_fb->lifter));
+        for (i = 0; i < mel_fb->num_cepstra; ++i) {
+            mel_fb->lifter[i] = FLOAT2MFCC(1 + mel_fb->lifter_val / 2
+                                           * sin(i * M_PI / mel_fb->lifter_val));
+        }
+    }
+
+    return (0);
+}
+
+static void
+fe_pre_emphasis(int16 const *in, frame_t * out, int32 len,
+                float32 factor, int16 prior)
+{
+    int i;
+
+#if defined(FIXED16)
+    int16 fxd_alpha = (int16)(factor * 0x8000);
+    int32 tmp1, tmp2;
+
+    tmp1 = (int32)in[0] << 15;
+    tmp2 = (int32)prior * fxd_alpha;
+    out[0] = (int16)((tmp1 - tmp2) >> 15);
+    for (i = 1; i < len; ++i) {
+        tmp1 = (int32)in[i] << 15;
+        tmp2 = (int32)in[i-1] * fxd_alpha;
+        out[i] = (int16)((tmp1 - tmp2) >> 15);
+    }
+#elif defined(FIXED_POINT)
+    fixed32 fxd_alpha = FLOAT2FIX(factor);
+    out[0] = ((fixed32)in[0] << DEFAULT_RADIX) - (prior * fxd_alpha);
+    for (i = 1; i < len; ++i)
+        out[i] = ((fixed32)in[i] << DEFAULT_RADIX)
+            - (fixed32)in[i-1] * fxd_alpha;
+#else
+    out[0] = (frame_t) in[0] - (frame_t) prior * factor;
+    for (i = 1; i < len; i++)
+        out[i] = (frame_t) in[i] - (frame_t) in[i-1] * factor;
+#endif
+}
+
+static void
+fe_short_to_frame(int16 const *in, frame_t * out, int32 len)
+{
+    int i;
+
+#if defined(FIXED16)
+    memcpy(out, in, len * sizeof(*out));
+#elif defined(FIXED_POINT)
+    for (i = 0; i < len; i++)
+        out[i] = (int32) in[i] << DEFAULT_RADIX;
+#else                           /* FIXED_POINT */
+    for (i = 0; i < len; i++)
+        out[i] = (frame_t) in[i];
+#endif                          /* FIXED_POINT */
+}
+
+void
+fe_create_hamming(window_t * in, int32 in_len)
+{
+    int i;
+
+    /* Symmetric, so we only create the first half of it. */
+    for (i = 0; i < in_len / 2; i++) {
+        float64 hamm;
+        hamm  = (0.54 - 0.46 * cos(2 * M_PI * i /
+                                   ((float64) in_len - 1.0)));
+#ifdef FIXED16
+        in[i] = (int16)(hamm * 0x8000);
+#else
+        in[i] = FLOAT2COS(hamm);
+#endif
+    }
+}
+
+static void
+fe_hamming_window(frame_t * in, window_t * window, int32 in_len, int32 remove_dc)
+{
+    int i;
+
+    if (remove_dc) {
+#ifdef FIXED16
+        int32 mean = 0; /* Use int32 to avoid possibility of overflow */
+#else
+        frame_t mean = 0;
+#endif
+
+        for (i = 0; i < in_len; i++)
+            mean += in[i];
+        mean /= in_len;
+        for (i = 0; i < in_len; i++)
+            in[i] -= (frame_t)mean;
+    }
+
+#ifdef FIXED16
+    for (i = 0; i < in_len/2; i++) {
+        int32 tmp1, tmp2;
+
+        tmp1 = (int32)in[i] * window[i];
+        tmp2 = (int32)in[in_len-1-i] * window[i];
+        in[i] = (int16)(tmp1 >> 15);
+        in[in_len-1-i] = (int16)(tmp2 >> 15);
+    }
+#else
+    for (i = 0; i < in_len/2; i++) {
+        in[i] = COSMUL(in[i], window[i]);
+        in[in_len-1-i] = COSMUL(in[in_len-1-i], window[i]);
+    }
+#endif
+}
+
+static int
+fe_spch_to_frame(fe_t *fe, int len)
+{
+    /* Copy to the frame buffer. */
+    if (fe->pre_emphasis_alpha != 0.0) {
+        fe_pre_emphasis(fe->spch, fe->frame, len,
+                        fe->pre_emphasis_alpha, fe->prior);
+        if (len >= fe->frame_shift)
+            fe->prior = fe->spch[fe->frame_shift - 1];
+        else
+            fe->prior = fe->spch[len - 1];
+    }
+    else
+        fe_short_to_frame(fe->spch, fe->frame, len);
+
+    /* Zero pad up to FFT size. */
+    memset(fe->frame + len, 0,
+           (fe->fft_size - len) * sizeof(*fe->frame));
+
+    /* Window. */
+    fe_hamming_window(fe->frame, fe->hamming_window, fe->frame_size,
+                      fe->remove_dc);
+
+    return len;
+}
+
+int
+fe_read_frame(fe_t *fe, int16 const *in, int32 len)
+{
+    int i;
+
+    if (len > fe->frame_size)
+        len = fe->frame_size;
+
+    /* Read it into the raw speech buffer. */
+    memcpy(fe->spch, in, len * sizeof(*in));
+    /* Swap and dither if necessary. */
+    if (fe->swap)
+        for (i = 0; i < len; ++i)
+            SWAP_INT16(&fe->spch[i]);
+    if (fe->dither)
+        for (i = 0; i < len; ++i)
+            fe->spch[i] += (int16) ((!(s3_rand_int31() % 4)) ? 1 : 0);
+
+    return fe_spch_to_frame(fe, len);
+}
+
+int
+fe_shift_frame(fe_t *fe, int16 const *in, int32 len)
+{
+    int offset, i;
+
+    if (len > fe->frame_shift)
+        len = fe->frame_shift;
+    offset = fe->frame_size - fe->frame_shift;
+
+    /* Shift data into the raw speech buffer. */
+    memmove(fe->spch, fe->spch + fe->frame_shift,
+            offset * sizeof(*fe->spch));
+    memcpy(fe->spch + offset, in, len * sizeof(*fe->spch));
+    /* Swap and dither if necessary. */
+    if (fe->swap)
+        for (i = 0; i < len; ++i)
+            SWAP_INT16(&fe->spch[offset + i]);
+    if (fe->dither)
+        for (i = 0; i < len; ++i)
+            fe->spch[offset + i]
+                += (int16) ((!(s3_rand_int31() % 4)) ? 1 : 0);
+    
+    return fe_spch_to_frame(fe, offset + len);
+}
+
+/**
+ * Create arrays of twiddle factors.
+ */
+void
+fe_create_twiddle(fe_t *fe)
+{
+    int i;
+
+    for (i = 0; i < fe->fft_size / 4; ++i) {
+        float64 a = 2 * M_PI * i / fe->fft_size;
+#ifdef FIXED16
+        fe->ccc[i] = (int16)(cos(a) * 0x8000);
+        fe->sss[i] = (int16)(sin(a) * 0x8000);
+#elif defined(FIXED_POINT)
+        fe->ccc[i] = FLOAT2COS(cos(a));
+        fe->sss[i] = FLOAT2COS(sin(a));
+#else
+        fe->ccc[i] = cos(a);
+        fe->sss[i] = sin(a);
+#endif
+    }
+}
+
+/* Translated from the FORTRAN (obviously) from "Real-Valued Fast
+ * Fourier Transform Algorithms" by Henrik V. Sorensen et al., IEEE
+ * Transactions on Acoustics, Speech, and Signal Processing, vol. 35,
+ * no.6.  The 16-bit version does a version of "block floating
+ * point" in order to avoid rounding errors.
+ */
+#if defined(FIXED16)
+static int
+fe_fft_real(fe_t *fe)
+{
+    int i, j, k, m, n, lz;
+    frame_t *x, xt, max;
+
+    x = fe->frame;
+    m = fe->fft_order;
+    n = fe->fft_size;
+
+    /* Bit-reverse the input. */
+    j = 0;
+    for (i = 0; i < n - 1; ++i) {
+        if (i < j) {
+            xt = x[j];
+            x[j] = x[i];
+            x[i] = xt;
+        }
+        k = n / 2;
+        while (k <= j) {
+            j -= k;
+            k /= 2;
+        }
+        j += k;
+    }
+    /* Determine how many bits of dynamic range are in the input. */
+    max = 0;
+    for (i = 0; i < n; ++i)
+        if (abs(x[i]) > max)
+            max = abs(x[i]);
+    /* The FFT has a gain of M bits, so we need to attenuate the input
+     * by M bits minus the number of leading zeroes in the input's
+     * range in order to avoid overflows.  */
+    for (lz = 0; lz < m; ++lz)
+        if (max & (1 << (15-lz)))
+            break;
+
+    /* Basic butterflies (2-point FFT, real twiddle factors):
+     * x[i]   = x[i] +  1 * x[i+1]
+     * x[i+1] = x[i] + -1 * x[i+1]
+     */
+    /* The quantization error introduced by attenuating the input at
+     * any given stage of the FFT has a cascading effect, so we hold
+     * off on it until it's absolutely necessary. */
+    for (i = 0; i < n; i += 2) {
+        int atten = (lz == 0);
+        xt = x[i] >> atten;
+        x[i]     = xt + (x[i + 1] >> atten);
+        x[i + 1] = xt - (x[i + 1] >> atten);
+    }
+
+    /* The rest of the butterflies, in stages from 1..m */
+    for (k = 1; k < m; ++k) {
+        int n1, n2, n4;
+        /* Start attenuating once we hit the number of leading zeros. */
+        int atten = (k >= lz);
+
+        n4 = k - 1;
+        n2 = k;
+        n1 = k + 1;
+        /* Stride over each (1 << (k+1)) points */
+        for (i = 0; i < n; i += (1 << n1)) {
+            /* Basic butterfly with real twiddle factors:
+             * x[i]          = x[i] +  1 * x[i + (1<<k)]
+             * x[i + (1<<k)] = x[i] + -1 * x[i + (1<<k)]
+             */
+            xt = x[i] >> atten;
+            x[i]             = xt + (x[i + (1 << n2)] >> atten);
+            x[i + (1 << n2)] = xt - (x[i + (1 << n2)] >> atten);
+
+            /* The other ones with real twiddle factors:
+             * x[i + (1<<k) + (1<<(k-1))]
+             *   = 0 * x[i + (1<<k-1)] + -1 * x[i + (1<<k) + (1<<k-1)]
+             * x[i + (1<<(k-1))]
+             *   = 1 * x[i + (1<<k-1)] +  0 * x[i + (1<<k) + (1<<k-1)]
+             */
+            x[i + (1 << n2) + (1 << n4)] = -x[i + (1 << n2) + (1 << n4)] >> atten;
+            x[i + (1 << n4)]             =  x[i + (1 << n4)] >> atten;
+            
+            /* Butterflies with complex twiddle factors.
+             * There are (1<<k-1) of them.
+             */
+            for (j = 1; j < (1 << n4); ++j) {
+                frame_t cc, ss, t1, t2;
+                int i1, i2, i3, i4;
+
+                i1 = i + j;
+                i2 = i + (1 << n2) - j;
+                i3 = i + (1 << n2) + j;
+                i4 = i + (1 << n2) + (1 << n2) - j;
+
+                /*
+                 * cc = real(W[j * n / (1<<(k+1))])
+                 * ss = imag(W[j * n / (1<<(k+1))])
+                 */
+                cc = fe->ccc[j << (m - n1)];
+                ss = fe->sss[j << (m - n1)];
+
+                /* There are some symmetry properties which allow us
+                 * to get away with only four multiplications here. */
+                {
+                    int32 tmp1, tmp2;
+                    tmp1 = (int32)x[i3] * cc + (int32)x[i4] * ss;
+                    tmp2 = (int32)x[i3] * ss - (int32)x[i4] * cc;
+                    t1 = (int16)(tmp1 >> 15) >> atten;
+                    t2 = (int16)(tmp2 >> 15) >> atten;
+                }
+
+                x[i4] = (x[i2] >> atten) - t2;
+                x[i3] = (-x[i2] >> atten) - t2;
+                x[i2] = (x[i1] >> atten) - t1;
+                x[i1] = (x[i1] >> atten) + t1;
+            }
+        }
+    }
+
+    /* Return the residual scaling factor. */
+    return lz;
+}
+#else /* !FIXED16 */
+static int
+fe_fft_real(fe_t *fe)
+{
+    int i, j, k, m, n;
+    frame_t *x, xt;
+
+    x = fe->frame;
+    m = fe->fft_order;
+    n = fe->fft_size;
+
+    /* Bit-reverse the input. */
+    j = 0;
+    for (i = 0; i < n - 1; ++i) {
+        if (i < j) {
+            xt = x[j];
+            x[j] = x[i];
+            x[i] = xt;
+        }
+        k = n / 2;
+        while (k <= j) {
+            j -= k;
+            k /= 2;
+        }
+        j += k;
+    }
+
+    /* Basic butterflies (2-point FFT, real twiddle factors):
+     * x[i]   = x[i] +  1 * x[i+1]
+     * x[i+1] = x[i] + -1 * x[i+1]
+     */
+    for (i = 0; i < n; i += 2) {
+        xt = x[i];
+        x[i]     = (xt + x[i + 1]);
+        x[i + 1] = (xt - x[i + 1]);
+    }
+
+    /* The rest of the butterflies, in stages from 1..m */
+    for (k = 1; k < m; ++k) {
+        int n1, n2, n4;
+
+        n4 = k - 1;
+        n2 = k;
+        n1 = k + 1;
+        /* Stride over each (1 << (k+1)) points */
+        for (i = 0; i < n; i += (1 << n1)) {
+            /* Basic butterfly with real twiddle factors:
+             * x[i]          = x[i] +  1 * x[i + (1<<k)]
+             * x[i + (1<<k)] = x[i] + -1 * x[i + (1<<k)]
+             */
+            xt = x[i];
+            x[i]             = (xt + x[i + (1 << n2)]);
+            x[i + (1 << n2)] = (xt - x[i + (1 << n2)]);
+
+            /* The other ones with real twiddle factors:
+             * x[i + (1<<k) + (1<<(k-1))]
+             *   = 0 * x[i + (1<<k-1)] + -1 * x[i + (1<<k) + (1<<k-1)]
+             * x[i + (1<<(k-1))]
+             *   = 1 * x[i + (1<<k-1)] +  0 * x[i + (1<<k) + (1<<k-1)]
+             */
+            x[i + (1 << n2) + (1 << n4)] = -x[i + (1 << n2) + (1 << n4)];
+            x[i + (1 << n4)]             =  x[i + (1 << n4)];
+            
+            /* Butterflies with complex twiddle factors.
+             * There are (1<<k-1) of them.
+             */
+            for (j = 1; j < (1 << n4); ++j) {
+                frame_t cc, ss, t1, t2;
+                int i1, i2, i3, i4;
+
+                i1 = i + j;
+                i2 = i + (1 << n2) - j;
+                i3 = i + (1 << n2) + j;
+                i4 = i + (1 << n2) + (1 << n2) - j;
+
+                /*
+                 * cc = real(W[j * n / (1<<(k+1))])
+                 * ss = imag(W[j * n / (1<<(k+1))])
+                 */
+                cc = fe->ccc[j << (m - n1)];
+                ss = fe->sss[j << (m - n1)];
+
+                /* There are some symmetry properties which allow us
+                 * to get away with only four multiplications here. */
+                t1 = COSMUL(x[i3], cc) + COSMUL(x[i4], ss);
+                t2 = COSMUL(x[i3], ss) - COSMUL(x[i4], cc);
+
+                x[i4] = (x[i2] - t2);
+                x[i3] = (-x[i2] - t2);
+                x[i2] = (x[i1] - t1);
+                x[i1] = (x[i1] + t1);
+            }
+        }
+    }
+
+    /* This isn't used, but return it for completeness. */
+    return m;
+}
+#endif /* !FIXED16 */
+
+static void
+fe_spec_magnitude(fe_t *fe)
+{
+    frame_t *fft;
+    powspec_t *spec;
+    int32 j, scale, fftsize;
+
+    /* Do FFT and get the scaling factor back (only actually used in
+     * fixed-point).  Note the scaling factor is expressed in bits. */
+    scale = fe_fft_real(fe);
+
+    /* Convenience pointers to make things less awkward below. */
+    fft = fe->frame;
+    spec = fe->spec;
+    fftsize = fe->fft_size;
+
+    /* We need to scale things up the rest of the way to N. */
+    scale = fe->fft_order - scale;
+
+    /* The first point (DC coefficient) has no imaginary part */
+    {
+#ifdef FIXED16
+        spec[0] = fixlog(abs(fft[0]) << scale) * 2;
+#elif defined(FIXED_POINT)
+        spec[0] = FIXLN(abs(fft[0]) << scale) * 2;
+#else
+        spec[0] = fft[0] * fft[0];
+#endif
+    }
+
+    for (j = 1; j <= fftsize / 2; j++) {
+#ifdef FIXED16
+        int32 rr = fixlog(abs(fft[j]) << scale) * 2;
+        int32 ii = fixlog(abs(fft[fftsize - j]) << scale) * 2;
+        spec[j] = fe_log_add(rr, ii);
+#elif defined(FIXED_POINT)
+        int32 rr = FIXLN(abs(fft[j]) << scale) * 2;
+        int32 ii = FIXLN(abs(fft[fftsize - j]) << scale) * 2;
+        spec[j] = fe_log_add(rr, ii);
+#else
+        spec[j] = fft[j] * fft[j] + fft[fftsize - j] * fft[fftsize - j];
+#endif
+    }
+}
+
+static void
+fe_mel_spec(fe_t * fe)
+{
+    int whichfilt;
+    powspec_t *spec, *mfspec;
+
+    /* Convenience poitners. */
+    spec = fe->spec;
+    mfspec = fe->mfspec;
+
+    for (whichfilt = 0; whichfilt < fe->mel_fb->num_filters; whichfilt++) {
+        int spec_start, filt_start, i;
+
+        spec_start = fe->mel_fb->spec_start[whichfilt];
+        filt_start = fe->mel_fb->filt_start[whichfilt];
+
+#ifdef FIXED_POINT
+        mfspec[whichfilt] = spec[spec_start] + fe->mel_fb->filt_coeffs[filt_start];
+        for (i = 1; i < fe->mel_fb->filt_width[whichfilt]; i++) {
+            mfspec[whichfilt] = fe_log_add(mfspec[whichfilt],
+                                           spec[spec_start + i] +
+                                           fe->mel_fb->filt_coeffs[filt_start + i]);
+        }
+#else                           /* !FIXED_POINT */
+        mfspec[whichfilt] = 0;
+        for (i = 0; i < fe->mel_fb->filt_width[whichfilt]; i++)
+            mfspec[whichfilt] +=
+                spec[spec_start + i] * fe->mel_fb->filt_coeffs[filt_start + i];
+#endif                          /* !FIXED_POINT */
+    }
+}
+
+static void
+fe_mel_cep(fe_t * fe, mfcc_t *mfcep)
+{
+    int32 i;
+    powspec_t *mfspec;
+
+    /* Convenience pointer. */
+    mfspec = fe->mfspec;
+
+    for (i = 0; i < fe->mel_fb->num_filters; ++i) {
+#ifndef FIXED_POINT /* It's already in log domain for fixed point */
+        if (mfspec[i] > 0)
+            mfspec[i] = log(mfspec[i]);
+        else                    /* This number should be smaller than anything
+                                 * else, but not too small, so as to avoid
+                                 * infinities in the inverse transform (this is
+                                 * the frequency-domain equivalent of
+                                 * dithering) */
+            mfspec[i] = -10.0;
+#endif                          /* !FIXED_POINT */
+    }
+
+    /* If we are doing LOG_SPEC, then do nothing. */
+    if (fe->log_spec == RAW_LOG_SPEC) {
+        for (i = 0; i < fe->feature_dimension; i++) {
+            mfcep[i] = (mfcc_t) mfspec[i];
+        }
+    }
+    /* For smoothed spectrum, do DCT-II followed by (its inverse) DCT-III */
+    else if (fe->log_spec == SMOOTH_LOG_SPEC) {
+        /* FIXME: This is probably broken for fixed-point. */
+        fe_dct2(fe, mfspec, mfcep, 0);
+        fe_dct3(fe, mfcep, mfspec);
+        for (i = 0; i < fe->feature_dimension; i++) {
+            mfcep[i] = (mfcc_t) mfspec[i];
+        }
+    }
+    else if (fe->transform == DCT_II)
+        fe_dct2(fe, mfspec, mfcep, FALSE);
+    else if (fe->transform == DCT_HTK)
+        fe_dct2(fe, mfspec, mfcep, TRUE);
+    else
+        fe_spec2cep(fe, mfspec, mfcep);
+
+    return;
+}
+
+void
+fe_spec2cep(fe_t * fe, const powspec_t * mflogspec, mfcc_t * mfcep)
+{
+    int32 i, j, beta;
+
+    /* Compute C0 separately (its basis vector is 1) to avoid
+     * costly multiplications. */
+    mfcep[0] = mflogspec[0] / 2; /* beta = 0.5 */
+    for (j = 1; j < fe->mel_fb->num_filters; j++)
+       mfcep[0] += mflogspec[j]; /* beta = 1.0 */
+    mfcep[0] /= (frame_t) fe->mel_fb->num_filters;
+
+    for (i = 1; i < fe->num_cepstra; ++i) {
+        mfcep[i] = 0;
+        for (j = 0; j < fe->mel_fb->num_filters; j++) {
+            if (j == 0)
+                beta = 1;       /* 0.5 */
+            else
+                beta = 2;       /* 1.0 */
+            mfcep[i] += COSMUL(mflogspec[j],
+                               fe->mel_fb->mel_cosine[i][j]) * beta;
+        }
+       /* Note that this actually normalizes by num_filters, like the
+        * original Sphinx front-end, due to the doubled 'beta' factor
+        * above.  */
+        mfcep[i] /= (frame_t) fe->mel_fb->num_filters * 2;
+    }
+}
+
+void
+fe_dct2(fe_t * fe, const powspec_t * mflogspec, mfcc_t * mfcep, int htk)
+{
+    int32 i, j;
+
+    /* Compute C0 separately (its basis vector is 1) to avoid
+     * costly multiplications. */
+    mfcep[0] = mflogspec[0];
+    for (j = 1; j < fe->mel_fb->num_filters; j++)
+       mfcep[0] += mflogspec[j];
+    if (htk)
+        mfcep[0] = COSMUL(mfcep[0], fe->mel_fb->sqrt_inv_2n);
+    else /* sqrt(1/N) = sqrt(2/N) * 1/sqrt(2) */
+        mfcep[0] = COSMUL(mfcep[0], fe->mel_fb->sqrt_inv_n);
+
+    for (i = 1; i < fe->num_cepstra; ++i) {
+        mfcep[i] = 0;
+        for (j = 0; j < fe->mel_fb->num_filters; j++) {
+           mfcep[i] += COSMUL(mflogspec[j],
+                               fe->mel_fb->mel_cosine[i][j]);
+        }
+        mfcep[i] = COSMUL(mfcep[i], fe->mel_fb->sqrt_inv_2n);
+    }
+}
+
+void
+fe_lifter(fe_t *fe, mfcc_t *mfcep)
+{
+    int32 i;
+
+    if (fe->mel_fb->lifter_val == 0)
+        return;
+
+    for (i = 0; i < fe->num_cepstra; ++i) {
+        mfcep[i] = MFCCMUL(mfcep[i], fe->mel_fb->lifter[i]);
+    }
+}
+
+void
+fe_dct3(fe_t * fe, const mfcc_t * mfcep, powspec_t * mflogspec)
+{
+    int32 i, j;
+
+    for (i = 0; i < fe->mel_fb->num_filters; ++i) {
+        mflogspec[i] = COSMUL(mfcep[0], SQRT_HALF);
+        for (j = 1; j < fe->num_cepstra; j++) {
+            mflogspec[i] += COSMUL(mfcep[j],
+                                    fe->mel_fb->mel_cosine[j][i]);
+        }
+        mflogspec[i] = COSMUL(mflogspec[i], fe->mel_fb->sqrt_inv_2n);
+    }
+}
+
+int32
+fe_write_frame(fe_t * fe, mfcc_t * fea)
+{
+    fe_spec_magnitude(fe);
+    fe_mel_spec(fe);
+    fe_mel_cep(fe, fea);
+    fe_lifter(fe, fea);
+
+    return 1;
+}
+
+void *
+fe_create_2d(int32 d1, int32 d2, int32 elem_size)
+{
+    return (void *)ckd_calloc_2d(d1, d2, elem_size);
+}
+
+void
+fe_free_2d(void *arr)
+{
+    ckd_free_2d((void **)arr);
+}
diff --git a/src/libsphinxbase/fe/fe_warp.c b/src/libsphinxbase/fe/fe_warp.c
new file mode 100644 (file)
index 0000000..3bbc9fa
--- /dev/null
@@ -0,0 +1,285 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*********************************************************************
+ *
+ * File: fe_warp.c
+ * 
+ * Description: 
+ *      Allows a caller to choose a warping function.
+ *********************************************************************/
+
+/* static char rcsid[] = "@(#)$Id: fe_warp.c,v 1.2 2006/02/17 00:31:34 egouvea Exp $";*/
+\f
+#include "fe_warp_inverse_linear.h"
+#include "fe_warp_affine.h"
+#include "fe_warp_piecewise_linear.h"
+#include "fe_warp.h"
+
+#include "sphinxbase/err.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+
+/* This is for aliases for each of the entries below. Currently not
+   used.
+*/
+static char *__name2id[] = {
+    "inverse",
+    "linear",
+    "piecewise",
+    NULL
+};
+
+static char *name2id[] = {
+    "inverse_linear",
+    "affine",
+    "piecewise_linear",
+    NULL
+};
+\f
+static fe_warp_conf_t fe_warp_conf[FE_WARP_ID_MAX + 1] = {
+    {fe_warp_inverse_linear_set_parameters,
+     fe_warp_inverse_linear_doc,
+     fe_warp_inverse_linear_id,
+     fe_warp_inverse_linear_n_param,
+     fe_warp_inverse_linear_warped_to_unwarped,
+     fe_warp_inverse_linear_unwarped_to_warped,
+     fe_warp_inverse_linear_print},     /* Inverse linear warping */
+    {fe_warp_affine_set_parameters,
+     fe_warp_affine_doc,
+     fe_warp_affine_id,
+     fe_warp_affine_n_param,
+     fe_warp_affine_warped_to_unwarped,
+     fe_warp_affine_unwarped_to_warped,
+     fe_warp_affine_print},     /* Affine warping */
+    {fe_warp_piecewise_linear_set_parameters,
+     fe_warp_piecewise_linear_doc,
+     fe_warp_piecewise_linear_id,
+     fe_warp_piecewise_linear_n_param,
+     fe_warp_piecewise_linear_warped_to_unwarped,
+     fe_warp_piecewise_linear_unwarped_to_warped,
+     fe_warp_piecewise_linear_print},   /* Piecewise_Linear warping */
+};
+
+int
+fe_warp_set(melfb_t *mel, const char *id_name)
+{
+    uint32 i;
+
+    for (i = 0; name2id[i]; i++) {
+        if (strcmp(id_name, name2id[i]) == 0) {
+            mel->warp_id = i;
+            break;
+        }
+    }
+
+    if (name2id[i] == NULL) {
+        for (i = 0; __name2id[i]; i++) {
+            if (strcmp(id_name, __name2id[i]) == 0) {
+                mel->warp_id = i;
+                break;
+            }
+        }
+        if (__name2id[i] == NULL) {
+            E_ERROR("Unimplemented warping function %s\n", id_name);
+            E_ERROR("Implemented functions are:\n");
+            for (i = 0; name2id[i]; i++) {
+                fprintf(stderr, "\t%s\n", name2id[i]);
+            }
+            mel->warp_id = FE_WARP_ID_NONE;
+
+            return FE_START_ERROR;
+        }
+    }
+
+    return FE_SUCCESS;
+}
+\f
+void
+fe_warp_set_parameters(melfb_t *mel, char const *param_str, float sampling_rate)
+{
+    if (mel->warp_id <= FE_WARP_ID_MAX) {
+        fe_warp_conf[mel->warp_id].set_parameters(param_str, sampling_rate);
+    }
+    else if (mel->warp_id == FE_WARP_ID_NONE) {
+        E_FATAL("feat module must be configured w/ a valid ID\n");
+    }
+    else {
+        E_FATAL
+            ("fe_warp module misconfigured with invalid fe_warp_id %u\n",
+             mel->warp_id);
+    }
+}
+\f
+const char *
+fe_warp_doc(melfb_t *mel)
+{
+    if (mel->warp_id <= FE_WARP_ID_MAX) {
+        return fe_warp_conf[mel->warp_id].doc();
+    }
+    else if (mel->warp_id == FE_WARP_ID_NONE) {
+        E_FATAL("fe_warp module must be configured w/ a valid ID\n");
+    }
+    else {
+        E_FATAL
+            ("fe_warp module misconfigured with invalid fe_warp_id %u\n",
+             mel->warp_id);
+    }
+
+    return NULL;
+}
+\f
+uint32
+fe_warp_id(melfb_t *mel)
+{
+    if (mel->warp_id <= FE_WARP_ID_MAX) {
+        assert(mel->warp_id == fe_warp_conf[mel->warp_id].id());
+        return mel->warp_id;
+    }
+    else if (mel->warp_id != FE_WARP_ID_NONE) {
+        E_FATAL
+            ("fe_warp module misconfigured with invalid fe_warp_id %u\n",
+             mel->warp_id);
+    }
+
+    return FE_WARP_ID_NONE;
+}
+\f
+uint32
+fe_warp_n_param(melfb_t *mel)
+{
+    if (mel->warp_id <= FE_WARP_ID_MAX) {
+        return fe_warp_conf[mel->warp_id].n_param();
+    }
+    else if (mel->warp_id == FE_WARP_ID_NONE) {
+        E_FATAL("fe_warp module must be configured w/ a valid ID\n");
+    }
+    else {
+        E_FATAL
+            ("fe_warp module misconfigured with invalid fe_warp_id %u\n",
+             mel->warp_id);
+    }
+
+    return 0;
+}
+\f
+float
+fe_warp_warped_to_unwarped(melfb_t *mel, float nonlinear)
+{
+    if (mel->warp_id <= FE_WARP_ID_MAX) {
+        return fe_warp_conf[mel->warp_id].warped_to_unwarped(nonlinear);
+    }
+    else if (mel->warp_id == FE_WARP_ID_NONE) {
+        E_FATAL("fe_warp module must be configured w/ a valid ID\n");
+    }
+    else {
+        E_FATAL
+            ("fe_warp module misconfigured with invalid fe_warp_id %u\n",
+             mel->warp_id);
+    }
+
+    return 0;
+}
+\f
+float
+fe_warp_unwarped_to_warped(melfb_t *mel,float linear)
+{
+    if (mel->warp_id <= FE_WARP_ID_MAX) {
+        return fe_warp_conf[mel->warp_id].unwarped_to_warped(linear);
+    }
+    else if (mel->warp_id == FE_WARP_ID_NONE) {
+        E_FATAL("fe_warp module must be configured w/ a valid ID\n");
+    }
+    else {
+        E_FATAL
+            ("fe_warp module misconfigured with invalid fe_warp_id %u\n",
+             mel->warp_id);
+    }
+
+    return 0;
+}
+\f
+void
+fe_warp_print(melfb_t *mel, const char *label)
+{
+    if (mel->warp_id <= FE_WARP_ID_MAX) {
+        fe_warp_conf[mel->warp_id].print(label);
+    }
+    else if (mel->warp_id == FE_WARP_ID_NONE) {
+        E_FATAL("fe_warp module must be configured w/ a valid ID\n");
+    }
+    else {
+        E_FATAL
+            ("fe_warp module misconfigured with invalid fe_warp_id %u\n",
+             mel->warp_id);
+    }
+}
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: fe_warp.c,v $
+ * Revision 1.2  2006/02/17 00:31:34  egouvea
+ * Removed switch -melwarp. Changed the default for window length to
+ * 0.025625 from 0.256 (so that a window at 16kHz sampling rate has
+ * exactly 410 samples). Cleaned up include's. Replaced some E_FATAL()
+ * with E_WARN() and return.
+ *
+ * Revision 1.1  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ */
diff --git a/src/libsphinxbase/fe/fe_warp.h b/src/libsphinxbase/fe/fe_warp.h
new file mode 100644 (file)
index 0000000..43d9ed6
--- /dev/null
@@ -0,0 +1,123 @@
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+\f
+#ifndef FE_WARP_H
+#define FE_WARP_H
+
+#include "fe_internal.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#define FE_WARP_ID_INVERSE_LINEAR      0
+#define FE_WARP_ID_AFFINE              1
+#define FE_WARP_ID_PIECEWISE_LINEAR    2
+#define FE_WARP_ID_EIDE_GISH           3
+#define FE_WARP_ID_MAX                 2
+#define FE_WARP_ID_NONE               0xffffffff
+
+typedef struct {
+    void (*set_parameters)(char const *param_str, float sampling_rate);
+    const char * (*doc)(void);
+    uint32 (*id)(void);
+    uint32 (*n_param)(void);
+    float (*warped_to_unwarped)(float nonlinear);
+    float (*unwarped_to_warped)(float linear);
+    void (*print)(const char *label);
+} fe_warp_conf_t;
+
+int fe_warp_set(melfb_t *mel, const char *id_name);
+
+uint32 fe_warp_id(melfb_t *mel);
+
+const char * fe_warp_doc(melfb_t *mel);
+
+void fe_warp_set_parameters(melfb_t *mel, char const *param_str, float sampling_rate);
+
+uint32 fe_warp_n_param(melfb_t *mel);
+
+float fe_warp_warped_to_unwarped(melfb_t *mel, float nonlinear);
+
+float fe_warp_unwarped_to_warped(melfb_t *mel, float linear);
+
+void fe_warp_print(melfb_t *mel, const char *label);
+
+#define FE_WARP_NO_SIZE        0xffffffff
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* FE_WARP_H */ 
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: fe_warp.h,v $
+ * Revision 1.2  2006/02/17 00:31:34  egouvea
+ * Removed switch -melwarp. Changed the default for window length to
+ * 0.025625 from 0.256 (so that a window at 16kHz sampling rate has
+ * exactly 410 samples). Cleaned up include's. Replaced some E_FATAL()
+ * with E_WARN() and return.
+ *
+ * Revision 1.1  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ */
diff --git a/src/libsphinxbase/fe/fe_warp_affine.c b/src/libsphinxbase/fe/fe_warp_affine.c
new file mode 100644 (file)
index 0000000..127cbf9
--- /dev/null
@@ -0,0 +1,214 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*********************************************************************
+ *
+ * File: fe_warp_affine.c
+ * 
+ * Description: 
+ *     Warp the frequency axis according to an affine function, i.e.:
+ *
+ *             w' = a * w + b
+ *     
+ *********************************************************************/
+
+/* static char rcsid[] = "@(#)$Id: fe_warp_affine.c,v 1.2 2006/02/17 00:31:34 egouvea Exp $"; */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996)
+#endif
+
+#include "sphinxbase/strfuncs.h"
+#include "sphinxbase/err.h"
+
+#include "fe_warp.h"
+#include "fe_warp_affine.h"
+
+#define N_PARAM                2
+#define YES             1
+#define NO              0
+
+/*
+ * params[0] : a
+ * params[1] : b
+ */
+static float params[N_PARAM] = { 1.0f, 0.0f };
+static int32 is_neutral = YES;
+static char p_str[256] = "";
+static float nyquist_frequency = 0.0f;
+\f
+
+const char *
+fe_warp_affine_doc()
+{
+    return "affine :== < w' = a * x + b >";
+}
+\f
+uint32
+fe_warp_affine_id()
+{
+    return FE_WARP_ID_AFFINE;
+}
+\f
+uint32
+fe_warp_affine_n_param()
+{
+    return N_PARAM;
+}
+\f
+void
+fe_warp_affine_set_parameters(char const *param_str, float sampling_rate)
+{
+    char *tok;
+    char *seps = " \t";
+    char temp_param_str[256];
+    int param_index = 0;
+
+    nyquist_frequency = sampling_rate / 2;
+    if (param_str == NULL) {
+        is_neutral = YES;
+        return;
+    }
+    /* The new parameters are the same as the current ones, so do nothing. */
+    if (strcmp(param_str, p_str) == 0) {
+        return;
+    }
+    is_neutral = NO;
+    strcpy(temp_param_str, param_str);
+    memset(params, 0, N_PARAM * sizeof(float));
+    strcpy(p_str, param_str);
+    /* FIXME: strtok() is not re-entrant... */
+    tok = strtok(temp_param_str, seps);
+    while (tok != NULL) {
+        params[param_index++] = (float) atof_c(tok);
+        tok = strtok(NULL, seps);
+        if (param_index >= N_PARAM) {
+            break;
+        }
+    }
+    if (tok != NULL) {
+        E_INFO
+            ("Affine warping takes up to two arguments, %s ignored.\n",
+             tok);
+    }
+    if (params[0] == 0) {
+        is_neutral = YES;
+        E_INFO
+            ("Affine warping cannot have slope zero, warping not applied.\n");
+    }
+}
+\f
+float
+fe_warp_affine_warped_to_unwarped(float nonlinear)
+{
+    if (is_neutral) {
+        return nonlinear;
+    }
+    else {
+        /* linear = (nonlinear - b) / a */
+        float temp = nonlinear - params[1];
+        temp /= params[0];
+        if (temp > nyquist_frequency) {
+            E_WARN
+                ("Warp factor %g results in frequency (%.1f) higher than Nyquist (%.1f)\n",
+                 params[0], temp, nyquist_frequency);
+        }
+        return temp;
+    }
+}
+\f
+float
+fe_warp_affine_unwarped_to_warped(float linear)
+{
+    if (is_neutral) {
+        return linear;
+    }
+    else {
+        /* nonlinear = a * linear - b */
+        float temp = linear * params[0];
+        temp += params[1];
+        return temp;
+    }
+}
+\f
+void
+fe_warp_affine_print(const char *label)
+{
+    uint32 i;
+
+    for (i = 0; i < N_PARAM; i++) {
+        printf("%s[%04u]: %6.3f ", label, i, params[i]);
+    }
+    printf("\n");
+}
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: fe_warp_affine.c,v $
+ * Revision 1.2  2006/02/17 00:31:34  egouvea
+ * Removed switch -melwarp. Changed the default for window length to
+ * 0.025625 from 0.256 (so that a window at 16kHz sampling rate has
+ * exactly 410 samples). Cleaned up include's. Replaced some E_FATAL()
+ * with E_WARN() and return.
+ *
+ * Revision 1.1  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ */
diff --git a/src/libsphinxbase/fe/fe_warp_affine.h b/src/libsphinxbase/fe/fe_warp_affine.h
new file mode 100644 (file)
index 0000000..88c93a4
--- /dev/null
@@ -0,0 +1,105 @@
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef FE_WARP_AFFINE_H
+#define FE_WARP_AFFINE_H
+
+#include "sphinxbase/fe.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+const char *
+fe_warp_affine_doc(void);
+
+uint32
+fe_warp_affine_id(void);
+
+uint32
+fe_warp_affine_n_param(void);
+
+void
+fe_warp_affine_set_parameters(char const *param_str, float sampling_rate);
+
+float
+fe_warp_affine_warped_to_unwarped(float nonlinear);
+
+float
+fe_warp_affine_unwarped_to_warped(float linear);
+
+void
+fe_warp_affine_print(const char *label);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* FE_WARP_AFFINE_H */ 
+
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: fe_warp_affine.h,v $
+ * Revision 1.1  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ */
diff --git a/src/libsphinxbase/fe/fe_warp_inverse_linear.c b/src/libsphinxbase/fe/fe_warp_inverse_linear.c
new file mode 100644 (file)
index 0000000..6b31285
--- /dev/null
@@ -0,0 +1,214 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*********************************************************************
+ *
+ * File: fe_warp_inverse_linear.c
+ * 
+ * Description: 
+ *     Warp the frequency axis according to an inverse_linear function, i.e.:
+ *
+ *             w' = w / a
+ *     
+ *********************************************************************/
+
+/* static char rcsid[] = "@(#)$Id: fe_warp_inverse_linear.c,v 1.3 2006/02/23 19:40:11 eht Exp $"; */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996)
+#endif
+
+#include "sphinxbase/strfuncs.h"
+#include "sphinxbase/err.h"
+
+#include "fe_warp.h"
+#include "fe_warp_inverse_linear.h"
+
+#define N_PARAM                1
+#define YES             1
+#define NO              0
+
+/*
+ * params[0] : a
+ */
+static float params[N_PARAM] = { 1.0f };
+static int32 is_neutral = YES;
+static char p_str[256] = "";
+static float nyquist_frequency = 0.0f;
+\f
+
+const char *
+fe_warp_inverse_linear_doc()
+{
+    return "inverse_linear :== < w' = x / a >";
+}
+\f
+uint32
+fe_warp_inverse_linear_id()
+{
+    return FE_WARP_ID_INVERSE_LINEAR;
+}
+\f
+uint32
+fe_warp_inverse_linear_n_param()
+{
+    return N_PARAM;
+}
+\f
+void
+fe_warp_inverse_linear_set_parameters(char const *param_str, float sampling_rate)
+{
+    char *tok;
+    char *seps = " \t";
+    char temp_param_str[256];
+    int param_index = 0;
+
+    nyquist_frequency = sampling_rate / 2;
+    if (param_str == NULL) {
+        is_neutral = YES;
+        return;
+    }
+    /* The new parameters are the same as the current ones, so do nothing. */
+    if (strcmp(param_str, p_str) == 0) {
+        return;
+    }
+    is_neutral = NO;
+    strcpy(temp_param_str, param_str);
+    memset(params, 0, N_PARAM * sizeof(float));
+    strcpy(p_str, param_str);
+    /* FIXME: strtok() is not re-entrant... */
+    tok = strtok(temp_param_str, seps);
+    while (tok != NULL) {
+        params[param_index++] = (float) atof_c(tok);
+        tok = strtok(NULL, seps);
+        if (param_index >= N_PARAM) {
+            break;
+        }
+    }
+    if (tok != NULL) {
+        E_INFO
+            ("Inverse linear warping takes only one argument, %s ignored.\n",
+             tok);
+    }
+    if (params[0] == 0) {
+        is_neutral = YES;
+        E_INFO
+            ("Inverse linear warping cannot have slope zero, warping not applied.\n");
+    }
+}
+\f
+float
+fe_warp_inverse_linear_warped_to_unwarped(float nonlinear)
+{
+    if (is_neutral) {
+        return nonlinear;
+    }
+    else {
+        /* linear = nonlinear * a */
+        float temp = nonlinear * params[0];
+        if (temp > nyquist_frequency) {
+            E_WARN
+                ("Warp factor %g results in frequency (%.1f) higher than Nyquist (%.1f)\n",
+                 params[0], temp, nyquist_frequency);
+        }
+        return temp;
+    }
+}
+\f
+float
+fe_warp_inverse_linear_unwarped_to_warped(float linear)
+{
+    if (is_neutral) {
+        return linear;
+    }
+    else {
+        /* nonlinear = a / linear */
+        float temp = linear / params[0];
+        return temp;
+    }
+}
+\f
+void
+fe_warp_inverse_linear_print(const char *label)
+{
+    uint32 i;
+
+    for (i = 0; i < N_PARAM; i++) {
+        printf("%s[%04u]: %6.3f ", label, i, params[i]);
+    }
+    printf("\n");
+}
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: fe_warp_inverse_linear.c,v $
+ * Revision 1.3  2006/02/23 19:40:11  eht
+ * corrected the doc string for the inverse linear warp function.
+ *
+ * Revision 1.2  2006/02/17 00:31:34  egouvea
+ * Removed switch -melwarp. Changed the default for window length to
+ * 0.025625 from 0.256 (so that a window at 16kHz sampling rate has
+ * exactly 410 samples). Cleaned up include's. Replaced some E_FATAL()
+ * with E_WARN() and return.
+ *
+ * Revision 1.1  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ */
diff --git a/src/libsphinxbase/fe/fe_warp_inverse_linear.h b/src/libsphinxbase/fe/fe_warp_inverse_linear.h
new file mode 100644 (file)
index 0000000..ca38c10
--- /dev/null
@@ -0,0 +1,105 @@
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef FE_WARP_inverse_linear_H
+#define FE_WARP_inverse_linear_H
+
+#include "sphinxbase/fe.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+const char *
+fe_warp_inverse_linear_doc(void);
+
+uint32
+fe_warp_inverse_linear_id(void);
+
+uint32
+fe_warp_inverse_linear_n_param(void);
+
+void
+fe_warp_inverse_linear_set_parameters(char const *param_str, float sampling_rate);
+
+float
+fe_warp_inverse_linear_warped_to_unwarped(float nonlinear);
+
+float
+fe_warp_inverse_linear_unwarped_to_warped(float linear);
+
+void
+fe_warp_inverse_linear_print(const char *label);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* FE_WARP_inverse_linear_H */ 
+
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: fe_warp_inverse_linear.h,v $
+ * Revision 1.1  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ */
diff --git a/src/libsphinxbase/fe/fe_warp_piecewise_linear.c b/src/libsphinxbase/fe/fe_warp_piecewise_linear.c
new file mode 100644 (file)
index 0000000..40e366e
--- /dev/null
@@ -0,0 +1,256 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*********************************************************************
+ *
+ * File: fe_warp_piecewise_linear.c
+ * 
+ * Description: 
+ *
+ *     Warp the frequency axis according to an piecewise linear
+ *     function. The function is linear up to a frequency F, where
+ *     the slope changes so that the Nyquist frequency in the warped
+ *     axis maps to the Nyquist frequency in the unwarped.
+ *
+ *             w' = a * w, w < F
+ *              w' = a' * w + b, W > F
+ *              w'(0) = 0
+ *              w'(F) = F
+ *              w'(Nyq) = Nyq
+ *     
+ *********************************************************************/
+
+/* static char rcsid[] = "@(#)$Id: fe_warp_piecewise_linear.c,v 1.2 2006/02/17 00:31:34 egouvea Exp $"; */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996)
+#endif
+
+#include "sphinxbase/strfuncs.h"
+#include "sphinxbase/err.h"
+
+#include "fe_warp.h"
+#include "fe_warp_piecewise_linear.h"
+
+#define N_PARAM                2
+#define YES             1
+#define NO              0
+
+/*
+ * params[0] : a
+ * params[1] : F (the non-differentiable point)
+ */
+static float params[N_PARAM] = { 1.0f, 6800.0f };
+static float final_piece[2];
+static int32 is_neutral = YES;
+static char p_str[256] = "";
+static float nyquist_frequency = 0.0f;
+\f
+
+const char *
+fe_warp_piecewise_linear_doc()
+{
+    return "piecewise_linear :== < w' = a * w, w < F >";
+}
+\f
+uint32
+fe_warp_piecewise_linear_id()
+{
+    return FE_WARP_ID_PIECEWISE_LINEAR;
+}
+\f
+uint32
+fe_warp_piecewise_linear_n_param()
+{
+    return N_PARAM;
+}
+\f
+void
+fe_warp_piecewise_linear_set_parameters(char const *param_str,
+                                        float sampling_rate)
+{
+    char *tok;
+    char *seps = " \t";
+    char temp_param_str[256];
+    int param_index = 0;
+
+    nyquist_frequency = sampling_rate / 2;
+    if (param_str == NULL) {
+        is_neutral = YES;
+        return;
+    }
+    /* The new parameters are the same as the current ones, so do nothing. */
+    if (strcmp(param_str, p_str) == 0) {
+        return;
+    }
+    is_neutral = NO;
+    strcpy(temp_param_str, param_str);
+    memset(params, 0, N_PARAM * sizeof(float));
+    memset(final_piece, 0, 2 * sizeof(float));
+    strcpy(p_str, param_str);
+    /* FIXME: strtok() is not re-entrant... */
+    tok = strtok(temp_param_str, seps);
+    while (tok != NULL) {
+        params[param_index++] = (float) atof_c(tok);
+        tok = strtok(NULL, seps);
+        if (param_index >= N_PARAM) {
+            break;
+        }
+    }
+    if (tok != NULL) {
+        E_INFO
+            ("Piecewise linear warping takes up to two arguments, %s ignored.\n",
+             tok);
+    }
+    if (params[1] < sampling_rate) {
+        /* Precompute these. These are the coefficients of a
+         * straight line that contains the points (F, aF) and (N,
+         * N), where a = params[0], F = params[1], N = Nyquist
+         * frequency.
+         */
+        if (params[1] == 0) {
+            params[1] = sampling_rate * 0.85f;
+        }
+        final_piece[0] =
+            (nyquist_frequency -
+             params[0] * params[1]) / (nyquist_frequency - params[1]);
+        final_piece[1] =
+            nyquist_frequency * params[1] * (params[0] -
+                                         1.0f) / (nyquist_frequency -
+                                                  params[1]);
+    }
+    else {
+        memset(final_piece, 0, 2 * sizeof(float));
+    }
+    if (params[0] == 0) {
+        is_neutral = YES;
+        E_INFO
+            ("Piecewise linear warping cannot have slope zero, warping not applied.\n");
+    }
+}
+\f
+float
+fe_warp_piecewise_linear_warped_to_unwarped(float nonlinear)
+{
+    if (is_neutral) {
+        return nonlinear;
+    }
+    else {
+        /* linear = (nonlinear - b) / a */
+        float temp;
+        if (nonlinear < params[0] * params[1]) {
+            temp = nonlinear / params[0];
+        }
+        else {
+            temp = nonlinear - final_piece[1];
+            temp /= final_piece[0];
+        }
+        if (temp > nyquist_frequency) {
+            E_WARN
+                ("Warp factor %g results in frequency (%.1f) higher than Nyquist (%.1f)\n",
+                 params[0], temp, nyquist_frequency);
+        }
+        return temp;
+    }
+}
+\f
+float
+fe_warp_piecewise_linear_unwarped_to_warped(float linear)
+{
+    if (is_neutral) {
+        return linear;
+    }
+    else {
+        float temp;
+        /* nonlinear = a * linear - b */
+        if (linear < params[1]) {
+            temp = linear * params[0];
+        }
+        else {
+            temp = final_piece[0] * linear + final_piece[1];
+        }
+        return temp;
+    }
+}
+\f
+void
+fe_warp_piecewise_linear_print(const char *label)
+{
+    uint32 i;
+
+    for (i = 0; i < N_PARAM; i++) {
+        printf("%s[%04u]: %6.3f ", label, i, params[i]);
+    }
+    printf("\n");
+}
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: fe_warp_piecewise_linear.c,v $
+ * Revision 1.2  2006/02/17 00:31:34  egouvea
+ * Removed switch -melwarp. Changed the default for window length to
+ * 0.025625 from 0.256 (so that a window at 16kHz sampling rate has
+ * exactly 410 samples). Cleaned up include's. Replaced some E_FATAL()
+ * with E_WARN() and return.
+ *
+ * Revision 1.1  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ */
diff --git a/src/libsphinxbase/fe/fe_warp_piecewise_linear.h b/src/libsphinxbase/fe/fe_warp_piecewise_linear.h
new file mode 100644 (file)
index 0000000..cd14773
--- /dev/null
@@ -0,0 +1,105 @@
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef FE_WARP_PIECEWIDE_LINEAR_H
+#define FE_WARP_PIECEWIDE_LINEAR_H
+
+#include "sphinxbase/fe.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+const char *
+fe_warp_piecewise_linear_doc(void);
+
+uint32
+fe_warp_piecewise_linear_id(void);
+
+uint32
+fe_warp_piecewise_linear_n_param(void);
+
+void
+fe_warp_piecewise_linear_set_parameters(char const *param_str, float sampling_rate);
+
+float
+fe_warp_piecewise_linear_warped_to_unwarped(float nonlinear);
+
+float
+fe_warp_piecewise_linear_unwarped_to_warped(float linear);
+
+void
+fe_warp_piecewise_linear_print(const char *label);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* FE_WARP_PIECEWIDE_LINEAR_H */ 
+
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: fe_warp_piecewise_linear.h,v $
+ * Revision 1.1  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ */
diff --git a/src/libsphinxbase/fe/fixlog.c b/src/libsphinxbase/fe/fixlog.c
new file mode 100644 (file)
index 0000000..8bd2d82
--- /dev/null
@@ -0,0 +1,166 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2005 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ * File: fixlog.c
+ *
+ * Description: Fast approximate fixed-point logarithms
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/fixpoint.h"
+
+#include "fe_internal.h"
+
+/* Table of log2(x/64)*(1<<DEFAULT_RADIX) */
+/* perl -e 'for (0..63) {my $x = 1 + $_/64; print "\t(uint32)(", log($x)/log(2), "*(1<<DEFAULT_RADIX)),\n"}' */
+static uint32 logtable[] = {
+    (uint32) (0 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.0223678130284545 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.0443941193584534 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.0660891904577724 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.0874628412503394 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.108524456778169 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.129283016944966 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.149747119504682 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.169925001442312 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.189824558880017 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.20945336562895 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.228818690495881 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.247927513443586 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.266786540694901 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.285402218862248 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.303780748177103 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.321928094887362 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.339850002884625 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.357552004618084 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.375039431346925 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.39231742277876 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.409390936137702 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.426264754702098 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.442943495848728 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.459431618637297 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.475733430966398 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.491853096329675 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.507794640198696 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.523561956057013 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.539158811108031 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.554588851677637 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.569855608330948 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.584962500721156 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.599912842187128 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.614709844115208 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.62935662007961 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.643856189774725 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.658211482751795 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.672425341971496 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.686500527183218 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.700439718141092 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.714245517666123 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.727920454563199 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.741466986401147 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.754887502163469 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.768184324776926 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.78135971352466 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.794415866350106 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.807354922057604 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.820178962415188 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.832890014164742 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.845490050944375 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.857980995127572 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.870364719583405 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.882643049361841 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.894817763307944 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.906890595608518 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.918863237274595 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.930737337562886 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.94251450533924 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.954196310386875 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.965784284662087 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.977279923499917 * (1 << DEFAULT_RADIX)),
+    (uint32) (0.988684686772166 * (1 << DEFAULT_RADIX)),
+};
+
+int32
+fixlog2(uint32 x)
+{
+    uint32 y;
+
+    if (x == 0)
+        return MIN_FIXLOG2;
+
+    /* Get the exponent. */
+#if defined(__GNUC__) && defined(__i386__) 
+  __asm__("bsrl %1, %0\n": "=r"(y): "g"(x):"cc");
+    x <<= (31 - y);
+#elif defined(__ppc__)
+  __asm__("cntlzw %0, %1\n": "=r"(y):"r"(x));
+    x <<= y;
+    y = 31 - y;
+#elif ((defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || \
+        defined(__ARM_ARCH_5TE__)) && !defined(__thumb__))
+  __asm__("clz %0, %1\n": "=r"(y):"r"(x));
+    x <<= y;
+    y = 31 - y;
+#else
+    for (y = 31; y >= 0; --y) {
+        if (x & 0x80000000)
+            break;
+        x <<= 1;
+    }
+#endif
+    y <<= DEFAULT_RADIX;
+    /* Do a table lookup for the MSB of the mantissa. */
+    x = (x >> 25) & 0x3f;
+    return y + logtable[x];
+}
+
+int
+fixlog(uint32 x)
+{
+    int32 y;
+
+    if (x == 0)
+        return MIN_FIXLOG;
+
+    y = fixlog2(x);
+    return FIXMUL(y, FIXLN_2);
+}
diff --git a/src/libsphinxbase/fe/yin.c b/src/libsphinxbase/fe/yin.c
new file mode 100644 (file)
index 0000000..a5e9a87
--- /dev/null
@@ -0,0 +1,321 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+ * Copyright (c) 2008 Beyond Access, Inc.  All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY BEYOND ACCESS, INC. ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL BEYOND ACCESS, INC.  NOR
+ * ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @file yin.c Implementation of pitch extraction.
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+/* This implements part of the YIN algorithm:
+ *
+ * "YIN, a fundamental frequency estimator for speech and music".
+ * Alain de Cheveigné and Hideki Kawahara.  Journal of the Acoustical
+ * Society of America, 111 (4), April 2002.
+ */
+
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/fixpoint.h"
+
+#include "sphinxbase/yin.h"
+
+#include <stdio.h>
+
+struct yin_s {
+    uint16 frame_size;       /** Size of analysis frame. */
+    uint16 search_threshold; /**< Threshold for finding period, in Q15 */
+    uint16 search_range;     /**< Range around best local estimate to search, in Q15 */
+    uint16 nfr;              /**< Number of frames read so far. */
+
+    unsigned char wsize;    /**< Size of smoothing window. */
+    unsigned char wstart;   /**< First frame in window. */
+    unsigned char wcur;     /**< Current frame of analysis. */
+    unsigned char endut;    /**< Hoch Hech! Are we at the utterance end? */
+
+    fixed32 **diff_window;  /**< Window of difference function outputs. */
+    uint16 *period_window;  /**< Window of best period estimates. */
+};
+
+/**
+ * The core of YIN: cumulative mean normalized difference function.
+ */
+static void
+cmn_diff(int16 const *signal, int32 *out_diff, int ndiff)
+{
+    uint32 cum, cshift;
+    int32 t, tscale;
+
+    out_diff[0] = 32768;
+    cum = 0;
+    cshift = 0;
+
+    /* Determine how many bits we can scale t up by below. */
+    for (tscale = 0; tscale < 32; ++tscale)
+        if (ndiff & (1<<(31-tscale)))
+            break;
+    --tscale; /* Avoid teh overflowz. */
+    /* printf("tscale is %d (ndiff - 1) << tscale is %d\n",
+       tscale, (ndiff-1) << tscale); */
+
+    /* Somewhat elaborate block floating point implementation.
+     * The fp implementation of this is really a lot simpler. */
+    for (t = 1; t < ndiff; ++t) {
+        uint32 dd, dshift, norm;
+        int j;
+
+        dd = 0;
+        dshift = 0;
+        for (j = 0; j < ndiff; ++j) {
+            int diff = signal[j] - signal[t + j];
+            /* Guard against overflows. */
+            if (dd > (1UL<<tscale)) {
+                dd >>= 1;
+                ++dshift;
+            }
+            dd += (diff * diff) >> dshift;
+        }
+        /* Make sure the diffs and cum are shifted to the same
+         * scaling factor (usually dshift will be zero) */
+        if (dshift > cshift) {
+            cum += dd << (dshift-cshift);
+        }
+        else {
+            cum += dd >> (cshift-dshift);
+        }
+
+        /* Guard against overflows and also ensure that (t<<tscale) > cum. */
+        while (cum > (1UL<<tscale)) {
+            cum >>= 1;
+            ++cshift;
+        }
+        /* Avoid divide-by-zero! */
+        if (cum == 0) cum = 1;
+        /* Calculate the normalizer in high precision. */
+        norm = (t << tscale) / cum;
+        /* Do a long multiply and shift down to Q15. */
+        out_diff[t] = (int32)(((long long)dd * norm)
+                              >> (tscale - 15 + cshift - dshift));
+        /* printf("dd %d cshift %d dshift %d scaledt %d cum %d norm %d cmn %d\n",
+           dd, cshift, dshift, (t<<tscale), cum, norm, out_diff[t]); */
+    }
+}
+
+yin_t *
+yin_init(int frame_size, float search_threshold,
+         float search_range, int smooth_window)
+{
+    yin_t *pe;
+
+    pe = ckd_calloc(1, sizeof(*pe));
+    pe->frame_size = frame_size;
+    pe->search_threshold = (uint16)(search_threshold * 32768);
+    pe->search_range = (uint16)(search_range * 32768);
+    pe->wsize = smooth_window * 2 + 1;
+    pe->diff_window = ckd_calloc_2d(pe->wsize,
+                                    pe->frame_size / 2,
+                                    sizeof(**pe->diff_window));
+    pe->period_window = ckd_calloc(pe->wsize,
+                                   sizeof(*pe->period_window));
+    return pe;
+}
+
+void
+yin_free(yin_t *pe)
+{
+    ckd_free_2d(pe->diff_window);
+    ckd_free(pe->period_window);
+    ckd_free(pe);
+}
+
+void
+yin_start(yin_t *pe)
+{
+    /* Reset the circular window pointers. */
+    pe->wstart = pe->endut = 0;
+    pe->nfr = 0;
+}
+
+void
+yin_end(yin_t *pe)
+{
+    pe->endut = 1;
+}
+
+int
+thresholded_search(int32 *diff_window, fixed32 threshold, int start, int end)
+{
+    int i, min, argmin;
+
+    min = INT_MAX;
+    argmin = 0;
+    for (i = start; i < end; ++i) {
+        int diff = diff_window[i];
+
+        if (diff < threshold) {
+            min = diff;
+            argmin = i;
+            break;
+        }
+        if (diff < min) {
+            min = diff;
+            argmin = i;
+        }
+    }
+    return argmin;
+}
+
+void
+yin_write(yin_t *pe, int16 const *frame)
+{
+    int outptr, difflen;
+
+    /* Rotate the window one frame forward. */
+    ++pe->wstart;
+    /* Fill in the frame before wstart. */
+    outptr = pe->wstart - 1;
+    /* Wrap around the window pointer. */
+    if (pe->wstart == pe->wsize)
+        pe->wstart = 0;
+
+    /* Now calculate normalized difference function. */
+    difflen = pe->frame_size / 2;
+    cmn_diff(frame, pe->diff_window[outptr], difflen);
+
+    /* Find the first point under threshold.  If not found, then
+     * use the absolute minimum. */
+    pe->period_window[outptr]
+        = thresholded_search(pe->diff_window[outptr],
+                             pe->search_threshold, 0, difflen);
+
+    /* Increment total number of frames. */
+    ++pe->nfr;
+}
+
+int
+yin_read(yin_t *pe, uint16 *out_period, uint16 *out_bestdiff)
+{
+    int wstart, wlen, half_wsize, i;
+    int best, best_diff, search_width, low_period, high_period;
+
+    half_wsize = (pe->wsize-1)/2;
+    /* Without any smoothing, just return the current value (don't
+     * need to do anything to the current poitner either). */
+    if (half_wsize == 0) {
+        if (pe->endut)
+            return 0;
+        *out_period = pe->period_window[0];
+        *out_bestdiff = pe->diff_window[0][pe->period_window[0]];
+        return 1;
+    }
+
+    /* We can't do anything unless we have at least (wsize-1)/2 + 1
+     * frames, unless we're at the end of the utterance. */
+    if (pe->endut == 0 && pe->nfr < half_wsize + 1) {
+        /* Don't increment the current pointer either. */
+        return 0;
+    }
+
+    /* Establish the smoothing window. */
+    /* End of utterance. */
+    if (pe->endut) {
+        /* We are done (no more data) when pe->wcur = pe->wstart. */
+        if (pe->wcur == pe->wstart)
+            return 0;
+        /* I.e. pe->wcur (circular minus) half_wsize. */
+        wstart = (pe->wcur + pe->wsize - half_wsize) % pe->wsize;
+        /* Number of frames from wstart up to pe->wstart. */
+        wlen = pe->wstart - wstart;
+        if (wlen < 0) wlen += pe->wsize;
+        /*printf("ENDUT! ");*/
+    }
+    /* Beginning of utterance. */
+    else if (pe->nfr < pe->wsize) {
+        wstart = 0;
+        wlen = pe->nfr;
+    }
+    /* Normal case, it is what it is. */
+    else {
+        wstart = pe->wstart;
+        wlen = pe->wsize;
+    }
+
+    /* Now (finally) look for the best local estimate. */
+    /* printf("Searching for local estimate in %d frames around %d\n",
+       wlen, pe->nfr + 1 - wlen); */
+    best = pe->period_window[pe->wcur];
+    best_diff = pe->diff_window[pe->wcur][best];
+    for (i = 0; i < wlen; ++i) {
+        int j = wstart + i;
+        int diff;
+
+        j %= pe->wsize;
+        diff = pe->diff_window[j][pe->period_window[j]];
+        /* printf("%.2f,%.2f ", 1.0 - (double)diff/32768,
+           pe->period_window[j] ? 8000.0/pe->period_window[j] : 8000.0); */
+        if (diff < best_diff) {
+            best_diff = diff;
+            best = pe->period_window[j];
+        }
+    }
+    /* printf("best: %.2f, %.2f\n", 1.0 - (double)best_diff/32768,
+       best ? 8000.0/best : 8000.0); */
+    /* If it's the same as the current one then return it. */
+    if (best == pe->period_window[pe->wcur]) {
+        /* Increment the current pointer. */
+        if (++pe->wcur == pe->wsize)
+            pe->wcur = 0;
+        *out_period = best;
+        *out_bestdiff = best_diff;
+        return 1;
+    }
+    /* Otherwise, redo the search inside a narrower range. */
+    search_width = best * pe->search_range / 32768;
+    /* printf("Search width = %d * %.2f = %d\n",
+       best, (double)pe->search_range/32768, search_width); */
+    if (search_width == 0) search_width = 1;
+    low_period = best - search_width;
+    high_period = best + search_width;
+    if (low_period < 0) low_period = 0;
+    if (high_period > pe->frame_size / 2) high_period = pe->frame_size / 2;
+    /* printf("Searching from %d to %d\n", low_period, high_period); */
+    best = thresholded_search(pe->diff_window[pe->wcur],
+                              pe->search_threshold,
+                              low_period, high_period);
+    best_diff = pe->diff_window[pe->wcur][best];
+
+    if (out_period)
+        *out_period = (best > 65535) ? 65535 : best;
+    if (out_bestdiff)
+        *out_bestdiff = (best_diff > 65535) ? 65535 : best_diff;
+
+    /* Increment the current pointer. */
+    if (++pe->wcur == pe->wsize)
+        pe->wcur = 0;
+    return 1;
+}
diff --git a/src/libsphinxbase/feat/Makefile.am b/src/libsphinxbase/feat/Makefile.am
new file mode 100644 (file)
index 0000000..d97b9f6
--- /dev/null
@@ -0,0 +1,14 @@
+noinst_LTLIBRARIES = libsphinxfeat.la
+
+libsphinxfeat_la_SOURCES =                     \
+       agc.c                                   \
+       cmn.c                                   \
+       cmn_prior.c                             \
+       lda.c                                   \
+       feat.c
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+          -I$(top_srcdir)/include \
+           -I$(top_builddir)/include 
+
+LIBOBJS = @LIBOBJS@
diff --git a/src/libsphinxbase/feat/Makefile.in b/src/libsphinxbase/feat/Makefile.in
new file mode 100644 (file)
index 0000000..1ef2a01
--- /dev/null
@@ -0,0 +1,469 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = src/libsphinxbase/feat
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsphinxfeat_la_LIBADD =
+am_libsphinxfeat_la_OBJECTS = agc.lo cmn.lo cmn_prior.lo lda.lo \
+       feat.lo
+libsphinxfeat_la_OBJECTS = $(am_libsphinxfeat_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libsphinxfeat_la_SOURCES)
+DIST_SOURCES = $(libsphinxfeat_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libsphinxfeat.la
+libsphinxfeat_la_SOURCES = \
+       agc.c                                   \
+       cmn.c                                   \
+       cmn_prior.c                             \
+       lda.c                                   \
+       feat.c
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+          -I$(top_srcdir)/include \
+           -I$(top_builddir)/include 
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/libsphinxbase/feat/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/libsphinxbase/feat/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
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libsphinxfeat.la: $(libsphinxfeat_la_OBJECTS) $(libsphinxfeat_la_DEPENDENCIES) 
+       $(LINK)  $(libsphinxfeat_la_OBJECTS) $(libsphinxfeat_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/agc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmn.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmn_prior.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/feat.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lda.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(LTLIBRARIES)
+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:
+
+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: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# 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/src/libsphinxbase/feat/agc.c b/src/libsphinxbase/feat/agc.c
new file mode 100644 (file)
index 0000000..719b94e
--- /dev/null
@@ -0,0 +1,225 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * agc.c -- Various forms of automatic gain control (AGC)
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.5  2005/06/21  19:25:41  arthchan2003
+ * 1, Fixed doxygen documentation. 2, Added $ keyword.
+ * 
+ * Revision 1.3  2005/03/30 01:22:46  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 04-Nov-95   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/agc.h"
+
+/* NOTE!  These must match the enum in agc.h */
+const char *agc_type_str[] = {
+    "none",
+    "max",
+    "emax",
+    "noise"
+};
+static const int n_agc_type_str = sizeof(agc_type_str)/sizeof(agc_type_str[0]);
+
+agc_type_t
+agc_type_from_str(const char *str)
+{
+    int i;
+
+    for (i = 0; i < n_agc_type_str; ++i) {
+        if (0 == strcmp(str, agc_type_str[i]))
+            return (agc_type_t)i;
+    }
+    E_FATAL("Unknown AGC type '%s'\n", str);
+    return AGC_NONE;
+}
+
+agc_t *agc_init(void)
+{
+    agc_t *agc;
+    agc = ckd_calloc(1, sizeof(*agc));
+    agc->noise_thresh = FLOAT2MFCC(2.0);
+    
+    return agc;
+}
+
+void agc_free(agc_t *agc)
+{
+    ckd_free(agc);
+}
+
+/**
+ * Normalize c0 for all frames such that max(c0) = 0.
+ */
+void
+agc_max(agc_t *agc, mfcc_t **mfc, int32 n_frame)
+{
+    int32 i;
+
+    if (n_frame <= 0)
+        return;
+    agc->obs_max = mfc[0][0];
+    for (i = 1; i < n_frame; i++) {
+        if (mfc[i][0] > agc->obs_max) {
+            agc->obs_max = mfc[i][0];
+            agc->obs_frame = 1;
+        }
+    }
+
+    E_INFO("AGCMax: obs=max= %.2f\n", agc->obs_max);
+    for (i = 0; i < n_frame; i++)
+        mfc[i][0] -= agc->obs_max;
+}
+
+void
+agc_emax_set(agc_t *agc, float32 m)
+{
+    agc->max = FLOAT2MFCC(m);
+    E_INFO("AGCEMax: max= %.2f\n", m);
+}
+
+float32
+agc_emax_get(agc_t *agc)
+{
+    return MFCC2FLOAT(agc->max);
+}
+
+void
+agc_emax(agc_t *agc, mfcc_t **mfc, int32 n_frame)
+{
+    int i;
+
+    if (n_frame <= 0)
+        return;
+    for (i = 1; i < n_frame; ++i) {
+        if (mfc[i][0] > agc->obs_max) {
+            agc->obs_max = mfc[i][0];
+            agc->obs_frame = 1;
+        }
+        mfc[i][0] -= agc->max;
+    }
+}
+
+/* Update estimated max for next utterance */
+void
+agc_emax_update(agc_t *agc)
+{
+    if (agc->obs_frame) {            /* Update only if some data observed */
+        agc->obs_max_sum += agc->obs_max;
+        agc->obs_utt++;
+
+        /* Re-estimate max over past history; decay the history */
+        agc->max = agc->obs_max_sum / agc->obs_utt;
+        if (agc->obs_utt == 8) {
+            agc->obs_max_sum /= 2;
+            agc->obs_utt = 4;
+        }
+    }
+    E_INFO("AGCEMax: obs= %.2f, new= %.2f\n", agc->obs_max, agc->max);
+
+    /* Reset the accumulators for the next utterance. */
+    agc->obs_frame = 0;
+    agc->obs_max = FLOAT2MFCC(-1000.0); /* Less than any real C0 value (hopefully!!) */
+}
+
+void
+agc_noise(agc_t *agc,
+          mfcc_t **cep,
+          int32 nfr)
+{
+    mfcc_t min_energy; /* Minimum log-energy */
+    mfcc_t noise_level;        /* Average noise_level */
+    int32 i;           /* frame index */
+    int32 noise_frames;        /* Number of noise frames */
+
+    /* Determine minimum log-energy in utterance */
+    min_energy = cep[0][0];
+    for (i = 0; i < nfr; ++i) {
+        if (cep[i][0] < min_energy)
+            min_energy = cep[i][0];
+    }
+
+    /* Average all frames between min_energy and min_energy + agc->noise_thresh */
+    noise_frames = 0;
+    noise_level = 0;
+    min_energy += agc->noise_thresh;
+    for (i = 0; i < nfr; ++i) {
+        if (cep[i][0] < min_energy) {
+            noise_level += cep[i][0];
+            noise_frames++;
+        }
+    }
+    noise_level /= noise_frames;
+
+    E_INFO("AGC NOISE: max= %6.3f\n", MFCC2FLOAT(noise_level));
+
+    /* Subtract noise_level from all log_energy values */
+    for (i = 0; i < nfr; ++i)
+        cep[i][0] -= noise_level;
+}
+
+void
+agc_set_threshold(agc_t *agc, float32 threshold)
+{
+    agc->noise_thresh = FLOAT2MFCC(threshold);
+}
+
+float32
+agc_get_threshold(agc_t *agc)
+{
+    return FLOAT2MFCC(agc->noise_thresh);
+}
diff --git a/src/libsphinxbase/feat/cmn.c b/src/libsphinxbase/feat/cmn.c
new file mode 100644 (file)
index 0000000..7d2c81d
--- /dev/null
@@ -0,0 +1,230 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * cmn.c -- Various forms of cepstral mean normalization
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.14  2006/02/24  15:57:47  egouvea
+ * Removed cmn = NULL from the cmn_free(), since it's pointless (my bad!).
+ * 
+ * Removed cmn_prior, which was surrounded by #if 0/#endif, since the
+ * function is already in cmn_prior.c
+ * 
+ * Revision 1.13  2006/02/23 03:47:49  arthchan2003
+ * Used Evandro's changes. Resolved conflicts.
+ *
+ *
+ * Revision 1.12  2006/02/23 00:48:23  egouvea
+ * Replaced loops resetting vectors with the more efficient memset()
+ *
+ * Revision 1.11  2006/02/22 23:43:55  arthchan2003
+ * Merged from the branch SPHINX3_5_2_RCI_IRII_BRANCH: Put data structure into the cmn_t structure.
+ *
+ * Revision 1.10.4.2  2005/10/17 04:45:57  arthchan2003
+ * Free stuffs in cmn and feat corectly.
+ *
+ * Revision 1.10.4.1  2005/07/05 06:25:08  arthchan2003
+ * Fixed dox-doc.
+ *
+ * Revision 1.10  2005/06/21 19:28:00  arthchan2003
+ * 1, Fixed doxygen documentation. 2, Added $ keyword.
+ *
+ * Revision 1.3  2005/03/30 01:22:46  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 20.Apr.2001  RAH (rhoughton@mediasite.com, ricky.houghton@cs.cmu.edu)
+ *              Added cmn_free() and moved *mean and *var out global space and named them cmn_mean and cmn_var
+ * 
+ * 28-Apr-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed the name norm_mean() to cmn().
+ * 
+ * 19-Jun-1996 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed to compute CMN over ALL dimensions of cep instead of 1..12.
+ * 
+ * 04-Nov-1995 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4244)
+#endif
+
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/cmn.h"
+
+/* NOTE!  These must match the enum in cmn.h */
+const char *cmn_type_str[] = {
+    "none",
+    "current",
+    "prior"
+};
+static const int n_cmn_type_str = sizeof(cmn_type_str)/sizeof(cmn_type_str[0]);
+
+cmn_type_t
+cmn_type_from_str(const char *str)
+{
+    int i;
+
+    for (i = 0; i < n_cmn_type_str; ++i) {
+        if (0 == strcmp(str, cmn_type_str[i]))
+            return (cmn_type_t)i;
+    }
+    E_FATAL("Unknown CMN type '%s'\n", str);
+    return CMN_NONE;
+}
+
+cmn_t *
+cmn_init(int32 veclen)
+{
+    cmn_t *cmn;
+    cmn = (cmn_t *) ckd_calloc(1, sizeof(cmn_t));
+    cmn->veclen = veclen;
+    cmn->cmn_mean = (mfcc_t *) ckd_calloc(veclen, sizeof(mfcc_t));
+    cmn->cmn_var = (mfcc_t *) ckd_calloc(veclen, sizeof(mfcc_t));
+    cmn->sum = (mfcc_t *) ckd_calloc(veclen, sizeof(mfcc_t));
+    /* A front-end dependent magic number */
+    cmn->cmn_mean[0] = FLOAT2MFCC(12.0);
+    cmn->nframe = 0;
+    E_INFO("mean[0]= %.2f, mean[1..%d]= 0.0\n",
+           MFCC2FLOAT(cmn->cmn_mean[0]), veclen - 1);
+
+    return cmn;
+}
+
+
+void
+cmn(cmn_t *cmn, mfcc_t ** mfc, int32 varnorm, int32 n_frame)
+{
+    mfcc_t *mfcp;
+    mfcc_t t;
+    int32 i, f;
+
+    assert(mfc != NULL);
+
+    if (n_frame <= 0)
+        return;
+
+    /* If cmn->cmn_mean wasn't NULL, we need to zero the contents */
+    memset(cmn->cmn_mean, 0, cmn->veclen * sizeof(mfcc_t));
+
+    /* Find mean cep vector for this utterance */
+    for (f = 0; f < n_frame; f++) {
+        mfcp = mfc[f];
+        for (i = 0; i < cmn->veclen; i++) {
+            cmn->cmn_mean[i] += mfcp[i];
+        }
+    }
+
+    for (i = 0; i < cmn->veclen; i++)
+        cmn->cmn_mean[i] /= n_frame;
+
+    E_INFO("CMN: ");
+    for (i = 0; i < cmn->veclen; i++)
+        E_INFOCONT("%5.2f ", MFCC2FLOAT(cmn->cmn_mean[i]));
+    E_INFOCONT("\n");
+    if (!varnorm) {
+        /* Subtract mean from each cep vector */
+        for (f = 0; f < n_frame; f++) {
+            mfcp = mfc[f];
+            for (i = 0; i < cmn->veclen; i++)
+                mfcp[i] -= cmn->cmn_mean[i];
+        }
+    }
+    else {
+        /* Scale cep vectors to have unit variance along each dimension, and subtract means */
+        /* If cmn->cmn_var wasn't NULL, we need to zero the contents */
+        memset(cmn->cmn_var, 0, cmn->veclen * sizeof(mfcc_t));
+
+        for (f = 0; f < n_frame; f++) {
+            mfcp = mfc[f];
+
+            for (i = 0; i < cmn->veclen; i++) {
+                t = mfcp[i] - cmn->cmn_mean[i];
+                cmn->cmn_var[i] += MFCCMUL(t, t);
+            }
+        }
+        for (i = 0; i < cmn->veclen; i++)
+            /* Inverse Std. Dev, RAH added type case from sqrt */
+            cmn->cmn_var[i] = FLOAT2MFCC(sqrt((float64)n_frame / MFCC2FLOAT(cmn->cmn_var[i])));
+
+        for (f = 0; f < n_frame; f++) {
+            mfcp = mfc[f];
+            for (i = 0; i < cmn->veclen; i++)
+                mfcp[i] = MFCCMUL((mfcp[i] - cmn->cmn_mean[i]), cmn->cmn_var[i]);
+        }
+    }
+}
+
+/* 
+ * RAH, free previously allocated memory
+ */
+void
+cmn_free(cmn_t * cmn)
+{
+    if (cmn != NULL) {
+        if (cmn->cmn_var)
+            ckd_free((void *) cmn->cmn_var);
+
+        if (cmn->cmn_mean)
+            ckd_free((void *) cmn->cmn_mean);
+
+        if (cmn->sum)
+            ckd_free((void *) cmn->sum);
+
+        ckd_free((void *) cmn);
+    }
+}
diff --git a/src/libsphinxbase/feat/cmn_prior.c b/src/libsphinxbase/feat/cmn_prior.c
new file mode 100644 (file)
index 0000000..97de6db
--- /dev/null
@@ -0,0 +1,168 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*************************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 2000 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * 30-Dec-2000  Rita Singh (rsingh@cs.cmu.edu) at Carnegie Mellon University
+ * Created
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4244)
+#endif
+
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/cmn.h"
+
+void
+cmn_prior_set(cmn_t *cmn, mfcc_t const * vec)
+{
+    int32 i;
+
+    E_INFO("cmn_prior_set: from < ");
+    for (i = 0; i < cmn->veclen; i++)
+        E_INFOCONT("%5.2f ", MFCC2FLOAT(cmn->cmn_mean[i]));
+    E_INFOCONT(">\n");
+
+    for (i = 0; i < cmn->veclen; i++) {
+        cmn->cmn_mean[i] = vec[i];
+        cmn->sum[i] = vec[i] * CMN_WIN;
+    }
+    cmn->nframe = CMN_WIN;
+
+    E_INFO("cmn_prior_set: to   < ");
+    for (i = 0; i < cmn->veclen; i++)
+        E_INFOCONT("%5.2f ", MFCC2FLOAT(cmn->cmn_mean[i]));
+    E_INFOCONT(">\n");
+}
+
+void
+cmn_prior_get(cmn_t *cmn, mfcc_t * vec)
+{
+    int32 i;
+
+    for (i = 0; i < cmn->veclen; i++)
+        vec[i] = cmn->cmn_mean[i];
+
+}
+
+static void
+cmn_prior_shiftwin(cmn_t *cmn)
+{
+    mfcc_t sf;
+    int32 i;
+
+    sf = FLOAT2MFCC(1.0) / cmn->nframe;
+    for (i = 0; i < cmn->veclen; i++)
+        cmn->cmn_mean[i] = cmn->sum[i] / cmn->nframe; /* sum[i] * sf */
+
+    /* Make the accumulation decay exponentially */
+    if (cmn->nframe >= CMN_WIN_HWM) {
+        sf = CMN_WIN * sf;
+        for (i = 0; i < cmn->veclen; i++)
+            cmn->sum[i] = MFCCMUL(cmn->sum[i], sf);
+        cmn->nframe = CMN_WIN;
+    }
+}
+
+void
+cmn_prior_update(cmn_t *cmn)
+{
+    mfcc_t sf;
+    int32 i;
+
+    if (cmn->nframe <= 0)
+        return;
+
+    E_INFO("cmn_prior_update: from < ");
+    for (i = 0; i < cmn->veclen; i++)
+        E_INFOCONT("%5.2f ", MFCC2FLOAT(cmn->cmn_mean[i]));
+    E_INFOCONT(">\n");
+
+    /* Update mean buffer */
+    sf = FLOAT2MFCC(1.0) / cmn->nframe;
+    for (i = 0; i < cmn->veclen; i++)
+        cmn->cmn_mean[i] = cmn->sum[i] / cmn->nframe; /* sum[i] * sf; */
+
+    /* Make the accumulation decay exponentially */
+    if (cmn->nframe > CMN_WIN_HWM) {
+        sf = CMN_WIN * sf;
+        for (i = 0; i < cmn->veclen; i++)
+            cmn->sum[i] = MFCCMUL(cmn->sum[i], sf);
+        cmn->nframe = CMN_WIN;
+    }
+
+    E_INFO("cmn_prior_update: to   < ");
+    for (i = 0; i < cmn->veclen; i++)
+        E_INFOCONT("%5.2f ", MFCC2FLOAT(cmn->cmn_mean[i]));
+    E_INFOCONT(">\n");
+}
+
+void
+cmn_prior(cmn_t *cmn, mfcc_t **incep, int32 varnorm, int32 nfr)
+{
+    int32 i, j;
+
+    if (varnorm)
+        E_FATAL
+            ("Variance normalization not implemented in live mode decode\n");
+
+    if (nfr <= 0)
+        return;
+
+    for (i = 0; i < nfr; i++) {
+        for (j = 0; j < cmn->veclen; j++) {
+            cmn->sum[j] += incep[i][j];
+            incep[i][j] -= cmn->cmn_mean[j];
+        }
+        ++cmn->nframe;
+    }
+
+    /* Shift buffer down if we have more than CMN_WIN_HWM frames */
+    if (cmn->nframe > CMN_WIN_HWM)
+        cmn_prior_shiftwin(cmn);
+}
diff --git a/src/libsphinxbase/feat/feat.c b/src/libsphinxbase/feat/feat.c
new file mode 100644 (file)
index 0000000..eed13be
--- /dev/null
@@ -0,0 +1,1456 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * feat.c -- Feature vector description and cepstra->feature computation.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.22  2006/02/23  03:59:40  arthchan2003
+ * Merged from branch SPHINX3_5_2_RCI_IRII_BRANCH: a, Free buffers correctly. b, Fixed dox-doc.
+ * 
+ * Revision 1.21.4.3  2005/10/17 04:45:57  arthchan2003
+ * Free stuffs in cmn and feat corectly.
+ *
+ * Revision 1.21.4.2  2005/09/26 02:19:57  arthchan2003
+ * Add message to show the directory which the feature is searched for.
+ *
+ * Revision 1.21.4.1  2005/07/03 22:55:50  arthchan2003
+ * More correct deallocation in feat.c. The cmn deallocation is still not correct at this point.
+ *
+ * Revision 1.21  2005/06/22 03:29:35  arthchan2003
+ * Makefile.am s  for all subdirectory of libs3decoder/
+ *
+ * Revision 1.4  2005/04/21 23:50:26  archan
+ * Some more refactoring on the how reporting of structures inside kbcore_t is done, it is now 50% nice. Also added class-based LM test case into test-decode.sh.in.  At this moment, everything in search mode 5 is already done.  It is time to test the idea whether the search can really be used.
+ *
+ * Revision 1.3  2005/03/30 01:22:46  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 20.Apr.2001  RAH (rhoughton@mediasite.com, ricky.houghton@cs.cmu.edu)
+ *              Adding feat_free() to free allocated memory
+ *
+ * 02-Jan-2001 Rita Singh (rsingh@cs.cmu.edu) at Carnegie Mellon University
+ *             Modified feat_s2mfc2feat_block() to handle empty buffers at
+ *             the end of an utterance
+ *
+ * 30-Dec-2000 Rita Singh (rsingh@cs.cmu.edu) at Carnegie Mellon University
+ *             Added feat_s2mfc2feat_block() to allow feature computation
+ *             from sequences of blocks of cepstral vectors
+ *
+ * 12-Jun-98   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Major changes to accommodate arbitrary feature input types.  Added
+ *             feat_read(), moved various cep2feat functions from other files into
+ *             this one.  Also, made this module object-oriented with the feat_t type.
+ *             Changed definition of s2mfc_read to let the caller manage MFC buffers.
+ * 
+ * 03-Oct-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added unistd.h include.
+ * 
+ * 02-Oct-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added check for sf argument to s2mfc_read being within file size.
+ * 
+ * 18-Sep-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added sf, ef parameters to s2mfc_read().
+ * 
+ * 10-Jan-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added feat_cepsize().
+ *             Added different feature-handling (s2_4x, s3_1x39 at this point).
+ *             Moved feature-dependent functions to feature-dependent files.
+ * 
+ * 09-Jan-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Moved constant declarations from feat.h into here.
+ * 
+ * 04-Nov-95   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+
+/*
+ * This module encapsulates different feature streams used by the Sphinx group.  New
+ * stream types can be added by augmenting feat_init() and providing an accompanying
+ * compute_feat function.  It also provides a "generic" feature vector definition for
+ * handling "arbitrary" speech input feature types (see the last section in feat_init()).
+ * In this case the speech input data should already be feature vectors; no computation,
+ * such as MFC->feature conversion, is available or needed.
+ */
+
+#include <assert.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4244 4996)
+#endif
+
+#include "sphinxbase/fe.h"
+#include "sphinxbase/feat.h"
+#include "sphinxbase/bio.h"
+#include "sphinxbase/pio.h"
+#include "sphinxbase/cmn.h"
+#include "sphinxbase/agc.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/glist.h"
+
+#define FEAT_VERSION   "1.0"
+#define FEAT_DCEP_WIN          2
+
+#ifdef DUMP_FEATURES
+static void
+cep_dump_dbg(feat_t *fcb, mfcc_t **mfc, int32 nfr, const char *text)
+{
+    int32 i, j;
+
+    E_INFO("%s\n", text);
+    for (i = 0; i < nfr; i++) {
+        for (j = 0; j < fcb->cepsize; j++) {
+            fprintf(stderr, "%f ", MFCC2FLOAT(mfc[i][j]));
+        }
+        fprintf(stderr, "\n");
+    }
+}
+static void
+feat_print_dbg(feat_t *fcb, mfcc_t ***feat, int32 nfr, const char *text)
+{
+    E_INFO("%s\n", text);
+    feat_print(fcb, feat, nfr, stderr);
+}
+#else /* !DUMP_FEATURES */
+#define cep_dump_dbg(fcb,mfc,nfr,text)
+#define feat_print_dbg(fcb,mfc,nfr,text)
+#endif
+
+int32 **
+parse_subvecs(char const *str)
+{
+    char const *strp;
+    int32 n, n2, l;
+    glist_t dimlist;            /* List of dimensions in one subvector */
+    glist_t veclist;            /* List of dimlists (subvectors) */
+    int32 **subvec;
+    gnode_t *gn, *gn2;
+
+    veclist = NULL;
+
+    strp = str;
+    for (;;) {
+        dimlist = NULL;
+
+        for (;;) {
+            if (sscanf(strp, "%d%n", &n, &l) != 1)
+                E_FATAL("'%s': Couldn't read int32 @pos %d\n", str,
+                        strp - str);
+            strp += l;
+
+            if (*strp == '-') {
+                strp++;
+
+                if (sscanf(strp, "%d%n", &n2, &l) != 1)
+                    E_FATAL("'%s': Couldn't read int32 @pos %d\n", str,
+                            strp - str);
+                strp += l;
+            }
+            else
+                n2 = n;
+
+            if ((n < 0) || (n > n2))
+                E_FATAL("'%s': Bad subrange spec ending @pos %d\n", str,
+                        strp - str);
+
+            for (; n <= n2; n++) {
+               gnode_t *gn;
+               for (gn = dimlist; gn; gn = gnode_next(gn))
+                   if (gnode_int32(gn) == n)
+                       break;
+               if (gn != NULL)
+                    E_FATAL("'%s': Duplicate dimension ending @pos %d\n",
+                            str, strp - str);
+
+                dimlist = glist_add_int32(dimlist, n);
+            }
+
+            if ((*strp == '\0') || (*strp == '/'))
+                break;
+
+            if (*strp != ',')
+                E_FATAL("'%s': Bad delimiter @pos %d\n", str, strp - str);
+
+            strp++;
+        }
+
+        veclist = glist_add_ptr(veclist, (void *) dimlist);
+
+        if (*strp == '\0')
+            break;
+
+        assert(*strp == '/');
+        strp++;
+    }
+
+    /* Convert the glists to arrays; remember the glists are in reverse order of the input! */
+    n = glist_count(veclist);   /* #Subvectors */
+    subvec = (int32 **) ckd_calloc(n + 1, sizeof(int32 *));     /* +1 for sentinel */
+    subvec[n] = NULL;           /* sentinel */
+
+    for (--n, gn = veclist; (n >= 0) && gn; gn = gnode_next(gn), --n) {
+        gn2 = (glist_t) gnode_ptr(gn);
+
+        n2 = glist_count(gn2);  /* Length of this subvector */
+        if (n2 <= 0)
+            E_FATAL("'%s': 0-length subvector\n", str);
+
+        subvec[n] = (int32 *) ckd_calloc(n2 + 1, sizeof(int32));        /* +1 for sentinel */
+        subvec[n][n2] = -1;     /* sentinel */
+
+        for (--n2; (n2 >= 0) && gn2; gn2 = gnode_next(gn2), --n2)
+            subvec[n][n2] = gnode_int32(gn2);
+        assert((n2 < 0) && (!gn2));
+    }
+    assert((n < 0) && (!gn));
+
+    /* Free the glists */
+    for (gn = veclist; gn; gn = gnode_next(gn)) {
+        gn2 = (glist_t) gnode_ptr(gn);
+        glist_free(gn2);
+    }
+    glist_free(veclist);
+
+    return subvec;
+}
+
+void
+subvecs_free(int32 **subvecs)
+{
+    int32 **sv;
+
+    for (sv = subvecs; sv && *sv; ++sv)
+        ckd_free(*sv);
+    ckd_free(subvecs);
+}
+
+int
+feat_set_subvecs(feat_t *fcb, int32 **subvecs)
+{
+    int32 **sv;
+    int32 n_sv, n_dim, i;
+
+    if (subvecs == NULL) {
+        subvecs_free(fcb->subvecs);
+        ckd_free(fcb->sv_buf);
+        ckd_free(fcb->sv_len);
+        fcb->n_sv = 0;
+        fcb->subvecs = NULL;
+        fcb->sv_len = NULL;
+        fcb->sv_buf = NULL;
+        fcb->sv_dim = 0;
+        return 0;
+    }
+
+    if (fcb->n_stream != 1) {
+        E_ERROR("Subvector specifications require single-stream features!");
+        return -1;
+    }
+
+    n_sv = 0;
+    n_dim = 0;
+    for (sv = subvecs; sv && *sv; ++sv) {
+        int32 *d;
+
+        for (d = *sv; d && *d != -1; ++d) {
+            ++n_dim;
+        }
+        ++n_sv;
+    }
+    if (n_dim > feat_dimension(fcb)) {
+        E_ERROR("Total dimensionality of subvector specification %d "
+                "> feature dimensionality %d\n", n_dim, feat_dimension(fcb));
+        return -1;
+    }
+
+    fcb->n_sv = n_sv;
+    fcb->subvecs = subvecs;
+    fcb->sv_len = ckd_calloc(n_sv, sizeof(*fcb->sv_len));
+    fcb->sv_buf = ckd_calloc(n_dim, sizeof(*fcb->sv_buf));
+    fcb->sv_dim = n_dim;
+    for (i = 0; i < n_sv; ++i) {
+        int32 *d;
+        for (d = subvecs[i]; d && *d != -1; ++d) {
+            ++fcb->sv_len[i];
+        }
+    }
+
+    return 0;
+}
+
+/**
+ * Project feature components to subvectors (if any).
+ */
+static void
+feat_subvec_project(feat_t *fcb, mfcc_t ***inout_feat, uint32 nfr)
+{
+    uint32 i;
+
+    if (fcb->subvecs == NULL)
+        return;
+    for (i = 0; i < nfr; ++i) {
+        mfcc_t *out;
+        int32 j;
+
+        out = fcb->sv_buf;
+        for (j = 0; j < fcb->n_sv; ++j) {
+            int32 *d;
+            for (d = fcb->subvecs[j]; d && *d != -1; ++d) {
+                *out++ = inout_feat[i][0][*d];
+            }
+        }
+        memcpy(inout_feat[i][0], fcb->sv_buf, fcb->sv_dim * sizeof(*fcb->sv_buf));
+    }
+}
+
+mfcc_t ***
+feat_array_alloc(feat_t * fcb, int32 nfr)
+{
+    int32 i, j, k;
+    mfcc_t *data, *d, ***feat;
+
+    assert(fcb);
+    assert(nfr > 0);
+    assert(feat_dimension(fcb) > 0);
+
+    /* Make sure to use the dimensionality of the features *before*
+       LDA and subvector projection. */
+    k = 0;
+    for (i = 0; i < fcb->n_stream; ++i)
+        k += fcb->stream_len[i];
+    assert(k >= feat_dimension(fcb));
+    assert(k >= fcb->sv_dim);
+
+    feat =
+        (mfcc_t ***) ckd_calloc_2d(nfr, feat_dimension1(fcb), sizeof(mfcc_t *));
+    data = (mfcc_t *) ckd_calloc(nfr * k, sizeof(mfcc_t));
+
+    for (i = 0; i < nfr; i++) {
+        d = data + i * k;
+        for (j = 0; j < feat_dimension1(fcb); j++) {
+            feat[i][j] = d;
+            d += feat_dimension2(fcb, j);
+        }
+    }
+
+    return feat;
+}
+
+void
+feat_array_free(mfcc_t ***feat)
+{
+    ckd_free(feat[0][0]);
+    ckd_free_2d((void **)feat);
+}
+
+static void
+feat_s2_4x_cep2feat(feat_t * fcb, mfcc_t ** mfc, mfcc_t ** feat)
+{
+    mfcc_t *f;
+    mfcc_t *w, *_w;
+    mfcc_t *w1, *w_1, *_w1, *_w_1;
+    mfcc_t d1, d2;
+    int32 i, j;
+
+    assert(fcb);
+    assert(feat_cepsize(fcb) == 13);
+    assert(feat_n_stream(fcb) == 4);
+    assert(feat_stream_len(fcb, 0) == 12);
+    assert(feat_stream_len(fcb, 1) == 24);
+    assert(feat_stream_len(fcb, 2) == 3);
+    assert(feat_stream_len(fcb, 3) == 12);
+    assert(feat_window_size(fcb) == 4);
+
+    /* CEP; skip C0 */
+    memcpy(feat[0], mfc[0] + 1, (feat_cepsize(fcb) - 1) * sizeof(mfcc_t));
+
+    /*
+     * DCEP(SHORT): mfc[2] - mfc[-2]
+     * DCEP(LONG):  mfc[4] - mfc[-4]
+     */
+    w = mfc[2] + 1;             /* +1 to skip C0 */
+    _w = mfc[-2] + 1;
+
+    f = feat[1];
+    for (i = 0; i < feat_cepsize(fcb) - 1; i++) /* Short-term */
+        f[i] = w[i] - _w[i];
+
+    w = mfc[4] + 1;             /* +1 to skip C0 */
+    _w = mfc[-4] + 1;
+
+    for (j = 0; j < feat_cepsize(fcb) - 1; i++, j++)    /* Long-term */
+        f[i] = w[j] - _w[j];
+
+    /* D2CEP: (mfc[3] - mfc[-1]) - (mfc[1] - mfc[-3]) */
+    w1 = mfc[3] + 1;            /* Final +1 to skip C0 */
+    _w1 = mfc[-1] + 1;
+    w_1 = mfc[1] + 1;
+    _w_1 = mfc[-3] + 1;
+
+    f = feat[3];
+    for (i = 0; i < feat_cepsize(fcb) - 1; i++) {
+        d1 = w1[i] - _w1[i];
+        d2 = w_1[i] - _w_1[i];
+
+        f[i] = d1 - d2;
+    }
+
+    /* POW: C0, DC0, D2C0; differences computed as above for rest of cep */
+    f = feat[2];
+    f[0] = mfc[0][0];
+    f[1] = mfc[2][0] - mfc[-2][0];
+
+    d1 = mfc[3][0] - mfc[-1][0];
+    d2 = mfc[1][0] - mfc[-3][0];
+    f[2] = d1 - d2;
+}
+
+
+static void
+feat_s3_1x39_cep2feat(feat_t * fcb, mfcc_t ** mfc, mfcc_t ** feat)
+{
+    mfcc_t *f;
+    mfcc_t *w, *_w;
+    mfcc_t *w1, *w_1, *_w1, *_w_1;
+    mfcc_t d1, d2;
+    int32 i;
+
+    assert(fcb);
+    assert(feat_cepsize(fcb) == 13);
+    assert(feat_n_stream(fcb) == 1);
+    assert(feat_stream_len(fcb, 0) == 39);
+    assert(feat_window_size(fcb) == 3);
+
+    /* CEP; skip C0 */
+    memcpy(feat[0], mfc[0] + 1, (feat_cepsize(fcb) - 1) * sizeof(mfcc_t));
+    /*
+     * DCEP: mfc[2] - mfc[-2];
+     */
+    f = feat[0] + feat_cepsize(fcb) - 1;
+    w = mfc[2] + 1;             /* +1 to skip C0 */
+    _w = mfc[-2] + 1;
+
+    for (i = 0; i < feat_cepsize(fcb) - 1; i++)
+        f[i] = w[i] - _w[i];
+
+    /* POW: C0, DC0, D2C0 */
+    f += feat_cepsize(fcb) - 1;
+
+    f[0] = mfc[0][0];
+    f[1] = mfc[2][0] - mfc[-2][0];
+
+    d1 = mfc[3][0] - mfc[-1][0];
+    d2 = mfc[1][0] - mfc[-3][0];
+    f[2] = d1 - d2;
+
+    /* D2CEP: (mfc[3] - mfc[-1]) - (mfc[1] - mfc[-3]) */
+    f += 3;
+
+    w1 = mfc[3] + 1;            /* Final +1 to skip C0 */
+    _w1 = mfc[-1] + 1;
+    w_1 = mfc[1] + 1;
+    _w_1 = mfc[-3] + 1;
+
+    for (i = 0; i < feat_cepsize(fcb) - 1; i++) {
+        d1 = w1[i] - _w1[i];
+        d2 = w_1[i] - _w_1[i];
+
+        f[i] = d1 - d2;
+    }
+}
+
+
+static void
+feat_s3_cep(feat_t * fcb, mfcc_t ** mfc, mfcc_t ** feat)
+{
+    assert(fcb);
+    assert(feat_n_stream(fcb) == 1);
+    assert(feat_window_size(fcb) == 0);
+
+    /* CEP */
+    memcpy(feat[0], mfc[0], feat_cepsize(fcb) * sizeof(mfcc_t));
+}
+
+static void
+feat_s3_cep_dcep(feat_t * fcb, mfcc_t ** mfc, mfcc_t ** feat)
+{
+    mfcc_t *f;
+    mfcc_t *w, *_w;
+    int32 i;
+
+    assert(fcb);
+    assert(feat_n_stream(fcb) == 1);
+    assert(feat_stream_len(fcb, 0) == feat_cepsize(fcb) * 2);
+    assert(feat_window_size(fcb) == 2);
+
+    /* CEP */
+    memcpy(feat[0], mfc[0], feat_cepsize(fcb) * sizeof(mfcc_t));
+
+    /*
+     * DCEP: mfc[2] - mfc[-2];
+     */
+    f = feat[0] + feat_cepsize(fcb);
+    w = mfc[2];
+    _w = mfc[-2];
+
+    for (i = 0; i < feat_cepsize(fcb); i++)
+        f[i] = w[i] - _w[i];
+}
+
+static void
+feat_1s_c_d_dd_cep2feat(feat_t * fcb, mfcc_t ** mfc, mfcc_t ** feat)
+{
+    mfcc_t *f;
+    mfcc_t *w, *_w;
+    mfcc_t *w1, *w_1, *_w1, *_w_1;
+    mfcc_t d1, d2;
+    int32 i;
+
+    assert(fcb);
+    assert(feat_n_stream(fcb) == 1);
+    assert(feat_stream_len(fcb, 0) == feat_cepsize(fcb) * 3);
+    assert(feat_window_size(fcb) == FEAT_DCEP_WIN + 1);
+
+    /* CEP */
+    memcpy(feat[0], mfc[0], feat_cepsize(fcb) * sizeof(mfcc_t));
+
+    /*
+     * DCEP: mfc[w] - mfc[-w], where w = FEAT_DCEP_WIN;
+     */
+    f = feat[0] + feat_cepsize(fcb);
+    w = mfc[FEAT_DCEP_WIN];
+    _w = mfc[-FEAT_DCEP_WIN];
+
+    for (i = 0; i < feat_cepsize(fcb); i++)
+        f[i] = w[i] - _w[i];
+
+    /* 
+     * D2CEP: (mfc[w+1] - mfc[-w+1]) - (mfc[w-1] - mfc[-w-1]), 
+     * where w = FEAT_DCEP_WIN 
+     */
+    f += feat_cepsize(fcb);
+
+    w1 = mfc[FEAT_DCEP_WIN + 1];
+    _w1 = mfc[-FEAT_DCEP_WIN + 1];
+    w_1 = mfc[FEAT_DCEP_WIN - 1];
+    _w_1 = mfc[-FEAT_DCEP_WIN - 1];
+
+    for (i = 0; i < feat_cepsize(fcb); i++) {
+        d1 = w1[i] - _w1[i];
+        d2 = w_1[i] - _w_1[i];
+
+        f[i] = d1 - d2;
+    }
+}
+
+static void
+feat_1s_c_d_ld_dd_cep2feat(feat_t * fcb, mfcc_t ** mfc, mfcc_t ** feat)
+{
+    mfcc_t *f;
+    mfcc_t *w, *_w;
+    mfcc_t *w1, *w_1, *_w1, *_w_1;
+    mfcc_t d1, d2;
+    int32 i;
+
+    assert(fcb);
+    assert(feat_n_stream(fcb) == 1);
+    assert(feat_stream_len(fcb, 0) == feat_cepsize(fcb) * 4);
+    assert(feat_window_size(fcb) == FEAT_DCEP_WIN * 2);
+
+    /* CEP */
+    memcpy(feat[0], mfc[0], feat_cepsize(fcb) * sizeof(mfcc_t));
+
+    /*
+     * DCEP: mfc[w] - mfc[-w], where w = FEAT_DCEP_WIN;
+     */
+    f = feat[0] + feat_cepsize(fcb);
+    w = mfc[FEAT_DCEP_WIN];
+    _w = mfc[-FEAT_DCEP_WIN];
+
+    for (i = 0; i < feat_cepsize(fcb); i++)
+        f[i] = w[i] - _w[i];
+
+    /*
+     * LDCEP: mfc[w] - mfc[-w], where w = FEAT_DCEP_WIN * 2;
+     */
+    f += feat_cepsize(fcb);
+    w = mfc[FEAT_DCEP_WIN * 2];
+    _w = mfc[-FEAT_DCEP_WIN * 2];
+
+    for (i = 0; i < feat_cepsize(fcb); i++)
+        f[i] = w[i] - _w[i];
+
+    /* 
+     * D2CEP: (mfc[w+1] - mfc[-w+1]) - (mfc[w-1] - mfc[-w-1]), 
+     * where w = FEAT_DCEP_WIN 
+     */
+    f += feat_cepsize(fcb);
+
+    w1 = mfc[FEAT_DCEP_WIN + 1];
+    _w1 = mfc[-FEAT_DCEP_WIN + 1];
+    w_1 = mfc[FEAT_DCEP_WIN - 1];
+    _w_1 = mfc[-FEAT_DCEP_WIN - 1];
+
+    for (i = 0; i < feat_cepsize(fcb); i++) {
+        d1 = w1[i] - _w1[i];
+        d2 = w_1[i] - _w_1[i];
+
+        f[i] = d1 - d2;
+    }
+}
+
+static void
+feat_copy(feat_t * fcb, mfcc_t ** mfc, mfcc_t ** feat)
+{
+    int32 win, i, j;
+
+    win = feat_window_size(fcb);
+
+    /* Concatenate input features */
+    for (i = -win; i <= win; ++i) {
+        uint32 spos = 0;
+
+        for (j = 0; j < feat_n_stream(fcb); ++j) {
+            uint32 stream_len;
+
+            /* Unscale the stream length by the window. */
+            stream_len = feat_stream_len(fcb, j) / (2 * win + 1);
+            memcpy(feat[j] + ((i + win) * stream_len),
+                   mfc[i] + spos,
+                   stream_len * sizeof(mfcc_t));
+            spos += stream_len;
+        }
+    }
+}
+
+feat_t *
+feat_init(char const *type, cmn_type_t cmn, int32 varnorm,
+          agc_type_t agc, int32 breport, int32 cepsize)
+{
+    feat_t *fcb;
+
+    if (cepsize == 0)
+        cepsize = 13;
+    if (breport)
+        E_INFO
+            ("Initializing feature stream to type: '%s', ceplen=%d, CMN='%s', VARNORM='%s', AGC='%s'\n",
+             type, cepsize, cmn_type_str[cmn], varnorm ? "yes" : "no", agc_type_str[agc]);
+
+    fcb = (feat_t *) ckd_calloc(1, sizeof(feat_t));
+    fcb->refcount = 1;
+    fcb->name = (char *) ckd_salloc(type);
+    if (strcmp(type, "s2_4x") == 0) {
+        /* Sphinx-II format 4-stream feature (Hack!! hardwired constants below) */
+        if (cepsize != 13) {
+            E_ERROR("s2_4x features require cepsize == 13\n");
+            ckd_free(fcb);
+            return NULL;
+        }
+        fcb->cepsize = 13;
+        fcb->n_stream = 4;
+        fcb->stream_len = (int32 *) ckd_calloc(4, sizeof(int32));
+        fcb->stream_len[0] = 12;
+        fcb->stream_len[1] = 24;
+        fcb->stream_len[2] = 3;
+        fcb->stream_len[3] = 12;
+        fcb->out_dim = 51;
+        fcb->window_size = 4;
+        fcb->compute_feat = feat_s2_4x_cep2feat;
+    }
+    else if ((strcmp(type, "s3_1x39") == 0) || (strcmp(type, "1s_12c_12d_3p_12dd") == 0)) {
+        /* 1-stream cep/dcep/pow/ddcep (Hack!! hardwired constants below) */
+        if (cepsize != 13) {
+            E_ERROR("s2_4x features require cepsize == 13\n");
+            ckd_free(fcb);
+            return NULL;
+        }
+        fcb->cepsize = 13;
+        fcb->n_stream = 1;
+        fcb->stream_len = (int32 *) ckd_calloc(1, sizeof(int32));
+        fcb->stream_len[0] = 39;
+        fcb->out_dim = 39;
+        fcb->window_size = 3;
+        fcb->compute_feat = feat_s3_1x39_cep2feat;
+    }
+    else if (strncmp(type, "1s_c_d_dd", 9) == 0) {
+        fcb->cepsize = cepsize;
+        fcb->n_stream = 1;
+        fcb->stream_len = (int32 *) ckd_calloc(1, sizeof(int32));
+        fcb->stream_len[0] = cepsize * 3;
+        fcb->out_dim = cepsize * 3;
+        fcb->window_size = FEAT_DCEP_WIN + 1; /* ddcep needs the extra 1 */
+        fcb->compute_feat = feat_1s_c_d_dd_cep2feat;
+    }
+    else if (strncmp(type, "1s_c_d_ld_dd", 12) == 0) {
+        fcb->cepsize = cepsize;
+        fcb->n_stream = 1;
+        fcb->stream_len = (int32 *) ckd_calloc(1, sizeof(int32));
+        fcb->stream_len[0] = cepsize * 4;
+        fcb->out_dim = cepsize * 4;
+        fcb->window_size = FEAT_DCEP_WIN * 2;
+        fcb->compute_feat = feat_1s_c_d_ld_dd_cep2feat;
+    }
+    else if (strncmp(type, "cep_dcep", 8) == 0 || strncmp(type, "1s_c_d", 6) == 0) {
+        /* 1-stream cep/dcep */
+        fcb->cepsize = cepsize;
+        fcb->n_stream = 1;
+        fcb->stream_len = (int32 *) ckd_calloc(1, sizeof(int32));
+        fcb->stream_len[0] = feat_cepsize(fcb) * 2;
+        fcb->out_dim = fcb->stream_len[0];
+        fcb->window_size = 2;
+        fcb->compute_feat = feat_s3_cep_dcep;
+    }
+    else if (strncmp(type, "cep", 3) == 0 || strncmp(type, "1s_c", 4) == 0) {
+        /* 1-stream cep */
+        fcb->cepsize = cepsize;
+        fcb->n_stream = 1;
+        fcb->stream_len = (int32 *) ckd_calloc(1, sizeof(int32));
+        fcb->stream_len[0] = feat_cepsize(fcb);
+        fcb->out_dim = fcb->stream_len[0];
+        fcb->window_size = 0;
+        fcb->compute_feat = feat_s3_cep;
+    }
+    else if (strncmp(type, "1s_3c", 5) == 0 || strncmp(type, "1s_4c", 5) == 0) {
+       /* 1-stream cep with frames concatenated, so called cepwin features */
+        if (strncmp(type, "1s_3c", 5) == 0)
+            fcb->window_size = 3;
+        else
+           fcb->window_size = 4;
+
+        fcb->cepsize = cepsize;
+        fcb->n_stream = 1;
+        fcb->stream_len = (int32 *) ckd_calloc(1, sizeof(int32));
+        fcb->stream_len[0] = feat_cepsize(fcb) * (2 * fcb->window_size + 1);
+        fcb->out_dim = fcb->stream_len[0];
+        fcb->compute_feat = feat_copy;
+    }
+    else {
+        int32 i, l, k;
+        char *strp;
+        char *mtype = ckd_salloc(type);
+        char *wd = ckd_salloc(type);
+        /*
+         * Generic definition: Format should be %d,%d,%d,...,%d (i.e.,
+         * comma separated list of feature stream widths; #items =
+         * #streams).  An optional window size (frames will be
+         * concatenated) is also allowed, which can be specified with
+         * a colon after the list of feature streams.
+         */
+        l = strlen(mtype);
+        k = 0;
+        for (i = 1; i < l - 1; i++) {
+            if (mtype[i] == ',') {
+                mtype[i] = ' ';
+                k++;
+            }
+            else if (mtype[i] == ':') {
+                mtype[i] = '\0';
+                fcb->window_size = atoi(mtype + i + 1);
+                break;
+            }
+        }
+        k++;                    /* Presumably there are (#commas+1) streams */
+        fcb->n_stream = k;
+        fcb->stream_len = (int32 *) ckd_calloc(k, sizeof(int32));
+
+        /* Scan individual feature stream lengths */
+        strp = mtype;
+        i = 0;
+        fcb->out_dim = 0;
+        fcb->cepsize = 0;
+        while (sscanf(strp, "%s%n", wd, &l) == 1) {
+            strp += l;
+            if ((i >= fcb->n_stream)
+                || (sscanf(wd, "%d", &(fcb->stream_len[i])) != 1)
+                || (fcb->stream_len[i] <= 0))
+                E_FATAL("Bad feature type argument\n");
+            /* Input size before windowing */
+            fcb->cepsize += fcb->stream_len[i];
+            if (fcb->window_size > 0)
+                fcb->stream_len[i] *= (fcb->window_size * 2 + 1);
+            /* Output size after windowing */
+            fcb->out_dim += fcb->stream_len[i];
+            i++;
+        }
+        if (i != fcb->n_stream)
+            E_FATAL("Bad feature type argument\n");
+        if (fcb->cepsize != cepsize)
+           E_FATAL("Bad feature type argument\n");
+
+        /* Input is already the feature stream */
+        fcb->compute_feat = feat_copy;
+        ckd_free(mtype);
+        ckd_free(wd);
+    }
+
+    if (cmn != CMN_NONE)
+        fcb->cmn_struct = cmn_init(feat_cepsize(fcb));
+    fcb->cmn = cmn;
+    fcb->varnorm = varnorm;
+    if (agc != AGC_NONE) {
+        fcb->agc_struct = agc_init();
+        /*
+         * No need to check if agc is set to EMAX; agc_emax_set() changes only emax related things
+         * Moreover, if agc is not NONE and block mode is used, feat_agc() SILENTLY
+         * switches to EMAX
+         */
+        /* HACK: hardwired initial estimates based on use of CMN (from Sphinx2) */
+        agc_emax_set(fcb->agc_struct, (cmn != CMN_NONE) ? 5.0 : 10.0);
+    }
+    fcb->agc = agc;
+    /*
+     * Make sure this buffer is large enough to be used in feat_s2mfc2feat_block_utt()
+     */
+    fcb->cepbuf = (mfcc_t **) ckd_calloc_2d((LIVEBUFBLOCKSIZE < feat_window_size(fcb) * 2) ? feat_window_size(fcb) * 2 : LIVEBUFBLOCKSIZE,
+                                            feat_cepsize(fcb),
+                                            sizeof(mfcc_t));
+    /* This one is actually just an array of pointers to "flatten out"
+     * wraparounds. */
+    fcb->tmpcepbuf = ckd_calloc(2 * feat_window_size(fcb) + 1,
+                                sizeof(*fcb->tmpcepbuf));
+
+    return fcb;
+}
+
+
+void
+feat_print(feat_t * fcb, mfcc_t *** feat, int32 nfr, FILE * fp)
+{
+    int32 i, j, k;
+
+    for (i = 0; i < nfr; i++) {
+        fprintf(fp, "%8d:\n", i);
+
+        for (j = 0; j < feat_dimension1(fcb); j++) {
+            fprintf(fp, "\t%2d:", j);
+
+            for (k = 0; k < feat_dimension2(fcb, j); k++)
+                fprintf(fp, " %8.4f", MFCC2FLOAT(feat[i][j][k]));
+            fprintf(fp, "\n");
+        }
+    }
+
+    fflush(fp);
+}
+
+static void
+feat_cmn(feat_t *fcb, mfcc_t **mfc, int32 nfr, int32 beginutt, int32 endutt)
+{
+    cmn_type_t cmn_type = fcb->cmn;
+
+    if (!(beginutt && endutt)
+        && cmn_type != CMN_NONE) /* Only cmn_prior in block computation mode. */
+        cmn_type = CMN_PRIOR;
+
+    switch (cmn_type) {
+    case CMN_CURRENT:
+        cmn(fcb->cmn_struct, mfc, fcb->varnorm, nfr);
+        break;
+    case CMN_PRIOR:
+        cmn_prior(fcb->cmn_struct, mfc, fcb->varnorm, nfr);
+        if (endutt)
+            cmn_prior_update(fcb->cmn_struct);
+        break;
+    default:
+        ;
+    }
+    cep_dump_dbg(fcb, mfc, nfr, "After CMN");
+}
+
+static void
+feat_agc(feat_t *fcb, mfcc_t **mfc, int32 nfr, int32 beginutt, int32 endutt)
+{
+    agc_type_t agc_type = fcb->agc;
+
+    if (!(beginutt && endutt)
+        && agc_type != AGC_NONE) /* Only agc_emax in block computation mode. */
+        agc_type = AGC_EMAX;
+
+    switch (agc_type) {
+    case AGC_MAX:
+        agc_max(fcb->agc_struct, mfc, nfr);
+        break;
+    case AGC_EMAX:
+        agc_emax(fcb->agc_struct, mfc, nfr);
+        if (endutt)
+            agc_emax_update(fcb->agc_struct);
+        break;
+    case AGC_NOISE:
+        agc_noise(fcb->agc_struct, mfc, nfr);
+        break;
+    default:
+        ;
+    }
+    cep_dump_dbg(fcb, mfc, nfr, "After AGC");
+}
+
+static void
+feat_compute_utt(feat_t *fcb, mfcc_t **mfc, int32 nfr, int32 win, mfcc_t ***feat)
+{
+    int32 i;
+
+    cep_dump_dbg(fcb, mfc, nfr, "Incoming features (after padding)");
+
+    /* Create feature vectors */
+    for (i = win; i < nfr - win; i++) {
+        fcb->compute_feat(fcb, mfc + i, feat[i - win]);
+    }
+
+    feat_print_dbg(fcb, feat, nfr - win * 2, "After dynamic feature computation");
+
+    if (fcb->lda) {
+        feat_lda_transform(fcb, feat, nfr - win * 2);
+        feat_print_dbg(fcb, feat, nfr - win * 2, "After LDA");
+    }
+
+    if (fcb->subvecs) {
+        feat_subvec_project(fcb, feat, nfr - win * 2);
+        feat_print_dbg(fcb, feat, nfr - win * 2, "After subvector projection");
+    }
+}
+
+
+/**
+ * Read Sphinx-II format mfc file (s2mfc = Sphinx-II format MFC data).
+ * If out_mfc is NULL, no actual reading will be done, and the number of 
+ * frames (plus padding) that would be read is returned.
+ * 
+ * It's important that normalization is done before padding because
+ * frames outside the data we are interested in shouldn't be taken
+ * into normalization stats.
+ *
+ * @return # frames read (plus padding) if successful, -1 if
+ * error (e.g., mfc array too small).  
+ */
+static int32
+feat_s2mfc_read_norm_pad(feat_t *fcb, char *file, int32 win,
+                        int32 sf, int32 ef,
+                        mfcc_t ***out_mfc,
+                        int32 maxfr,
+                        int32 cepsize)
+{
+    FILE *fp;
+    int32 n_float32;
+    float32 *float_feat;
+    struct stat statbuf;
+    int32 i, n, byterev;
+    int32 start_pad, end_pad;
+    mfcc_t **mfc;
+
+    /* Initialize the output pointer to NULL, so that any attempts to
+       free() it if we fail before allocating it will not segfault! */
+    if (out_mfc)
+        *out_mfc = NULL;
+    E_INFO("Reading mfc file: '%s'[%d..%d]\n", file, sf, ef);
+    if (ef >= 0 && ef <= sf) {
+        E_ERROR("%s: End frame (%d) <= Start frame (%d)\n", file, ef, sf);
+        return -1;
+    }
+
+    /* Find filesize; HACK!! To get around intermittent NFS failures, use stat_retry */
+    if ((stat_retry(file, &statbuf) < 0)
+        || ((fp = fopen(file, "rb")) == NULL)) {
+        E_ERROR("Failed to open file '%s' for reading: %s\n", file, strerror(errno));
+        return -1;
+    }
+
+    /* Read #floats in header */
+    if (fread_retry(&n_float32, sizeof(int32), 1, fp) != 1) {
+        E_ERROR("%s: fread(#floats) failed\n", file);
+        fclose(fp);
+        return -1;
+    }
+
+    /* Check if n_float32 matches file size */
+    byterev = 0;
+    if ((int32) (n_float32 * sizeof(float32) + 4) != (int32) statbuf.st_size) { /* RAH, typecast both sides to remove compile warning */
+        n = n_float32;
+        SWAP_INT32(&n);
+
+        if ((int32) (n * sizeof(float32) + 4) != (int32) (statbuf.st_size)) {   /* RAH, typecast both sides to remove compile warning */
+            E_ERROR
+                ("%s: Header size field: %d(%08x); filesize: %d(%08x)\n",
+                 file, n_float32, n_float32, statbuf.st_size,
+                 statbuf.st_size);
+            fclose(fp);
+            return -1;
+        }
+
+        n_float32 = n;
+        byterev = 1;
+    }
+    if (n_float32 <= 0) {
+        E_ERROR("%s: Header size field (#floats) = %d\n", file, n_float32);
+        fclose(fp);
+        return -1;
+    }
+
+    /* Convert n to #frames of input */
+    n = n_float32 / cepsize;
+    if (n * cepsize != n_float32) {
+        E_ERROR("Header size field: %d; not multiple of %d\n", n_float32,
+                cepsize);
+        fclose(fp);
+        return -1;
+    }
+
+    /* Check start and end frames */
+    if (sf > 0) {
+        if (sf >= n) {
+            E_ERROR("%s: Start frame (%d) beyond file size (%d)\n", file,
+                    sf, n);
+            fclose(fp);
+            return -1;
+        }
+    }
+    if (ef < 0)
+        ef = n-1;
+    else if (ef >= n) {
+        E_WARN("%s: End frame (%d) beyond file size (%d), will truncate\n",
+               file, ef, n);
+        ef = n-1;
+    }
+
+    /* Add window to start and end frames */
+    sf -= win;
+    ef += win;
+    if (sf < 0) {
+        start_pad = -sf;
+        sf = 0;
+    }
+    else
+        start_pad = 0;
+    if (ef >= n) {
+        end_pad = ef - n + 1;
+        ef = n - 1;
+    }
+    else
+        end_pad = 0;
+
+    /* Limit n if indicated by [sf..ef] */
+    if ((ef - sf + 1) < n)
+        n = (ef - sf + 1);
+    if (maxfr > 0 && n + start_pad + end_pad > maxfr) {
+        E_ERROR("%s: Maximum output size(%d frames) < actual #frames(%d)\n",
+                file, maxfr, n + start_pad + end_pad);
+        fclose(fp);
+        return -1;
+    }
+
+    /* If no output buffer was supplied, then skip the actual data reading. */
+    if (out_mfc != NULL) {
+        /* Position at desired start frame and read actual MFC data */
+        mfc = (mfcc_t **)ckd_calloc_2d(n + start_pad + end_pad, cepsize, sizeof(mfcc_t));
+        if (sf > 0)
+            fseek(fp, sf * cepsize * sizeof(float32), SEEK_CUR);
+        n_float32 = n * cepsize;
+#ifdef FIXED_POINT
+        float_feat = ckd_calloc(n_float32, sizeof(float32));
+#else
+        float_feat = mfc[start_pad];
+#endif
+        if (fread_retry(float_feat, sizeof(float32), n_float32, fp) != n_float32) {
+            E_ERROR("%s: fread(%dx%d) (MFC data) failed\n", file, n, cepsize);
+            ckd_free_2d(mfc);
+            fclose(fp);
+            return -1;
+        }
+        if (byterev) {
+            for (i = 0; i < n_float32; i++) {
+                SWAP_FLOAT32(&float_feat[i]);
+            }
+        }
+#ifdef FIXED_POINT
+        for (i = 0; i < n_float32; ++i) {
+            mfc[start_pad][i] = FLOAT2MFCC(float_feat[i]);
+        }
+        ckd_free(float_feat);
+#endif
+
+        /* Normalize */
+        feat_cmn(fcb, mfc + start_pad, n, 1, 1);
+        feat_agc(fcb, mfc + start_pad, n, 1, 1);
+
+        /* Replicate start and end frames if necessary. */
+        for (i = 0; i < start_pad; ++i)
+            memcpy(mfc[i], mfc[start_pad], cepsize * sizeof(mfcc_t));
+        for (i = 0; i < end_pad; ++i)
+            memcpy(mfc[start_pad + n + i], mfc[start_pad + n - 1],
+                   cepsize * sizeof(mfcc_t));
+
+        *out_mfc = mfc;
+    }
+
+    fclose(fp);
+    return n + start_pad + end_pad;
+}
+
+
+
+int32
+feat_s2mfc2feat(feat_t * fcb, const char *file, const char *dir, const char *cepext,
+                int32 sf, int32 ef, mfcc_t *** feat, int32 maxfr)
+{
+    char *path;
+    char *ps = "/";
+    int32 win, nfr;
+    int32 file_length, cepext_length, path_length = 0;
+    mfcc_t **mfc;
+
+    if (fcb->cepsize <= 0) {
+        E_ERROR("Bad cepsize: %d\n", fcb->cepsize);
+        return -1;
+    }
+
+    if (cepext == NULL)
+        cepext = "";
+
+    /*
+     * Create mfc filename, combining file, dir and extension if
+     * necessary
+     */
+
+    /*
+     * First we decide about the path. If dir is defined, then use
+     * it. Otherwise assume the filename already contains the path.
+     */
+    if (dir == NULL) {
+        dir = "";
+        ps = "";
+        /*
+         * This is not true but some 3rd party apps
+         * may parse the output explicitly checking for this line
+         */
+        E_INFO("At directory . (current directory)\n");
+    }
+    else {
+        E_INFO("At directory %s\n", dir);
+        /*
+         * Do not forget the path separator!
+         */
+        path_length += strlen(dir) + 1;
+    }
+
+    /*
+     * Include cepext, if it's not already part of the filename.
+     */
+    file_length = strlen(file);
+    cepext_length = strlen(cepext);
+    if ((file_length > cepext_length)
+        && (strcmp(file + file_length - cepext_length, cepext) == 0)) {
+        cepext = "";
+        cepext_length = 0;
+    }
+
+    /*
+     * Do not forget the '\0'
+     */
+    path_length += file_length + cepext_length + 1;
+    path = (char*) ckd_calloc(path_length, sizeof(char));
+
+#ifdef HAVE_SNPRINTF
+    /*
+     * Paranoia is our best friend...
+     */
+    while ((file_length = snprintf(path, path_length, "%s%s%s%s", dir, ps, file, cepext)) > path_length) {
+        path_length = file_length;
+        path = (char*) ckd_realloc(path, path_length * sizeof(char));
+    }
+#else
+    sprintf(path, "%s%s%s%s", dir, ps, file, cepext);
+#endif
+
+    win = feat_window_size(fcb);
+    /* Pad maxfr with win, so we read enough raw feature data to
+     * calculate the requisite number of dynamic features. */
+    if (maxfr >= 0)
+        maxfr += win * 2;
+
+    if (feat != NULL) {
+        /* Read mfc file including window or padding if necessary. */
+        nfr = feat_s2mfc_read_norm_pad(fcb, path, win, sf, ef, &mfc, maxfr, fcb->cepsize);
+        ckd_free(path);
+        if (nfr < 0) {
+            ckd_free_2d((void **) mfc);
+            return -1;
+        }
+
+        /* Actually compute the features */
+        feat_compute_utt(fcb, mfc, nfr, win, feat);
+        
+        ckd_free_2d((void **) mfc);
+    }
+    else {
+        /* Just calculate the number of frames we would need. */
+        nfr = feat_s2mfc_read_norm_pad(fcb, path, win, sf, ef, NULL, maxfr, fcb->cepsize);
+        ckd_free(path);
+        if (nfr < 0)
+            return nfr;
+    }
+
+
+    return (nfr - win * 2);
+}
+
+static int32
+feat_s2mfc2feat_block_utt(feat_t * fcb, mfcc_t ** uttcep,
+                         int32 nfr, mfcc_t *** ofeat)
+{
+    mfcc_t **cepbuf;
+    int32 i, win, cepsize;
+
+    win = feat_window_size(fcb);
+    cepsize = feat_cepsize(fcb);
+
+    /* Copy and pad out the utterance (this requires that the
+     * feature computation functions always access the buffer via
+     * the frame pointers, which they do)  */
+    cepbuf = ckd_calloc(nfr + win * 2, sizeof(mfcc_t *));
+    memcpy(cepbuf + win, uttcep, nfr * sizeof(mfcc_t *));
+
+    /* Do normalization before we interpolate on the boundary */    
+    feat_cmn(fcb, cepbuf + win, nfr, 1, 1);
+    feat_agc(fcb, cepbuf + win, nfr, 1, 1);
+
+    /* Now interpolate */    
+    for (i = 0; i < win; ++i) {
+        cepbuf[i] = fcb->cepbuf[i];
+        memcpy(cepbuf[i], uttcep[0], cepsize * sizeof(mfcc_t));
+        cepbuf[nfr + win + i] = fcb->cepbuf[win + i];
+        memcpy(cepbuf[nfr + win + i], uttcep[nfr - 1], cepsize * sizeof(mfcc_t));
+    }
+    /* Compute as usual. */
+    feat_compute_utt(fcb, cepbuf, nfr + win * 2, win, ofeat);
+    ckd_free(cepbuf);
+    return nfr;
+}
+
+int32
+feat_s2mfc2feat_live(feat_t * fcb, mfcc_t ** uttcep, int32 *inout_ncep,
+                    int32 beginutt, int32 endutt, mfcc_t *** ofeat)
+{
+    int32 win, cepsize, nbufcep;
+    int32 i, j, nfeatvec;
+    int32 zero = 0;
+
+    /* Avoid having to check this everywhere. */
+    if (inout_ncep == NULL) inout_ncep = &zero;
+
+    /* Special case for entire utterances. */
+    if (beginutt && endutt && *inout_ncep > 0)
+        return feat_s2mfc2feat_block_utt(fcb, uttcep, *inout_ncep, ofeat);
+
+    win = feat_window_size(fcb);
+    cepsize = feat_cepsize(fcb);
+
+    /* Empty the input buffer on start of utterance. */
+    if (beginutt)
+        fcb->bufpos = fcb->curpos;
+
+    /* Calculate how much data is in the buffer already. */
+    nbufcep = fcb->bufpos - fcb->curpos;
+    if (nbufcep < 0)
+       nbufcep = fcb->bufpos + LIVEBUFBLOCKSIZE - fcb->curpos;
+    /* Add any data that we have to replicate. */
+    if (beginutt && *inout_ncep > 0)
+        nbufcep += win;
+    if (endutt)
+        nbufcep += win;
+
+    /* Only consume as much input as will fit in the buffer. */
+    if (nbufcep + *inout_ncep > LIVEBUFBLOCKSIZE) {
+        /* We also can't overwrite the trailing window, hence the
+         * reason why win is subtracted here. */
+        *inout_ncep = LIVEBUFBLOCKSIZE - nbufcep - win;
+        /* Cancel end of utterance processing. */
+        endutt = FALSE;
+    }
+
+    /* FIXME: Don't modify the input! */
+    feat_cmn(fcb, uttcep, *inout_ncep, beginutt, endutt);
+    feat_agc(fcb, uttcep, *inout_ncep, beginutt, endutt);
+
+    /* Replicate first frame into the first win frames if we're at the
+     * beginning of the utterance and there was some actual input to
+     * deal with.  (FIXME: Not entirely sure why that condition) */
+    if (beginutt && *inout_ncep > 0) {
+        for (i = 0; i < win; i++) {
+            memcpy(fcb->cepbuf[fcb->bufpos++], uttcep[0],
+                   cepsize * sizeof(mfcc_t));
+            fcb->bufpos %= LIVEBUFBLOCKSIZE;
+        }
+        /* Move the current pointer past this data. */
+        fcb->curpos = fcb->bufpos;
+        nbufcep -= win;
+    }
+
+    /* Copy in frame data to the circular buffer. */
+    for (i = 0; i < *inout_ncep; ++i) {
+        memcpy(fcb->cepbuf[fcb->bufpos++], uttcep[i],
+               cepsize * sizeof(mfcc_t));
+        fcb->bufpos %= LIVEBUFBLOCKSIZE;
+       ++nbufcep;
+    }
+
+    /* Replicate last frame into the last win frames if we're at the
+     * end of the utterance (even if there was no input, so we can
+     * flush the output). */
+    if (endutt) {
+        int32 tpos; /* Index of last input frame. */
+        if (fcb->bufpos == 0)
+            tpos = LIVEBUFBLOCKSIZE - 1;
+        else
+            tpos = fcb->bufpos - 1;
+        for (i = 0; i < win; ++i) {
+            memcpy(fcb->cepbuf[fcb->bufpos++], fcb->cepbuf[tpos],
+                   cepsize * sizeof(mfcc_t));
+            fcb->bufpos %= LIVEBUFBLOCKSIZE;
+        }
+    }
+
+    /* We have to leave the trailing window of frames. */
+    nfeatvec = nbufcep - win;
+    if (nfeatvec <= 0)
+        return 0; /* Do nothing. */
+
+    for (i = 0; i < nfeatvec; ++i) {
+        /* Handle wraparound cases. */
+        if (fcb->curpos - win < 0 || fcb->curpos + win >= LIVEBUFBLOCKSIZE) {
+            /* Use tmpcepbuf for this case.  Actually, we just need the pointers. */
+            for (j = -win; j <= win; ++j) {
+                int32 tmppos =
+                    (fcb->curpos + j + LIVEBUFBLOCKSIZE) % LIVEBUFBLOCKSIZE;
+               fcb->tmpcepbuf[win + j] = fcb->cepbuf[tmppos];
+            }
+            fcb->compute_feat(fcb, fcb->tmpcepbuf + win, ofeat[i]);
+        }
+        else {
+            fcb->compute_feat(fcb, fcb->cepbuf + fcb->curpos, ofeat[i]);
+        }
+       /* Move the read pointer forward. */
+        ++fcb->curpos;
+        fcb->curpos %= LIVEBUFBLOCKSIZE;
+    }
+
+    if (fcb->lda)
+        feat_lda_transform(fcb, ofeat, nfeatvec);
+
+    if (fcb->subvecs)
+        feat_subvec_project(fcb, ofeat, nfeatvec);
+
+    return nfeatvec;
+}
+
+feat_t *
+feat_retain(feat_t *f)
+{
+    ++f->refcount;
+    return f;
+}
+
+int
+feat_free(feat_t * f)
+{
+    if (f == NULL)
+        return 0;
+    if (--f->refcount > 0)
+        return f->refcount;
+
+    if (f->cepbuf)
+        ckd_free_2d((void **) f->cepbuf);
+    ckd_free(f->tmpcepbuf);
+
+    if (f->name) {
+        ckd_free((void *) f->name);
+    }
+    if (f->lda)
+        ckd_free_3d((void ***) f->lda);
+
+    ckd_free(f->stream_len);
+    ckd_free(f->sv_len);
+    ckd_free(f->sv_buf);
+    subvecs_free(f->subvecs);
+
+    cmn_free(f->cmn_struct);
+    agc_free(f->agc_struct);
+
+    ckd_free(f);
+    return 0;
+}
+
+
+void
+feat_report(feat_t * f)
+{
+    int i;
+    E_INFO_NOFN("Initialization of feat_t, report:\n");
+    E_INFO_NOFN("Feature type         = %s\n", f->name);
+    E_INFO_NOFN("Cepstral size        = %d\n", f->cepsize);
+    E_INFO_NOFN("Number of streams    = %d\n", f->n_stream);
+    for (i = 0; i < f->n_stream; i++) {
+        E_INFO_NOFN("Vector size of stream[%d]: %d\n", i,
+                    f->stream_len[i]);
+    }
+    E_INFO_NOFN("Number of subvectors = %d\n", f->n_sv);
+    for (i = 0; i < f->n_sv; i++) {
+        int32 *sv;
+
+        E_INFO_NOFN("Components of subvector[%d]:", i);
+        for (sv = f->subvecs[i]; sv && *sv != -1; ++sv)
+            E_INFOCONT(" %d", *sv);
+        E_INFOCONT("\n");
+    }
+    E_INFO_NOFN("Whether CMN is used  = %d\n", f->cmn);
+    E_INFO_NOFN("Whether AGC is used  = %d\n", f->agc);
+    E_INFO_NOFN("Whether variance is normalized = %d\n", f->varnorm);
+    E_INFO_NOFN("\n");
+}
diff --git a/src/libsphinxbase/feat/lda.c b/src/libsphinxbase/feat/lda.c
new file mode 100644 (file)
index 0000000..6700d4d
--- /dev/null
@@ -0,0 +1,162 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2006 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * lda.c -- Read and apply LDA matrices to features.
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include <assert.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4018)
+#endif
+
+#include "sphinxbase/feat.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/bio.h"
+#include "sphinxbase/err.h"
+
+#define MATRIX_FILE_VERSION "0.1"
+
+int32
+feat_read_lda(feat_t *feat, const char *ldafile, int32 dim)
+{
+    FILE *fh;
+    int32 byteswap, chksum_present;
+    uint32 chksum, i, m, n;
+    char **argname, **argval;
+
+    assert(feat);
+    if (feat->n_stream != 1) {
+        E_ERROR("LDA incompatible with multi-stream features (n_stream = %d)\n",
+                feat->n_stream);
+        return -1;
+    }
+
+    if ((fh = fopen(ldafile, "rb")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open transform file '%s' for reading: %s\n", ldafile, strerror(errno));
+        return -1;
+    }
+
+    if (bio_readhdr(fh, &argname, &argval, &byteswap) < 0) {
+        E_ERROR("Failed to read header from transform file '%s'\n", ldafile);
+        fclose(fh);
+        return -1;
+    }
+
+    chksum_present = 0;
+    for (i = 0; argname[i]; i++) {
+        if (strcmp(argname[i], "version") == 0) {
+            if (strcmp(argval[i], MATRIX_FILE_VERSION) != 0)
+                E_WARN("%s: Version mismatch: %s, expecting %s\n",
+                       ldafile, argval[i], MATRIX_FILE_VERSION);
+        }
+        else if (strcmp(argname[i], "chksum0") == 0) {
+            chksum_present = 1; /* Ignore the associated value */
+        }
+    }
+
+    bio_hdrarg_free(argname, argval);
+    argname = argval = NULL;
+
+    chksum = 0;
+
+    if (feat->lda)
+        ckd_free_3d((void ***)feat->lda);
+
+    {
+        /* Use a temporary variable to avoid strict-aliasing problems. */
+        void ***outlda;
+
+        if (bio_fread_3d(&outlda, sizeof(float32),
+                         &feat->n_lda, &m, &n,
+                         fh, byteswap, &chksum) < 0) {
+            E_ERROR_SYSTEM("%s: bio_fread_3d(lda) failed\n", ldafile);
+            fclose(fh);
+            return -1;
+        }
+        feat->lda = (void *)outlda;
+    }
+    fclose(fh);
+    
+#ifdef FIXED_POINT
+    /* FIXME: This is a fragile hack that depends on mfcc_t and
+     * float32 being the same size (which they are, but...) */
+    for (i = 0; i < feat->n_lda * m * n; ++i) {
+        feat->lda[0][0][i] = FLOAT2MFCC(((float *)feat->lda[0][0])[i]);
+    }
+#endif
+
+    /* Note that SphinxTrain stores the eigenvectors as row vectors. */
+    if (n != feat->stream_len[0])
+       E_FATAL("LDA matrix dimension %d doesn't match feature stream size %d\n", n, feat->stream_len[0]);
+    
+    /* Override dim from file if it is 0 or greater than m. */
+    if (dim > m || dim <= 0) {
+        dim = m;
+    }
+    feat->out_dim = dim;
+
+    return 0;
+}
+
+void
+feat_lda_transform(feat_t *fcb, mfcc_t ***inout_feat, uint32 nfr)
+{
+    mfcc_t *tmp;
+    uint32 i, j, k;
+
+    tmp = ckd_calloc(fcb->stream_len[0], sizeof(mfcc_t));
+    for (i = 0; i < nfr; ++i) {
+        /* Do the matrix multiplication inline here since fcb->lda
+         * is transposed (eigenvectors in rows not columns). */
+        /* FIXME: In the future we ought to use the BLAS. */
+        memset(tmp, 0, sizeof(mfcc_t) * fcb->stream_len[0]);
+        for (j = 0; j < feat_dimension(fcb); ++j) {
+            for (k = 0; k < fcb->stream_len[0]; ++k) {
+                tmp[j] += MFCCMUL(inout_feat[i][0][k], fcb->lda[0][j][k]);
+            }
+        }
+        memcpy(inout_feat[i][0], tmp, fcb->stream_len[0] * sizeof(mfcc_t));
+    }
+    ckd_free(tmp);
+}
diff --git a/src/libsphinxbase/lm/Makefile.am b/src/libsphinxbase/lm/Makefile.am
new file mode 100644 (file)
index 0000000..5b67f2b
--- /dev/null
@@ -0,0 +1,37 @@
+noinst_LTLIBRARIES = libsphinxlm.la
+
+AM_YFLAGS = -d
+BUILT_SOURCES = jsgf_parser.h
+
+libsphinxlm_la_SOURCES =                       \
+       lm3g_model.c                            \
+       ngram_model.c                           \
+       ngram_model_arpa.c                      \
+       ngram_model_dmp.c                       \
+       ngram_model_dmp32.c                     \
+       ngram_model_set.c                       \
+       fsg_model.c                             \
+       jsgf.c                                  \
+       jsgf_scanner.c                          \
+       jsgf_parser.y
+
+libsphinxlm_la_LIBADD = $(LTLIBICONV)
+
+noinst_HEADERS = ngram_model_internal.h                \
+       ngram_model_dmp.h                       \
+       ngram_model_set.h                       \
+       ngram_model_arpa.h                      \
+       lm3g_model.h                            \
+       jsgf_internal.h                         \
+       jsgf_scanner.h                          \
+       jsgf_parser.h
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+          -I$(top_srcdir)/include \
+           -I$(top_builddir)/include 
+
+# Nobody has the version of Flex needed to regenerate the scanner, so
+# we can't give it a name that would induce Make to try to build it.
+# Hence the underscore.  Sorry folks.
+EXTRA_DIST = _jsgf_scanner.l \
+       lm3g_templates.c
diff --git a/src/libsphinxbase/lm/Makefile.in b/src/libsphinxbase/lm/Makefile.in
new file mode 100644 (file)
index 0000000..8314b79
--- /dev/null
@@ -0,0 +1,522 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = src/libsphinxbase/lm
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in jsgf_parser.c jsgf_parser.h
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libsphinxlm_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libsphinxlm_la_OBJECTS = lm3g_model.lo ngram_model.lo \
+       ngram_model_arpa.lo ngram_model_dmp.lo ngram_model_dmp32.lo \
+       ngram_model_set.lo fsg_model.lo jsgf.lo jsgf_scanner.lo \
+       jsgf_parser.lo
+libsphinxlm_la_OBJECTS = $(am_libsphinxlm_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
+YLWRAP = $(top_srcdir)/ylwrap
+SOURCES = $(libsphinxlm_la_SOURCES)
+DIST_SOURCES = $(libsphinxlm_la_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libsphinxlm.la
+AM_YFLAGS = -d
+BUILT_SOURCES = jsgf_parser.h
+libsphinxlm_la_SOURCES = \
+       lm3g_model.c                            \
+       ngram_model.c                           \
+       ngram_model_arpa.c                      \
+       ngram_model_dmp.c                       \
+       ngram_model_dmp32.c                     \
+       ngram_model_set.c                       \
+       fsg_model.c                             \
+       jsgf.c                                  \
+       jsgf_scanner.c                          \
+       jsgf_parser.y
+
+libsphinxlm_la_LIBADD = $(LTLIBICONV)
+noinst_HEADERS = ngram_model_internal.h                \
+       ngram_model_dmp.h                       \
+       ngram_model_set.h                       \
+       ngram_model_arpa.h                      \
+       lm3g_model.h                            \
+       jsgf_internal.h                         \
+       jsgf_scanner.h                          \
+       jsgf_parser.h
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+          -I$(top_srcdir)/include \
+           -I$(top_builddir)/include 
+
+
+# Nobody has the version of Flex needed to regenerate the scanner, so
+# we can't give it a name that would induce Make to try to build it.
+# Hence the underscore.  Sorry folks.
+EXTRA_DIST = _jsgf_scanner.l \
+       lm3g_templates.c
+
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj .y
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/libsphinxbase/lm/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/libsphinxbase/lm/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
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+jsgf_parser.h: jsgf_parser.c
+       @if test ! -f $@; then \
+         rm -f jsgf_parser.c; \
+         $(MAKE) $(AM_MAKEFLAGS) jsgf_parser.c; \
+       else :; fi
+libsphinxlm.la: $(libsphinxlm_la_OBJECTS) $(libsphinxlm_la_DEPENDENCIES) 
+       $(LINK)  $(libsphinxlm_la_OBJECTS) $(libsphinxlm_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsg_model.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jsgf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jsgf_parser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jsgf_scanner.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lm3g_model.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngram_model.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngram_model_arpa.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngram_model_dmp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngram_model_dmp32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngram_model_set.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+.y.c:
+       $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) 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:
+
+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."
+       -rm -f jsgf_parser.c
+       -rm -f jsgf_parser.h
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# 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/src/libsphinxbase/lm/_jsgf_scanner.l b/src/libsphinxbase/lm/_jsgf_scanner.l
new file mode 100644 (file)
index 0000000..a887bad
--- /dev/null
@@ -0,0 +1,78 @@
+/* -*- mode: text -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/* YOU MUST USE FLEX 2.5.33 OR NEWER TO PROCESS THIS FILE!!! */
+%{
+
+#include "jsgf_internal.h"
+#include "jsgf_parser.h"
+
+%}
+
+%option 8bit reentrant bison-bridge noyywrap
+%option header-file="jsgf_scanner.h"
+%s COMMENT
+
+ws       [ \t\r\n]
+rulename \<[^<>]+\>
+tag      \{(\\.|[^\}]+)*\}
+weight   \/[0-9]*(\.[0-9]+)?\/
+token    [^ \t\n;=|*+<>()\[\]{}*/]+
+qstring  \"(\\.|[^"]+)*\"
+bom      [\xEF][\xBB][\xBF]
+
+%%
+
+{ws} ;                     /* ignore whitespace */
+<INITIAL>\/\/.*\n ;        /* single-line comments */
+<INITIAL>\/\* { BEGIN(COMMENT); } /* C-style comments */
+<COMMENT>\*\/ { BEGIN(INITIAL); }
+<COMMENT>. ;               /* Ignore stuff in comment mode */
+
+<INITIAL>{bom}?#JSGF return HEADER;
+<INITIAL>grammar return GRAMMAR;
+<INITIAL>import return IMPORT;
+<INITIAL>public return PUBLIC;
+
+<INITIAL>{rulename} { yylval->name = strdup(yytext); return RULENAME; }
+<INITIAL>{tag}      { yylval->name = strdup(yytext); return TAG; }
+<INITIAL>{token}    { yylval->name = strdup(yytext); return TOKEN; }
+<INITIAL>{qstring}  { yylval->name = strdup(yytext); return TOKEN; }
+<INITIAL>{weight}   { yylval->weight = atof_c(yytext+1); return WEIGHT; }
+
+<INITIAL>. return yytext[0];        /* Single-character tokens */
+
+%%
diff --git a/src/libsphinxbase/lm/fsg_model.c b/src/libsphinxbase/lm/fsg_model.c
new file mode 100644 (file)
index 0000000..488174d
--- /dev/null
@@ -0,0 +1,911 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/* System headers. */
+#ifdef _WIN32_WCE
+/*MC in a debug build it's implicitly included by assert.h
+     but you need this in a release build */
+#include <windows.h>
+#else
+#include <time.h>
+#endif /* _WIN32_WCE */
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* SphinxBase headers. */
+#include "sphinxbase/err.h"
+#include "sphinxbase/pio.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/strfuncs.h"
+#include "sphinxbase/hash_table.h"
+#include "sphinxbase/fsg_model.h"
+
+/**
+ * Adjacency list (opaque) for a state in an FSG.
+ *
+ * Actually we use hash tables so that random access is a bit faster.
+ * Plus it allows us to make the lookup code a bit less ugly.
+ */
+
+struct trans_list_s {
+    hash_table_t *null_trans; /* Null transitions keyed by state. */
+    hash_table_t *trans;      /* Lists of non-null transitions keyed by state. */
+};
+
+/**
+ * Implementation of arc iterator.
+ */
+struct fsg_arciter_s {
+    hash_iter_t *itor, *null_itor;
+    gnode_t *gn;
+};
+
+#define FSG_MODEL_BEGIN_DECL           "FSG_BEGIN"
+#define FSG_MODEL_END_DECL             "FSG_END"
+#define FSG_MODEL_N_DECL                       "N"
+#define FSG_MODEL_NUM_STATES_DECL      "NUM_STATES"
+#define FSG_MODEL_S_DECL                       "S"
+#define FSG_MODEL_START_STATE_DECL     "START_STATE"
+#define FSG_MODEL_F_DECL                       "F"
+#define FSG_MODEL_FINAL_STATE_DECL     "FINAL_STATE"
+#define FSG_MODEL_T_DECL                       "T"
+#define FSG_MODEL_TRANSITION_DECL      "TRANSITION"
+#define FSG_MODEL_COMMENT_CHAR         '#'
+
+
+static int32
+nextline_str2words(FILE * fp, int32 * lineno,
+                   char **lineptr, char ***wordptr)
+{
+    for (;;) {
+        size_t len;
+        int32 n;
+
+        ckd_free(*lineptr);
+        if ((*lineptr = fread_line(fp, &len)) == NULL)
+            return -1;
+
+        (*lineno)++;
+
+        if ((*lineptr)[0] == FSG_MODEL_COMMENT_CHAR)
+            continue; /* Skip comment lines */
+        
+        n = str2words(*lineptr, NULL, 0);
+        if (n == 0)
+            continue; /* Skip blank lines */
+
+        /* Abuse of realloc(), but this doesn't have to be fast. */
+        if (*wordptr == NULL)
+            *wordptr = ckd_calloc(n, sizeof(**wordptr));
+        else
+            *wordptr = ckd_realloc(*wordptr, n * sizeof(**wordptr));
+        return str2words(*lineptr, *wordptr, n);
+    }
+}
+
+void
+fsg_model_trans_add(fsg_model_t * fsg,
+                    int32 from, int32 to, int32 logp, int32 wid)
+{
+    fsg_link_t *link;
+    glist_t gl;
+    gnode_t *gn;
+
+    if (fsg->trans[from].trans == NULL)
+        fsg->trans[from].trans = hash_table_new(5, HASH_CASE_YES);
+
+    /* Check for duplicate link (i.e., link already exists with label=wid) */
+    for (gn = gl = fsg_model_trans(fsg, from, to); gn; gn = gnode_next(gn)) {
+        link = (fsg_link_t *) gnode_ptr(gn);
+        if (link->wid == wid) {
+            if (link->logs2prob < logp)
+                link->logs2prob = logp;
+            return;
+        }
+    }
+
+    /* Create transition object */
+    link = listelem_malloc(fsg->link_alloc);
+    link->from_state = from;
+    link->to_state = to;
+    link->logs2prob = logp;
+    link->wid = wid;
+
+    /* Add it to the list of transitions and update the hash table */
+    gl = glist_add_ptr(gl, (void *)link);
+    hash_table_replace_bkey(fsg->trans[from].trans,
+                            (char const *)&link->to_state,
+                            sizeof(link->to_state), gl);
+}
+
+int32
+fsg_model_tag_trans_add(fsg_model_t * fsg, int32 from, int32 to, int32 logp, int32 wid)
+{
+    fsg_link_t *link, *link2;
+
+    /* Check for transition probability */
+    if (logp > 0) {
+        E_FATAL("Null transition prob must be <= 1.0 (state %d -> %d)\n",
+                from, to);
+    }
+
+    /* Self-loop null transitions (with prob <= 1.0) are redundant */
+    if (from == to)
+        return -1;
+
+    if (fsg->trans[from].null_trans == NULL)
+        fsg->trans[from].null_trans = hash_table_new(5, HASH_CASE_YES);
+
+    /* Check for a duplicate link; if found, keep the higher prob */
+    link = fsg_model_null_trans(fsg, from, to);
+    if (link) {
+        if (link->logs2prob < logp) {
+            link->logs2prob = logp;
+            return 0;
+        }
+        else
+            return -1;
+    }
+
+    /* Create null transition object */
+    link = listelem_malloc(fsg->link_alloc);
+    link->from_state = from;
+    link->to_state = to;
+    link->logs2prob = logp;
+    link->wid = -1;
+
+    link2 = (fsg_link_t *)
+        hash_table_enter_bkey(fsg->trans[from].null_trans,
+                              (char const *)&link->to_state,
+                              sizeof(link->to_state), link);
+    assert(link == link2);
+
+    return 1;
+}
+
+int32
+fsg_model_null_trans_add(fsg_model_t * fsg, int32 from, int32 to, int32 logp)
+{
+    return fsg_model_tag_trans_add(fsg, from, to, logp, -1);
+}
+
+glist_t
+fsg_model_null_trans_closure(fsg_model_t * fsg, glist_t nulls)
+{
+    gnode_t *gn1, *gn2;
+    int updated;
+    fsg_link_t *tl1, *tl2;
+    int32 k, n;
+
+    E_INFO("Computing transitive closure for null transitions\n");
+
+    if (nulls == NULL) {
+        fsg_link_t *null;
+        int i, j;
+        
+        for (i = 0; i < fsg->n_state; ++i) {
+            for (j = 0; j < fsg->n_state; ++j) {
+                if ((null = fsg_model_null_trans(fsg, i, j)))
+                    nulls = glist_add_ptr(nulls, null);
+            }
+        }
+    }
+
+    /*
+     * Probably not the most efficient closure implementation, in general, but
+     * probably reasonably efficient for a sparse null transition matrix.
+     */
+    n = 0;
+    do {
+        updated = FALSE;
+
+        for (gn1 = nulls; gn1; gn1 = gnode_next(gn1)) {
+            tl1 = (fsg_link_t *) gnode_ptr(gn1);
+            assert(tl1->wid < 0);
+
+            for (gn2 = nulls; gn2; gn2 = gnode_next(gn2)) {
+                tl2 = (fsg_link_t *) gnode_ptr(gn2);
+
+                if (tl1->to_state == tl2->from_state) {
+                    k = fsg_model_null_trans_add(fsg,
+                                                tl1->from_state,
+                                                tl2->to_state,
+                                                tl1->logs2prob +
+                                                tl2->logs2prob);
+                    if (k >= 0) {
+                        updated = TRUE;
+                        if (k > 0) {
+                            nulls =
+                                glist_add_ptr(nulls, (void *)
+                                              fsg_model_null_trans
+                                              (fsg, tl1->from_state,
+                                               tl2->to_state));
+                            n++;
+                        }
+                    }
+                }
+            }
+        }
+    } while (updated);
+
+    E_INFO("%d null transitions added\n", n);
+
+    return nulls;
+}
+
+glist_t
+fsg_model_trans(fsg_model_t *fsg, int32 i, int32 j)
+{
+    void *val;
+
+    if (fsg->trans[i].trans == NULL)
+        return NULL;
+    if (hash_table_lookup_bkey(fsg->trans[i].trans, (char const *)&j,
+                               sizeof(j), &val) < 0)
+        return NULL;
+    return (glist_t)val;
+}
+
+fsg_link_t *
+fsg_model_null_trans(fsg_model_t *fsg, int32 i, int32 j)
+{
+    void *val;
+
+    if (fsg->trans[i].null_trans == NULL)
+        return NULL;
+    if (hash_table_lookup_bkey(fsg->trans[i].null_trans, (char const *)&j,
+                               sizeof(j), &val) < 0)
+        return NULL;
+    return (fsg_link_t *)val;
+}
+
+fsg_arciter_t *
+fsg_model_arcs(fsg_model_t *fsg, int32 i)
+{
+    fsg_arciter_t *itor;
+
+    if (fsg->trans[i].trans == NULL && fsg->trans[i].null_trans == NULL)
+        return NULL;
+    itor = ckd_calloc(1, sizeof(*itor));
+    if (fsg->trans[i].null_trans)
+        itor->null_itor = hash_table_iter(fsg->trans[i].null_trans);
+    if (fsg->trans[i].trans)
+        itor->itor = hash_table_iter(fsg->trans[i].trans);
+    if (itor->itor != NULL)
+        itor->gn = hash_entry_val(itor->itor->ent);
+    return itor;
+}
+
+fsg_link_t *
+fsg_arciter_get(fsg_arciter_t *itor)
+{
+    /* Iterate over non-null arcs first. */
+    if (itor->gn)
+        return (fsg_link_t *)gnode_ptr(itor->gn);
+    else if (itor->null_itor)
+        return (fsg_link_t *)hash_entry_val(itor->null_itor->ent);
+    else
+        return NULL;
+}
+
+fsg_arciter_t *
+fsg_arciter_next(fsg_arciter_t *itor)
+{
+    /* Iterate over non-null arcs first. */
+    if (itor->gn) {
+        itor->gn = gnode_next(itor->gn);
+        /* Move to the next destination arc. */
+        if (itor->gn == NULL) {
+            itor->itor = hash_table_iter_next(itor->itor);
+            if (itor->itor != NULL)
+                itor->gn = hash_entry_val(itor->itor->ent);
+            else if (itor->null_itor == NULL)
+                goto stop_iteration;
+        }
+    }
+    else {
+        if (itor->null_itor == NULL)
+            goto stop_iteration;
+        itor->null_itor = hash_table_iter_next(itor->null_itor);
+        if (itor->null_itor == NULL)
+            goto stop_iteration;
+    }
+    return itor;
+stop_iteration:
+    fsg_arciter_free(itor);
+    return NULL;
+
+}
+
+void
+fsg_arciter_free(fsg_arciter_t *itor)
+{
+    if (itor == NULL)
+        return;
+    hash_table_iter_free(itor->null_itor);
+    hash_table_iter_free(itor->itor);
+    ckd_free(itor);
+}
+
+int
+fsg_model_word_id(fsg_model_t *fsg, char const *word)
+{
+    int wid;
+
+    /* Search for an existing word matching this. */
+    for (wid = 0; wid < fsg->n_word; ++wid) {
+        if (0 == strcmp(fsg->vocab[wid], word))
+            break;
+    }
+    /* If not found, add this to the vocab. */
+    if (wid == fsg->n_word)
+        return -1;
+    return wid;
+}
+
+int
+fsg_model_word_add(fsg_model_t *fsg, char const *word)
+{
+    int wid;
+
+    /* Search for an existing word matching this. */
+    wid = fsg_model_word_id(fsg, word);
+    /* If not found, add this to the vocab. */
+    if (wid == -1) {
+        wid = fsg->n_word;
+        if (fsg->n_word == fsg->n_word_alloc) {
+            fsg->n_word_alloc += 10;
+            fsg->vocab = ckd_realloc(fsg->vocab,
+                                     fsg->n_word_alloc * sizeof(*fsg->vocab));
+            if (fsg->silwords)
+                fsg->silwords = bitvec_realloc(fsg->silwords, fsg->n_word_alloc);
+            if (fsg->altwords)
+                fsg->altwords = bitvec_realloc(fsg->altwords, fsg->n_word_alloc);
+        }
+        ++fsg->n_word;
+        fsg->vocab[wid] = ckd_salloc(word);
+    }
+    return wid;
+}
+
+int
+fsg_model_add_silence(fsg_model_t * fsg, char const *silword,
+                      int state, float32 silprob)
+{
+    int32 logsilp;
+    int n_trans, silwid, src;
+
+    E_INFO("Adding silence transitions for %s to FSG\n", silword);
+
+    silwid = fsg_model_word_add(fsg, silword);
+    logsilp = (int32) (logmath_log(fsg->lmath, silprob) * fsg->lw);
+    if (fsg->silwords == NULL)
+        fsg->silwords = bitvec_alloc(fsg->n_word_alloc);
+    bitvec_set(fsg->silwords, silwid);
+
+    n_trans = 0;
+    if (state == -1) {
+        for (src = 0; src < fsg->n_state; src++) {
+            fsg_model_trans_add(fsg, src, src, logsilp, silwid);
+            ++n_trans;
+        }
+    }
+    else {
+        fsg_model_trans_add(fsg, state, state, logsilp, silwid);
+        ++n_trans;
+    }
+
+    E_INFO("Added %d silence word transitions\n", n_trans);
+    return n_trans;
+}
+
+int
+fsg_model_add_alt(fsg_model_t * fsg, char const *baseword,
+                  char const *altword)
+{
+    int i, basewid, altwid;
+    int ntrans;
+
+    /* FIXME: This will get slow, eventually... */
+    for (basewid = 0; basewid < fsg->n_word; ++basewid)
+        if (0 == strcmp(fsg->vocab[basewid], baseword))
+            break;
+    if (basewid == fsg->n_word) {
+        E_ERROR("Base word %s not present in FSG vocabulary!\n", baseword);
+        return -1;
+    }
+    altwid = fsg_model_word_add(fsg, altword);
+    if (fsg->altwords == NULL)
+        fsg->altwords = bitvec_alloc(fsg->n_word_alloc);
+    bitvec_set(fsg->altwords, altwid);
+
+    E_DEBUG(2,("Adding alternate word transitions (%s,%s) to FSG\n",
+               baseword, altword));
+
+    /* Look for all transitions involving baseword and duplicate them. */
+    /* FIXME: This will also get slow, eventually... */
+    ntrans = 0;
+    for (i = 0; i < fsg->n_state; ++i) {
+        hash_iter_t *itor;
+        if (fsg->trans[i].trans == NULL)
+            continue;
+        for (itor = hash_table_iter(fsg->trans[i].trans); itor;
+             itor = hash_table_iter_next(itor)) {
+            glist_t trans;
+            gnode_t *gn;
+
+            trans = hash_entry_val(itor->ent);
+            for (gn = trans; gn; gn = gnode_next(gn)) {
+                fsg_link_t *fl = gnode_ptr(gn);
+                if (fl->wid == basewid) {
+                    fsg_link_t *link;
+
+                    /* Create transition object */
+                    link = listelem_malloc(fsg->link_alloc);
+                    link->from_state = fl->from_state;
+                    link->to_state = fl->to_state;
+                    link->logs2prob = fl->logs2prob; /* FIXME!!!??? */
+                    link->wid = altwid;
+
+                    trans =
+                        glist_add_ptr(trans, (void *) link);
+                    ++ntrans;
+                }
+            }
+            hash_entry_val(itor->ent) = trans;
+        }
+    }
+
+    E_DEBUG(2,("Added %d alternate word transitions\n", ntrans));
+    return ntrans;
+}
+
+
+fsg_model_t *
+fsg_model_init(char const *name, logmath_t *lmath, float32 lw, int32 n_state)
+{
+    fsg_model_t *fsg;
+
+    /* Allocate basic stuff. */
+    fsg = ckd_calloc(1, sizeof(*fsg));
+    fsg->refcount = 1;
+    fsg->link_alloc = listelem_alloc_init(sizeof(fsg_link_t));
+    fsg->lmath = lmath;
+    fsg->name = name ? ckd_salloc(name) : NULL;
+    fsg->n_state = n_state;
+    fsg->lw = lw;
+
+    fsg->trans = ckd_calloc(fsg->n_state, sizeof(*fsg->trans));
+
+    return fsg;
+}
+
+fsg_model_t *
+fsg_model_read(FILE * fp, logmath_t *lmath, float32 lw)
+{
+    fsg_model_t *fsg;
+    hash_table_t *vocab;
+    hash_iter_t *itor;
+    int32 lastwid;
+    char **wordptr;
+    char *lineptr;
+    char *fsgname;
+    int32 lineno;
+    int32 n, i, j;
+    int n_state, n_trans, n_null_trans;
+    glist_t nulls;
+    float32 p;
+
+    lineno = 0;
+    vocab = hash_table_new(32, FALSE);
+    wordptr = NULL;
+    lineptr = NULL;
+    nulls = NULL;
+    fsgname = NULL;
+    fsg = NULL;
+
+    /* Scan upto FSG_BEGIN header */
+    for (;;) {
+        n = nextline_str2words(fp, &lineno, &lineptr, &wordptr);
+        if (n < 0) {
+            E_ERROR("%s declaration missing\n", FSG_MODEL_BEGIN_DECL);
+            goto parse_error;
+        }
+
+        if ((strcmp(wordptr[0], FSG_MODEL_BEGIN_DECL) == 0)) {
+            if (n > 2) {
+                E_ERROR("Line[%d]: malformed FSG_BEGIN declaration\n",
+                        lineno);
+                goto parse_error;
+            }
+            break;
+        }
+    }
+    /* Save FSG name, or it will get clobbered below :(.
+     * If name is missing, try the default.
+     */
+    if (n == 2) {
+        fsgname = ckd_salloc(wordptr[1]);
+    } else {
+        E_WARN ("FSG name is missing\n");
+        fsgname = ckd_salloc("unknown");
+    }
+
+    /* Read #states */
+    n = nextline_str2words(fp, &lineno, &lineptr, &wordptr);
+    if ((n != 2)
+        || ((strcmp(wordptr[0], FSG_MODEL_N_DECL) != 0)
+            && (strcmp(wordptr[0], FSG_MODEL_NUM_STATES_DECL) != 0))
+        || (sscanf(wordptr[1], "%d", &n_state) != 1)
+        || (n_state <= 0)) {
+        E_ERROR
+            ("Line[%d]: #states declaration line missing or malformed\n",
+             lineno);
+        goto parse_error;
+    }
+
+    /* Now create the FSG. */
+    fsg = fsg_model_init(fsgname, lmath, lw, n_state);
+    ckd_free(fsgname);
+    fsgname = NULL;
+
+    /* Read start state */
+    n = nextline_str2words(fp, &lineno, &lineptr, &wordptr);
+    if ((n != 2)
+        || ((strcmp(wordptr[0], FSG_MODEL_S_DECL) != 0)
+            && (strcmp(wordptr[0], FSG_MODEL_START_STATE_DECL) != 0))
+        || (sscanf(wordptr[1], "%d", &(fsg->start_state)) != 1)
+        || (fsg->start_state < 0)
+        || (fsg->start_state >= fsg->n_state)) {
+        E_ERROR
+            ("Line[%d]: start state declaration line missing or malformed\n",
+             lineno);
+        goto parse_error;
+    }
+
+    /* Read final state */
+    n = nextline_str2words(fp, &lineno, &lineptr, &wordptr);
+    if ((n != 2)
+        || ((strcmp(wordptr[0], FSG_MODEL_F_DECL) != 0)
+            && (strcmp(wordptr[0], FSG_MODEL_FINAL_STATE_DECL) != 0))
+        || (sscanf(wordptr[1], "%d", &(fsg->final_state)) != 1)
+        || (fsg->final_state < 0)
+        || (fsg->final_state >= fsg->n_state)) {
+        E_ERROR
+            ("Line[%d]: final state declaration line missing or malformed\n",
+             lineno);
+        goto parse_error;
+    }
+
+    /* Read transitions */
+    lastwid = 0;
+    n_trans = n_null_trans = 0;
+    for (;;) {
+        int32 wid, tprob;
+
+        n = nextline_str2words(fp, &lineno, &lineptr, &wordptr);
+        if (n <= 0) {
+            E_ERROR("Line[%d]: transition or FSG_END statement expected\n",
+                    lineno);
+            goto parse_error;
+        }
+
+        if ((strcmp(wordptr[0], FSG_MODEL_END_DECL) == 0)) {
+            break;
+        }
+
+        if ((strcmp(wordptr[0], FSG_MODEL_T_DECL) == 0)
+            || (strcmp(wordptr[0], FSG_MODEL_TRANSITION_DECL) == 0)) {
+
+
+            if (((n != 4) && (n != 5))
+                || (sscanf(wordptr[1], "%d", &i) != 1)
+                || (sscanf(wordptr[2], "%d", &j) != 1)
+                || (i < 0) || (i >= fsg->n_state)
+                || (j < 0) || (j >= fsg->n_state)) {
+                E_ERROR
+                    ("Line[%d]: transition spec malformed; Expecting: from-state to-state trans-prob [word]\n",
+                     lineno);
+                goto parse_error;
+            }
+
+            p = atof_c(wordptr[3]);
+            if ((p <= 0.0) || (p > 1.0)) {
+                E_ERROR
+                    ("Line[%d]: transition spec malformed; Expecting float as transition probability\n",
+                     lineno);
+                goto parse_error;
+            }
+        }
+        else {
+            E_ERROR("Line[%d]: transition or FSG_END statement expected\n",
+                    lineno);
+            goto parse_error;
+        }
+
+        tprob = (int32)(logmath_log(lmath, p) * fsg->lw);
+        /* Add word to "dictionary". */
+        if (n > 4) {
+            if (hash_table_lookup_int32(vocab, wordptr[4], &wid) < 0) {
+                (void)hash_table_enter_int32(vocab, ckd_salloc(wordptr[4]), lastwid);
+                wid = lastwid;
+                ++lastwid;
+            }
+            fsg_model_trans_add(fsg, i, j, tprob, wid);
+            ++n_trans;
+        }
+        else {
+            if (fsg_model_null_trans_add(fsg, i, j, tprob) == 1) {
+                ++n_null_trans;
+                nulls = glist_add_ptr(nulls, fsg_model_null_trans(fsg, i, j));
+            }
+        }
+    }
+
+    E_INFO("FSG: %d states, %d unique words, %d transitions (%d null)\n",
+           fsg->n_state, hash_table_inuse(vocab), n_trans, n_null_trans);
+
+    /* Do transitive closure on null transitions */
+    nulls = fsg_model_null_trans_closure(fsg, nulls);
+    glist_free(nulls);
+
+    /* Now create a string table from the "dictionary" */
+    fsg->n_word = hash_table_inuse(vocab);
+    fsg->n_word_alloc = fsg->n_word + 10; /* Pad it a bit. */
+    fsg->vocab = ckd_calloc(fsg->n_word_alloc, sizeof(*fsg->vocab));
+    for (itor = hash_table_iter(vocab); itor; itor = hash_table_iter_next(itor)) {
+        char const *word = hash_entry_key(itor->ent);
+        int32 wid = (int32)(long)hash_entry_val(itor->ent);
+        fsg->vocab[wid] = (char *)word;
+    }
+    hash_table_free(vocab);
+    ckd_free(lineptr);
+    ckd_free(wordptr);
+
+    return fsg;
+
+  parse_error:
+    for (itor = hash_table_iter(vocab); itor; itor = hash_table_iter_next(itor))
+        ckd_free((char *)hash_entry_key(itor->ent));
+    glist_free(nulls);
+    hash_table_free(vocab);
+    ckd_free(fsgname);
+    ckd_free(lineptr);
+    ckd_free(wordptr);
+    fsg_model_free(fsg);
+    return NULL;
+}
+
+
+fsg_model_t *
+fsg_model_readfile(const char *file, logmath_t *lmath, float32 lw)
+{
+    FILE *fp;
+    fsg_model_t *fsg;
+
+    if ((fp = fopen(file, "r")) == NULL) {
+        E_ERROR("Failed to open FSG file '%s' for reading: %s\n", file, strerror(errno));
+        return NULL;
+    }
+    fsg = fsg_model_read(fp, lmath, lw);
+    fclose(fp);
+    return fsg;
+}
+
+fsg_model_t *
+fsg_model_retain(fsg_model_t *fsg)
+{
+    ++fsg->refcount;
+    return fsg;
+}
+
+static void
+trans_list_free(fsg_model_t *fsg, int32 i)
+{
+    hash_iter_t *itor;
+
+    /* FIXME (maybe): FSG links will all get freed when we call
+     * listelem_alloc_free() so don't bother freeing them explicitly
+     * here. */
+    if (fsg->trans[i].trans) {
+        for (itor = hash_table_iter(fsg->trans[i].trans);
+             itor; itor = hash_table_iter_next(itor)) {
+            glist_t gl = (glist_t)hash_entry_val(itor->ent);
+            glist_free(gl);
+        }
+    }
+    hash_table_free(fsg->trans[i].trans);
+    hash_table_free(fsg->trans[i].null_trans);
+}
+
+int
+fsg_model_free(fsg_model_t * fsg)
+{
+    int i;
+
+    if (fsg == NULL)
+        return 0;
+
+    if (--fsg->refcount > 0)
+        return fsg->refcount;
+
+    for (i = 0; i < fsg->n_word; ++i)
+        ckd_free(fsg->vocab[i]);
+    for (i = 0; i < fsg->n_state; ++i)
+        trans_list_free(fsg, i);
+    ckd_free(fsg->trans);
+    ckd_free(fsg->vocab);
+    listelem_alloc_free(fsg->link_alloc);
+    bitvec_free(fsg->silwords);
+    bitvec_free(fsg->altwords);
+    ckd_free(fsg->name);
+    ckd_free(fsg);
+    return 0;
+}
+
+
+void
+fsg_model_write(fsg_model_t * fsg, FILE * fp)
+{
+    int32 i;
+    
+    fprintf(fp, "%s %s\n", FSG_MODEL_BEGIN_DECL, fsg->name ? fsg->name : "");
+    fprintf(fp, "%s %d\n", FSG_MODEL_NUM_STATES_DECL, fsg->n_state);
+    fprintf(fp, "%s %d\n", FSG_MODEL_START_STATE_DECL, fsg->start_state);
+    fprintf(fp, "%s %d\n", FSG_MODEL_FINAL_STATE_DECL, fsg->final_state);
+
+    for (i = 0; i < fsg->n_state; i++) {
+        fsg_arciter_t *itor;
+
+        for (itor = fsg_model_arcs(fsg, i); itor; itor = fsg_arciter_next(itor)) {
+            fsg_link_t *tl = fsg_arciter_get(itor);
+
+            fprintf(fp, "%s %d %d %f %s\n", FSG_MODEL_TRANSITION_DECL,
+                    tl->from_state, tl->to_state,
+                    logmath_exp(fsg->lmath, (int32)(tl->logs2prob / fsg->lw)),
+                    (tl->wid < 0) ? "" : fsg_model_word_str(fsg, tl->wid));
+        }
+    }
+
+    fprintf(fp, "%s\n", FSG_MODEL_END_DECL);
+
+    fflush(fp);
+}
+
+void
+fsg_model_writefile(fsg_model_t *fsg, char const *file)
+{
+    FILE *fp;
+
+    assert(fsg);
+
+    E_INFO("Writing FSG file '%s'\n", file);
+
+    if ((fp = fopen(file, "w")) == NULL) {
+        E_ERROR("Failed to open FSG file '%s' for reading: %s\n", file, strerror(errno));
+        return;
+    }
+
+    fsg_model_write(fsg, fp);
+
+    fclose(fp);
+}
+
+static void
+fsg_model_write_fsm_trans(fsg_model_t *fsg, int i, FILE *fp)
+{
+    fsg_arciter_t *itor;
+
+    for (itor = fsg_model_arcs(fsg, i); itor;
+         itor = fsg_arciter_next(itor)) {
+        fsg_link_t *tl = fsg_arciter_get(itor);
+        fprintf(fp, "%d %d %s %f\n",
+                tl->from_state, tl->to_state,
+                (tl->wid < 0) ? "<eps>" : fsg_model_word_str(fsg, tl->wid),
+                -logmath_log_to_ln(fsg->lmath, tl->logs2prob / fsg->lw));
+    }
+}
+
+void
+fsg_model_write_fsm(fsg_model_t * fsg, FILE * fp)
+{
+    int i;
+
+    /* Write transitions from initial state first. */
+    fsg_model_write_fsm_trans(fsg, fsg_model_start_state(fsg), fp);
+
+    /* Other states. */
+    for (i = 0; i < fsg->n_state; i++) {
+        if (i == fsg_model_start_state(fsg))
+            continue;
+        fsg_model_write_fsm_trans(fsg, i, fp);
+    }
+
+    /* Final state. */
+    fprintf(fp, "%d 0\n", fsg_model_final_state(fsg));
+
+    fflush(fp);
+}
+
+void
+fsg_model_writefile_fsm(fsg_model_t *fsg, char const *file)
+{
+    FILE *fp;
+
+    assert(fsg);
+
+    E_INFO("Writing FSM file '%s'\n", file);
+
+    if ((fp = fopen(file, "w")) == NULL) {
+        E_ERROR("Failed to open fsm file '%s' for writing: %s\n", file, strerror(errno));
+        return;
+    }
+
+    fsg_model_write_fsm(fsg, fp);
+
+    fclose(fp);
+}
+
+void
+fsg_model_write_symtab(fsg_model_t *fsg, FILE *file)
+{
+    int i;
+
+    fprintf(file, "<eps> 0\n");
+    for (i = 0; i < fsg_model_n_word(fsg); ++i) {
+        fprintf(file, "%s %d\n", fsg_model_word_str(fsg, i), i + 1);
+    }
+    fflush(file);
+}
+
+void
+fsg_model_writefile_symtab(fsg_model_t *fsg, char const *file)
+{
+    FILE *fp;
+
+    assert(fsg);
+
+    E_INFO("Writing FSM symbol table '%s'\n", file);
+
+    if ((fp = fopen(file, "w")) == NULL) {
+        E_ERROR("Failed to open symbol table '%s' for writing: %s\n", file, strerror(errno));
+        return;
+    }
+
+    fsg_model_write_symtab(fsg, fp);
+
+    fclose(fp);
+}
diff --git a/src/libsphinxbase/lm/jsgf.c b/src/libsphinxbase/lm/jsgf.c
new file mode 100644 (file)
index 0000000..441ab4d
--- /dev/null
@@ -0,0 +1,734 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#include <string.h>
+#include <assert.h>
+
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/strfuncs.h"
+#include "sphinxbase/hash_table.h"
+#include "sphinxbase/err.h"
+
+#include "jsgf_internal.h"
+#include "jsgf_parser.h"
+#include "jsgf_scanner.h"
+
+int yyparse (yyscan_t yyscanner, jsgf_t *jsgf);
+
+/**
+ * \file jsgf.c
+ *
+ * This file implements the data structures for parsing JSGF grammars
+ * into Sphinx finite-state grammars.
+ **/
+
+jsgf_atom_t *
+jsgf_atom_new(char *name, float weight)
+{
+    jsgf_atom_t *atom;
+
+    atom = ckd_calloc(1, sizeof(*atom));
+    atom->name = ckd_salloc(name);
+    atom->weight = weight;
+    return atom;
+}
+
+int
+jsgf_atom_free(jsgf_atom_t *atom)
+{
+    if (atom == NULL)
+        return 0;
+    ckd_free(atom->name);
+    ckd_free(atom);
+    return 0;
+}
+
+jsgf_t *
+jsgf_grammar_new(jsgf_t *parent)
+{
+    jsgf_t *grammar;
+
+    grammar = ckd_calloc(1, sizeof(*grammar));
+    /* If this is an imported/subgrammar, then we will share a global
+     * namespace with the parent grammar. */
+    if (parent) {
+        grammar->rules = parent->rules;
+        grammar->imports = parent->imports;
+        grammar->searchpath = parent->searchpath;
+        grammar->parent = parent;
+    }
+    else {
+        char *jsgf_path;
+
+        grammar->rules = hash_table_new(64, 0);
+        grammar->imports = hash_table_new(16, 0);
+
+        /* Silvio Moioli: no getenv() in Windows CE */
+        #if !defined(_WIN32_WCE)
+        if ((jsgf_path = getenv("JSGF_PATH")) != NULL) {
+            char *word, *c;
+
+            /* FIXME: This should be a function in libsphinxbase. */
+            /* FIXME: Also nextword() is totally useless... */
+            word = jsgf_path = ckd_salloc(jsgf_path);
+            while ((c = strchr(word, ':'))) {
+                *c = '\0';
+                grammar->searchpath = glist_add_ptr(grammar->searchpath, word);
+                word = c + 1;
+            }
+            grammar->searchpath = glist_add_ptr(grammar->searchpath, word);
+            grammar->searchpath = glist_reverse(grammar->searchpath);
+        }
+        else {
+            /* Default to current directory. */
+            grammar->searchpath = glist_add_ptr(grammar->searchpath, ckd_salloc("."));
+        }
+        #endif 
+    }
+
+    return grammar;
+}
+
+void
+jsgf_grammar_free(jsgf_t *jsgf)
+{
+    /* FIXME: Probably should just use refcounting instead. */
+    if (jsgf->parent == NULL) {
+        hash_iter_t *itor;
+        gnode_t *gn;
+
+        for (itor = hash_table_iter(jsgf->rules); itor;
+             itor = hash_table_iter_next(itor)) {
+            ckd_free((char *)itor->ent->key);
+            jsgf_rule_free((jsgf_rule_t *)itor->ent->val);
+        }
+        hash_table_free(jsgf->rules);
+        for (itor = hash_table_iter(jsgf->imports); itor;
+             itor = hash_table_iter_next(itor)) {
+            ckd_free((char *)itor->ent->key);
+            jsgf_grammar_free((jsgf_t *)itor->ent->val);
+        }
+        hash_table_free(jsgf->imports);
+        for (gn = jsgf->searchpath; gn; gn = gnode_next(gn))
+            ckd_free(gnode_ptr(gn));
+        glist_free(jsgf->searchpath);
+        for (gn = jsgf->links; gn; gn = gnode_next(gn))
+            ckd_free(gnode_ptr(gn));
+        glist_free(jsgf->links);
+    }
+    ckd_free(jsgf->name);
+    ckd_free(jsgf->version);
+    ckd_free(jsgf->charset);
+    ckd_free(jsgf->locale);
+    ckd_free(jsgf);
+}
+
+static void
+jsgf_rhs_free(jsgf_rhs_t *rhs)
+{
+    gnode_t *gn;
+
+    if (rhs == NULL)
+        return;
+
+    jsgf_rhs_free(rhs->alt);
+    for (gn = rhs->atoms; gn; gn = gnode_next(gn))
+        jsgf_atom_free(gnode_ptr(gn));
+    glist_free(rhs->atoms);
+    ckd_free(rhs);
+}
+
+jsgf_atom_t *
+jsgf_kleene_new(jsgf_t *jsgf, jsgf_atom_t *atom, int plus)
+{
+    jsgf_rule_t *rule;
+    jsgf_atom_t *rule_atom;
+    jsgf_rhs_t *rhs;
+
+    /* Generate an "internal" rule of the form (<NULL> | <name> <g0006>) */
+    /* Or if plus is true, (<name> | <name> <g0006>) */
+    rhs = ckd_calloc(1, sizeof(*rhs));
+    if (plus)
+        rhs->atoms = glist_add_ptr(NULL, jsgf_atom_new(atom->name, 1.0));
+    else
+        rhs->atoms = glist_add_ptr(NULL, jsgf_atom_new("<NULL>", 1.0));
+    rule = jsgf_define_rule(jsgf, NULL, rhs, 0);
+    rule_atom = jsgf_atom_new(rule->name, 1.0);
+    rhs = ckd_calloc(1, sizeof(*rhs));
+    rhs->atoms = glist_add_ptr(NULL, rule_atom);
+    rhs->atoms = glist_add_ptr(rhs->atoms, atom);
+    rule->rhs->alt = rhs;
+
+    return jsgf_atom_new(rule->name, 1.0);
+}
+
+jsgf_rule_t *
+jsgf_optional_new(jsgf_t *jsgf, jsgf_rhs_t *exp)
+{
+    jsgf_rhs_t *rhs = ckd_calloc(1, sizeof(*rhs));
+    jsgf_atom_t *atom = jsgf_atom_new("<NULL>", 1.0);
+    rhs->alt = exp;
+    rhs->atoms = glist_add_ptr(NULL, atom);
+    return jsgf_define_rule(jsgf, NULL, rhs, 0);
+}
+
+void
+jsgf_add_link(jsgf_t *grammar, jsgf_atom_t *atom, int from, int to)
+{
+    jsgf_link_t *link;
+
+    link = ckd_calloc(1, sizeof(*link));
+    link->from = from;
+    link->to = to;
+    link->atom = atom;
+    grammar->links = glist_add_ptr(grammar->links, link);
+}
+
+static char *
+extract_grammar_name(char *rule_name)
+{
+    char* dot_pos;
+    char* grammar_name = ckd_salloc(rule_name+1);
+    if ((dot_pos = strrchr(grammar_name + 1, '.')) == NULL) {
+        ckd_free(grammar_name);
+        return NULL;
+    }
+    *dot_pos='\0';
+    return grammar_name;
+}
+
+static char *
+jsgf_fullname(jsgf_t *jsgf, const char *name)
+{
+    char *fullname;
+
+    /* Check if it is already qualified */
+    if (strchr(name + 1, '.'))
+        return ckd_salloc(name);
+
+    /* Skip leading < in name */
+    fullname = ckd_malloc(strlen(jsgf->name) + strlen(name) + 4);
+    sprintf(fullname, "<%s.%s", jsgf->name, name + 1);
+    return fullname;
+}
+
+static char *
+jsgf_fullname_from_rule(jsgf_rule_t *rule, const char *name)
+{
+    char *fullname, *grammar_name;
+
+    /* Check if it is already qualified */
+    if (strchr(name + 1, '.'))
+        return ckd_salloc(name);
+
+    /* Skip leading < in name */
+    if ((grammar_name = extract_grammar_name(rule->name)) == NULL)
+        return ckd_salloc(name);
+    fullname = ckd_malloc(strlen(grammar_name) + strlen(name) + 4);
+    sprintf(fullname, "<%s.%s", grammar_name, name + 1);
+    ckd_free(grammar_name);
+
+    return fullname;
+}
+
+/* Extract as rulename everything after the secondlast dot, if existent. 
+ * Because everything before the secondlast dot is the path-specification. */
+static char *
+importname2rulename(char *importname)
+{
+    char *rulename = ckd_salloc(importname);
+    char *last_dotpos;
+    char *secondlast_dotpos;
+
+    if ((last_dotpos = strrchr(rulename+1, '.')) != NULL) {
+        *last_dotpos='\0';
+        if ((secondlast_dotpos = strrchr(rulename+1, '.')) != NULL) {
+            *last_dotpos='.';
+            *secondlast_dotpos='<';
+            secondlast_dotpos = ckd_salloc(secondlast_dotpos);
+            ckd_free(rulename);
+            return secondlast_dotpos;
+        }
+        else {
+            *last_dotpos='.';
+            return rulename;
+        }
+    }
+    else {
+        return rulename;
+    }
+}
+
+static int expand_rule(jsgf_t *grammar, jsgf_rule_t *rule);
+static int
+expand_rhs(jsgf_t *grammar, jsgf_rule_t *rule, jsgf_rhs_t *rhs)
+{
+    gnode_t *gn;
+    int lastnode;
+
+    /* Last node expanded in this sequence. */
+    lastnode = rule->entry;
+
+    /* Iterate over atoms in rhs and generate links/nodes */
+    for (gn = rhs->atoms; gn; gn = gnode_next(gn)) {
+        jsgf_atom_t *atom = gnode_ptr(gn);
+        if (jsgf_atom_is_rule(atom)) {
+            jsgf_rule_t *subrule;
+            char *fullname;
+            gnode_t *subnode;
+            void *val;
+
+            /* Special case for <NULL> and <VOID> pseudo-rules */
+           if (0 == strcmp(atom->name, "<NULL>")) {
+                /* Emit a NULL transition */
+                jsgf_add_link(grammar, atom,
+                              lastnode, grammar->nstate);
+                lastnode = grammar->nstate;
+                ++grammar->nstate;
+                continue;
+           }
+            else if (0 == strcmp(atom->name, "<VOID>")) {
+                /* Make this entire RHS unspeakable */
+                return -1;
+            }
+
+            fullname = jsgf_fullname_from_rule(rule, atom->name);
+            if (hash_table_lookup(grammar->rules, fullname, &val) == -1) {
+                E_ERROR("Undefined rule in RHS: %s\n", fullname);
+                ckd_free(fullname);
+                return -1;
+            }
+            ckd_free(fullname);
+            subrule = val;
+            /* Look for this in the stack of expanded rules */
+            for (subnode = grammar->rulestack; subnode; subnode = gnode_next(subnode))
+                if (gnode_ptr(subnode) == (void *)subrule)
+                    break;
+            if (subnode != NULL) {
+                /* Allow right-recursion only. */
+                if (gnode_next(gn) != NULL) {
+                    E_ERROR("Only right-recursion is permitted (in %s.%s)\n",
+                            grammar->name, rule->name);
+                    return -1;
+                }
+                /* Add a link back to the beginning of this rule instance */
+                E_INFO("Right recursion %s %d => %d\n", atom->name, lastnode, subrule->entry);
+                jsgf_add_link(grammar, atom, lastnode, subrule->entry);
+            }
+            else {
+                /* Expand the subrule */
+                if (expand_rule(grammar, subrule) == -1)
+                    return -1;
+                /* Add a link into the subrule. */
+                jsgf_add_link(grammar, atom,
+                         lastnode, subrule->entry);
+                lastnode = subrule->exit;
+            }
+        }
+        else {
+            /* Add a link for this token and create a new exit node. */
+            jsgf_add_link(grammar, atom,
+                     lastnode, grammar->nstate);
+            lastnode = grammar->nstate;
+            ++grammar->nstate;
+        }
+    }
+
+    return lastnode;
+}
+
+static int
+expand_rule(jsgf_t *grammar, jsgf_rule_t *rule)
+{
+    jsgf_rhs_t *rhs;
+    float norm;
+
+    /* Push this rule onto the stack */
+    grammar->rulestack = glist_add_ptr(grammar->rulestack, rule);
+
+    /* Normalize weights for all alternatives exiting rule->entry */
+    norm = 0;
+    for (rhs = rule->rhs; rhs; rhs = rhs->alt) {
+        if (rhs->atoms) {
+            jsgf_atom_t *atom = gnode_ptr(rhs->atoms);
+            norm += atom->weight;
+        }
+    }
+
+    rule->entry = grammar->nstate++;
+    rule->exit = grammar->nstate++;
+    if (norm == 0) norm = 1;
+    for (rhs = rule->rhs; rhs; rhs = rhs->alt) {
+        int lastnode;
+
+        if (rhs->atoms) {
+            jsgf_atom_t *atom = gnode_ptr(rhs->atoms);
+           atom->weight /= norm;
+        }
+        lastnode = expand_rhs(grammar, rule, rhs);
+        if (lastnode == -1) {
+            return -1;
+        }
+        else {
+            jsgf_add_link(grammar, NULL, lastnode, rule->exit);
+        }
+    }
+
+    /* Pop this rule from the rule stack */
+    grammar->rulestack = gnode_free(grammar->rulestack, NULL);
+    return rule->exit;
+}
+
+jsgf_rule_iter_t *
+jsgf_rule_iter(jsgf_t *grammar)
+{
+    return hash_table_iter(grammar->rules);
+}
+
+jsgf_rule_t *
+jsgf_get_rule(jsgf_t *grammar, char const *name)
+{
+    void *val;
+
+    if (hash_table_lookup(grammar->rules, name, &val) < 0)
+        return NULL;
+    return (jsgf_rule_t *)val;
+}
+
+char const *
+jsgf_rule_name(jsgf_rule_t *rule)
+{
+    return rule->name;
+}
+
+int
+jsgf_rule_public(jsgf_rule_t *rule)
+{
+    return rule->public;
+}
+
+static fsg_model_t *
+jsgf_build_fsg_internal(jsgf_t *grammar, jsgf_rule_t *rule,
+                        logmath_t *lmath, float32 lw, int do_closure)
+{
+    fsg_model_t *fsg;
+    glist_t nulls;
+    gnode_t *gn;
+
+    /* Clear previous links */
+    for (gn = grammar->links; gn; gn = gnode_next(gn)) {
+        ckd_free(gnode_ptr(gn));
+    }
+    glist_free(grammar->links);
+    grammar->links = NULL;
+    rule->entry = rule->exit = 0;
+    grammar->nstate = 0;
+    expand_rule(grammar, rule);
+
+    fsg = fsg_model_init(rule->name, lmath, lw, grammar->nstate);
+    fsg->start_state = rule->entry;
+    fsg->final_state = rule->exit;
+    grammar->links = glist_reverse(grammar->links);
+    for (gn = grammar->links; gn; gn = gnode_next(gn)) {
+        jsgf_link_t *link = gnode_ptr(gn);
+
+        if (link->atom) {
+            if (jsgf_atom_is_rule(link->atom)) {
+                fsg_model_null_trans_add(fsg, link->from, link->to,
+                                        logmath_log(lmath, link->atom->weight));
+            }
+            else {
+                int wid = fsg_model_word_add(fsg, link->atom->name);
+                fsg_model_trans_add(fsg, link->from, link->to,
+                                   logmath_log(lmath, link->atom->weight), wid);
+            }
+        }
+        else {
+            fsg_model_null_trans_add(fsg, link->from, link->to, 0);
+        }            
+    }
+    if (do_closure) {
+        nulls = fsg_model_null_trans_closure(fsg, NULL);
+        glist_free(nulls);
+    }
+
+    return fsg;
+}
+
+fsg_model_t *
+jsgf_build_fsg(jsgf_t *grammar, jsgf_rule_t *rule,
+               logmath_t *lmath, float32 lw)
+{
+    return jsgf_build_fsg_internal(grammar, rule, lmath, lw, TRUE);
+}
+
+fsg_model_t *
+jsgf_build_fsg_raw(jsgf_t *grammar, jsgf_rule_t *rule,
+                   logmath_t *lmath, float32 lw)
+{
+    return jsgf_build_fsg_internal(grammar, rule, lmath, lw, FALSE);
+}
+
+int
+jsgf_write_fsg(jsgf_t *grammar, jsgf_rule_t *rule, FILE *outfh)
+{
+    fsg_model_t *fsg;
+    logmath_t *lmath = logmath_init(1.0001, 0, 0);
+
+    if ((fsg = jsgf_build_fsg_raw(grammar, rule, lmath, 1.0)) == NULL)
+        goto error_out;
+
+    fsg_model_write(fsg, outfh);
+    logmath_free(lmath);
+    return 0;
+
+error_out:
+    logmath_free(lmath);
+    return -1;
+}
+jsgf_rule_t *
+jsgf_define_rule(jsgf_t *jsgf, char *name, jsgf_rhs_t *rhs, int public)
+{
+    jsgf_rule_t *rule;
+    void *val;
+
+    if (name == NULL) {
+        name = ckd_malloc(strlen(jsgf->name) + 16);
+        sprintf(name, "<%s.g%05d>", jsgf->name, hash_table_inuse(jsgf->rules));
+    }
+    else {
+        char *newname;
+
+        newname = jsgf_fullname(jsgf, name);
+        name = newname;
+    }
+
+    rule = ckd_calloc(1, sizeof(*rule));
+    rule->refcnt = 1;
+    rule->name = ckd_salloc(name);
+    rule->rhs = rhs;
+    rule->public = public;
+
+    E_INFO("Defined rule: %s%s\n",
+           rule->public ? "PUBLIC " : "",
+           rule->name);
+    val = hash_table_enter(jsgf->rules, name, rule);
+    if (val != (void *)rule) {
+        E_WARN("Multiply defined symbol: %s\n", name);
+    }
+    return rule;
+}
+
+jsgf_rule_t *
+jsgf_rule_retain(jsgf_rule_t *rule)
+{
+    ++rule->refcnt;
+    return rule;
+}
+
+int
+jsgf_rule_free(jsgf_rule_t *rule)
+{
+    if (rule == NULL)
+        return 0;
+    if (--rule->refcnt > 0)
+        return rule->refcnt;
+    jsgf_rhs_free(rule->rhs);
+    ckd_free(rule->name);
+    ckd_free(rule);
+    return 0;
+}
+
+
+/* FIXME: This should go in libsphinxutil */
+static char *
+path_list_search(glist_t paths, char *path)
+{
+    gnode_t *gn;
+
+    for (gn = paths; gn; gn = gnode_next(gn)) {
+        char *fullpath;
+        FILE *tmp;
+
+        fullpath = string_join(gnode_ptr(gn), "/", path, NULL);
+        tmp = fopen(fullpath, "r");
+        if (tmp != NULL) {
+            fclose(tmp);
+            return fullpath;
+        }
+        else
+            ckd_free(fullpath);
+    }
+    return NULL;
+}
+
+jsgf_rule_t *
+jsgf_import_rule(jsgf_t *jsgf, char *name)
+{
+    char *c, *path, *newpath;
+    size_t namelen, packlen;
+    void *val;
+    jsgf_t *imp;
+    int import_all;
+
+    /* Trim the leading and trailing <> */
+    namelen = strlen(name);
+    path = ckd_malloc(namelen - 2 + 6); /* room for a trailing .gram */
+    strcpy(path, name + 1);
+    /* Split off the first part of the name */
+    c = strrchr(path, '.');
+    if (c == NULL) {
+        E_ERROR("Imported rule is not qualified: %s\n", name);
+        ckd_free(path);
+        return NULL;
+    }
+    packlen = c - path;
+    *c = '\0';
+
+    /* Look for import foo.* */
+    import_all = (strlen(name) > 2 && 0 == strcmp(name + namelen - 3, ".*>"));
+
+    /* Construct a filename. */
+    for (c = path; *c; ++c)
+        if (*c == '.') *c = '/';
+    strcat(path, ".gram");
+    newpath = path_list_search(jsgf->searchpath, path);
+    ckd_free(path);
+    if (newpath == NULL)
+        return NULL;
+
+    path = newpath;
+    E_INFO("Importing %s from %s to %s\n", name, path, jsgf->name);
+
+    /* FIXME: Also, we need to make sure that path is fully qualified
+     * here, by adding any prefixes from jsgf->name to it. */
+    /* See if we have parsed it already */
+    if (hash_table_lookup(jsgf->imports, path, &val) == 0) {
+        E_INFO("Already imported %s\n", path);
+        imp = val;
+        ckd_free(path);
+    }
+    else {
+        /* If not, parse it. */
+        imp = jsgf_parse_file(path, jsgf);
+        val = hash_table_enter(jsgf->imports, path, imp);
+        if (val != (void *)imp) {
+            E_WARN("Multiply imported file: %s\n", path);
+        }
+    }
+    if (imp != NULL) {
+        hash_iter_t *itor;
+        /* Look for public rules matching rulename. */
+        for (itor = hash_table_iter(imp->rules); itor;
+             itor = hash_table_iter_next(itor)) {
+            hash_entry_t *he = itor->ent;
+            jsgf_rule_t *rule = hash_entry_val(he);
+            int rule_matches;
+            char *rule_name = importname2rulename(name);
+
+            if (import_all) {
+                /* Match package name (symbol table is shared) */
+                rule_matches = !strncmp(rule_name, rule->name, packlen + 1);
+            }
+            else {
+                /* Exact match */
+                rule_matches = !strcmp(rule_name, rule->name);
+            }
+            ckd_free(rule_name);
+            if (rule->public && rule_matches) {
+                void *val;
+                char *newname;
+
+                /* Link this rule into the current namespace. */
+                c = strrchr(rule->name, '.');
+                assert(c != NULL);
+                newname = jsgf_fullname(jsgf, c);
+
+                E_INFO("Imported %s\n", newname);
+                val = hash_table_enter(jsgf->rules, newname,
+                                       jsgf_rule_retain(rule));
+                if (val != (void *)rule) {
+                    E_WARN("Multiply defined symbol: %s\n", newname);
+                }
+                if (!import_all) {
+                    hash_table_iter_free(itor);
+                    return rule;
+                }
+            }
+        }
+    }
+
+    return NULL;
+}
+
+jsgf_t *
+jsgf_parse_file(const char *filename, jsgf_t *parent)
+{
+    yyscan_t yyscanner;
+    jsgf_t *jsgf;
+    int yyrv;
+    FILE *in = NULL;
+
+    yylex_init(&yyscanner);
+    if (filename == NULL) {
+        yyset_in(stdin, yyscanner);
+    }
+    else {
+        in = fopen(filename, "r");
+        if (in == NULL) {
+            fprintf(stderr, "Failed to open %s for parsing: %s\n",
+                    filename, strerror(errno));
+            return NULL;
+        }
+        yyset_in(in, yyscanner);
+    }
+
+    jsgf = jsgf_grammar_new(parent);
+    yyrv = yyparse(yyscanner, jsgf);
+    if (yyrv != 0) {
+        fprintf(stderr, "JSGF parse of %s failed\n",
+                filename ? filename : "(stdin)");
+        jsgf_grammar_free(jsgf);
+        yylex_destroy(yyscanner);
+        return NULL;
+    }
+    if (in)
+        fclose(in);
+    yylex_destroy(yyscanner);
+
+    return jsgf;
+}
diff --git a/src/libsphinxbase/lm/jsgf_internal.h b/src/libsphinxbase/lm/jsgf_internal.h
new file mode 100644 (file)
index 0000000..3a178d0
--- /dev/null
@@ -0,0 +1,131 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#ifndef __JSGF_INTERNAL_H__
+#define __JSGF_INTERNAL_H__
+
+/**
+ * @file jsgf_internal.h Internal definitions for JSGF grammar compiler
+ */
+
+#define YY_NO_UNISTD_H 1
+#include <stdio.h>
+
+#include <sphinxbase/hash_table.h>
+#include <sphinxbase/glist.h>
+#include <sphinxbase/fsg_model.h>
+#include <sphinxbase/logmath.h>
+#include <sphinxbase/strfuncs.h>
+#include <sphinxbase/jsgf.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+/* Fool Emacs. */
+}
+#endif
+
+#define YY_NO_INPUT /* Silence a compiler warning. */
+
+typedef struct jsgf_rhs_s jsgf_rhs_t;
+typedef struct jsgf_atom_s jsgf_atom_t;
+typedef struct jsgf_link_s jsgf_link_t;
+
+struct jsgf_s {
+    char *version;  /**< JSGF version (from header) */
+    char *charset;  /**< JSGF charset (default UTF-8) */
+    char *locale;   /**< JSGF locale (default C) */
+    char *name;     /**< Grammar name */
+
+    hash_table_t *rules;   /**< Defined or imported rules in this grammar. */
+    hash_table_t *imports; /**< Pointers to imported grammars. */
+    jsgf_t *parent;        /**< Parent grammar (if this is an imported one) */
+    glist_t searchpath;    /**< List of directories to search for grammars. */
+
+    /* Scratch variables for FSG conversion. */
+    int nstate;            /**< Number of generated states. */
+    glist_t links;        /**< Generated FSG links. */
+    glist_t rulestack;     /**< Stack of currently expanded rules. */
+};
+
+struct jsgf_rule_s {
+    int refcnt;      /**< Reference count. */
+    char *name;      /**< Rule name (NULL for an alternation/grouping) */
+    int public;      /**< Is this rule marked 'public'? */
+    jsgf_rhs_t *rhs; /**< Expansion */
+
+    int entry;       /**< Entry state for current instance of this rule. */
+    int exit;        /**< Exit state for current instance of this rule. */
+};
+
+struct jsgf_rhs_s {
+    glist_t atoms;   /**< Sequence of items */
+    jsgf_rhs_t *alt; /**< Linked list of alternates */
+};
+
+struct jsgf_atom_s {
+    char *name;        /**< Rule or token name */
+    glist_t tags;      /**< Tags, if any (glist_t of char *) */
+    float weight;      /**< Weight (default 1) */
+};
+
+struct jsgf_link_s {
+    jsgf_atom_t *atom; /**< Name, tags, weight */
+    int from;          /**< From state */
+    int to;            /**< To state */
+};
+
+#define jsgf_atom_is_rule(atom) ((atom)->name[0] == '<')
+
+void jsgf_add_link(jsgf_t *grammar, jsgf_atom_t *atom, int from, int to);
+jsgf_atom_t *jsgf_atom_new(char *name, float weight);
+jsgf_atom_t *jsgf_kleene_new(jsgf_t *jsgf, jsgf_atom_t *atom, int plus);
+jsgf_rule_t *jsgf_optional_new(jsgf_t *jsgf, jsgf_rhs_t *exp);
+jsgf_rule_t *jsgf_define_rule(jsgf_t *jsgf, char *name, jsgf_rhs_t *rhs, int public);
+jsgf_rule_t *jsgf_import_rule(jsgf_t *jsgf, char *name);
+
+int jsgf_atom_free(jsgf_atom_t *atom);
+int jsgf_rule_free(jsgf_rule_t *rule);
+jsgf_rule_t *jsgf_rule_retain(jsgf_rule_t *rule);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __JSGF_H__ */
diff --git a/src/libsphinxbase/lm/jsgf_parser.c b/src/libsphinxbase/lm/jsgf_parser.c
new file mode 100644 (file)
index 0000000..9e64a03
--- /dev/null
@@ -0,0 +1,1797 @@
+
+/* A Bison parser, made by GNU Bison 2.4.1.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.4.1"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 1
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 37 "jsgf_parser.y"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <sphinxbase/hash_table.h>
+#include <sphinxbase/ckd_alloc.h>
+#include <sphinxbase/err.h>
+
+#include "jsgf_internal.h"
+#include "jsgf_parser.h"
+#include "jsgf_scanner.h"
+
+/* Suppress warnings from generated code */
+#if defined _MSC_VER
+#pragma warning(disable: 4273)
+#endif
+
+void yyerror(yyscan_t lex, jsgf_t *jsgf, const char *s);
+
+
+
+/* Line 189 of yacc.c  */
+#line 95 "jsgf_parser.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     HEADER = 258,
+     GRAMMAR = 259,
+     IMPORT = 260,
+     PUBLIC = 261,
+     TOKEN = 262,
+     RULENAME = 263,
+     TAG = 264,
+     WEIGHT = 265
+   };
+#endif
+/* Tokens.  */
+#define HEADER 258
+#define GRAMMAR 259
+#define IMPORT 260
+#define PUBLIC 261
+#define TOKEN 262
+#define RULENAME 263
+#define TAG 264
+#define WEIGHT 265
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 214 of yacc.c  */
+#line 63 "jsgf_parser.y"
+
+       char *name;
+       float weight;
+       jsgf_rule_t *rule;
+       jsgf_rhs_t *rhs;
+       jsgf_atom_t *atom;
+
+
+
+/* Line 214 of yacc.c  */
+#line 161 "jsgf_parser.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 264 of yacc.c  */
+#line 173 "jsgf_parser.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+       Stack = &yyptr->Stack_alloc;                                    \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  7
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   54
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  20
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  16
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  33
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  58
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   265
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      14,    15,    18,    19,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,    11,
+       2,    12,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    16,     2,    17,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    13,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     5,     8,    12,    15,    18,    22,    27,
+      33,    37,    39,    42,    46,    48,    51,    56,    62,    64,
+      68,    70,    73,    75,    78,    80,    83,    87,    91,    93,
+      95,    97,    99,   102
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      21,     0,    -1,    22,    -1,    22,    27,    -1,    22,    25,
+      27,    -1,    23,    24,    -1,     3,    11,    -1,     3,     7,
+      11,    -1,     3,     7,     7,    11,    -1,     3,     7,     7,
+       7,    11,    -1,     4,     7,    11,    -1,    26,    -1,    25,
+      26,    -1,     5,     8,    11,    -1,    28,    -1,    27,    28,
+      -1,     8,    12,    29,    11,    -1,     6,     8,    12,    29,
+      11,    -1,    30,    -1,    29,    13,    30,    -1,    31,    -1,
+      30,    31,    -1,    32,    -1,    31,     9,    -1,    35,    -1,
+      10,    35,    -1,    14,    29,    15,    -1,    16,    29,    17,
+      -1,     7,    -1,     8,    -1,    33,    -1,    34,    -1,    35,
+      18,    -1,    35,    19,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,    80,    80,    81,    82,    85,    88,    89,    90,    91,
+      95,    98,    99,   102,   105,   106,   109,   110,   113,   114,
+     119,   121,   125,   126,   130,   131,   134,   137,   140,   141,
+     142,   143,   144,   145
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "HEADER", "GRAMMAR", "IMPORT", "PUBLIC",
+  "TOKEN", "RULENAME", "TAG", "WEIGHT", "';'", "'='", "'|'", "'('", "')'",
+  "'['", "']'", "'*'", "'+'", "$accept", "grammar", "header",
+  "jsgf_header", "grammar_header", "import_header", "import_statement",
+  "rule_list", "rule", "alternate_list", "rule_expansion",
+  "tagged_rule_item", "rule_item", "rule_group", "rule_optional",
+  "rule_atom", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,    59,    61,   124,    40,    41,    91,    93,    42,    43
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    20,    21,    21,    21,    22,    23,    23,    23,    23,
+      24,    25,    25,    26,    27,    27,    28,    28,    29,    29,
+      30,    30,    31,    31,    32,    32,    33,    34,    35,    35,
+      35,    35,    35,    35
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     2,     3,     2,     2,     3,     4,     5,
+       3,     1,     2,     3,     1,     2,     4,     5,     1,     3,
+       1,     2,     1,     2,     1,     2,     3,     3,     1,     1,
+       1,     1,     2,     2
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     0,     0,     2,     0,     0,     6,     1,     0,     0,
+       0,     0,    11,     3,    14,     0,     5,     0,     7,     0,
+       0,     0,    12,     4,    15,     0,     0,     8,    13,     0,
+      28,    29,     0,     0,     0,     0,    18,    20,    22,    30,
+      31,    24,    10,     9,     0,    25,     0,     0,    16,     0,
+      21,    23,    32,    33,    17,    26,    27,    19
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     2,     3,     4,    16,    11,    12,    13,    14,    35,
+      36,    37,    38,    39,    40,    41
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -37
+static const yytype_int8 yypact[] =
+{
+      -1,    -2,    36,    22,    35,     8,   -37,   -37,    32,    33,
+      30,    22,   -37,    17,   -37,    37,   -37,    13,   -37,    34,
+      31,    -4,   -37,    17,   -37,    38,    39,   -37,   -37,    -4,
+     -37,   -37,     0,    -4,    -4,    18,    -4,    42,   -37,   -37,
+     -37,    19,   -37,   -37,    21,    19,    20,     9,   -37,    -4,
+      42,   -37,   -37,   -37,   -37,   -37,   -37,    -4
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -37,   -37,   -37,   -37,   -37,   -37,    41,    43,   -12,   -16,
+      -3,   -36,   -37,   -37,   -37,    15
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+      50,    24,     1,    30,    31,     5,    32,    30,    31,     6,
+      33,    24,    34,    44,    33,    17,    34,    46,    47,    18,
+      26,    50,    49,     9,    27,    10,    56,     8,     9,    48,
+      10,    49,    54,    49,    49,    55,     7,    52,    53,    15,
+      19,    20,    21,    29,    25,    28,    57,    45,     0,    42,
+      43,    51,    22,     0,    23
+};
+
+static const yytype_int8 yycheck[] =
+{
+      36,    13,     3,     7,     8,     7,    10,     7,     8,    11,
+      14,    23,    16,    29,    14,     7,    16,    33,    34,    11,
+       7,    57,    13,     6,    11,     8,    17,     5,     6,    11,
+       8,    13,    11,    13,    13,    15,     0,    18,    19,     4,
+       8,     8,    12,    12,     7,    11,    49,    32,    -1,    11,
+      11,     9,    11,    -1,    11
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     3,    21,    22,    23,     7,    11,     0,     5,     6,
+       8,    25,    26,    27,    28,     4,    24,     7,    11,     8,
+       8,    12,    26,    27,    28,     7,     7,    11,    11,    12,
+       7,     8,    10,    14,    16,    29,    30,    31,    32,    33,
+      34,    35,    11,    11,    29,    35,    29,    29,    11,    13,
+      31,     9,    18,    19,    11,    15,    17,    30
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (yyscanner, jsgf, YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, yyscanner)
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value, yyscanner, jsgf); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, yyscan_t yyscanner, jsgf_t *jsgf)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, yyscanner, jsgf)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    yyscan_t yyscanner;
+    jsgf_t *jsgf;
+#endif
+{
+  if (!yyvaluep)
+    return;
+  YYUSE (yyscanner);
+  YYUSE (jsgf);
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, yyscan_t yyscanner, jsgf_t *jsgf)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, yyscanner, jsgf)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    yyscan_t yyscanner;
+    jsgf_t *jsgf;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, yyscanner, jsgf);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, yyscan_t yyscanner, jsgf_t *jsgf)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, yyscanner, jsgf)
+    YYSTYPE *yyvsp;
+    int yyrule;
+    yyscan_t yyscanner;
+    jsgf_t *jsgf;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      , yyscanner, jsgf);
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule, yyscanner, jsgf); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, yyscan_t yyscanner, jsgf_t *jsgf)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, yyscanner, jsgf)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+    yyscan_t yyscanner;
+    jsgf_t *jsgf;
+#endif
+{
+  YYUSE (yyvaluep);
+  YYUSE (yyscanner);
+  YYUSE (jsgf);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (yyscan_t yyscanner, jsgf_t *jsgf);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+
+
+/*-------------------------.
+| yyparse or yypush_parse.  |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (yyscan_t yyscanner, jsgf_t *jsgf)
+#else
+int
+yyparse (yyscanner, jsgf)
+    yyscan_t yyscanner;
+    jsgf_t *jsgf;
+#endif
+#endif
+{
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+    /* Number of syntax errors so far.  */
+    int yynerrs;
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss_alloc, yyss);
+       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 5:
+
+/* Line 1455 of yacc.c  */
+#line 85 "jsgf_parser.y"
+    { jsgf->name = (yyvsp[(2) - (2)].name); }
+    break;
+
+  case 7:
+
+/* Line 1455 of yacc.c  */
+#line 89 "jsgf_parser.y"
+    { jsgf->version = (yyvsp[(2) - (3)].name); }
+    break;
+
+  case 8:
+
+/* Line 1455 of yacc.c  */
+#line 90 "jsgf_parser.y"
+    { jsgf->version = (yyvsp[(2) - (4)].name); jsgf->charset = (yyvsp[(3) - (4)].name); }
+    break;
+
+  case 9:
+
+/* Line 1455 of yacc.c  */
+#line 91 "jsgf_parser.y"
+    { jsgf->version = (yyvsp[(2) - (5)].name); jsgf->charset = (yyvsp[(3) - (5)].name);
+                                        jsgf->locale = (yyvsp[(4) - (5)].name); }
+    break;
+
+  case 10:
+
+/* Line 1455 of yacc.c  */
+#line 95 "jsgf_parser.y"
+    { (yyval.name) = (yyvsp[(2) - (3)].name); }
+    break;
+
+  case 13:
+
+/* Line 1455 of yacc.c  */
+#line 102 "jsgf_parser.y"
+    { jsgf_import_rule(jsgf, (yyvsp[(2) - (3)].name)); ckd_free((yyvsp[(2) - (3)].name)); }
+    break;
+
+  case 16:
+
+/* Line 1455 of yacc.c  */
+#line 109 "jsgf_parser.y"
+    { jsgf_define_rule(jsgf, (yyvsp[(1) - (4)].name), (yyvsp[(3) - (4)].rhs), 0); ckd_free((yyvsp[(1) - (4)].name)); }
+    break;
+
+  case 17:
+
+/* Line 1455 of yacc.c  */
+#line 110 "jsgf_parser.y"
+    { jsgf_define_rule(jsgf, (yyvsp[(2) - (5)].name), (yyvsp[(4) - (5)].rhs), 1); ckd_free((yyvsp[(2) - (5)].name)); }
+    break;
+
+  case 18:
+
+/* Line 1455 of yacc.c  */
+#line 113 "jsgf_parser.y"
+    { (yyval.rhs) = (yyvsp[(1) - (1)].rhs); (yyval.rhs)->atoms = glist_reverse((yyval.rhs)->atoms); }
+    break;
+
+  case 19:
+
+/* Line 1455 of yacc.c  */
+#line 114 "jsgf_parser.y"
+    { (yyval.rhs) = (yyvsp[(3) - (3)].rhs);
+                                              (yyval.rhs)->atoms = glist_reverse((yyval.rhs)->atoms);
+                                              (yyval.rhs)->alt = (yyvsp[(1) - (3)].rhs); }
+    break;
+
+  case 20:
+
+/* Line 1455 of yacc.c  */
+#line 119 "jsgf_parser.y"
+    { (yyval.rhs) = ckd_calloc(1, sizeof(*(yyval.rhs)));
+                                  (yyval.rhs)->atoms = glist_add_ptr((yyval.rhs)->atoms, (yyvsp[(1) - (1)].atom)); }
+    break;
+
+  case 21:
+
+/* Line 1455 of yacc.c  */
+#line 121 "jsgf_parser.y"
+    { (yyval.rhs) = (yyvsp[(1) - (2)].rhs);
+                                           (yyval.rhs)->atoms = glist_add_ptr((yyval.rhs)->atoms, (yyvsp[(2) - (2)].atom)); }
+    break;
+
+  case 23:
+
+/* Line 1455 of yacc.c  */
+#line 126 "jsgf_parser.y"
+    { (yyval.atom) = (yyvsp[(1) - (2)].atom);
+                                (yyval.atom)->tags = glist_add_ptr((yyval.atom)->tags, (yyvsp[(2) - (2)].name)); }
+    break;
+
+  case 25:
+
+/* Line 1455 of yacc.c  */
+#line 131 "jsgf_parser.y"
+    { (yyval.atom) = (yyvsp[(2) - (2)].atom); (yyval.atom)->weight = (yyvsp[(1) - (2)].weight); }
+    break;
+
+  case 26:
+
+/* Line 1455 of yacc.c  */
+#line 134 "jsgf_parser.y"
+    { (yyval.rule) = jsgf_define_rule(jsgf, NULL, (yyvsp[(2) - (3)].rhs), 0); }
+    break;
+
+  case 27:
+
+/* Line 1455 of yacc.c  */
+#line 137 "jsgf_parser.y"
+    { (yyval.rule) = jsgf_optional_new(jsgf, (yyvsp[(2) - (3)].rhs)); }
+    break;
+
+  case 28:
+
+/* Line 1455 of yacc.c  */
+#line 140 "jsgf_parser.y"
+    { (yyval.atom) = jsgf_atom_new((yyvsp[(1) - (1)].name), 1.0); ckd_free((yyvsp[(1) - (1)].name)); }
+    break;
+
+  case 29:
+
+/* Line 1455 of yacc.c  */
+#line 141 "jsgf_parser.y"
+    { (yyval.atom) = jsgf_atom_new((yyvsp[(1) - (1)].name), 1.0); ckd_free((yyvsp[(1) - (1)].name)); }
+    break;
+
+  case 30:
+
+/* Line 1455 of yacc.c  */
+#line 142 "jsgf_parser.y"
+    { (yyval.atom) = jsgf_atom_new((yyvsp[(1) - (1)].rule)->name, 1.0); }
+    break;
+
+  case 31:
+
+/* Line 1455 of yacc.c  */
+#line 143 "jsgf_parser.y"
+    { (yyval.atom) = jsgf_atom_new((yyvsp[(1) - (1)].rule)->name, 1.0); }
+    break;
+
+  case 32:
+
+/* Line 1455 of yacc.c  */
+#line 144 "jsgf_parser.y"
+    { (yyval.atom) = jsgf_kleene_new(jsgf, (yyvsp[(1) - (2)].atom), 0); }
+    break;
+
+  case 33:
+
+/* Line 1455 of yacc.c  */
+#line 145 "jsgf_parser.y"
+    { (yyval.atom) = jsgf_kleene_new(jsgf, (yyvsp[(1) - (2)].atom), 1); }
+    break;
+
+
+
+/* Line 1455 of yacc.c  */
+#line 1578 "jsgf_parser.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (yyscanner, jsgf, YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yyscanner, jsgf, yymsg);
+         }
+       else
+         {
+           yyerror (yyscanner, jsgf, YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval, yyscanner, jsgf);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp, yyscanner, jsgf);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (yyscanner, jsgf, YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval, yyscanner, jsgf);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp, yyscanner, jsgf);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+
+/* Line 1675 of yacc.c  */
+#line 148 "jsgf_parser.y"
+
+
+void
+yyerror(yyscan_t lex, jsgf_t *jsgf, const char *s)
+{
+    fprintf(stderr, "ERROR: %s\n", s);
+}
+
diff --git a/src/libsphinxbase/lm/jsgf_parser.h b/src/libsphinxbase/lm/jsgf_parser.h
new file mode 100644 (file)
index 0000000..ec254aa
--- /dev/null
@@ -0,0 +1,90 @@
+
+/* A Bison parser, made by GNU Bison 2.4.1.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     HEADER = 258,
+     GRAMMAR = 259,
+     IMPORT = 260,
+     PUBLIC = 261,
+     TOKEN = 262,
+     RULENAME = 263,
+     TAG = 264,
+     WEIGHT = 265
+   };
+#endif
+/* Tokens.  */
+#define HEADER 258
+#define GRAMMAR 259
+#define IMPORT 260
+#define PUBLIC 261
+#define TOKEN 262
+#define RULENAME 263
+#define TAG 264
+#define WEIGHT 265
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 1676 of yacc.c  */
+#line 63 "jsgf_parser.y"
+
+       char *name;
+       float weight;
+       jsgf_rule_t *rule;
+       jsgf_rhs_t *rhs;
+       jsgf_atom_t *atom;
+
+
+
+/* Line 1676 of yacc.c  */
+#line 82 "jsgf_parser.h"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+
diff --git a/src/libsphinxbase/lm/jsgf_parser.y b/src/libsphinxbase/lm/jsgf_parser.y
new file mode 100644 (file)
index 0000000..bc8b543
--- /dev/null
@@ -0,0 +1,154 @@
+/* -*- c-basic-offset:4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+%{
+#include <stdio.h>
+#include <string.h>
+
+#include <sphinxbase/hash_table.h>
+#include <sphinxbase/ckd_alloc.h>
+#include <sphinxbase/err.h>
+
+#include "jsgf_internal.h"
+#include "jsgf_parser.h"
+#include "jsgf_scanner.h"
+
+/* Suppress warnings from generated code */
+#if defined _MSC_VER
+#pragma warning(disable: 4273)
+#endif
+
+void yyerror(yyscan_t lex, jsgf_t *jsgf, const char *s);
+
+%}
+
+%pure-parser
+%lex-param { yyscan_t yyscanner }
+%parse-param { yyscan_t yyscanner }
+%parse-param { jsgf_t *jsgf }
+
+%union {
+       char *name;
+       float weight;
+       jsgf_rule_t *rule;
+       jsgf_rhs_t *rhs;
+       jsgf_atom_t *atom;
+}
+
+%token           HEADER GRAMMAR IMPORT PUBLIC
+%token <name>    TOKEN RULENAME TAG
+%token <weight>  WEIGHT
+%type  <atom>    rule_atom rule_item tagged_rule_item
+%type  <rhs>     rule_expansion alternate_list
+%type  <name>    grammar_header
+%type  <rule>    rule_group rule_optional
+%%
+
+grammar: header
+       | header rule_list
+       | header import_header rule_list
+       ;
+
+header: jsgf_header grammar_header { jsgf->name = $2; }
+       ;
+
+jsgf_header: HEADER ';'
+       | HEADER TOKEN ';' { jsgf->version = $2; }
+       | HEADER TOKEN TOKEN ';' { jsgf->version = $2; jsgf->charset = $3; }
+       | HEADER TOKEN TOKEN TOKEN ';' { jsgf->version = $2; jsgf->charset = $3;
+                                        jsgf->locale = $4; }
+       ;
+
+grammar_header: GRAMMAR TOKEN ';' { $$ = $2; }
+       ;
+
+import_header: import_statement
+       | import_header import_statement
+       ;
+
+import_statement: IMPORT RULENAME ';' { jsgf_import_rule(jsgf, $2); ckd_free($2); }
+       ;
+
+rule_list: rule
+       | rule_list rule
+       ;
+
+rule: RULENAME '=' alternate_list ';' { jsgf_define_rule(jsgf, $1, $3, 0); ckd_free($1); }
+| PUBLIC RULENAME '=' alternate_list ';'  { jsgf_define_rule(jsgf, $2, $4, 1); ckd_free($2); }
+       ;
+
+alternate_list: rule_expansion { $$ = $1; $$->atoms = glist_reverse($$->atoms); }
+       | alternate_list '|' rule_expansion { $$ = $3;
+                                              $$->atoms = glist_reverse($$->atoms);
+                                              $$->alt = $1; }
+       ;
+
+rule_expansion: tagged_rule_item { $$ = ckd_calloc(1, sizeof(*$$));
+                                  $$->atoms = glist_add_ptr($$->atoms, $1); }
+       | rule_expansion tagged_rule_item { $$ = $1;
+                                           $$->atoms = glist_add_ptr($$->atoms, $2); }
+       ;
+
+tagged_rule_item: rule_item
+       | tagged_rule_item TAG { $$ = $1;
+                                $$->tags = glist_add_ptr($$->tags, $2); }
+       ;
+
+rule_item: rule_atom
+       | WEIGHT rule_atom { $$ = $2; $$->weight = $1; }
+       ;
+
+rule_group: '(' alternate_list ')' { $$ = jsgf_define_rule(jsgf, NULL, $2, 0); }
+       ;
+
+rule_optional: '[' alternate_list ']' { $$ = jsgf_optional_new(jsgf, $2); }
+       ;
+
+rule_atom: TOKEN { $$ = jsgf_atom_new($1, 1.0); ckd_free($1); }
+       | RULENAME { $$ = jsgf_atom_new($1, 1.0); ckd_free($1); }
+       | rule_group { $$ = jsgf_atom_new($1->name, 1.0); }
+       | rule_optional { $$ = jsgf_atom_new($1->name, 1.0); }
+       | rule_atom '*' { $$ = jsgf_kleene_new(jsgf, $1, 0); }
+       | rule_atom '+' { $$ = jsgf_kleene_new(jsgf, $1, 1); }
+       ;
+
+%%
+
+void
+yyerror(yyscan_t lex, jsgf_t *jsgf, const char *s)
+{
+    fprintf(stderr, "ERROR: %s\n", s);
+}
diff --git a/src/libsphinxbase/lm/jsgf_scanner.c b/src/libsphinxbase/lm/jsgf_scanner.c
new file mode 100644 (file)
index 0000000..1678f64
--- /dev/null
@@ -0,0 +1,2128 @@
+#line 2 "jsgf_scanner.c"
+
+#line 4 "jsgf_scanner.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+/* For convenience, these vars (plus the bison vars far below)
+   are macros in the reentrant scanner. */
+#define yyin yyg->yyin_r
+#define yyout yyg->yyout_r
+#define yyextra yyg->yyextra_r
+#define yyleng yyg->yyleng_r
+#define yytext yyg->yytext_r
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug yyg->yy_flex_debug_r
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yyg->yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yyg->yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin ,yyscanner )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    #define YY_LESS_LINENO(n)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+               *yy_cp = yyg->yy_hold_char; \
+               YY_RESTORE_YY_MORE_OFFSET \
+               yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+               YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+               } \
+       while ( 0 )
+
+#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+       {
+       FILE *yy_input_file;
+
+       char *yy_ch_buf;                /* input buffer */
+       char *yy_buf_pos;               /* current position in input buffer */
+
+       /* Size of input buffer in bytes, not including room for EOB
+        * characters.
+        */
+       yy_size_t yy_buf_size;
+
+       /* Number of characters read into yy_ch_buf, not including EOB
+        * characters.
+        */
+       int yy_n_chars;
+
+       /* Whether we "own" the buffer - i.e., we know we created it,
+        * and can realloc() it to grow it, and should free() it to
+        * delete it.
+        */
+       int yy_is_our_buffer;
+
+       /* Whether this is an "interactive" input source; if so, and
+        * if we're using stdio for input, then we want to use getc()
+        * instead of fread(), to make sure we stop fetching input after
+        * each newline.
+        */
+       int yy_is_interactive;
+
+       /* Whether we're considered to be at the beginning of a line.
+        * If so, '^' rules will be active on the next match, otherwise
+        * not.
+        */
+       int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+       /* Whether to try to fill the input buffer when we reach the
+        * end of it.
+        */
+       int yy_fill_buffer;
+
+       int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+       /* When an EOF's been seen but there's still some text to process
+        * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+        * shouldn't try reading from the input source any more.  We might
+        * still have a bunch of tokens to match, though, because of
+        * possible backing-up.
+        *
+        * When we actually see the EOF, we change the status to "new"
+        * (via yyrestart()), so that the user can continue scanning by
+        * just pointing yyin at a new input file.
+        */
+#define YY_BUFFER_EOF_PENDING 2
+
+       };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
+                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
+
+void yyrestart (FILE *input_file ,yyscan_t yyscanner );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+void yypop_buffer_state (yyscan_t yyscanner );
+
+static void yyensure_buffer_stack (yyscan_t yyscanner );
+static void yy_load_buffer_state (yyscan_t yyscanner );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+
+void *yyalloc (yy_size_t ,yyscan_t yyscanner );
+void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
+void yyfree (void * ,yyscan_t yyscanner );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+       { \
+       if ( ! YY_CURRENT_BUFFER ){ \
+        yyensure_buffer_stack (yyscanner); \
+               YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+       } \
+       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+       }
+
+#define yy_set_bol(at_bol) \
+       { \
+       if ( ! YY_CURRENT_BUFFER ){\
+        yyensure_buffer_stack (yyscanner); \
+               YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+       } \
+       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+       }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define yywrap(n) 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+typedef int yy_state_type;
+
+#define yytext_ptr yytext_r
+
+static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
+static int yy_get_next_buffer (yyscan_t yyscanner );
+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+       yyg->yytext_ptr = yy_bp; \
+       yyleng = (size_t) (yy_cp - yy_bp); \
+       yyg->yy_hold_char = *yy_cp; \
+       *yy_cp = '\0'; \
+       yyg->yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 16
+#define YY_END_OF_BUFFER 17
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+       {
+       flex_int32_t yy_verify;
+       flex_int32_t yy_nxt;
+       };
+static yyconst flex_int16_t yy_accept[77] =
+    {   0,
+        0,    0,    0,    0,   17,   12,    1,    1,    1,   12,
+       12,   15,   15,   15,   12,   12,   12,   15,   12,    5,
+        1,    5,   12,   12,    0,   12,   12,   12,    3,    0,
+       14,    0,    0,   12,   12,   12,    0,    0,   11,   12,
+        4,   13,    0,   12,    0,   12,   12,   12,    0,    0,
+        2,   14,   10,   12,   12,   12,    0,    0,   11,   12,
+       13,    0,   12,   12,   12,   12,   12,    6,   12,   12,
+       12,   12,    8,    9,    7,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    5,    6,    1,    1,    1,    1,    7,
+        7,    8,    7,    1,    1,    9,   10,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,    1,    7,   12,
+        7,   13,    1,    1,    1,    1,    1,    1,    1,   14,
+       15,    1,    1,   16,    1,    1,    1,    1,    1,    1,
+        1,    1,   17,    1,    1,    1,    1,    1,    1,    1,
+        7,   18,    7,    1,    1,    1,   19,   20,   21,    1,
+
+        1,    1,   22,    1,   23,    1,    1,   24,   25,    1,
+       26,   27,    1,   28,    1,   29,   30,    1,    1,    1,
+        1,    1,   31,    7,   32,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,   33,    1,    1,    1,
+       34,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,   35,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[36] =
+    {   0,
+        1,    2,    2,    1,    1,    1,    2,    2,    1,    2,
+        1,    3,    3,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        2,    2,    1,    1,    1
+    } ;
+
+static yyconst flex_int16_t yy_base[87] =
+    {   0,
+        0,    0,   34,   37,  148,    0,  196,  196,    0,   44,
+      130,  196,   50,    0,  115,  116,  106,   32,  102,  196,
+      196,  124,    0,   75,   48,    0,  106,  116,  196,  121,
+      128,   58,  117,  110,  101,  107,   47,   52,  196,   91,
+      196,  196,   68,    0,   76,    0,  137,  108,   33,  119,
+      196,  196,  196,   96,   94,   93,   71,   94,   72,  104,
+       87,   97,   87,   74,   70,   73,   79,    0,   72,   45,
+       51,   35,    0,    0,    0,  196,  169,   47,  172,  175,
+      177,  180,  183,  186,  189,  192
+    } ;
+
+static yyconst flex_int16_t yy_def[87] =
+    {   0,
+       76,    1,   77,   77,   76,   78,   76,   76,   78,   79,
+       78,   76,   76,   80,   78,   78,   78,   81,   78,   76,
+       76,   76,   78,   79,   82,   78,   83,   78,   76,   76,
+       84,   76,   80,   78,   78,   78,   81,   85,   76,   78,
+       76,   76,   86,   24,   82,   24,   83,   78,   76,   84,
+       76,   76,   76,   78,   78,   78,   81,   85,   81,   78,
+       82,   86,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   78,   78,   78,    0,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76
+    } ;
+
+static yyconst flex_int16_t yy_nxt[232] =
+    {   0,
+        6,    7,    8,    9,   10,   11,   12,   12,    6,   13,
+        6,   14,   12,    6,    6,    6,    6,    6,    6,    6,
+        6,   15,   16,    6,    6,    6,   17,    6,    6,    6,
+       18,   12,    6,    6,   19,   21,    8,   21,   21,    8,
+       21,   22,   52,   49,   22,   25,   25,   23,   26,   38,
+       25,   25,   42,   25,   37,   25,   25,   29,   30,   31,
+       32,   27,   75,   39,   38,   43,   30,   52,   32,   58,
+       25,   74,   61,   73,   25,   25,   25,   25,   39,   26,
+       42,   25,   25,   59,   25,   62,   25,   25,   38,   38,
+       72,   42,   27,   43,   28,   71,   37,   70,   69,   25,
+
+       68,   61,   39,   39,   43,   25,   25,   45,   25,   67,
+       46,   58,   45,   45,   62,   45,   66,   45,   45,   65,
+       64,   51,   63,   47,   60,   59,   56,   55,   54,   53,
+       51,   49,   48,   41,   40,   36,   45,   45,   45,   25,
+       35,   46,   34,   45,   45,   28,   45,   76,   45,   45,
+       76,   76,   76,   76,   47,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   45,   45,   20,
+       20,   20,   24,   24,   24,   33,   33,   37,   37,   37,
+       25,   25,   25,   44,   44,   44,   50,   50,   50,   57,
+       57,   57,   45,   45,   45,    5,   76,   76,   76,   76,
+
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76
+    } ;
+
+static yyconst flex_int16_t yy_chk[232] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    3,    3,    3,    4,    4,
+        4,    3,   49,   49,    4,   10,   10,   78,   10,   18,
+       10,   10,   25,   10,   38,   10,   10,   13,   13,   13,
+       13,   10,   72,   18,   37,   25,   32,   32,   32,   38,
+       43,   71,   43,   70,   10,   10,   24,   24,   37,   24,
+       45,   24,   24,   38,   24,   43,   24,   24,   57,   59,
+       69,   61,   24,   45,   67,   66,   58,   65,   64,   62,
+
+       63,   62,   57,   59,   61,   24,   24,   27,   27,   60,
+       27,   58,   27,   27,   62,   27,   56,   27,   27,   55,
+       54,   50,   48,   27,   40,   58,   36,   35,   34,   33,
+       31,   30,   28,   22,   19,   17,   27,   27,   47,   47,
+       16,   47,   15,   47,   47,   11,   47,    5,   47,   47,
+        0,    0,    0,    0,   47,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   47,   47,   77,
+       77,   77,   79,   79,   79,   80,   80,   81,   81,   81,
+       82,   82,   82,   83,   83,   83,   84,   84,   84,   85,
+       85,   85,   86,   86,   86,   76,   76,   76,   76,   76,
+
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
+       76
+    } ;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+#line 1 "_jsgf_scanner.l"
+/* -*- mode: text -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/* YOU MUST USE FLEX 2.5.33 OR NEWER TO PROCESS THIS FILE!!! */
+#line 39 "_jsgf_scanner.l"
+
+#include "jsgf_internal.h"
+#include "jsgf_parser.h"
+
+
+#line 551 "jsgf_scanner.c"
+
+#define INITIAL 0
+#define COMMENT 1
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+/* Holds the entire state of the reentrant scanner. */
+struct yyguts_t
+    {
+
+    /* User-defined. Not touched by flex. */
+    YY_EXTRA_TYPE yyextra_r;
+
+    /* The rest are the same as the globals declared in the non-reentrant scanner. */
+    FILE *yyin_r, *yyout_r;
+    size_t yy_buffer_stack_top; /**< index of top of stack. */
+    size_t yy_buffer_stack_max; /**< capacity of stack. */
+    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
+    char yy_hold_char;
+    int yy_n_chars;
+    int yyleng_r;
+    char *yy_c_buf_p;
+    int yy_init;
+    int yy_start;
+    int yy_did_buffer_switch_on_eof;
+    int yy_start_stack_ptr;
+    int yy_start_stack_depth;
+    int *yy_start_stack;
+    yy_state_type yy_last_accepting_state;
+    char* yy_last_accepting_cpos;
+
+    int yylineno_r;
+    int yy_flex_debug_r;
+
+    char *yytext_r;
+    int yy_more_flag;
+    int yy_more_len;
+
+    YYSTYPE * yylval_r;
+
+    }; /* end struct yyguts_t */
+
+static int yy_init_globals (yyscan_t yyscanner );
+
+    /* This must go here because YYSTYPE and YYLTYPE are included
+     * from bison output in section 1.*/
+    #    define yylval yyg->yylval_r
+    
+int yylex_init (yyscan_t* scanner);
+
+int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (yyscan_t yyscanner );
+
+int yyget_debug (yyscan_t yyscanner );
+
+void yyset_debug (int debug_flag ,yyscan_t yyscanner );
+
+YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+
+FILE *yyget_in (yyscan_t yyscanner );
+
+void yyset_in  (FILE * in_str ,yyscan_t yyscanner );
+
+FILE *yyget_out (yyscan_t yyscanner );
+
+void yyset_out  (FILE * out_str ,yyscan_t yyscanner );
+
+int yyget_leng (yyscan_t yyscanner );
+
+char *yyget_text (yyscan_t yyscanner );
+
+int yyget_lineno (yyscan_t yyscanner );
+
+void yyset_lineno (int line_number ,yyscan_t yyscanner );
+
+YYSTYPE * yyget_lval (yyscan_t yyscanner );
+
+void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (yyscan_t yyscanner );
+#else
+extern int yywrap (yyscan_t yyscanner );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  ,yyscan_t yyscanner);
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (yyscan_t yyscanner );
+#else
+static int input (yyscan_t yyscanner );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+               { \
+               int c = '*'; \
+               unsigned n; \
+               for ( n = 0; n < max_size && \
+                            (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+                       buf[n] = (char) c; \
+               if ( c == '\n' ) \
+                       buf[n++] = (char) c; \
+               if ( c == EOF && ferror( yyin ) ) \
+                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
+               result = n; \
+               } \
+       else \
+               { \
+               errno=0; \
+               while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+                       { \
+                       if( errno != EINTR) \
+                               { \
+                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
+                               break; \
+                               } \
+                       errno=0; \
+                       clearerr(yyin); \
+                       } \
+               }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex \
+               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+
+#define YY_DECL int yylex \
+               (YYSTYPE * yylval_param , yyscan_t yyscanner)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+       YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+#line 57 "_jsgf_scanner.l"
+
+
+#line 788 "jsgf_scanner.c"
+
+    yylval = yylval_param;
+
+       if ( !yyg->yy_init )
+               {
+               yyg->yy_init = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+               if ( ! yyg->yy_start )
+                       yyg->yy_start = 1;      /* first start state */
+
+               if ( ! yyin )
+                       yyin = stdin;
+
+               if ( ! yyout )
+                       yyout = stdout;
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       yyensure_buffer_stack (yyscanner);
+                       YY_CURRENT_BUFFER_LVALUE =
+                               yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+               }
+
+               yy_load_buffer_state(yyscanner );
+               }
+
+       while ( 1 )             /* loops until end-of-file is reached */
+               {
+               yy_cp = yyg->yy_c_buf_p;
+
+               /* Support of yytext. */
+               *yy_cp = yyg->yy_hold_char;
+
+               /* yy_bp points to the position in yy_ch_buf of the start of
+                * the current run.
+                */
+               yy_bp = yy_cp;
+
+               yy_current_state = yyg->yy_start;
+yy_match:
+               do
+                       {
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       if ( yy_accept[yy_current_state] )
+                               {
+                               yyg->yy_last_accepting_state = yy_current_state;
+                               yyg->yy_last_accepting_cpos = yy_cp;
+                               }
+                       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+                               {
+                               yy_current_state = (int) yy_def[yy_current_state];
+                               if ( yy_current_state >= 77 )
+                                       yy_c = yy_meta[(unsigned int) yy_c];
+                               }
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+                       ++yy_cp;
+                       }
+               while ( yy_base[yy_current_state] != 196 );
+
+yy_find_action:
+               yy_act = yy_accept[yy_current_state];
+               if ( yy_act == 0 )
+                       { /* have to back up */
+                       yy_cp = yyg->yy_last_accepting_cpos;
+                       yy_current_state = yyg->yy_last_accepting_state;
+                       yy_act = yy_accept[yy_current_state];
+                       }
+
+               YY_DO_BEFORE_ACTION;
+
+do_action:     /* This label is used only to access EOF actions. */
+
+               switch ( yy_act )
+       { /* beginning of action switch */
+                       case 0: /* must back up */
+                       /* undo the effects of YY_DO_BEFORE_ACTION */
+                       *yy_cp = yyg->yy_hold_char;
+                       yy_cp = yyg->yy_last_accepting_cpos;
+                       yy_current_state = yyg->yy_last_accepting_state;
+                       goto yy_find_action;
+
+case 1:
+/* rule 1 can match eol */
+YY_RULE_SETUP
+#line 59 "_jsgf_scanner.l"
+;                     /* ignore whitespace */
+       YY_BREAK
+case 2:
+/* rule 2 can match eol */
+YY_RULE_SETUP
+#line 60 "_jsgf_scanner.l"
+;        /* single-line comments */
+       YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 61 "_jsgf_scanner.l"
+{ BEGIN(COMMENT); } /* C-style comments */
+       YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 62 "_jsgf_scanner.l"
+{ BEGIN(INITIAL); }
+       YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 63 "_jsgf_scanner.l"
+;               /* Ignore stuff in comment mode */
+       YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 65 "_jsgf_scanner.l"
+return HEADER;
+       YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 66 "_jsgf_scanner.l"
+return GRAMMAR;
+       YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 67 "_jsgf_scanner.l"
+return IMPORT;
+       YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 68 "_jsgf_scanner.l"
+return PUBLIC;
+       YY_BREAK
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+#line 70 "_jsgf_scanner.l"
+{ yylval->name = strdup(yytext); return RULENAME; }
+       YY_BREAK
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+#line 71 "_jsgf_scanner.l"
+{ yylval->name = strdup(yytext); return TAG; }
+       YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 72 "_jsgf_scanner.l"
+{ yylval->name = strdup(yytext); return TOKEN; }
+       YY_BREAK
+case 13:
+/* rule 13 can match eol */
+YY_RULE_SETUP
+#line 73 "_jsgf_scanner.l"
+{ yylval->name = strdup(yytext); return TOKEN; }
+       YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 74 "_jsgf_scanner.l"
+{ yylval->weight = atof_c(yytext+1); return WEIGHT; }
+       YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 76 "_jsgf_scanner.l"
+return yytext[0];        /* Single-character tokens */
+       YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 78 "_jsgf_scanner.l"
+ECHO;
+       YY_BREAK
+#line 958 "jsgf_scanner.c"
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(COMMENT):
+       yyterminate();
+
+       case YY_END_OF_BUFFER:
+               {
+               /* Amount of text matched not including the EOB char. */
+               int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
+
+               /* Undo the effects of YY_DO_BEFORE_ACTION. */
+               *yy_cp = yyg->yy_hold_char;
+               YY_RESTORE_YY_MORE_OFFSET
+
+               if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+                       {
+                       /* We're scanning a new file or input source.  It's
+                        * possible that this happened because the user
+                        * just pointed yyin at a new source and called
+                        * yylex().  If so, then we have to assure
+                        * consistency between YY_CURRENT_BUFFER and our
+                        * globals.  Here is the right place to do so, because
+                        * this is the first action (other than possibly a
+                        * back-up) that will match for the new input source.
+                        */
+                       yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+                       }
+
+               /* Note that here we test for yy_c_buf_p "<=" to the position
+                * of the first EOB in the buffer, since yy_c_buf_p will
+                * already have been incremented past the NUL character
+                * (since all states make transitions on EOB to the
+                * end-of-buffer state).  Contrast this with the test
+                * in input().
+                */
+               if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+                       { /* This was really a NUL. */
+                       yy_state_type yy_next_state;
+
+                       yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
+
+                       yy_current_state = yy_get_previous_state( yyscanner );
+
+                       /* Okay, we're now positioned to make the NUL
+                        * transition.  We couldn't have
+                        * yy_get_previous_state() go ahead and do it
+                        * for us because it doesn't know how to deal
+                        * with the possibility of jamming (and we don't
+                        * want to build jamming into it because then it
+                        * will run more slowly).
+                        */
+
+                       yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
+
+                       yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+
+                       if ( yy_next_state )
+                               {
+                               /* Consume the NUL. */
+                               yy_cp = ++yyg->yy_c_buf_p;
+                               yy_current_state = yy_next_state;
+                               goto yy_match;
+                               }
+
+                       else
+                               {
+                               yy_cp = yyg->yy_c_buf_p;
+                               goto yy_find_action;
+                               }
+                       }
+
+               else switch ( yy_get_next_buffer( yyscanner ) )
+                       {
+                       case EOB_ACT_END_OF_FILE:
+                               {
+                               yyg->yy_did_buffer_switch_on_eof = 0;
+
+                               if ( yywrap(yyscanner ) )
+                                       {
+                                       /* Note: because we've taken care in
+                                        * yy_get_next_buffer() to have set up
+                                        * yytext, we can now set up
+                                        * yy_c_buf_p so that if some total
+                                        * hoser (like flex itself) wants to
+                                        * call the scanner after we return the
+                                        * YY_NULL, it'll still work - another
+                                        * YY_NULL will get returned.
+                                        */
+                                       yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
+
+                                       yy_act = YY_STATE_EOF(YY_START);
+                                       goto do_action;
+                                       }
+
+                               else
+                                       {
+                                       if ( ! yyg->yy_did_buffer_switch_on_eof )
+                                               YY_NEW_FILE;
+                                       }
+                               break;
+                               }
+
+                       case EOB_ACT_CONTINUE_SCAN:
+                               yyg->yy_c_buf_p =
+                                       yyg->yytext_ptr + yy_amount_of_matched_text;
+
+                               yy_current_state = yy_get_previous_state( yyscanner );
+
+                               yy_cp = yyg->yy_c_buf_p;
+                               yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+                               goto yy_match;
+
+                       case EOB_ACT_LAST_MATCH:
+                               yyg->yy_c_buf_p =
+                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
+
+                               yy_current_state = yy_get_previous_state( yyscanner );
+
+                               yy_cp = yyg->yy_c_buf_p;
+                               yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+                               goto yy_find_action;
+                       }
+               break;
+               }
+
+       default:
+               YY_FATAL_ERROR(
+                       "fatal flex scanner internal error--no action found" );
+       } /* end of action switch */
+               } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *     EOB_ACT_LAST_MATCH -
+ *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *     EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = yyg->yytext_ptr;
+       register int number_to_move, i;
+       int ret_val;
+
+       if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
+               YY_FATAL_ERROR(
+               "fatal flex scanner internal error--end of buffer missed" );
+
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+               { /* Don't try to fill the buffer, so this is an EOF. */
+               if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
+                       {
+                       /* We matched a single character, the EOB, so
+                        * treat this as a final EOF.
+                        */
+                       return EOB_ACT_END_OF_FILE;
+                       }
+
+               else
+                       {
+                       /* We matched some text prior to the EOB, first
+                        * process it.
+                        */
+                       return EOB_ACT_LAST_MATCH;
+                       }
+               }
+
+       /* Try to read more data. */
+
+       /* First move last chars to start of buffer. */
+       number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+
+       for ( i = 0; i < number_to_move; ++i )
+               *(dest++) = *(source++);
+
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+               /* don't do the read, it's not guaranteed to return an EOF,
+                * just force an EOF
+                */
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
+
+       else
+               {
+                       int num_to_read =
+                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+               while ( num_to_read <= 0 )
+                       { /* Not enough room in the buffer - grow it. */
+
+                       /* just a shorter name for the current buffer */
+                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+                       int yy_c_buf_p_offset =
+                               (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
+
+                       if ( b->yy_is_our_buffer )
+                               {
+                               int new_size = b->yy_buf_size * 2;
+
+                               if ( new_size <= 0 )
+                                       b->yy_buf_size += b->yy_buf_size / 8;
+                               else
+                                       b->yy_buf_size *= 2;
+
+                               b->yy_ch_buf = (char *)
+                                       /* Include room in for 2 EOB chars. */
+                                       yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
+                               }
+                       else
+                               /* Can't grow it, we don't own it. */
+                               b->yy_ch_buf = 0;
+
+                       if ( ! b->yy_ch_buf )
+                               YY_FATAL_ERROR(
+                               "fatal error - scanner input buffer overflow" );
+
+                       yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+                       num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+                                               number_to_move - 1;
+
+                       }
+
+               if ( num_to_read > YY_READ_BUF_SIZE )
+                       num_to_read = YY_READ_BUF_SIZE;
+
+               /* Read in more data. */
+               YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+                       yyg->yy_n_chars, (size_t) num_to_read );
+
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+               }
+
+       if ( yyg->yy_n_chars == 0 )
+               {
+               if ( number_to_move == YY_MORE_ADJ )
+                       {
+                       ret_val = EOB_ACT_END_OF_FILE;
+                       yyrestart(yyin  ,yyscanner);
+                       }
+
+               else
+                       {
+                       ret_val = EOB_ACT_LAST_MATCH;
+                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+                               YY_BUFFER_EOF_PENDING;
+                       }
+               }
+
+       else
+               ret_val = EOB_ACT_CONTINUE_SCAN;
+
+       if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+               /* Extend the array by 50%, plus the number we really need. */
+               yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+               if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+       }
+
+       yyg->yy_n_chars += number_to_move;
+       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+       yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+       return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
+{
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+       yy_current_state = yyg->yy_start;
+
+       for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
+               {
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               if ( yy_accept[yy_current_state] )
+                       {
+                       yyg->yy_last_accepting_state = yy_current_state;
+                       yyg->yy_last_accepting_cpos = yy_cp;
+                       }
+               while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+                       {
+                       yy_current_state = (int) yy_def[yy_current_state];
+                       if ( yy_current_state >= 77 )
+                               yy_c = yy_meta[(unsigned int) yy_c];
+                       }
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+               }
+
+       return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *     next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
+{
+       register int yy_is_jam;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
+       register char *yy_cp = yyg->yy_c_buf_p;
+
+       register YY_CHAR yy_c = 1;
+       if ( yy_accept[yy_current_state] )
+               {
+               yyg->yy_last_accepting_state = yy_current_state;
+               yyg->yy_last_accepting_cpos = yy_cp;
+               }
+       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+               {
+               yy_current_state = (int) yy_def[yy_current_state];
+               if ( yy_current_state >= 77 )
+                       yy_c = yy_meta[(unsigned int) yy_c];
+               }
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+       yy_is_jam = (yy_current_state == 76);
+
+       return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
+{
+       register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    yy_cp = yyg->yy_c_buf_p;
+
+       /* undo effects of setting up yytext */
+       *yy_cp = yyg->yy_hold_char;
+
+       if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+               { /* need to shift things up to make room */
+               /* +2 for EOB chars. */
+               register int number_to_move = yyg->yy_n_chars + 2;
+               register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+                                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+               register char *source =
+                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+               while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       *--dest = *--source;
+
+               yy_cp += (int) (dest - source);
+               yy_bp += (int) (dest - source);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+                       yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+               if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+                       YY_FATAL_ERROR( "flex scanner push-back overflow" );
+               }
+
+       *--yy_cp = (char) c;
+
+       yyg->yytext_ptr = yy_bp;
+       yyg->yy_hold_char = *yy_cp;
+       yyg->yy_c_buf_p = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (yyscan_t yyscanner)
+#else
+    static int input  (yyscan_t yyscanner)
+#endif
+
+{
+       int c;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+       *yyg->yy_c_buf_p = yyg->yy_hold_char;
+
+       if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+               {
+               /* yy_c_buf_p now points to the character we want to return.
+                * If this occurs *before* the EOB characters, then it's a
+                * valid NUL; if not, then we've hit the end of the buffer.
+                */
+               if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+                       /* This was really a NUL. */
+                       *yyg->yy_c_buf_p = '\0';
+
+               else
+                       { /* need more input */
+                       int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+                       ++yyg->yy_c_buf_p;
+
+                       switch ( yy_get_next_buffer( yyscanner ) )
+                               {
+                               case EOB_ACT_LAST_MATCH:
+                                       /* This happens because yy_g_n_b()
+                                        * sees that we've accumulated a
+                                        * token and flags that we need to
+                                        * try matching the token before
+                                        * proceeding.  But for input(),
+                                        * there's no matching to consider.
+                                        * So convert the EOB_ACT_LAST_MATCH
+                                        * to EOB_ACT_END_OF_FILE.
+                                        */
+
+                                       /* Reset buffer status. */
+                                       yyrestart(yyin ,yyscanner);
+
+                                       /*FALLTHROUGH*/
+
+                               case EOB_ACT_END_OF_FILE:
+                                       {
+                                       if ( yywrap(yyscanner ) )
+                                               return EOF;
+
+                                       if ( ! yyg->yy_did_buffer_switch_on_eof )
+                                               YY_NEW_FILE;
+#ifdef __cplusplus
+                                       return yyinput(yyscanner);
+#else
+                                       return input(yyscanner);
+#endif
+                                       }
+
+                               case EOB_ACT_CONTINUE_SCAN:
+                                       yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
+                                       break;
+                               }
+                       }
+               }
+
+       c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
+       *yyg->yy_c_buf_p = '\0';        /* preserve yytext */
+       yyg->yy_hold_char = *++yyg->yy_c_buf_p;
+
+       return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * @param yyscanner The scanner object.
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void yyrestart  (FILE * input_file , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+       if ( ! YY_CURRENT_BUFFER ){
+        yyensure_buffer_stack (yyscanner);
+               YY_CURRENT_BUFFER_LVALUE =
+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+       }
+
+       yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
+       yy_load_buffer_state(yyscanner );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * @param yyscanner The scanner object.
+ */
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+       /* TODO. We should be able to replace this entire function body
+        * with
+        *              yypop_buffer_state();
+        *              yypush_buffer_state(new_buffer);
+     */
+       yyensure_buffer_stack (yyscanner);
+       if ( YY_CURRENT_BUFFER == new_buffer )
+               return;
+
+       if ( YY_CURRENT_BUFFER )
+               {
+               /* Flush out information for old buffer. */
+               *yyg->yy_c_buf_p = yyg->yy_hold_char;
+               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+               }
+
+       YY_CURRENT_BUFFER_LVALUE = new_buffer;
+       yy_load_buffer_state(yyscanner );
+
+       /* We don't actually know whether we did this switch during
+        * EOF (yywrap()) processing, but the only time this flag
+        * is looked at is after yywrap() is called, so it's safe
+        * to go ahead and always set it.
+        */
+       yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+static void yy_load_buffer_state  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+       yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+       yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+       yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+       yyg->yy_hold_char = *yyg->yy_c_buf_p;
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * @param yyscanner The scanner object.
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
+{
+       YY_BUFFER_STATE b;
+    
+       b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_buf_size = size;
+
+       /* yy_ch_buf has to be 2 characters longer than the size given because
+        * we need to put in 2 end-of-buffer characters.
+        */
+       b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ,yyscanner );
+       if ( ! b->yy_ch_buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+       b->yy_is_our_buffer = 1;
+
+       yy_init_buffer(b,file ,yyscanner);
+
+       return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * @param yyscanner The scanner object.
+ */
+    void yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+       if ( ! b )
+               return;
+
+       if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+               YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+       if ( b->yy_is_our_buffer )
+               yyfree((void *) b->yy_ch_buf ,yyscanner );
+
+       yyfree((void *) b ,yyscanner );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+    
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
+
+{
+       int oerrno = errno;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+       yy_flush_buffer(b ,yyscanner);
+
+       b->yy_input_file = file;
+       b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then yy_init_buffer was _probably_
+     * called from yyrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+    
+       errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * @param yyscanner The scanner object.
+ */
+    void yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+       if ( ! b )
+               return;
+
+       b->yy_n_chars = 0;
+
+       /* We always need two end-of-buffer characters.  The first causes
+        * a transition to the end-of-buffer state.  The second causes
+        * a jam in that state.
+        */
+       b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+       b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+       b->yy_buf_pos = &b->yy_ch_buf[0];
+
+       b->yy_at_bol = 1;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       if ( b == YY_CURRENT_BUFFER )
+               yy_load_buffer_state(yyscanner );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  @param yyscanner The scanner object.
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+       if (new_buffer == NULL)
+               return;
+
+       yyensure_buffer_stack(yyscanner);
+
+       /* This block is copied from yy_switch_to_buffer. */
+       if ( YY_CURRENT_BUFFER )
+               {
+               /* Flush out information for old buffer. */
+               *yyg->yy_c_buf_p = yyg->yy_hold_char;
+               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+               }
+
+       /* Only push if top exists. Otherwise, replace top. */
+       if (YY_CURRENT_BUFFER)
+               yyg->yy_buffer_stack_top++;
+       YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+       /* copied from yy_switch_to_buffer. */
+       yy_load_buffer_state(yyscanner );
+       yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  @param yyscanner The scanner object.
+ */
+void yypop_buffer_state (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+       if (!YY_CURRENT_BUFFER)
+               return;
+
+       yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+       YY_CURRENT_BUFFER_LVALUE = NULL;
+       if (yyg->yy_buffer_stack_top > 0)
+               --yyg->yy_buffer_stack_top;
+
+       if (YY_CURRENT_BUFFER) {
+               yy_load_buffer_state(yyscanner );
+               yyg->yy_did_buffer_switch_on_eof = 1;
+       }
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (yyscan_t yyscanner)
+{
+       int num_to_alloc;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+       if (!yyg->yy_buffer_stack) {
+
+               /* First allocation is just for 2 elements, since we don't know if this
+                * scanner will even need a stack. We use 2 instead of 1 to avoid an
+                * immediate realloc on the next call.
+         */
+               num_to_alloc = 1;
+               yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
+                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
+                                                               , yyscanner);
+               if ( ! yyg->yy_buffer_stack )
+                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+                                                                 
+               memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+                               
+               yyg->yy_buffer_stack_max = num_to_alloc;
+               yyg->yy_buffer_stack_top = 0;
+               return;
+       }
+
+       if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
+
+               /* Increase the buffer to prepare for a possible push. */
+               int grow_size = 8 /* arbitrary grow size */;
+
+               num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+               yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
+                                                               (yyg->yy_buffer_stack,
+                                                               num_to_alloc * sizeof(struct yy_buffer_state*)
+                                                               , yyscanner);
+               if ( ! yyg->yy_buffer_stack )
+                       YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+               /* zero only the new slots.*/
+               memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
+               yyg->yy_buffer_stack_max = num_to_alloc;
+       }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
+{
+       YY_BUFFER_STATE b;
+    
+       if ( size < 2 ||
+            base[size-2] != YY_END_OF_BUFFER_CHAR ||
+            base[size-1] != YY_END_OF_BUFFER_CHAR )
+               /* They forgot to leave room for the EOB's. */
+               return 0;
+
+       b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
+       b->yy_buf_pos = b->yy_ch_buf = base;
+       b->yy_is_our_buffer = 0;
+       b->yy_input_file = 0;
+       b->yy_n_chars = b->yy_buf_size;
+       b->yy_is_interactive = 0;
+       b->yy_at_bol = 1;
+       b->yy_fill_buffer = 0;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       yy_switch_to_buffer(b ,yyscanner );
+
+       return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
+{
+    
+       return yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
+{
+       YY_BUFFER_STATE b;
+       char *buf;
+       yy_size_t n;
+       int i;
+    
+       /* Get memory for full buffer, including space for trailing EOB's. */
+       n = _yybytes_len + 2;
+       buf = (char *) yyalloc(n ,yyscanner );
+       if ( ! buf )
+               YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+       for ( i = 0; i < _yybytes_len; ++i )
+               buf[i] = yybytes[i];
+
+       buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+       b = yy_scan_buffer(buf,n ,yyscanner);
+       if ( ! b )
+               YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+       /* It's okay to grow etc. this buffer, and we should throw it
+        * away when we're done.
+        */
+       b->yy_is_our_buffer = 1;
+
+       return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+{
+       (void) fprintf( stderr, "%s\n", msg );
+       exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+               yytext[yyleng] = yyg->yy_hold_char; \
+               yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
+               yyg->yy_hold_char = *yyg->yy_c_buf_p; \
+               *yyg->yy_c_buf_p = '\0'; \
+               yyleng = yyless_macro_arg; \
+               } \
+       while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the user-defined data for this scanner.
+ * @param yyscanner The scanner object.
+ */
+YY_EXTRA_TYPE yyget_extra  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyextra;
+}
+
+/** Get the current line number.
+ * @param yyscanner The scanner object.
+ */
+int yyget_lineno  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yylineno;
+}
+
+/** Get the current column number.
+ * @param yyscanner The scanner object.
+ */
+int yyget_column  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yycolumn;
+}
+
+/** Get the input stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *yyget_in  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyin;
+}
+
+/** Get the output stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *yyget_out  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyout;
+}
+
+/** Get the length of the current token.
+ * @param yyscanner The scanner object.
+ */
+int yyget_leng  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyleng;
+}
+
+/** Get the current token.
+ * @param yyscanner The scanner object.
+ */
+
+char *yyget_text  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yytext;
+}
+
+/** Set the user-defined data. This data is never touched by the scanner.
+ * @param user_defined The data to be associated with this scanner.
+ * @param yyscanner The scanner object.
+ */
+void yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyextra = user_defined ;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void yyset_lineno (int  line_number , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* lineno is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "yyset_lineno called with no buffer" , yyscanner); 
+    
+    yylineno = line_number;
+}
+
+/** Set the current column.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void yyset_column (int  column_no , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* column is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "yyset_column called with no buffer" , yyscanner); 
+    
+    yycolumn = column_no;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * @param yyscanner The scanner object.
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE *  in_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyin = in_str ;
+}
+
+void yyset_out (FILE *  out_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyout = out_str ;
+}
+
+int yyget_debug  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yy_flex_debug;
+}
+
+void yyset_debug (int  bdebug , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yy_flex_debug = bdebug ;
+}
+
+/* Accessor methods for yylval and yylloc */
+
+YYSTYPE * yyget_lval  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yylval;
+}
+
+void yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yylval = yylval_param;
+}
+
+/* User-visible API */
+
+/* yylex_init is special because it creates the scanner itself, so it is
+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
+ * That's why we explicitly handle the declaration, instead of using our macros.
+ */
+
+int yylex_init(yyscan_t* ptr_yy_globals)
+
+{
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+
+    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
+
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+
+    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* yylex_init_extra has the same functionality as yylex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to yyalloc in
+ * the yyextra field.
+ */
+
+int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+    struct yyguts_t dummy_yyguts;
+
+    yyset_extra (yy_user_defined, &dummy_yyguts);
+
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+       
+    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+       
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+    
+    /* By setting to 0xAA, we expose bugs in
+    yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+    
+    yyset_extra (yy_user_defined, *ptr_yy_globals);
+    
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+static int yy_init_globals (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from yylex_destroy(), so don't allocate here.
+     */
+
+    yyg->yy_buffer_stack = 0;
+    yyg->yy_buffer_stack_top = 0;
+    yyg->yy_buffer_stack_max = 0;
+    yyg->yy_c_buf_p = (char *) 0;
+    yyg->yy_init = 0;
+    yyg->yy_start = 0;
+
+    yyg->yy_start_stack_ptr = 0;
+    yyg->yy_start_stack_depth = 0;
+    yyg->yy_start_stack =  NULL;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * yylex_init()
+     */
+    return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    /* Pop the buffer stack, destroying each element. */
+       while(YY_CURRENT_BUFFER){
+               yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+               YY_CURRENT_BUFFER_LVALUE = NULL;
+               yypop_buffer_state(yyscanner);
+       }
+
+       /* Destroy the stack itself. */
+       yyfree(yyg->yy_buffer_stack ,yyscanner);
+       yyg->yy_buffer_stack = NULL;
+
+    /* Destroy the start condition stack. */
+        yyfree(yyg->yy_start_stack ,yyscanner );
+        yyg->yy_start_stack = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * yylex() is called, initialization will occur. */
+    yy_init_globals( yyscanner);
+
+    /* Destroy the main struct (reentrant only). */
+    yyfree ( yyscanner , yyscanner );
+    yyscanner = NULL;
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
+{
+       register int i;
+       for ( i = 0; i < n; ++i )
+               s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
+{
+       register int n;
+       for ( n = 0; s[n]; ++n )
+               ;
+
+       return n;
+}
+#endif
+
+void *yyalloc (yy_size_t  size , yyscan_t yyscanner)
+{
+       return (void *) malloc( size );
+}
+
+void *yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
+{
+       /* The cast to (char *) in the following accommodates both
+        * implementations that use char* generic pointers, and those
+        * that use void* generic pointers.  It works with the latter
+        * because both ANSI C and C++ allow castless assignment from
+        * any pointer type to void*, and deal with argument conversions
+        * as though doing an assignment.
+        */
+       return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr , yyscan_t yyscanner)
+{
+       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 78 "_jsgf_scanner.l"
+
+
+
diff --git a/src/libsphinxbase/lm/jsgf_scanner.h b/src/libsphinxbase/lm/jsgf_scanner.h
new file mode 100644 (file)
index 0000000..45e4c47
--- /dev/null
@@ -0,0 +1,342 @@
+#ifndef yyHEADER_H
+#define yyHEADER_H 1
+#define yyIN_HEADER 1
+
+#line 6 "jsgf_scanner.h"
+
+#line 8 "jsgf_scanner.h"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+/* For convenience, these vars (plus the bison vars far below)
+   are macros in the reentrant scanner. */
+#define yyin yyg->yyin_r
+#define yyout yyg->yyout_r
+#define yyextra yyg->yyextra_r
+#define yyleng yyg->yyleng_r
+#define yytext yyg->yytext_r
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug yyg->yy_flex_debug_r
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+       {
+       FILE *yy_input_file;
+
+       char *yy_ch_buf;                /* input buffer */
+       char *yy_buf_pos;               /* current position in input buffer */
+
+       /* Size of input buffer in bytes, not including room for EOB
+        * characters.
+        */
+       yy_size_t yy_buf_size;
+
+       /* Number of characters read into yy_ch_buf, not including EOB
+        * characters.
+        */
+       int yy_n_chars;
+
+       /* Whether we "own" the buffer - i.e., we know we created it,
+        * and can realloc() it to grow it, and should free() it to
+        * delete it.
+        */
+       int yy_is_our_buffer;
+
+       /* Whether this is an "interactive" input source; if so, and
+        * if we're using stdio for input, then we want to use getc()
+        * instead of fread(), to make sure we stop fetching input after
+        * each newline.
+        */
+       int yy_is_interactive;
+
+       /* Whether we're considered to be at the beginning of a line.
+        * If so, '^' rules will be active on the next match, otherwise
+        * not.
+        */
+       int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+       /* Whether to try to fill the input buffer when we reach the
+        * end of it.
+        */
+       int yy_fill_buffer;
+
+       int yy_buffer_status;
+
+       };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+void yyrestart (FILE *input_file ,yyscan_t yyscanner );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+void yypop_buffer_state (yyscan_t yyscanner );
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+
+void *yyalloc (yy_size_t ,yyscan_t yyscanner );
+void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
+void yyfree (void * ,yyscan_t yyscanner );
+
+/* Begin user sect3 */
+
+#define yywrap(n) 1
+#define YY_SKIP_YYWRAP
+
+#define yytext_ptr yytext_r
+
+#ifdef YY_HEADER_EXPORT_START_CONDITIONS
+#define INITIAL 0
+#define COMMENT 1
+
+#endif
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+int yylex_init (yyscan_t* scanner);
+
+int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (yyscan_t yyscanner );
+
+int yyget_debug (yyscan_t yyscanner );
+
+void yyset_debug (int debug_flag ,yyscan_t yyscanner );
+
+YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+
+FILE *yyget_in (yyscan_t yyscanner );
+
+void yyset_in  (FILE * in_str ,yyscan_t yyscanner );
+
+FILE *yyget_out (yyscan_t yyscanner );
+
+void yyset_out  (FILE * out_str ,yyscan_t yyscanner );
+
+int yyget_leng (yyscan_t yyscanner );
+
+char *yyget_text (yyscan_t yyscanner );
+
+int yyget_lineno (yyscan_t yyscanner );
+
+void yyset_lineno (int line_number ,yyscan_t yyscanner );
+
+YYSTYPE * yyget_lval (yyscan_t yyscanner );
+
+void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (yyscan_t yyscanner );
+#else
+extern int yywrap (yyscan_t yyscanner );
+#endif
+#endif
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
+#endif
+
+#ifndef YY_NO_INPUT
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex \
+               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+
+#define YY_DECL int yylex \
+               (YYSTYPE * yylval_param , yyscan_t yyscanner)
+#endif /* !YY_DECL */
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+#undef YY_NEW_FILE
+#undef YY_FLUSH_BUFFER
+#undef yy_set_bol
+#undef yy_new_buffer
+#undef yy_set_interactive
+#undef YY_DO_BEFORE_ACTION
+
+#ifdef YY_DECL_IS_OURS
+#undef YY_DECL_IS_OURS
+#undef YY_DECL
+#endif
+
+#line 78 "_jsgf_scanner.l"
+
+
+#line 341 "jsgf_scanner.h"
+#undef yyIN_HEADER
+#endif /* yyHEADER_H */
diff --git a/src/libsphinxbase/lm/lm3g_model.c b/src/libsphinxbase/lm/lm3g_model.c
new file mode 100644 (file)
index 0000000..b8eeaef
--- /dev/null
@@ -0,0 +1,254 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file lm3g_model.c Core Sphinx 3-gram code used in
+ * DMP/DMP32/ARPA (for now) model code.
+ *
+ * Author: A cast of thousands, probably.
+ */
+#include <string.h>
+#include <assert.h>
+#include <limits.h>
+
+#include "sphinxbase/listelem_alloc.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/err.h"
+
+#include "lm3g_model.h"
+
+void
+lm3g_tginfo_free(ngram_model_t *base, lm3g_model_t *lm3g)
+{
+       if (lm3g->tginfo == NULL)
+               return;
+        listelem_alloc_free(lm3g->le);
+        ckd_free(lm3g->tginfo);
+}
+
+void
+lm3g_tginfo_reset(ngram_model_t *base, lm3g_model_t *lm3g)
+{
+    if (lm3g->tginfo == NULL)
+        return;
+    listelem_alloc_free(lm3g->le);
+    memset(lm3g->tginfo, 0, base->n_counts[0] * sizeof(tginfo_t *));
+    lm3g->le = listelem_alloc_init(sizeof(tginfo_t));
+}
+
+void
+lm3g_apply_weights(ngram_model_t *base,
+                  lm3g_model_t *lm3g,
+                  float32 lw, float32 wip, float32 uw)
+{
+    int32 log_wip, log_uw, log_uniform_weight;
+    int i;
+
+    /* Precalculate some log values we will like. */
+    log_wip = logmath_log(base->lmath, wip);
+    log_uw = logmath_log(base->lmath, uw);
+    log_uniform_weight = logmath_log(base->lmath, 1.0 - uw);
+
+    for (i = 0; i < base->n_counts[0]; ++i) {
+        int32 prob1, bo_wt, n_used;
+
+        /* Backoff weights just get scaled by the lw. */
+        bo_wt = (int32)(lm3g->unigrams[i].bo_wt1.l / base->lw);
+        /* Unscaling unigram probs is a bit more complicated, so punt
+         * it back to the general code. */
+        prob1 = ngram_ng_prob(base, i, NULL, 0, &n_used);
+        /* Now compute the new scaled probabilities. */
+        lm3g->unigrams[i].bo_wt1.l = (int32)(bo_wt * lw);
+        if (strcmp(base->word_str[i], "<s>") == 0) { /* FIXME: configurable start_sym */
+            /* Apply language weight and WIP */
+            lm3g->unigrams[i].prob1.l = (int32)(prob1 * lw) + log_wip;
+        }
+        else {
+            /* Interpolate unigram probability with uniform. */
+            prob1 += log_uw;
+            prob1 = logmath_add(base->lmath, prob1, base->log_uniform + log_uniform_weight);
+            /* Apply language weight and WIP */
+            lm3g->unigrams[i].prob1.l = (int32)(prob1 * lw) + log_wip;
+        }
+    }
+
+    for (i = 0; i < lm3g->n_prob2; ++i) {
+        int32 prob2;
+        /* Can't just punt this back to general code since it is quantized. */
+        prob2 = (int32)((lm3g->prob2[i].l - base->log_wip) / base->lw);
+        lm3g->prob2[i].l = (int32)(prob2 * lw) + log_wip;
+    }
+
+    if (base->n > 2) {
+        for (i = 0; i < lm3g->n_bo_wt2; ++i) {
+            lm3g->bo_wt2[i].l = (int32)(lm3g->bo_wt2[i].l  / base->lw * lw);
+        }
+        for (i = 0; i < lm3g->n_prob3; i++) {
+            int32 prob3;
+            /* Can't just punt this back to general code since it is quantized. */
+            prob3 = (int32)((lm3g->prob3[i].l - base->log_wip) / base->lw);
+            lm3g->prob3[i].l = (int32)(prob3 * lw) + log_wip;
+        }
+    }
+
+    /* Store updated values in the model. */
+    base->log_wip = log_wip;
+    base->log_uw = log_uw;
+    base->log_uniform_weight = log_uniform_weight;
+    base->lw = lw;
+}
+
+int32
+lm3g_add_ug(ngram_model_t *base,
+            lm3g_model_t *lm3g, int32 wid, int32 lweight)
+{
+    int32 score;
+
+    /* This would be very bad if this happened! */
+    assert(!NGRAM_IS_CLASSWID(wid));
+
+    /* Reallocate unigram array. */
+    lm3g->unigrams = ckd_realloc(lm3g->unigrams,
+                                 sizeof(*lm3g->unigrams) * base->n_1g_alloc);
+    memset(lm3g->unigrams + base->n_counts[0], 0,
+           (base->n_1g_alloc - base->n_counts[0]) * sizeof(*lm3g->unigrams));
+    /* Reallocate tginfo array. */
+    lm3g->tginfo = ckd_realloc(lm3g->tginfo,
+                               sizeof(*lm3g->tginfo) * base->n_1g_alloc);
+    memset(lm3g->tginfo + base->n_counts[0], 0,
+           (base->n_1g_alloc - base->n_counts[0]) * sizeof(*lm3g->tginfo));
+    /* FIXME: we really ought to update base->log_uniform *and*
+     * renormalize all the other unigrams.  This is really slow, so I
+     * will probably just provide a function to renormalize after
+     * adding unigrams, for anyone who really cares. */
+    /* This could be simplified but then we couldn't do it in logmath */
+    score = lweight + base->log_uniform + base->log_uw;
+    score = logmath_add(base->lmath, score,
+                        base->log_uniform + base->log_uniform_weight);
+    lm3g->unigrams[wid].prob1.l = score;
+    /* This unigram by definition doesn't participate in any bigrams,
+     * so its backoff weight and bigram pointer are both undefined. */
+    lm3g->unigrams[wid].bo_wt1.l = 0;
+    lm3g->unigrams[wid].bigrams = 0;
+    /* Finally, increase the unigram count */
+    ++base->n_counts[0];
+    /* FIXME: Note that this can actually be quite bogus due to the
+     * presence of class words.  If wid falls outside the unigram
+     * count, increase it to compensate, at the cost of no longer
+     * really knowing how many unigrams we have :( */
+    if (wid >= base->n_counts[0])
+        base->n_counts[0] = wid + 1;
+
+    return score;
+}
+
+void
+init_sorted_list(sorted_list_t * l)
+{
+    /* FIXME FIXME FIXME: Fixed size array!??! */
+    l->list = ckd_calloc(MAX_SORTED_ENTRIES,
+                         sizeof(sorted_entry_t));
+    l->list[0].val.l = INT_MIN;
+    l->list[0].lower = 0;
+    l->list[0].higher = 0;
+    l->free = 1;
+}
+
+void
+free_sorted_list(sorted_list_t * l)
+{
+    free(l->list);
+}
+
+lmprob_t *
+vals_in_sorted_list(sorted_list_t * l)
+{
+    lmprob_t *vals;
+    int32 i;
+
+    vals = ckd_calloc(l->free, sizeof(lmprob_t));
+    for (i = 0; i < l->free; i++)
+        vals[i] = l->list[i].val;
+    return (vals);
+}
+
+int32
+sorted_id(sorted_list_t * l, int32 *val)
+{
+    int32 i = 0;
+
+    for (;;) {
+        if (*val == l->list[i].val.l)
+            return (i);
+        if (*val < l->list[i].val.l) {
+            if (l->list[i].lower == 0) {
+                if (l->free >= MAX_SORTED_ENTRIES) {
+                    /* Make the best of a bad situation. */
+                    E_WARN("sorted list overflow (%d => %d)\n",
+                           *val, l->list[i].val.l);
+                    return i;
+                }
+
+                l->list[i].lower = l->free;
+                (l->free)++;
+                i = l->list[i].lower;
+                l->list[i].val.l = *val;
+                return (i);
+            }
+            else
+                i = l->list[i].lower;
+        }
+        else {
+            if (l->list[i].higher == 0) {
+                if (l->free >= MAX_SORTED_ENTRIES) {
+                    /* Make the best of a bad situation. */
+                    E_WARN("sorted list overflow (%d => %d)\n",
+                           *val, l->list[i].val);
+                    return i;
+                }
+
+                l->list[i].higher = l->free;
+                (l->free)++;
+                i = l->list[i].higher;
+                l->list[i].val.l = *val;
+                return (i);
+            }
+            else
+                i = l->list[i].higher;
+        }
+    }
+}
+
diff --git a/src/libsphinxbase/lm/lm3g_model.h b/src/libsphinxbase/lm/lm3g_model.h
new file mode 100644 (file)
index 0000000..c51a3b8
--- /dev/null
@@ -0,0 +1,178 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file lm3g_model.h Core Sphinx 3-gram code used in
+ * DMP/DMP32/ARPA (for now) model code.
+ *
+ * Author: A cast of thousands, probably.
+ */
+
+#ifndef __NGRAM_MODEL_LM3G_H__
+#define __NGRAM_MODEL_LM3G_H__
+
+#include "sphinxbase/listelem_alloc.h"
+
+#include "ngram_model_internal.h"
+
+/**
+ * Type used to store language model probabilities
+ */
+typedef union {
+    float32 f;
+    int32 l;
+} lmprob_t;
+
+/**
+ * Bigram probs and bo-wts, and trigram probs are kept in separate
+ * tables rather than within the bigram_t and trigram_t structures.
+ * These tables hold unique prob and bo-wt values, and can be < 64K
+ * long.  The following tree structure is used to construct these
+ * tables of unique values.  Whenever a new value is read from the LM
+ * file, the sorted tree structure is searched to see if the value
+ * already exists, and inserted if not found.
+ */
+typedef struct sorted_entry_s {
+    lmprob_t val;               /**< value being kept in this node */
+    uint16 lower;               /**< index of another entry.  All descendants down
+                                   this path have their val < this node's val.
+                                   0 => no son exists (0 is root index) */
+    uint16 higher;              /**< index of another entry.  All descendants down
+                                   this path have their val > this node's val
+                                   0 => no son exists (0 is root index) */
+} sorted_entry_t;
+
+/**
+ * The sorted list.  list is a (64K long) array.  The first entry is the
+ * root of the tree and is created during initialization.
+ */
+typedef struct {
+    sorted_entry_t *list;
+    int32 free;                 /**< first free element in list */
+} sorted_list_t;
+
+#define MAX_SORTED_ENTRIES     65534
+
+/**
+ * Unigram structure (common among all lm3g implementations)
+ */
+typedef struct unigram_s {
+    lmprob_t prob1;     /**< Unigram probability. */
+    lmprob_t bo_wt1;    /**< Unigram backoff weight. */
+    int32 bigrams;     /**< Index of 1st entry in lm_t.bigrams[] */
+} unigram_t;
+
+/**
+ * Bigram structure (might be implemented differently)
+ */
+typedef struct bigram_s bigram_t;
+/**
+ * Trigram structure (might be implemented differently)
+ */
+typedef struct trigram_s trigram_t;
+
+
+/*
+ * To conserve space, bigram info is kept in many tables.  Since the number
+ * of distinct values << #bigrams, these table indices can be 16-bit values.
+ * prob2 and bo_wt2 are such indices, but keeping trigram index is less easy.
+ * It is supposed to be the index of the first trigram entry for each bigram.
+ * But such an index cannot be represented in 16-bits, hence the following
+ * segmentation scheme: Partition bigrams into segments of BG_SEG_SZ
+ * consecutive entries, such that #trigrams in each segment <= 2**16 (the
+ * corresponding trigram segment).  The bigram_t.trigrams value is then a
+ * 16-bit relative index within the trigram segment.  A separate table--
+ * lm_t.tseg_base--has the index of the 1st trigram for each bigram segment.
+ */
+#define BG_SEG_SZ      512     /* chosen so that #trigram/segment <= 2**16 */
+#define LOG_BG_SEG_SZ  9
+
+/**
+ * Trigram information cache.
+ *
+ * The following trigram information cache eliminates most traversals of 1g->2g->3g
+ * tree to locate trigrams for a given bigram (lw1,lw2).  The organization is optimized
+ * for locality of access (to the same lw1), given lw2.
+ */
+typedef struct tginfo_s {
+    int32 w1;                  /**< lw1 component of bigram lw1,lw2.  All bigrams with
+                                  same lw2 linked together (see lm_t.tginfo). */
+    int32 n_tg;                        /**< number tg for parent bigram lw1,lw2 */
+    int32 bowt;                 /**< tg bowt for lw1,lw2 */
+    int32 used;                        /**< whether used since last lm_reset */
+    trigram_t *tg;             /**< Trigrams for lw1,lw2 */
+    struct tginfo_s *next;      /**< Next lw1 with same parent lw2; NULL if none. */
+} tginfo_t;
+
+/**
+ * Common internal structure for Sphinx 3-gram models.
+ */
+typedef struct lm3g_model_s {
+    unigram_t *unigrams;
+    bigram_t *bigrams;
+    trigram_t *trigrams;
+    lmprob_t *prob2;        /**< Table of actual bigram probs */
+    int32 n_prob2;          /**< prob2 size */
+    lmprob_t *bo_wt2;       /**< Table of actual bigram backoff weights */
+    int32 n_bo_wt2;         /**< bo_wt2 size */
+    lmprob_t *prob3;        /**< Table of actual trigram probs */
+    int32 n_prob3;          /**< prob3 size */
+    int32 *tseg_base;    /**< tseg_base[i>>LOG_BG_SEG_SZ] = index of 1st
+                            trigram for bigram segment (i>>LOG_BG_SEG_SZ) */
+    tginfo_t **tginfo;   /**< tginfo[lw2] is head of linked list of trigram information for
+                            some cached subset of bigrams (*,lw2). */
+    listelem_alloc_t *le; /**< List element allocator for tginfo. */
+} lm3g_model_t;
+
+void lm3g_tginfo_free(ngram_model_t *base, lm3g_model_t *lm3g);
+void lm3g_tginfo_reset(ngram_model_t *base, lm3g_model_t *lm3g);
+void lm3g_apply_weights(ngram_model_t *base,
+                       lm3g_model_t *lm3g,
+                       float32 lw, float32 wip, float32 uw);
+int32 lm3g_add_ug(ngram_model_t *base,
+                  lm3g_model_t *lm3g, int32 wid, int32 lweight);
+
+
+/**
+ * Initialize sorted list with the 0-th entry = MIN_PROB_F, which may be needed
+ * to replace spurious values in the Darpa LM file.
+ */
+void init_sorted_list(sorted_list_t *l);
+void free_sorted_list(sorted_list_t *l);
+lmprob_t *vals_in_sorted_list(sorted_list_t *l);
+int32 sorted_id(sorted_list_t * l, int32 *val);
+
+#endif /* __NGRAM_MODEL_LM3G_H__ */
diff --git a/src/libsphinxbase/lm/lm3g_templates.c b/src/libsphinxbase/lm/lm3g_templates.c
new file mode 100644 (file)
index 0000000..88250de
--- /dev/null
@@ -0,0 +1,556 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file lm3g_templates.c Core Sphinx 3-gram code used in
+ * DMP/DMP32/ARPA (for now) model code.
+ */
+
+#include <assert.h>
+
+/* Locate a specific bigram within a bigram list */
+#define BINARY_SEARCH_THRESH   16
+static int32
+find_bg(bigram_t * bg, int32 n, int32 w)
+{
+    int32 i, b, e;
+
+    /* Binary search until segment size < threshold */
+    b = 0;
+    e = n;
+    while (e - b > BINARY_SEARCH_THRESH) {
+        i = (b + e) >> 1;
+        if (bg[i].wid < w)
+            b = i + 1;
+        else if (bg[i].wid > w)
+            e = i;
+        else
+            return i;
+    }
+
+    /* Linear search within narrowed segment */
+    for (i = b; (i < e) && (bg[i].wid != w); i++);
+    return ((i < e) ? i : -1);
+}
+
+static int32
+lm3g_bg_score(NGRAM_MODEL_TYPE *model,
+              int32 lw1, int32 lw2, int32 *n_used)
+{
+    int32 i, n, b, score;
+    bigram_t *bg;
+
+    if (lw1 < 0 || model->base.n < 2) {
+        *n_used = 1;
+        return model->lm3g.unigrams[lw2].prob1.l;
+    }
+
+    b = FIRST_BG(model, lw1);
+    n = FIRST_BG(model, lw1 + 1) - b;
+    bg = model->lm3g.bigrams + b;
+
+    if ((i = find_bg(bg, n, lw2)) >= 0) {
+        /* Access mode = bigram */
+        *n_used = 2;
+        score = model->lm3g.prob2[bg[i].prob2].l;
+    }
+    else {
+        /* Access mode = unigram */
+        *n_used = 1;
+        score = model->lm3g.unigrams[lw1].bo_wt1.l + model->lm3g.unigrams[lw2].prob1.l;
+    }
+
+    return (score);
+}
+
+static void
+load_tginfo(NGRAM_MODEL_TYPE *model, int32 lw1, int32 lw2)
+{
+    int32 i, n, b, t;
+    bigram_t *bg;
+    tginfo_t *tginfo;
+
+    /* First allocate space for tg information for bg lw1,lw2 */
+    tginfo = (tginfo_t *) listelem_malloc(model->lm3g.le);
+    tginfo->w1 = lw1;
+    tginfo->tg = NULL;
+    tginfo->next = model->lm3g.tginfo[lw2];
+    model->lm3g.tginfo[lw2] = tginfo;
+
+    /* Locate bigram lw1,lw2 */
+    b = model->lm3g.unigrams[lw1].bigrams;
+    n = model->lm3g.unigrams[lw1 + 1].bigrams - b;
+    bg = model->lm3g.bigrams + b;
+
+    if ((n > 0) && ((i = find_bg(bg, n, lw2)) >= 0)) {
+        tginfo->bowt = model->lm3g.bo_wt2[bg[i].bo_wt2].l;
+
+        /* Find t = Absolute first trigram index for bigram lw1,lw2 */
+        b += i;                 /* b = Absolute index of bigram lw1,lw2 on disk */
+        t = FIRST_TG(model, b);
+
+        tginfo->tg = model->lm3g.trigrams + t;
+
+        /* Find #tg for bigram w1,w2 */
+        tginfo->n_tg = FIRST_TG(model, b + 1) - t;
+    }
+    else {                      /* No bigram w1,w2 */
+        tginfo->bowt = 0;
+        tginfo->n_tg = 0;
+    }
+}
+
+/* Similar to find_bg */
+static int32
+find_tg(trigram_t * tg, int32 n, int32 w)
+{
+    int32 i, b, e;
+
+    b = 0;
+    e = n;
+    while (e - b > BINARY_SEARCH_THRESH) {
+        i = (b + e) >> 1;
+        if (tg[i].wid < w)
+            b = i + 1;
+        else if (tg[i].wid > w)
+            e = i;
+        else
+            return i;
+    }
+
+    for (i = b; (i < e) && (tg[i].wid != w); i++);
+    return ((i < e) ? i : -1);
+}
+
+static int32
+lm3g_tg_score(NGRAM_MODEL_TYPE *model, int32 lw1,
+              int32 lw2, int32 lw3, int32 *n_used)
+{
+    ngram_model_t *base = &model->base;
+    int32 i, n, score;
+    trigram_t *tg;
+    tginfo_t *tginfo, *prev_tginfo;
+
+    if ((base->n < 3) || (lw1 < 0) || (lw2 < 0))
+        return (lm3g_bg_score(model, lw2, lw3, n_used));
+
+    prev_tginfo = NULL;
+    for (tginfo = model->lm3g.tginfo[lw2]; tginfo; tginfo = tginfo->next) {
+        if (tginfo->w1 == lw1)
+            break;
+        prev_tginfo = tginfo;
+    }
+
+    if (!tginfo) {
+        load_tginfo(model, lw1, lw2);
+        tginfo = model->lm3g.tginfo[lw2];
+    }
+    else if (prev_tginfo) {
+        prev_tginfo->next = tginfo->next;
+        tginfo->next = model->lm3g.tginfo[lw2];
+        model->lm3g.tginfo[lw2] = tginfo;
+    }
+
+    tginfo->used = 1;
+
+    /* Trigrams for w1,w2 now pointed to by tginfo */
+    n = tginfo->n_tg;
+    tg = tginfo->tg;
+    if ((i = find_tg(tg, n, lw3)) >= 0) {
+        /* Access mode = trigram */
+        *n_used = 3;
+        score = model->lm3g.prob3[tg[i].prob3].l;
+    }
+    else {
+        score = tginfo->bowt + lm3g_bg_score(model, lw2, lw3, n_used);
+    }
+
+    return (score);
+}
+
+static int32
+lm3g_template_score(ngram_model_t *base, int32 wid,
+                      int32 *history, int32 n_hist,
+                      int32 *n_used)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)base;
+    switch (n_hist) {
+    case 0:
+        /* Access mode: unigram */
+        *n_used = 1;
+        return model->lm3g.unigrams[wid].prob1.l;
+    case 1:
+        return lm3g_bg_score(model, history[0], wid, n_used);
+    case 2:
+    default:
+        /* Anything greater than 2 is the same as a trigram for now. */
+        return lm3g_tg_score(model, history[1], history[0], wid, n_used);
+    }
+}
+
+static int32
+lm3g_template_raw_score(ngram_model_t *base, int32 wid,
+                        int32 *history, int32 n_hist,
+                          int32 *n_used)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)base;
+    int32 score;
+
+    switch (n_hist) {
+    case 0:
+        /* Access mode: unigram */
+        *n_used = 1;
+        /* Undo insertion penalty. */
+        score = model->lm3g.unigrams[wid].prob1.l - base->log_wip;
+        /* Undo language weight. */
+        score = (int32)(score / base->lw);
+        /* Undo unigram interpolation */
+        if (strcmp(base->word_str[wid], "<s>") != 0) { /* FIXME: configurable start_sym */
+            score = logmath_log(base->lmath,
+                                logmath_exp(base->lmath, score)
+                                - logmath_exp(base->lmath, 
+                                              base->log_uniform + base->log_uniform_weight));
+        }
+        return score;
+    case 1:
+        score = lm3g_bg_score(model, history[0], wid, n_used);
+        break;
+    case 2:
+    default:
+        /* Anything greater than 2 is the same as a trigram for now. */
+        score = lm3g_tg_score(model, history[1], history[0], wid, n_used);
+        break;
+    }
+    /* FIXME (maybe): This doesn't undo unigram weighting in backoff cases. */
+    return (int32)((score - base->log_wip) / base->lw);
+}
+
+static int32
+lm3g_template_add_ug(ngram_model_t *base,
+                       int32 wid, int32 lweight)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)base;
+    return lm3g_add_ug(base, &model->lm3g, wid, lweight);
+}
+
+static void
+lm3g_template_flush(ngram_model_t *base)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)base;
+    lm3g_tginfo_reset(base, &model->lm3g);
+}
+
+typedef struct lm3g_iter_s {
+    ngram_iter_t base;
+    unigram_t *ug;
+    bigram_t *bg;
+    trigram_t *tg;
+} lm3g_iter_t;
+
+static ngram_iter_t *
+lm3g_template_iter(ngram_model_t *base, int32 wid,
+                   int32 *history, int32 n_hist)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)base;
+    lm3g_iter_t *itor = ckd_calloc(1, sizeof(*itor));
+
+    ngram_iter_init((ngram_iter_t *)itor, base, n_hist, FALSE);
+
+    if (n_hist == 0) {
+        /* Unigram is the easiest. */
+        itor->ug = model->lm3g.unigrams + wid;
+        return (ngram_iter_t *)itor;
+    }
+    else if (n_hist == 1) {
+        int32 i, n, b;
+        /* Find the bigram, as in bg_score above (duplicate code...) */
+        itor->ug = model->lm3g.unigrams + history[0];
+        b = FIRST_BG(model, history[0]);
+        n = FIRST_BG(model, history[0] + 1) - b;
+        itor->bg = model->lm3g.bigrams + b;
+        /* If no such bigram exists then fail. */
+        if ((i = find_bg(itor->bg, n, wid)) < 0) {
+            ngram_iter_free((ngram_iter_t *)itor);
+            return NULL;
+        }
+        itor->bg += i;
+        return (ngram_iter_t *)itor;
+    }
+    else if (n_hist == 2) {
+        int32 i, n;
+        tginfo_t *tginfo, *prev_tginfo;
+        /* Find the trigram, as in tg_score above (duplicate code...) */
+        itor->ug = model->lm3g.unigrams + history[1];
+        prev_tginfo = NULL;
+        for (tginfo = model->lm3g.tginfo[history[0]];
+             tginfo; tginfo = tginfo->next) {
+            if (tginfo->w1 == history[1])
+                break;
+            prev_tginfo = tginfo;
+        }
+
+        if (!tginfo) {
+            load_tginfo(model, history[1], history[0]);
+            tginfo = model->lm3g.tginfo[history[0]];
+        }
+        else if (prev_tginfo) {
+            prev_tginfo->next = tginfo->next;
+            tginfo->next = model->lm3g.tginfo[history[0]];
+            model->lm3g.tginfo[history[0]] = tginfo;
+        }
+
+        tginfo->used = 1;
+
+        /* Trigrams for w1,w2 now pointed to by tginfo */
+        n = tginfo->n_tg;
+        itor->tg = tginfo->tg;
+        if ((i = find_tg(itor->tg, n, wid)) >= 0) {
+            itor->tg += i;
+            /* Now advance the bigram pointer accordingly.  FIXME:
+             * Note that we actually already found the relevant bigram
+             * in load_tginfo. */
+            itor->bg = model->lm3g.bigrams;
+            while (FIRST_TG(model, (itor->bg - model->lm3g.bigrams + 1))
+                   <= (itor->tg - model->lm3g.trigrams))
+                ++itor->bg;
+            return (ngram_iter_t *)itor;
+        }
+        else {
+            ngram_iter_free((ngram_iter_t *)itor);
+            return (ngram_iter_t *)NULL;
+        }
+    }
+    else {
+        /* Should not happen. */
+        assert(n_hist == 0); /* Guaranteed to fail. */
+        ngram_iter_free((ngram_iter_t *)itor);
+        return NULL;
+    }
+}
+
+static ngram_iter_t *
+lm3g_template_mgrams(ngram_model_t *base, int m)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)base;
+    lm3g_iter_t *itor = ckd_calloc(1, sizeof(*itor));
+    ngram_iter_init((ngram_iter_t *)itor, base, m, FALSE);
+
+    itor->ug = model->lm3g.unigrams;
+    itor->bg = model->lm3g.bigrams;
+    itor->tg = model->lm3g.trigrams;
+
+    /* Advance bigram pointer to match first trigram. */
+    if (m > 1 && base->n_counts[1] > 1)  {
+        while (FIRST_TG(model, (itor->bg - model->lm3g.bigrams + 1))
+               <= (itor->tg - model->lm3g.trigrams))
+            ++itor->bg;
+    }
+
+    /* Advance unigram pointer to match first bigram. */
+    if (m > 0 && base->n_counts[0] > 1) {
+        while (itor->ug[1].bigrams <= (itor->bg - model->lm3g.bigrams))
+            ++itor->ug;
+    }
+
+    return (ngram_iter_t *)itor;
+}
+
+static ngram_iter_t *
+lm3g_template_successors(ngram_iter_t *bitor)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)bitor->model;
+    lm3g_iter_t *from = (lm3g_iter_t *)bitor;
+    lm3g_iter_t *itor = ckd_calloc(1, sizeof(*itor));
+
+    itor->ug = from->ug;
+    switch (bitor->m) {
+    case 0:
+        /* Next itor bigrams is the same as this itor bigram or
+          itor bigrams is more than total count. This means no successors */
+        if (((itor->ug + 1) - model->lm3g.unigrams < bitor->model->n_counts[0] &&
+           itor->ug->bigrams == (itor->ug + 1)->bigrams) || 
+           itor->ug->bigrams == bitor->model->n_counts[1])
+           goto done;
+           
+        /* Start iterating from first bigram successor of from->ug. */
+        itor->bg = model->lm3g.bigrams + itor->ug->bigrams;
+        break;
+    case 1:
+        itor->bg = from->bg;
+        
+        /* This indicates no successors */
+        if (((itor->bg + 1) - model->lm3g.bigrams < bitor->model->n_counts[1] &&
+           FIRST_TG (model, itor->bg - model->lm3g.bigrams) == 
+           FIRST_TG (model, (itor->bg + 1) - model->lm3g.bigrams)) ||
+           FIRST_TG (model, itor->bg - model->lm3g.bigrams) == bitor->model->n_counts[2])
+           goto done;
+           
+        /* Start iterating from first trigram successor of from->bg. */
+        itor->tg = (model->lm3g.trigrams 
+                    + FIRST_TG(model, (itor->bg - model->lm3g.bigrams)));
+#if 0
+        printf("%s %s => %d (%s)\n",
+               model->base.word_str[itor->ug - model->lm3g.unigrams],
+               model->base.word_str[itor->bg->wid],
+               FIRST_TG(model, (itor->bg - model->lm3g.bigrams)),
+               model->base.word_str[itor->tg->wid]);
+#endif
+        break;
+    case 2:
+    default:
+        /* All invalid! */
+        goto done;
+    }
+
+    ngram_iter_init((ngram_iter_t *)itor, bitor->model, bitor->m + 1, TRUE);
+    return (ngram_iter_t *)itor;
+    done:
+        ckd_free(itor);
+        return NULL;
+}
+
+static int32 const *
+lm3g_template_iter_get(ngram_iter_t *base,
+                       int32 *out_score, int32 *out_bowt)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)base->model;
+    lm3g_iter_t *itor = (lm3g_iter_t *)base;
+
+    base->wids[0] = itor->ug - model->lm3g.unigrams;
+    if (itor->bg) base->wids[1] = itor->bg->wid;
+    if (itor->tg) base->wids[2] = itor->tg->wid;
+#if 0
+    printf("itor_get: %d %d %d\n", base->wids[0], base->wids[1], base->wids[2]);
+#endif
+
+    switch (base->m) {
+    case 0:
+        *out_score = itor->ug->prob1.l;
+        *out_bowt = itor->ug->bo_wt1.l;
+        break;
+    case 1:
+        *out_score = model->lm3g.prob2[itor->bg->prob2].l;
+        if (model->lm3g.bo_wt2)
+            *out_bowt = model->lm3g.bo_wt2[itor->bg->bo_wt2].l;
+        else
+            *out_bowt = 0;
+        break;
+    case 2:
+        *out_score = model->lm3g.prob3[itor->tg->prob3].l;
+        *out_bowt = 0;
+        break;
+    default: /* Should not happen. */
+        return NULL;
+    }
+    return base->wids;
+}
+
+static ngram_iter_t *
+lm3g_template_iter_next(ngram_iter_t *base)
+{
+    NGRAM_MODEL_TYPE *model = (NGRAM_MODEL_TYPE *)base->model;
+    lm3g_iter_t *itor = (lm3g_iter_t *)base;
+
+    switch (base->m) {
+    case 0:
+        ++itor->ug;
+        /* Check for end condition. */
+        if (itor->ug - model->lm3g.unigrams >= base->model->n_counts[0])
+            goto done;
+        break;
+    case 1:
+        ++itor->bg;
+        /* Check for end condition. */
+        if (itor->bg - model->lm3g.bigrams >= base->model->n_counts[1])
+            goto done;
+        /* Advance unigram pointer if necessary in order to get one
+         * that points to this bigram. */
+        while (itor->bg - model->lm3g.bigrams >= itor->ug[1].bigrams) {
+            /* Stop if this is a successor iterator, since we don't
+             * want a new unigram. */
+            if (base->successor)
+                goto done;
+            ++itor->ug;
+            if (itor->ug == model->lm3g.unigrams + base->model->n_counts[0]) {
+                E_ERROR("Bigram %d has no valid unigram parent\n",
+                        itor->bg - model->lm3g.bigrams);
+                goto done;
+            }
+        }
+        break;
+    case 2:
+        ++itor->tg;
+        /* Check for end condition. */
+        if (itor->tg - model->lm3g.trigrams >= base->model->n_counts[2])
+            goto done;
+        /* Advance bigram pointer if necessary. */
+        while (itor->tg - model->lm3g.trigrams >=
+            FIRST_TG(model, (itor->bg - model->lm3g.bigrams + 1))) {
+            if (base->successor)
+                goto done;
+            ++itor->bg;
+            if (itor->bg == model->lm3g.bigrams + base->model->n_counts[1]) {
+                E_ERROR("Trigram %d has no valid bigram parent\n",
+                        itor->tg - model->lm3g.trigrams);
+
+               goto done;
+            }
+        }
+        /* Advance unigram pointer if necessary. */
+        while (itor->bg - model->lm3g.bigrams >= itor->ug[1].bigrams) {
+            ++itor->ug;
+            if (itor->ug == model->lm3g.unigrams + base->model->n_counts[0]) {
+                E_ERROR("Trigram %d has no valid unigram parent\n",
+                        itor->tg - model->lm3g.trigrams);
+                goto done;
+            }
+        }
+        break;
+    default: /* Should not happen. */
+        goto done;
+    }
+
+    return (ngram_iter_t *)itor;
+done:
+    ngram_iter_free(base);
+    return NULL;
+}
+
+static void
+lm3g_template_iter_free(ngram_iter_t *base)
+{
+    ckd_free(base);
+}
diff --git a/src/libsphinxbase/lm/ngram_model.c b/src/libsphinxbase/lm/ngram_model.c
new file mode 100644 (file)
index 0000000..f576ba3
--- /dev/null
@@ -0,0 +1,1231 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file ngram_model.c N-Gram language models.
+ *
+ * Author: David Huggins-Daines, much code taken from sphinx3/src/libs3decoder/liblm
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <assert.h>
+
+#ifdef HAVE_ICONV
+#include <iconv.h>
+#endif 
+
+#include "sphinxbase/ngram_model.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/filename.h"
+#include "sphinxbase/pio.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/logmath.h"
+#include "sphinxbase/strfuncs.h"
+#include "sphinxbase/case.h"
+
+#include "ngram_model_internal.h"
+
+ngram_file_type_t
+ngram_file_name_to_type(const char *file_name)
+{
+    const char *ext;
+
+    ext = strrchr(file_name, '.');
+    if (ext == NULL) {
+        return NGRAM_INVALID;
+    }
+    if (0 == strcmp_nocase(ext, ".gz")) {
+        while (--ext >= file_name) {
+            if (*ext == '.') break;
+        }
+        if (ext < file_name) {
+            return NGRAM_INVALID;
+         }
+     }
+     else if (0 == strcmp_nocase(ext, ".bz2")) {
+         while (--ext >= file_name) {
+             if (*ext == '.') break;
+         }
+         if (ext < file_name) {
+             return NGRAM_INVALID;
+         }
+     }
+     /* We use strncmp because there might be a .gz on the end. */
+     if (0 == strncmp_nocase(ext, ".ARPA", 5))
+         return NGRAM_ARPA;
+     if (0 == strncmp_nocase(ext, ".DMP", 4))
+         return NGRAM_DMP;
+     return NGRAM_INVALID;
+ }
+
+ngram_file_type_t
+ngram_str_to_type(const char *str_name)
+{
+    if (0 == strcmp_nocase(str_name, "arpa"))
+        return NGRAM_ARPA;
+    if (0 == strcmp_nocase(str_name, "dmp"))
+        return NGRAM_DMP;
+    return NGRAM_INVALID;
+}
+
+char const *
+ngram_type_to_str(int type)
+{
+    switch (type) {
+    case NGRAM_ARPA:
+        return "arpa";
+    case NGRAM_DMP:
+        return "dmp";
+    default:
+        return NULL;
+    }
+}
+
+
+ ngram_model_t *
+ ngram_model_read(cmd_ln_t *config,
+                  const char *file_name,
+                  ngram_file_type_t file_type,
+                  logmath_t *lmath)
+ {
+     ngram_model_t *model = NULL;
+
+     switch (file_type) {
+     case NGRAM_AUTO: {
+         if ((model = ngram_model_arpa_read(config, file_name, lmath)) != NULL)
+             break;
+         if ((model = ngram_model_dmp_read(config, file_name, lmath)) != NULL)
+             break;
+         return NULL;
+     }
+     case NGRAM_ARPA:
+         model = ngram_model_arpa_read(config, file_name, lmath);
+         break;
+     case NGRAM_DMP:
+         model = ngram_model_dmp_read(config, file_name, lmath);
+         break;
+     default:
+         E_ERROR("language model file type not supported\n");
+         return NULL;
+     }
+
+     /* Now set weights based on config if present. */
+     if (config) {
+         float32 lw = 1.0;
+         float32 wip = 1.0;
+         float32 uw = 1.0;
+
+         if (cmd_ln_exists_r(config, "-lw"))
+             lw = cmd_ln_float32_r(config, "-lw");
+         if (cmd_ln_exists_r(config, "-wip"))
+             wip = cmd_ln_float32_r(config, "-wip");
+         if (cmd_ln_exists_r(config, "-uw"))
+             uw = cmd_ln_float32_r(config, "-uw");
+
+         ngram_model_apply_weights(model, lw, wip, uw);
+     }
+
+     return model;
+ }
+
+ int
+ ngram_model_write(ngram_model_t *model, const char *file_name,
+                   ngram_file_type_t file_type)
+ {
+     switch (file_type) {
+     case NGRAM_AUTO: {
+         file_type = ngram_file_name_to_type(file_name);
+         /* Default to ARPA (catches .lm and other things) */
+         if (file_type == NGRAM_INVALID)
+             file_type = NGRAM_ARPA;
+         return ngram_model_write(model, file_name, file_type);
+     }
+     case NGRAM_ARPA:
+         return ngram_model_arpa_write(model, file_name);
+     case NGRAM_DMP:
+         return ngram_model_dmp_write(model, file_name);
+     default:
+         E_ERROR("language model file type not supported\n");
+         return -1;
+     }
+     E_ERROR("language model file type not supported\n");
+     return -1;
+ }
+
+ int32
+ ngram_model_init(ngram_model_t *base,
+                  ngram_funcs_t *funcs,
+                  logmath_t *lmath,
+                  int32 n, int32 n_unigram)
+ {
+     base->refcount = 1;
+     base->funcs = funcs;
+     base->n = n;
+     /* If this was previously initialized... */
+    if (base->n_counts == NULL)
+        base->n_counts = ckd_calloc(3, sizeof(*base->n_counts));
+    /* Don't reset weights if logmath object hasn't changed. */
+    if (base->lmath != lmath) {
+        /* Set default values for weights. */
+        base->lw = 1.0;
+        base->log_wip = 0; /* i.e. 1.0 */
+        base->log_uw = 0;  /* i.e. 1.0 */
+        base->log_uniform = logmath_log(lmath, 1.0 / n_unigram);
+        base->log_uniform_weight = logmath_get_zero(lmath);
+        base->log_zero = logmath_get_zero(lmath);
+        base->lmath = lmath;
+    }
+    /* Allocate or reallocate space for word strings. */
+    if (base->word_str) {
+        /* Free all previous word strings if they were allocated. */
+        if (base->writable) {
+            int32 i;
+            for (i = 0; i < base->n_words; ++i) {
+                ckd_free(base->word_str[i]);
+                base->word_str[i] = NULL;
+            }
+        }
+        base->word_str = ckd_realloc(base->word_str, n_unigram * sizeof(char *));
+    }
+    else
+        base->word_str = ckd_calloc(n_unigram, sizeof(char *));
+    /* NOTE: They are no longer case-insensitive since we are allowing
+     * other encodings for word strings.  Beware. */
+    if (base->wid)
+        hash_table_empty(base->wid);
+    else
+        base->wid = hash_table_new(n_unigram, FALSE);
+    base->n_counts[0] = base->n_1g_alloc = base->n_words = n_unigram;
+
+    return 0;
+}
+
+ngram_model_t *
+ngram_model_retain(ngram_model_t *model)
+{
+    ++model->refcount;
+    return model;
+}
+
+
+void
+ngram_model_flush(ngram_model_t *model)
+{
+    if (model->funcs && model->funcs->flush)
+        (*model->funcs->flush)(model);
+}
+
+int
+ngram_model_free(ngram_model_t *model)
+{
+    int i;
+
+    if (model == NULL)
+        return 0;
+    if (--model->refcount > 0)
+        return model->refcount;
+    if (model->funcs && model->funcs->free)
+        (*model->funcs->free)(model);
+    if (model->writable) {
+        /* Free all words. */
+        for (i = 0; i < model->n_words; ++i) {
+            ckd_free(model->word_str[i]);
+        }
+    }
+    else {
+        /* Free all class words. */
+        for (i = 0; i < model->n_classes; ++i) {
+            ngram_class_t *lmclass;
+            int32 j;
+
+            lmclass = model->classes[i];
+            for (j = 0; j < lmclass->n_words; ++j) {
+                ckd_free(model->word_str[lmclass->start_wid + j]);
+            }
+            for (j = 0; j < lmclass->n_hash; ++j) {
+                if (lmclass->nword_hash[j].wid != -1) {
+                    ckd_free(model->word_str[lmclass->nword_hash[j].wid]);
+                }
+            }
+        }
+    }
+    for (i = 0; i < model->n_classes; ++i) {
+        ngram_class_free(model->classes[i]);
+    }
+    ckd_free(model->classes);
+    hash_table_free(model->wid);
+    ckd_free(model->word_str);
+    ckd_free(model->n_counts);
+    ckd_free(model);
+    return 0;
+}
+
+int
+ngram_model_casefold(ngram_model_t *model, int kase)
+{
+    int writable, i;
+    hash_table_t *new_wid;
+
+    /* Were word strings already allocated? */
+    writable = model->writable;
+    /* Either way, we are going to allocate some word strings. */
+    model->writable = TRUE;
+
+    /* And, don't forget, we need to rebuild the word to unigram ID
+     * mapping. */
+    new_wid = hash_table_new(model->n_words, FALSE);
+    for (i = 0; i < model->n_words; ++i) {
+        char *outstr;
+        if (writable) {
+            outstr = model->word_str[i];
+        }
+        else {
+            outstr = ckd_salloc(model->word_str[i]);
+        }
+        /* Don't case-fold <tags> or [classes] */
+        if (outstr[0] == '<' || outstr[0] == '[') {
+        }
+        else {
+            switch (kase) {
+            case NGRAM_UPPER:
+                ucase(outstr);
+                break;
+            case NGRAM_LOWER:
+                lcase(outstr);
+                break;
+            default:
+                ;
+            }
+        }
+        model->word_str[i] = outstr;
+
+        /* Now update the hash table.  We might have terrible
+         * collisions here, so warn about them. */
+        if (hash_table_enter_int32(new_wid, model->word_str[i], i) != i) {
+            E_WARN("Duplicate word in dictionary after conversion: %s\n",
+                   model->word_str[i]);
+        }
+    }
+    /* Swap out the hash table. */
+    hash_table_free(model->wid);
+    model->wid = new_wid;
+    return 0;
+}
+
+#ifdef HAVE_ICONV
+int
+ngram_model_recode(ngram_model_t *model, const char *from, const char *to)
+{
+    iconv_t ic;
+    char *outbuf;
+    size_t maxlen;
+    int i, writable;
+    hash_table_t *new_wid;
+
+    /* FIXME: Need to do a special case thing for the GB-HEX encoding
+     * used in Sphinx3 Mandarin models. */
+    if ((ic = iconv_open(to, from)) == (iconv_t)-1) {
+        E_ERROR_SYSTEM("iconv_open() failed");
+        return -1;
+    }
+    /* iconv(3) is a piece of crap and won't accept a NULL out buffer,
+     * unlike wcstombs(3). So we have to either call it over and over
+     * again until our buffer is big enough, or call it with a huge
+     * buffer and then copy things back to the output.  We will use a
+     * mix of these two approaches here.  We'll keep a single big
+     * buffer around, and expand it as necessary.
+     */
+    maxlen = 0;
+    for (i = 0; i < model->n_words; ++i) {
+        if (strlen(model->word_str[i]) > maxlen)
+            maxlen = strlen(model->word_str[i]);
+    }
+    /* Were word strings already allocated? */
+    writable = model->writable;
+    /* Either way, we are going to allocate some word strings. */
+    model->writable = TRUE;
+    /* Really should be big enough except for pathological cases. */
+    maxlen = maxlen * sizeof(int) + 15;
+    outbuf = ckd_calloc(maxlen, 1);
+    /* And, don't forget, we need to rebuild the word to unigram ID
+     * mapping. */
+    new_wid = hash_table_new(model->n_words, FALSE);
+    for (i = 0; i < model->n_words; ++i) {
+        ICONV_CONST char *in;
+        char *out;
+        size_t inleft, outleft, result;
+
+    start_conversion:
+        in = (ICONV_CONST char *)model->word_str[i];
+        /* Yes, this assumes that we don't have any NUL bytes. */
+        inleft = strlen(in);
+        out = outbuf;
+        outleft = maxlen;
+
+        while ((result = iconv(ic, &in, &inleft, &out, &outleft)) == (size_t)-1) {
+            if (errno != E2BIG) {
+                /* FIXME: if we already converted any words, then they
+                 * are going to be in an inconsistent state. */
+                E_ERROR_SYSTEM("iconv() failed");
+                ckd_free(outbuf);
+                hash_table_free(new_wid);
+                return -1;
+            }
+            /* Reset the internal state of conversion. */
+            iconv(ic, NULL, NULL, NULL, NULL);
+            /* Make everything bigger. */
+            maxlen *= 2;
+            out = outbuf = ckd_realloc(outbuf, maxlen);
+            /* Reset the input pointers. */
+            in = (ICONV_CONST char *)model->word_str[i];
+            inleft = strlen(in);
+        }
+
+        /* Now flush a shift-out sequence, if any. */
+        if ((result = iconv(ic, NULL, NULL, &out, &outleft)) == (size_t)-1) {
+            if (errno != E2BIG) {
+                /* FIXME: if we already converted any words, then they
+                 * are going to be in an inconsistent state. */
+                E_ERROR_SYSTEM("iconv() failed (state reset sequence)");
+                ckd_free(outbuf);
+                hash_table_free(new_wid);
+                return -1;
+            }
+            /* Reset the internal state of conversion. */
+            iconv(ic, NULL, NULL, NULL, NULL);
+            /* Make everything bigger. */
+            maxlen *= 2;
+            outbuf = ckd_realloc(outbuf, maxlen);
+            /* Be very evil. */
+            goto start_conversion;
+        }
+
+        result = maxlen - outleft;
+        /* Okay, that was hard, now let's go shopping. */
+        if (writable) {
+            /* Grow or shrink the output string as necessary. */
+            model->word_str[i] = ckd_realloc(model->word_str[i], result + 1);
+            model->word_str[i][result] = '\0';
+        }
+        else {
+            /* It actually was not allocated previously, so do that now. */
+            model->word_str[i] = ckd_calloc(result + 1, 1);
+        }
+        /* Copy the new thing in. */
+        memcpy(model->word_str[i], outbuf, result);
+
+        /* Now update the hash table.  We might have terrible
+         * collisions if a non-reversible conversion was requested.,
+         * so warn about them. */
+        if (hash_table_enter_int32(new_wid, model->word_str[i], i) != i) {
+            E_WARN("Duplicate word in dictionary after conversion: %s\n",
+                   model->word_str[i]);
+        }
+    }
+    ckd_free(outbuf);
+    iconv_close(ic);
+    /* Swap out the hash table. */
+    hash_table_free(model->wid);
+    model->wid = new_wid;
+
+    return 0;
+}
+#else /* !HAVE_ICONV */
+int
+ngram_model_recode(ngram_model_t *model, const char *from, const char *to)
+{
+    return -1;
+}
+#endif /* !HAVE_ICONV */
+
+int
+ngram_model_apply_weights(ngram_model_t *model,
+                          float32 lw, float32 wip, float32 uw)
+{
+    return (*model->funcs->apply_weights)(model, lw, wip, uw);
+}
+
+float32
+ngram_model_get_weights(ngram_model_t *model, int32 *out_log_wip,
+                        int32 *out_log_uw)
+{
+    if (out_log_wip) *out_log_wip = model->log_wip;
+    if (out_log_uw) *out_log_uw = model->log_uw;
+    return model->lw;
+}
+
+
+int32
+ngram_ng_score(ngram_model_t *model, int32 wid, int32 *history,
+               int32 n_hist, int32 *n_used)
+{
+    int32 score, class_weight = 0;
+    int i;
+
+    /* Closed vocabulary, OOV word probability is zero */
+    if (wid == NGRAM_INVALID_WID)
+        return model->log_zero;
+
+    /* "Declassify" wid and history */
+    if (NGRAM_IS_CLASSWID(wid)) {
+        ngram_class_t *lmclass = model->classes[NGRAM_CLASSID(wid)];
+
+        class_weight = ngram_class_prob(lmclass, wid);
+        if (class_weight == 1) /* Meaning, not found in class. */
+            return model->log_zero;
+        wid = lmclass->tag_wid;
+    }
+    for (i = 0; i < n_hist; ++i) {
+        if (history[i] != NGRAM_INVALID_WID && NGRAM_IS_CLASSWID(history[i]))
+            history[i] = model->classes[NGRAM_CLASSID(history[i])]->tag_wid;
+    }
+    score = (*model->funcs->score)(model, wid, history, n_hist, n_used);
+
+    /* Multiply by unigram in-class weight. */
+    return score + class_weight;
+}
+
+int32
+ngram_score(ngram_model_t *model, const char *word, ...)
+{
+    va_list history;
+    const char *hword;
+    int32 *histid;
+    int32 n_hist;
+    int32 n_used;
+    int32 prob;
+
+    va_start(history, word);
+    n_hist = 0;
+    while ((hword = va_arg(history, const char *)) != NULL)
+        ++n_hist;
+    va_end(history);
+
+    histid = ckd_calloc(n_hist, sizeof(*histid));
+    va_start(history, word);
+    n_hist = 0;
+    while ((hword = va_arg(history, const char *)) != NULL) {
+        histid[n_hist] = ngram_wid(model, hword);
+        ++n_hist;
+    }
+    va_end(history);
+
+    prob = ngram_ng_score(model, ngram_wid(model, word),
+                          histid, n_hist, &n_used);
+    ckd_free(histid);
+    return prob;
+}
+
+int32
+ngram_tg_score(ngram_model_t *model, int32 w3, int32 w2, int32 w1, int32 *n_used)
+{
+    int32 hist[2];
+    hist[0] = w2;
+    hist[1] = w1;
+    return ngram_ng_score(model, w3, hist, 2, n_used);
+}
+
+int32
+ngram_bg_score(ngram_model_t *model, int32 w2, int32 w1, int32 *n_used)
+{
+    return ngram_ng_score(model, w2, &w1, 1, n_used);
+}
+
+int32
+ngram_ng_prob(ngram_model_t *model, int32 wid, int32 *history,
+              int32 n_hist, int32 *n_used)
+{
+    int32 prob, class_weight = 0;
+    int i;
+
+    /* Closed vocabulary, OOV word probability is zero */
+    if (wid == NGRAM_INVALID_WID)
+        return model->log_zero;
+
+    /* "Declassify" wid and history */
+    if (NGRAM_IS_CLASSWID(wid)) {
+        ngram_class_t *lmclass = model->classes[NGRAM_CLASSID(wid)];
+
+        class_weight = ngram_class_prob(lmclass, wid);
+        if (class_weight == 1) /* Meaning, not found in class. */
+            return class_weight;
+        wid = lmclass->tag_wid;
+    }
+    for (i = 0; i < n_hist; ++i) {
+        if (history[i] != NGRAM_INVALID_WID && NGRAM_IS_CLASSWID(history[i]))
+            history[i] = model->classes[NGRAM_CLASSID(history[i])]->tag_wid;
+    }
+    prob = (*model->funcs->raw_score)(model, wid, history,
+                                      n_hist, n_used);
+    /* Multiply by unigram in-class weight. */
+    return prob + class_weight;
+}
+
+int32
+ngram_prob(ngram_model_t *model, const char *word, ...)
+{
+    va_list history;
+    const char *hword;
+    int32 *histid;
+    int32 n_hist;
+    int32 n_used;
+    int32 prob;
+
+    va_start(history, word);
+    n_hist = 0;
+    while ((hword = va_arg(history, const char *)) != NULL)
+        ++n_hist;
+    va_end(history);
+
+    histid = ckd_calloc(n_hist, sizeof(*histid));
+    va_start(history, word);
+    n_hist = 0;
+    while ((hword = va_arg(history, const char *)) != NULL) {
+        histid[n_hist] = ngram_wid(model, hword);
+        ++n_hist;
+    }
+    va_end(history);
+
+    prob = ngram_ng_prob(model, ngram_wid(model, word),
+                         histid, n_hist, &n_used);
+    ckd_free(histid);
+    return prob;
+}
+
+int32
+ngram_score_to_prob(ngram_model_t *base, int32 score)
+{
+    int32 prob;
+
+    /* Undo insertion penalty. */
+    prob = score - base->log_wip;
+    /* Undo language weight. */
+    prob = (int32)(prob / base->lw);
+
+    return prob;
+}
+
+int32
+ngram_unknown_wid(ngram_model_t *model)
+{
+    int32 val;
+
+    /* FIXME: This could be memoized for speed if necessary. */
+    /* Look up <UNK>, if not found return NGRAM_INVALID_WID. */
+    if (hash_table_lookup_int32(model->wid, "<UNK>", &val) == -1)
+        return NGRAM_INVALID_WID;
+    else
+        return val;
+}
+
+int32
+ngram_zero(ngram_model_t *model)
+{
+    return model->log_zero;
+}
+
+int32
+ngram_model_get_size(ngram_model_t *model)
+{
+  if (model != NULL)
+    return model->n;
+  return 0;
+}
+
+int32 const *
+ngram_model_get_counts(ngram_model_t *model)
+{
+  if (model != NULL)
+    return model->n_counts;
+  return NULL;
+}
+
+void
+ngram_iter_init(ngram_iter_t *itor, ngram_model_t *model,
+                int m, int successor)
+{
+    itor->model = model;
+    itor->wids = ckd_calloc(model->n, sizeof(*itor->wids));
+    itor->m = m;
+    itor->successor = successor;
+}
+
+ngram_iter_t *
+ngram_model_mgrams(ngram_model_t *model, int m)
+{
+    ngram_iter_t *itor;
+    /* The fact that m=n-1 is not exactly obvious.  Prevent accidents. */
+    if (m >= model->n)
+        return NULL;
+    if (model->funcs->mgrams == NULL)
+        return NULL;
+    itor = (*model->funcs->mgrams)(model, m);
+    return itor;
+}
+
+ngram_iter_t *
+ngram_iter(ngram_model_t *model, const char *word, ...)
+{
+    va_list history;
+    const char *hword;
+    int32 *histid;
+    int32 n_hist;
+    ngram_iter_t *itor;
+
+    va_start(history, word);
+    n_hist = 0;
+    while ((hword = va_arg(history, const char *)) != NULL)
+        ++n_hist;
+    va_end(history);
+
+    histid = ckd_calloc(n_hist, sizeof(*histid));
+    va_start(history, word);
+    n_hist = 0;
+    while ((hword = va_arg(history, const char *)) != NULL) {
+        histid[n_hist] = ngram_wid(model, hword);
+        ++n_hist;
+    }
+    va_end(history);
+
+    itor = ngram_ng_iter(model, ngram_wid(model, word), histid, n_hist);
+    ckd_free(histid);
+    return itor;
+}
+
+ngram_iter_t *
+ngram_ng_iter(ngram_model_t *model, int32 wid, int32 *history, int32 n_hist)
+{
+    if (n_hist >= model->n)
+        return NULL;
+    if (model->funcs->iter == NULL)
+        return NULL;
+    return (*model->funcs->iter)(model, wid, history, n_hist);
+}
+
+ngram_iter_t *
+ngram_iter_successors(ngram_iter_t *itor)
+{
+    /* Stop when we are at the highest order N-Gram. */
+    if (itor->m == itor->model->n - 1)
+        return NULL;
+    return (*itor->model->funcs->successors)(itor);
+}
+
+int32 const *
+ngram_iter_get(ngram_iter_t *itor,
+               int32 *out_score,
+               int32 *out_bowt)
+{
+    return (*itor->model->funcs->iter_get)(itor, out_score, out_bowt);
+}
+
+ngram_iter_t *
+ngram_iter_next(ngram_iter_t *itor)
+{
+    return (*itor->model->funcs->iter_next)(itor);
+}
+
+void
+ngram_iter_free(ngram_iter_t *itor)
+{
+    ckd_free(itor->wids);
+    (*itor->model->funcs->iter_free)(itor);
+}
+
+int32
+ngram_wid(ngram_model_t *model, const char *word)
+{
+    int32 val;
+
+    if (hash_table_lookup_int32(model->wid, word, &val) == -1)
+        return ngram_unknown_wid(model);
+    else
+        return val;
+}
+
+const char *
+ngram_word(ngram_model_t *model, int32 wid)
+{
+    /* Remove any class tag */
+    wid = NGRAM_BASEWID(wid);
+    if (wid >= model->n_words)
+        return NULL;
+    return model->word_str[wid];
+}
+
+/**
+ * Add a word to the word string and ID mapping.
+ */
+int32
+ngram_add_word_internal(ngram_model_t *model,
+                        const char *word,
+                        int32 classid)
+{
+    void *dummy;
+    int32 wid;
+
+    /* Take the next available word ID */
+    wid = model->n_words;
+    if (classid >= 0) {
+        wid = NGRAM_CLASSWID(wid, classid);
+    }
+    /* Check for hash collisions. */
+    if (hash_table_lookup(model->wid, word, &dummy) == 0) {
+        E_ERROR("Duplicate definition of word %s\n", word);
+        return NGRAM_INVALID_WID;
+    }
+    /* Reallocate word_str if necessary. */
+    if (model->n_words >= model->n_1g_alloc) {
+        model->n_1g_alloc += UG_ALLOC_STEP;
+        model->word_str = ckd_realloc(model->word_str,
+                                      sizeof(*model->word_str) * model->n_1g_alloc);
+    }
+    /* Add the word string in the appropriate manner. */
+    /* Class words are always dynamically allocated. */
+    model->word_str[model->n_words] = ckd_salloc(word);
+    /* Now enter it into the hash table. */
+    if (hash_table_enter_int32(model->wid, model->word_str[model->n_words], wid) != wid) {
+        E_ERROR("Hash insertion failed for word %s => %p (should not happen)\n",
+                model->word_str[model->n_words], (void *)(long)(wid));
+    }
+    /* Increment number of words. */
+    ++model->n_words;
+    return wid;
+}
+
+int32
+ngram_model_add_word(ngram_model_t *model,
+                     const char *word, float32 weight)
+{
+    int32 wid, prob = model->log_zero;
+
+    wid = ngram_add_word_internal(model, word, -1);
+    if (wid == NGRAM_INVALID_WID)
+        return wid;
+
+    /* Do what needs to be done to add the word to the unigram. */
+    if (model->funcs && model->funcs->add_ug)
+        prob = (*model->funcs->add_ug)(model, wid, logmath_log(model->lmath, weight));
+    if (prob == 0) {
+        if (model->writable)
+            ckd_free(model->word_str[wid]);
+        return -1;
+    }
+    return wid;
+}
+
+ngram_class_t *
+ngram_class_new(ngram_model_t *model, int32 tag_wid, int32 start_wid, glist_t classwords)
+{
+    ngram_class_t *lmclass;
+    gnode_t *gn;
+    float32 tprob;
+    int i;
+
+    lmclass = ckd_calloc(1, sizeof(*lmclass));
+    lmclass->tag_wid = tag_wid;
+    /* wid_base is the wid (minus class tag) of the first word in the list. */
+    lmclass->start_wid = start_wid;
+    lmclass->n_words = glist_count(classwords);
+    lmclass->prob1 = ckd_calloc(lmclass->n_words, sizeof(*lmclass->prob1));
+    lmclass->nword_hash = NULL;
+    lmclass->n_hash = 0;
+    tprob = 0.0;
+    for (gn = classwords; gn; gn = gnode_next(gn)) {
+        tprob += gnode_float32(gn);
+    }
+    if (tprob > 1.1 || tprob < 0.9) {
+        E_WARN("Total class probability is %f, will normalize\n", tprob);
+        for (gn = classwords; gn; gn = gnode_next(gn)) {
+            gn->data.fl /= tprob;
+        }
+    }
+    for (i = 0, gn = classwords; gn; ++i, gn = gnode_next(gn)) {
+        lmclass->prob1[i] = logmath_log(model->lmath, gnode_float32(gn));
+    }
+
+    return lmclass;
+}
+
+int32
+ngram_class_add_word(ngram_class_t *lmclass, int32 wid, int32 lweight)
+{
+    int32 hash;
+
+    if (lmclass->nword_hash == NULL) {
+        /* Initialize everything in it to -1 */
+        lmclass->nword_hash = ckd_malloc(NGRAM_HASH_SIZE * sizeof(*lmclass->nword_hash));
+        memset(lmclass->nword_hash, 0xff, NGRAM_HASH_SIZE * sizeof(*lmclass->nword_hash));
+        lmclass->n_hash = NGRAM_HASH_SIZE;
+        lmclass->n_hash_inuse = 0;
+    }
+    /* Stupidest possible hash function.  This will work pretty well
+     * when this function is called repeatedly with contiguous word
+     * IDs, though... */
+    hash = wid & (lmclass->n_hash - 1);
+    if (lmclass->nword_hash[hash].wid == -1) {
+        /* Good, no collision. */
+        lmclass->nword_hash[hash].wid = wid;
+        lmclass->nword_hash[hash].prob1 = lweight;
+        ++lmclass->n_hash_inuse;
+        return hash;
+    }
+    else {
+        int32 next; /**< Next available bucket. */
+        /* Collision... Find the end of the hash chain. */
+        while (lmclass->nword_hash[hash].next != -1)
+            hash = lmclass->nword_hash[hash].next;
+        assert(hash != -1);
+        /* Does we has any more bukkit? */
+        if (lmclass->n_hash_inuse == lmclass->n_hash) {
+            /* Oh noes!  Ok, we makes more. */
+            lmclass->nword_hash = ckd_realloc(lmclass->nword_hash, 
+                                              lmclass->n_hash * 2 * sizeof(*lmclass->nword_hash));
+            memset(lmclass->nword_hash + lmclass->n_hash,
+                   0xff, lmclass->n_hash * sizeof(*lmclass->nword_hash));
+            /* Just use the next allocated one (easy) */
+            next = lmclass->n_hash;
+            lmclass->n_hash *= 2;
+        }
+        else {
+            /* Look for any available bucket.  We hope this doesn't happen. */
+            for (next = 0; next < lmclass->n_hash; ++next)
+                if (lmclass->nword_hash[next].wid == -1)
+                    break;
+            /* This should absolutely not happen. */
+            assert(next != lmclass->n_hash);
+        }
+        lmclass->nword_hash[next].wid = wid;
+        lmclass->nword_hash[next].prob1 = lweight;
+        lmclass->nword_hash[hash].next = next;
+        ++lmclass->n_hash_inuse;
+        return next;
+    }
+}
+
+void
+ngram_class_free(ngram_class_t *lmclass)
+{
+    ckd_free(lmclass->nword_hash);
+    ckd_free(lmclass->prob1);
+    ckd_free(lmclass);
+}
+
+int32
+ngram_model_add_class_word(ngram_model_t *model,
+                           const char *classname,
+                           const char *word,
+                           float32 weight)
+{
+    ngram_class_t *lmclass;
+    int32 classid, tag_wid, wid, i, scale;
+    float32 fprob;
+
+    /* Find the class corresponding to classname.  Linear search
+     * probably okay here since there won't be very many classes, and
+     * this doesn't have to be fast. */
+    tag_wid = ngram_wid(model, classname);
+    if (tag_wid == NGRAM_INVALID_WID) {
+        E_ERROR("No such word or class tag: %s\n", classname);
+        return tag_wid;
+    }
+    for (classid = 0; classid < model->n_classes; ++classid) {
+        if (model->classes[classid]->tag_wid == tag_wid)
+            break;
+    }
+    /* Hmm, no such class.  It's probably not a good idea to create one. */
+    if (classid == model->n_classes) {
+        E_ERROR("Word %s is not a class tag (call ngram_model_add_class() first)\n", classname);
+        return NGRAM_INVALID_WID;
+    }
+    lmclass = model->classes[classid];
+
+    /* Add this word to the model's set of words. */
+    wid = ngram_add_word_internal(model, word, classid);
+    if (wid == NGRAM_INVALID_WID)
+        return wid;
+
+    /* This is the fixed probability of the new word. */
+    fprob = weight * 1.0f / (lmclass->n_words + lmclass->n_hash_inuse + 1);
+    /* Now normalize everything else to fit it in.  This is
+     * accomplished by simply scaling all the other probabilities
+     * by (1-fprob). */
+    scale = logmath_log(model->lmath, 1.0 - fprob);
+    for (i = 0; i < lmclass->n_words; ++i)
+        lmclass->prob1[i] += scale;
+    for (i = 0; i < lmclass->n_hash; ++i)
+        if (lmclass->nword_hash[i].wid != -1)
+            lmclass->nword_hash[i].prob1 += scale;
+
+    /* Now add it to the class hash table. */
+    return ngram_class_add_word(lmclass, wid, logmath_log(model->lmath, fprob));
+}
+
+int32
+ngram_model_add_class(ngram_model_t *model,
+                      const char *classname,
+                      float32 classweight,
+                      char **words,
+                      const float32 *weights,
+                      int32 n_words)
+{
+    ngram_class_t *lmclass;
+    glist_t classwords = NULL;
+    int32 i, start_wid = -1;
+    int32 classid, tag_wid;
+
+    /* Check if classname already exists in model.  If not, add it.*/
+    if ((tag_wid = ngram_wid(model, classname)) == ngram_unknown_wid(model)) {
+        tag_wid = ngram_model_add_word(model, classname, classweight);
+        if (tag_wid == NGRAM_INVALID_WID)
+            return -1;
+    }
+
+    if (model->n_classes == 128) {
+        E_ERROR("Number of classes cannot exceed 128 (sorry)\n");
+        return -1;
+    }
+    classid = model->n_classes;
+    for (i = 0; i < n_words; ++i) {
+        int32 wid;
+
+        wid = ngram_add_word_internal(model, words[i], classid);
+        if (wid == NGRAM_INVALID_WID)
+            return -1;
+        if (start_wid == -1)
+            start_wid = NGRAM_BASEWID(wid);
+        classwords = glist_add_float32(classwords, weights[i]);
+    }
+    classwords = glist_reverse(classwords);
+    lmclass = ngram_class_new(model, tag_wid, start_wid, classwords);
+    glist_free(classwords);
+    if (lmclass == NULL)
+        return -1;
+
+    ++model->n_classes;
+    if (model->classes == NULL)
+        model->classes = ckd_calloc(1, sizeof(*model->classes));
+    else
+        model->classes = ckd_realloc(model->classes,
+                                     model->n_classes * sizeof(*model->classes));
+    model->classes[classid] = lmclass;
+    return classid;
+}
+
+int32
+ngram_class_prob(ngram_class_t *lmclass, int32 wid)
+{
+    int32 base_wid = NGRAM_BASEWID(wid);
+
+    if (base_wid < lmclass->start_wid
+        || base_wid > lmclass->start_wid + lmclass->n_words) {
+        int32 hash;
+
+        /* Look it up in the hash table. */
+        hash = wid & (lmclass->n_hash - 1);
+        while (hash != -1 && lmclass->nword_hash[hash].wid != wid)
+            hash = lmclass->nword_hash[hash].next;
+        if (hash == -1)
+            return 1;
+        return lmclass->nword_hash[hash].prob1;
+    }
+    else {
+        return lmclass->prob1[base_wid - lmclass->start_wid];
+    }
+}
+
+int32
+read_classdef_file(hash_table_t *classes, const char *file_name)
+{
+    FILE *fp;
+    int32 is_pipe;
+    int inclass;  /**< Are we currently reading a list of class words? */
+    int32 rv = -1;
+    gnode_t *gn;
+    glist_t classwords = NULL;
+    glist_t classprobs = NULL;
+    char *classname = NULL;
+
+    if ((fp = fopen_comp(file_name, "r", &is_pipe)) == NULL) {
+        E_ERROR("File %s not found\n", file_name);
+        return -1;
+    }
+
+    inclass = FALSE;
+    while (!feof(fp)) {
+        char line[512];
+        char *wptr[2];
+        int n_words;
+
+        if (fgets(line, sizeof(line), fp) == NULL)
+            break;
+
+        n_words = str2words(line, wptr, 2);
+        if (n_words <= 0)
+            continue;
+
+        if (inclass) {
+            /* Look for an end of class marker. */
+            if (n_words == 2 && 0 == strcmp(wptr[0], "END")) {
+                classdef_t *classdef;
+                gnode_t *word, *weight;
+                int32 i;
+
+                if (classname == NULL || 0 != strcmp(wptr[1], classname))
+                    goto error_out;
+                inclass = FALSE;
+
+                /* Construct a class from the list of words collected. */
+                classdef = ckd_calloc(1, sizeof(*classdef));
+                classwords = glist_reverse(classwords);
+                classprobs = glist_reverse(classprobs);
+                classdef->n_words = glist_count(classwords);
+                classdef->words = ckd_calloc(classdef->n_words,
+                                             sizeof(*classdef->words));
+                classdef->weights = ckd_calloc(classdef->n_words,
+                                               sizeof(*classdef->weights));
+                word = classwords;
+                weight = classprobs;
+                for (i = 0; i < classdef->n_words; ++i) {
+                    classdef->words[i] = gnode_ptr(word);
+                    classdef->weights[i] = gnode_float32(weight);
+                    word = gnode_next(word);
+                    weight = gnode_next(weight);
+                }
+                
+                /* Add this class to the hash table. */
+                if (hash_table_enter(classes, classname, classdef) != classdef) {
+                    classdef_free(classdef);
+                    goto error_out;
+                }
+
+                /* Reset everything. */
+                glist_free(classwords);
+                glist_free(classprobs);
+                classwords = NULL;
+                classprobs = NULL;
+                classname = NULL;
+            }
+            else {
+                float32 fprob;
+
+                if (n_words == 2)
+                    fprob = (float32)atof_c(wptr[1]);
+                else
+                    fprob = 1.0f;
+                /* Add it to the list of words for this class. */
+                classwords = glist_add_ptr(classwords, ckd_salloc(wptr[0]));
+                classprobs = glist_add_float32(classprobs, fprob);
+            }
+        }
+        else {
+            /* Start a new LM class if the LMCLASS marker is seen */
+            if (n_words == 2 && 0 == strcmp(wptr[0], "LMCLASS")) {
+                if (inclass)
+                    goto error_out;
+                inclass = TRUE;
+                classname = ckd_salloc(wptr[1]);
+            }
+            /* Otherwise, just ignore whatever junk we got */
+        }
+    }
+    rv = 0; /* Success. */
+
+error_out:
+    /* Free all the stuff we might have allocated. */
+    fclose_comp(fp, is_pipe);
+    for (gn = classwords; gn; gn = gnode_next(gn))
+        ckd_free(gnode_ptr(gn));
+    glist_free(classwords);
+    glist_free(classprobs);
+    ckd_free(classname);
+
+    return rv;
+}
+
+void
+classdef_free(classdef_t *classdef)
+{
+    int32 i;
+    for (i = 0; i < classdef->n_words; ++i)
+        ckd_free(classdef->words[i]);
+    ckd_free(classdef->words);
+    ckd_free(classdef->weights);
+    ckd_free(classdef);
+}
+
+
+int32
+ngram_model_read_classdef(ngram_model_t *model,
+                          const char *file_name)
+{
+    hash_table_t *classes;
+    glist_t hl = NULL;
+    gnode_t *gn;
+    int32 rv = -1;
+
+    classes = hash_table_new(0, FALSE);
+    if (read_classdef_file(classes, file_name) < 0) {
+        hash_table_free(classes);
+        return -1;
+    }
+    
+    /* Create a new class in the language model for each classdef. */
+    hl = hash_table_tolist(classes, NULL);
+    for (gn = hl; gn; gn = gnode_next(gn)) {
+        hash_entry_t *he = gnode_ptr(gn);
+        classdef_t *classdef = he->val;
+
+        if (ngram_model_add_class(model, he->key, 1.0,
+                                  classdef->words,
+                                  classdef->weights,
+                                  classdef->n_words) < 0)
+            goto error_out;
+    }
+    rv = 0;
+
+error_out:
+    for (gn = hl; gn; gn = gnode_next(gn)) {
+        hash_entry_t *he = gnode_ptr(gn);
+        ckd_free((char *)he->key);
+        classdef_free(he->val);
+    }
+    glist_free(hl);
+    hash_table_free(classes);
+    return rv;
+}
diff --git a/src/libsphinxbase/lm/ngram_model_arpa.c b/src/libsphinxbase/lm/ngram_model_arpa.c
new file mode 100644 (file)
index 0000000..1d81084
--- /dev/null
@@ -0,0 +1,659 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file ngram_model_arpa.c ARPA format language models
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "sphinxbase/ckd_alloc.h"
+#include <string.h>
+#include <limits.h>
+#include <assert.h>
+
+#include "sphinxbase/err.h"
+#include "sphinxbase/pio.h"
+#include "sphinxbase/listelem_alloc.h"
+#include "sphinxbase/strfuncs.h"
+
+#include "ngram_model_arpa.h"
+
+static ngram_funcs_t ngram_model_arpa_funcs;
+
+#define TSEG_BASE(m,b)         ((m)->lm3g.tseg_base[(b)>>LOG_BG_SEG_SZ])
+#define FIRST_BG(m,u)          ((m)->lm3g.unigrams[u].bigrams)
+#define FIRST_TG(m,b)          (TSEG_BASE((m),(b))+((m)->lm3g.bigrams[b].trigrams))
+
+/*
+ * Read and return #unigrams, #bigrams, #trigrams as stated in input file.
+ */
+static int
+ReadNgramCounts(lineiter_t **li, int32 * n_ug, int32 * n_bg, int32 * n_tg)
+{
+    int32 ngram, ngram_cnt;
+
+    /* skip file until past the '\data\' marker */
+    while (*li) {
+        string_trim((*li)->buf, STRING_BOTH);
+        if (strcmp((*li)->buf, "\\data\\") == 0)
+            break;
+        *li = lineiter_next(*li);
+    }
+    if (*li == NULL || strcmp((*li)->buf, "\\data\\") != 0) {
+        E_INFO("No \\data\\ mark in LM file\n");
+        return -1;
+    }
+
+    *n_ug = *n_bg = *n_tg = 0;
+    while ((*li = lineiter_next(*li))) {
+        if (sscanf((*li)->buf, "ngram %d=%d", &ngram, &ngram_cnt) != 2)
+            break;
+        switch (ngram) {
+        case 1:
+            *n_ug = ngram_cnt;
+            break;
+        case 2:
+            *n_bg = ngram_cnt;
+            break;
+        case 3:
+            *n_tg = ngram_cnt;
+            break;
+        default:
+            E_ERROR("Unknown ngram (%d)\n", ngram);
+            return -1;
+        }
+    }
+    if (*li == NULL) {
+        E_ERROR("EOF while reading ngram counts\n");
+        return -1;
+    }
+
+    /* Position iterator to the unigrams header '\1-grams:\' */
+    while ((*li = lineiter_next(*li))) {
+        string_trim((*li)->buf, STRING_BOTH);
+        if (strcmp((*li)->buf, "\\1-grams:") == 0)
+            break;
+    }
+    if (*li == NULL) {
+        E_ERROR_SYSTEM("Failed to read \\1-grams: mark");
+        return -1;
+    }
+
+    if ((*n_ug <= 0) || (*n_bg < 0) || (*n_tg < 0)) {
+        E_ERROR("Bad or missing ngram count\n");
+        return -1;
+    }
+    return 0;
+}
+
+/*
+ * Read in the unigrams from given file into the LM structure model.
+ * On entry to this procedure, the iterator is positioned to the
+ * header line '\1-grams:'.
+ */
+static int
+ReadUnigrams(lineiter_t **li, ngram_model_arpa_t * model)
+{
+    ngram_model_t *base = &model->base;
+    int32 wcnt;
+    float p1;
+
+    E_INFO("Reading unigrams\n");
+
+    wcnt = 0;
+    while ((*li = lineiter_next(*li))) {
+        char *wptr[3], *name;
+        float32 bo_wt = 0.0f;
+        int n;
+
+        string_trim((*li)->buf, STRING_BOTH);
+        if (strcmp((*li)->buf, "\\2-grams:") == 0
+            || strcmp((*li)->buf, "\\end\\") == 0)
+            break;
+
+        if ((n = str2words((*li)->buf, wptr, 3)) < 2) {
+            if ((*li)->buf[0] != '\0')
+                E_WARN("Format error; unigram ignored: %s\n", (*li)->buf);
+            continue;
+        }
+        else {
+            p1 = (float)atof_c(wptr[0]);
+            name = wptr[1];
+            if (n == 3)
+                bo_wt = (float)atof_c(wptr[2]);
+        }
+
+        if (wcnt >= base->n_counts[0]) {
+            E_ERROR("Too many unigrams\n");
+            return -1;
+        }
+
+        /* Associate name with word id */
+        base->word_str[wcnt] = ckd_salloc(name);
+        if ((hash_table_enter(base->wid, base->word_str[wcnt], (void *)(long)wcnt))
+            != (void *)(long)wcnt) {
+                E_WARN("Duplicate word in dictionary: %s\n", base->word_str[wcnt]);
+        }
+        model->lm3g.unigrams[wcnt].prob1.l = logmath_log10_to_log(base->lmath, p1);
+        model->lm3g.unigrams[wcnt].bo_wt1.l = logmath_log10_to_log(base->lmath, bo_wt);
+        wcnt++;
+    }
+
+    if (base->n_counts[0] != wcnt) {
+        E_WARN("lm_t.ucount(%d) != #unigrams read(%d)\n",
+               base->n_counts[0], wcnt);
+        base->n_counts[0] = wcnt;
+        base->n_words = wcnt;
+    }
+    return 0;
+}
+
+/*
+ * Read bigrams from given file into given model structure.
+ */
+static int
+ReadBigrams(lineiter_t **li, ngram_model_arpa_t * model)
+{
+    ngram_model_t *base = &model->base;
+    int32 w1, w2, prev_w1, bgcount;
+    bigram_t *bgptr;
+
+    E_INFO("Reading bigrams\n");
+
+    bgcount = 0;
+    bgptr = model->lm3g.bigrams;
+    prev_w1 = -1;
+
+    while ((*li = lineiter_next(*li))) {
+        float32 p, bo_wt = 0.0f;
+        int32 p2, bo_wt2;
+        char *wptr[4], *word1, *word2;
+        int n;
+
+        string_trim((*li)->buf, STRING_BOTH);
+        wptr[3] = NULL;
+        if ((n = str2words((*li)->buf, wptr, 4)) < 3) {
+            if ((*li)->buf[0] != '\0')
+                break;
+            continue;
+        }
+        else {
+            p = (float32)atof_c(wptr[0]);
+            word1 = wptr[1];
+            word2 = wptr[2];
+            if (wptr[3])
+                bo_wt = (float32)atof_c(wptr[3]);
+        }
+
+        if ((w1 = ngram_wid(base, word1)) == NGRAM_INVALID_WID) {
+            E_ERROR("Unknown word: %s, skipping bigram (%s %s)\n",
+                    word1, word1, word2);
+            continue;
+        }
+        if ((w2 = ngram_wid(base, word2)) == NGRAM_INVALID_WID) {
+            E_ERROR("Unknown word: %s, skipping bigram (%s %s)\n",
+                    word2, word1, word2);
+            continue;
+        }
+
+        /* FIXME: Should use logmath_t quantization here. */
+        /* HACK!! to quantize probs to 4 decimal digits */
+        p = (float32)((int32)(p * 10000)) / 10000;
+        bo_wt = (float32)((int32)(bo_wt * 10000)) / 10000;
+
+        p2 = logmath_log10_to_log(base->lmath, p);
+        bo_wt2 = logmath_log10_to_log(base->lmath, bo_wt);
+
+        if (bgcount >= base->n_counts[1]) {
+            E_ERROR("Too many bigrams\n");
+            return -1;
+        }
+
+        bgptr->wid = w2;
+        bgptr->prob2 = sorted_id(&model->sorted_prob2, &p2);
+        if (base->n_counts[2] > 0)
+            bgptr->bo_wt2 = sorted_id(&model->sorted_bo_wt2, &bo_wt2);
+
+        if (w1 != prev_w1) {
+            if (w1 < prev_w1) {
+                E_ERROR("Bigrams not in unigram order\n");
+                return -1;
+            }
+
+            for (prev_w1++; prev_w1 <= w1; prev_w1++)
+                model->lm3g.unigrams[prev_w1].bigrams = bgcount;
+            prev_w1 = w1;
+        }
+        bgcount++;
+        bgptr++;
+
+        if ((bgcount & 0x0000ffff) == 0) {
+            E_INFOCONT(".");
+        }
+    }
+    if (*li == NULL || ((strcmp((*li)->buf, "\\end\\") != 0)
+                        && (strcmp((*li)->buf, "\\3-grams:") != 0))) {
+        E_ERROR("Bad bigram: %s\n", (*li)->buf);
+        return -1;
+    }
+
+    for (prev_w1++; prev_w1 <= base->n_counts[0]; prev_w1++)
+        model->lm3g.unigrams[prev_w1].bigrams = bgcount;
+
+    return 0;
+}
+
+/*
+ * Very similar to ReadBigrams.
+ */
+static int
+ReadTrigrams(lineiter_t **li, ngram_model_arpa_t * model)
+{
+    ngram_model_t *base = &model->base;
+    int32 i, w1, w2, w3, prev_w1, prev_w2, tgcount, prev_bg, bg, endbg;
+    int32 seg, prev_seg, prev_seg_lastbg;
+    trigram_t *tgptr;
+    bigram_t *bgptr;
+
+    E_INFO("Reading trigrams\n");
+
+    tgcount = 0;
+    tgptr = model->lm3g.trigrams;
+    prev_w1 = -1;
+    prev_w2 = -1;
+    prev_bg = -1;
+    prev_seg = -1;
+
+    while ((*li = lineiter_next(*li))) {
+        float32 p;
+        int32 p3;
+        char *wptr[4], *word1, *word2, *word3;
+
+        string_trim((*li)->buf, STRING_BOTH);
+        if (str2words((*li)->buf, wptr, 4) != 4) {
+            if ((*li)->buf[0] != '\0')
+                break;
+            continue;
+        }
+        else {
+            p = (float32)atof_c(wptr[0]);
+            word1 = wptr[1];
+            word2 = wptr[2];
+            word3 = wptr[3];
+        }
+
+        if ((w1 = ngram_wid(base, word1)) == NGRAM_INVALID_WID) {
+            E_ERROR("Unknown word: %s, skipping trigram (%s %s %s)\n",
+                    word1, word1, word2, word3);
+            continue;
+        }
+        if ((w2 = ngram_wid(base, word2)) == NGRAM_INVALID_WID) {
+            E_ERROR("Unknown word: %s, skipping trigram (%s %s %s)\n",
+                    word2, word1, word2, word3);
+            continue;
+        }
+        if ((w3 = ngram_wid(base, word3)) == NGRAM_INVALID_WID) {
+            E_ERROR("Unknown word: %s, skipping trigram (%s %s %s)\n",
+                    word3, word1, word2, word3);
+            continue;
+        }
+
+        /* FIXME: Should use logmath_t quantization here. */
+        /* HACK!! to quantize probs to 4 decimal digits */
+        p = (float32)((int32)(p * 10000)) / 10000;
+        p3 = logmath_log10_to_log(base->lmath, p);
+
+        if (tgcount >= base->n_counts[2]) {
+            E_ERROR("Too many trigrams\n");
+            return -1;
+        }
+
+        tgptr->wid = w3;
+        tgptr->prob3 = sorted_id(&model->sorted_prob3, &p3);
+
+        if ((w1 != prev_w1) || (w2 != prev_w2)) {
+            /* Trigram for a new bigram; update tg info for all previous bigrams */
+            if ((w1 < prev_w1) || ((w1 == prev_w1) && (w2 < prev_w2))) {
+                E_ERROR("Trigrams not in bigram order\n");
+                return -1;
+            }
+
+            bg = (w1 !=
+                  prev_w1) ? model->lm3g.unigrams[w1].bigrams : prev_bg + 1;
+            endbg = model->lm3g.unigrams[w1 + 1].bigrams;
+            bgptr = model->lm3g.bigrams + bg;
+            for (; (bg < endbg) && (bgptr->wid != w2); bg++, bgptr++);
+            if (bg >= endbg) {
+                E_ERROR("Missing bigram for trigram: %s", (*li)->buf);
+                return -1;
+            }
+
+            /* bg = bigram entry index for <w1,w2>.  Update tseg_base */
+            seg = bg >> LOG_BG_SEG_SZ;
+            for (i = prev_seg + 1; i <= seg; i++)
+                model->lm3g.tseg_base[i] = tgcount;
+
+            /* Update trigrams pointers for all bigrams until bg */
+            if (prev_seg < seg) {
+                int32 tgoff = 0;
+
+                if (prev_seg >= 0) {
+                    tgoff = tgcount - model->lm3g.tseg_base[prev_seg];
+                    if (tgoff > 65535) {
+                        E_ERROR("Size of trigram segment is bigger than 65535, such a big language models are not supported, use smaller vocabulary\n");
+                        return -1;
+                    }
+                }
+
+                prev_seg_lastbg = ((prev_seg + 1) << LOG_BG_SEG_SZ) - 1;
+                bgptr = model->lm3g.bigrams + prev_bg;
+                for (++prev_bg, ++bgptr; prev_bg <= prev_seg_lastbg;
+                     prev_bg++, bgptr++)
+                    bgptr->trigrams = tgoff;
+
+                for (; prev_bg <= bg; prev_bg++, bgptr++)
+                    bgptr->trigrams = 0;
+            }
+            else {
+                int32 tgoff;
+
+                tgoff = tgcount - model->lm3g.tseg_base[prev_seg];
+                if (tgoff > 65535) {
+                    E_ERROR("Size of trigram segment is bigger than 65535, such a big language models are not supported, use smaller vocabulary\n");
+                    return -1;
+                }
+
+                bgptr = model->lm3g.bigrams + prev_bg;
+                for (++prev_bg, ++bgptr; prev_bg <= bg; prev_bg++, bgptr++)
+                    bgptr->trigrams = tgoff;
+            }
+
+            prev_w1 = w1;
+            prev_w2 = w2;
+            prev_bg = bg;
+            prev_seg = seg;
+        }
+
+        tgcount++;
+        tgptr++;
+
+        if ((tgcount & 0x0000ffff) == 0) {
+            E_INFOCONT(".");
+        }
+    }
+    if (*li == NULL || strcmp((*li)->buf, "\\end\\") != 0) {
+        E_ERROR("Bad trigram: %s\n", (*li)->buf);
+        return -1;
+    }
+
+    for (prev_bg++; prev_bg <= base->n_counts[1]; prev_bg++) {
+        if ((prev_bg & (BG_SEG_SZ - 1)) == 0)
+            model->lm3g.tseg_base[prev_bg >> LOG_BG_SEG_SZ] = tgcount;
+        if ((tgcount - model->lm3g.tseg_base[prev_bg >> LOG_BG_SEG_SZ]) > 65535) {
+            E_ERROR("Size of trigram segment is bigger than 65535, such a big language models are not supported, use smaller vocabulary\n");
+            return -1;
+        }
+        model->lm3g.bigrams[prev_bg].trigrams =
+            tgcount - model->lm3g.tseg_base[prev_bg >> LOG_BG_SEG_SZ];
+    }
+    return 0;
+}
+
+static unigram_t *
+new_unigram_table(int32 n_ug)
+{
+    unigram_t *table;
+    int32 i;
+
+    table = ckd_calloc(n_ug, sizeof(unigram_t));
+    for (i = 0; i < n_ug; i++) {
+        table[i].prob1.l = INT_MIN;
+        table[i].bo_wt1.l = INT_MIN;
+    }
+    return table;
+}
+
+ngram_model_t *
+ngram_model_arpa_read(cmd_ln_t *config,
+                     const char *file_name,
+                     logmath_t *lmath)
+{
+    lineiter_t *li;
+    FILE *fp;
+    int32 is_pipe;
+    int32 n_unigram;
+    int32 n_bigram;
+    int32 n_trigram;
+    int32 n;
+    ngram_model_arpa_t *model;
+    ngram_model_t *base;
+
+    if ((fp = fopen_comp(file_name, "r", &is_pipe)) == NULL) {
+        E_ERROR("File %s not found\n", file_name);
+        return NULL;
+    }
+    li = lineiter_start(fp);
+    /* Read #unigrams, #bigrams, #trigrams from file */
+    if (ReadNgramCounts(&li, &n_unigram, &n_bigram, &n_trigram) == -1) {
+        lineiter_free(li);
+        fclose_comp(fp, is_pipe);
+        return NULL;
+    }
+    E_INFO("ngrams 1=%d, 2=%d, 3=%d\n", n_unigram, n_bigram, n_trigram);
+
+    /* Allocate space for LM, including initial OOVs and placeholders; initialize it */
+    model = ckd_calloc(1, sizeof(*model));
+    base = &model->base;
+    if (n_trigram > 0)
+        n = 3;
+    else if (n_bigram > 0)
+        n = 2;
+    else
+        n = 1;
+    /* Initialize base model. */
+    ngram_model_init(base, &ngram_model_arpa_funcs, lmath, n, n_unigram);
+    base->n_counts[0] = n_unigram;
+    base->n_counts[1] = n_bigram;
+    base->n_counts[2] = n_trigram;
+    base->writable = TRUE;
+
+    /*
+     * Allocate one extra unigram and bigram entry: sentinels to terminate
+     * followers (bigrams and trigrams, respectively) of previous entry.
+     */
+    model->lm3g.unigrams = new_unigram_table(n_unigram + 1);
+    model->lm3g.bigrams =
+        ckd_calloc(n_bigram + 1, sizeof(bigram_t));
+    if (n_trigram > 0)
+        model->lm3g.trigrams =
+            ckd_calloc(n_trigram, sizeof(trigram_t));
+
+    if (n_trigram > 0) {
+        model->lm3g.tseg_base =
+            ckd_calloc((n_bigram + 1) / BG_SEG_SZ + 1,
+                       sizeof(int32));
+    }
+    if (ReadUnigrams(&li, model) == -1) {
+        fclose_comp(fp, is_pipe);
+        ngram_model_free(base);
+        return NULL;
+    }
+    E_INFO("%8d = #unigrams created\n", base->n_counts[0]);
+
+    init_sorted_list(&model->sorted_prob2);
+    if (base->n_counts[2] > 0)
+        init_sorted_list(&model->sorted_bo_wt2);
+
+    if (base->n_counts[1] > 0) {
+        if (ReadBigrams(&li, model) == -1) {
+            fclose_comp(fp, is_pipe);
+            ngram_model_free(base);
+            return NULL;
+        }
+
+        base->n_counts[1] = FIRST_BG(model, base->n_counts[0]);
+        model->lm3g.n_prob2 = model->sorted_prob2.free;
+        model->lm3g.prob2 = vals_in_sorted_list(&model->sorted_prob2);
+        free_sorted_list(&model->sorted_prob2);
+        E_INFO("%8d = #bigrams created\n", base->n_counts[1]);
+        E_INFO("%8d = #prob2 entries\n", model->lm3g.n_prob2);
+    }
+
+    if (base->n_counts[2] > 0) {
+        /* Create trigram bo-wts array */
+        model->lm3g.n_bo_wt2 = model->sorted_bo_wt2.free;
+        model->lm3g.bo_wt2 = vals_in_sorted_list(&model->sorted_bo_wt2);
+        free_sorted_list(&model->sorted_bo_wt2);
+        E_INFO("%8d = #bo_wt2 entries\n", model->lm3g.n_bo_wt2);
+
+        init_sorted_list(&model->sorted_prob3);
+
+        if (ReadTrigrams(&li, model) == -1) {
+            fclose_comp(fp, is_pipe);
+            ngram_model_free(base);
+            return NULL;
+        }
+
+        base->n_counts[2] = FIRST_TG(model, base->n_counts[1]);
+        model->lm3g.n_prob3 = model->sorted_prob3.free;
+        model->lm3g.prob3 = vals_in_sorted_list(&model->sorted_prob3);
+        E_INFO("%8d = #trigrams created\n", base->n_counts[2]);
+        E_INFO("%8d = #prob3 entries\n", model->lm3g.n_prob3);
+
+        free_sorted_list(&model->sorted_prob3);
+
+        /* Initialize tginfo */
+        model->lm3g.tginfo = ckd_calloc(n_unigram, sizeof(tginfo_t *));
+        model->lm3g.le = listelem_alloc_init(sizeof(tginfo_t));
+    }
+
+    lineiter_free(li);
+    fclose_comp(fp, is_pipe);
+    return base;
+}
+
+int
+ngram_model_arpa_write(ngram_model_t *model,
+                      const char *file_name)
+{
+    ngram_iter_t *itor;
+    FILE *fh;
+    int i;
+
+    if ((fh = fopen(file_name, "w")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open %s for writing", file_name);
+        return -1;
+    }
+    fprintf(fh, "This is an ARPA-format language model file, generated by CMU Sphinx\n");
+
+    /* The ARPA format doesn't require any extra information that
+     * N-Gram iterators can't give us, so this is very
+     * straightforward compared with DMP writing. */
+
+    /* Write N-gram counts. */
+    fprintf(fh, "\\data\\\n");
+    for (i = 0; i < model->n; ++i) {
+        fprintf(fh, "ngram %d=%d\n", i+1, model->n_counts[i]);
+    }
+
+    /* Write N-grams */
+    for (i = 0; i < model->n; ++i) {
+        fprintf(fh, "\n\\%d-grams:\n", i + 1);
+        for (itor = ngram_model_mgrams(model, i); itor; itor = ngram_iter_next(itor)) {
+            int32 const *wids;
+            int32 score, bowt;
+            int j;
+
+            wids = ngram_iter_get(itor, &score, &bowt);
+            fprintf(fh, "%.4f ", logmath_log_to_log10(model->lmath, score));
+            for (j = 0; j <= i; ++j) {
+                assert(wids[j] < model->n_counts[0]);
+                fprintf(fh, "%s ", model->word_str[wids[j]]);
+            }
+            if (i < model->n-1)
+                fprintf(fh, "%.4f", logmath_log_to_log10(model->lmath, bowt));
+            fprintf(fh, "\n");
+        }
+    }
+    fprintf(fh, "\n\\end\\\n");
+    return fclose(fh);
+}
+
+static int
+ngram_model_arpa_apply_weights(ngram_model_t *base, float32 lw,
+                              float32 wip, float32 uw)
+{
+    ngram_model_arpa_t *model = (ngram_model_arpa_t *)base;
+    lm3g_apply_weights(base, &model->lm3g, lw, wip, uw);
+    return 0;
+}
+
+/* Lousy "templating" for things that are largely the same in DMP and
+ * ARPA models, except for the bigram and trigram types and some
+ * names. */
+#define NGRAM_MODEL_TYPE ngram_model_arpa_t
+#include "lm3g_templates.c"
+
+static void
+ngram_model_arpa_free(ngram_model_t *base)
+{
+    ngram_model_arpa_t *model = (ngram_model_arpa_t *)base;
+    ckd_free(model->lm3g.unigrams);
+    ckd_free(model->lm3g.bigrams);
+    ckd_free(model->lm3g.trigrams);
+    ckd_free(model->lm3g.prob2);
+    ckd_free(model->lm3g.bo_wt2);
+    ckd_free(model->lm3g.prob3);
+    lm3g_tginfo_free(base, &model->lm3g);
+    ckd_free(model->lm3g.tseg_base);
+}
+
+static ngram_funcs_t ngram_model_arpa_funcs = {
+    ngram_model_arpa_free,          /* free */
+    ngram_model_arpa_apply_weights, /* apply_weights */
+    lm3g_template_score,            /* score */
+    lm3g_template_raw_score,        /* raw_score */
+    lm3g_template_add_ug,           /* add_ug */
+    lm3g_template_flush,            /* flush */
+    lm3g_template_iter,             /* iter */
+    lm3g_template_mgrams,           /* mgrams */
+    lm3g_template_successors,       /* successors */
+    lm3g_template_iter_get,         /* iter_get */
+    lm3g_template_iter_next,        /* iter_next */
+    lm3g_template_iter_free         /* iter_free */
+};
diff --git a/src/libsphinxbase/lm/ngram_model_arpa.h b/src/libsphinxbase/lm/ngram_model_arpa.h
new file mode 100644 (file)
index 0000000..2fd9e42
--- /dev/null
@@ -0,0 +1,86 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file ngram_model_arpa.h ARPABO text format for N-Gram models
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#ifndef __NGRAM_MODEL_ARPA_H__
+#define __NGRAM_MODEL_ARPA_H__
+
+#include "ngram_model_internal.h"
+#include "lm3g_model.h"
+
+/**
+ * Bigram structure.
+ */
+struct bigram_s {
+    uint32 wid;        /**< Index of unigram entry for this.  (NOT dictionary id.) */
+    uint16 prob2;      /**< Index into array of actual bigram probs */
+    uint16 bo_wt2;     /**< Index into array of actual bigram backoff wts */
+    uint16 trigrams;   /**< Index of 1st entry in lm_t.trigrams[],
+                            RELATIVE TO its segment base (see above) */
+};
+
+/**
+ * Trigram structure.
+ *
+ * As with bigrams, trigram prob info kept in a separate table for conserving
+ * memory space.
+ */
+struct trigram_s {
+    uint32 wid;          /**< Index of unigram entry for this.  (NOT dictionary id.) */
+    uint16 prob3; /**< Index into array of actual trigram probs */
+};
+
+
+/**
+ * Subclass of ngram_model for ARPA file reading.
+ */
+typedef struct ngram_model_arpa_s {
+    ngram_model_t base;  /**< Base ngram_model_t structure */
+    lm3g_model_t lm3g;  /**< Shared lm3g structure */
+
+    /* Arrays of unique bigram probs and bo-wts, and trigram probs
+     * (these are temporary, actually) */
+    sorted_list_t sorted_prob2;
+    sorted_list_t sorted_bo_wt2;
+    sorted_list_t sorted_prob3;
+} ngram_model_arpa_t;
+
+#endif /* __NGRAM_MODEL_ARPA_H__ */
diff --git a/src/libsphinxbase/lm/ngram_model_dmp.c b/src/libsphinxbase/lm/ngram_model_dmp.c
new file mode 100644 (file)
index 0000000..e104dc1
--- /dev/null
@@ -0,0 +1,972 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file ngram_model_dmp.c DMP format language models
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/pio.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/byteorder.h"
+#include "sphinxbase/listelem_alloc.h"
+
+#include "ngram_model_dmp.h"
+
+static const char darpa_hdr[] = "Darpa Trigram LM";
+static ngram_funcs_t ngram_model_dmp_funcs;
+
+#define TSEG_BASE(m,b)         ((m)->lm3g.tseg_base[(b)>>LOG_BG_SEG_SZ])
+#define FIRST_BG(m,u)          ((m)->lm3g.unigrams[u].bigrams)
+#define FIRST_TG(m,b)          (TSEG_BASE((m),(b))+((m)->lm3g.bigrams[b].trigrams))
+
+static unigram_t *
+new_unigram_table(int32 n_ug)
+{
+    unigram_t *table;
+    int32 i;
+
+    table = ckd_calloc(n_ug, sizeof(unigram_t));
+    for (i = 0; i < n_ug; i++) {
+        table[i].prob1.f = -99.0;
+        table[i].bo_wt1.f = -99.0;
+    }
+    return table;
+}
+
+ngram_model_t *
+ngram_model_dmp_read(cmd_ln_t *config,
+                     const char *file_name,
+                     logmath_t *lmath)
+{
+    ngram_model_t *base;
+    ngram_model_dmp_t *model;
+    FILE *fp;
+    int do_mmap, do_swap;
+    int32 is_pipe;
+    int32 i, j, k, vn, n, ts;
+    int32 n_unigram;
+    int32 n_bigram;
+    int32 n_trigram;
+    char str[1024];
+    unigram_t *ugptr;
+    bigram_t *bgptr;
+    trigram_t *tgptr;
+    char *tmp_word_str;
+    char *map_base = NULL;
+    size_t offset = 0, filesize;
+
+    base = NULL;
+    do_mmap = FALSE;
+    if (config)
+        do_mmap = cmd_ln_boolean_r(config, "-mmap");
+
+    if ((fp = fopen_comp(file_name, "rb", &is_pipe)) == NULL) {
+        E_ERROR("Dump file %s not found\n", file_name);
+        goto error_out;
+    }
+
+    if (is_pipe && do_mmap) {
+        E_WARN("Dump file is compressed, will not use memory-mapped I/O\n");
+        do_mmap = 0;
+    }
+
+    do_swap = FALSE;
+    if (fread(&k, sizeof(k), 1, fp) != 1)
+        goto error_out;
+    if (k != strlen(darpa_hdr)+1) {
+        SWAP_INT32(&k);
+        if (k != strlen(darpa_hdr)+1) {
+            E_ERROR("Wrong magic header size number %x: %s is not a dump file\n", k, file_name);
+            goto error_out;
+        }
+        do_swap = 1;
+    }
+    if (fread(str, 1, k, fp) != (size_t) k) {
+        E_ERROR("Cannot read header\n");
+        goto error_out;
+    }
+    if (strncmp(str, darpa_hdr, k) != 0) {
+        E_ERROR("Wrong header %s: %s is not a dump file\n", darpa_hdr);
+        goto error_out;
+    }
+
+    if (do_mmap) {
+        if (do_swap) {
+            E_INFO
+                ("Byteswapping required, will not use memory-mapped I/O for LM file\n");
+            do_mmap = 0;
+        }
+        else {
+            E_INFO("Will use memory-mapped I/O for LM file\n");
+#ifdef __ADSPBLACKFIN__ /* This is true for both VisualDSP++ and uClinux. */
+            E_FATAL("memory mapping is not supported at the moment.");
+#else
+#endif
+        }
+    }
+
+    if (fread(&k, sizeof(k), 1, fp) != 1)
+        goto error_out;
+    if (do_swap) SWAP_INT32(&k);
+    if (fread(str, 1, k, fp) != (size_t) k) {
+        E_ERROR("Cannot read LM filename in header\n");
+        goto error_out;
+    }
+
+    /* read version#, if present (must be <= 0) */
+    if (fread(&vn, sizeof(vn), 1, fp) != 1)
+        goto error_out;
+    if (do_swap) SWAP_INT32(&vn);
+    if (vn <= 0) {
+        /* read and don't compare timestamps (we don't care) */
+        if (fread(&ts, sizeof(ts), 1, fp) != 1)
+            goto error_out;
+        if (do_swap) SWAP_INT32(&ts);
+
+        /* read and skip format description */
+        for (;;) {
+            if (fread(&k, sizeof(k), 1, fp) != 1)
+                goto error_out;
+            if (do_swap) SWAP_INT32(&k);
+            if (k == 0)
+                break;
+            if (fread(str, 1, k, fp) != (size_t) k) {
+                E_ERROR("Failed to read word\n");
+                goto error_out;
+            }
+        }
+        /* read model->ucount */
+        if (fread(&n_unigram, sizeof(n_unigram), 1, fp) != 1)
+            goto error_out;
+        if (do_swap) SWAP_INT32(&n_unigram);
+    }
+    else {
+        n_unigram = vn;
+    }
+
+    /* read model->bcount, tcount */
+    if (fread(&n_bigram, sizeof(n_bigram), 1, fp) != 1)
+        goto error_out;
+    if (do_swap) SWAP_INT32(&n_bigram);
+    if (fread(&n_trigram, sizeof(n_trigram), 1, fp) != 1)
+        goto error_out;
+    if (do_swap) SWAP_INT32(&n_trigram);
+    E_INFO("ngrams 1=%d, 2=%d, 3=%d\n", n_unigram, n_bigram, n_trigram);
+
+    /* Allocate space for LM, including initial OOVs and placeholders; initialize it */
+    model = ckd_calloc(1, sizeof(*model));
+    base = &model->base;
+    if (n_trigram > 0)
+        n = 3;
+    else if (n_bigram > 0)
+        n = 2;
+    else
+        n = 1;
+    ngram_model_init(base, &ngram_model_dmp_funcs, lmath, n, n_unigram);
+    base->n_counts[0] = n_unigram;
+    base->n_counts[1] = n_bigram;
+    base->n_counts[2] = n_trigram;
+
+    /* read unigrams (always in memory, as they contain dictionary
+     * mappings that can't be precomputed, and also could have OOVs added) */
+    model->lm3g.unigrams = new_unigram_table(n_unigram + 1);
+    ugptr = model->lm3g.unigrams;
+    for (i = 0; i <= n_unigram; ++i) {
+        /* Skip over the mapping ID, we don't care about it. */
+        if (fread(ugptr, sizeof(int32), 1, fp) != 1) {
+            E_ERROR("Failed to read maping id %d\n", i);
+            goto error_out;
+        }
+        /* Read the actual unigram structure. */
+        if (fread(ugptr, sizeof(unigram_t), 1, fp) != 1)  {
+            E_ERROR("Failed to read unigrams data\n");
+            ngram_model_free(base);
+            fclose_comp(fp, is_pipe);
+            return NULL;
+        }
+        /* Byte swap if necessary. */
+        if (do_swap) {
+            SWAP_INT32(&ugptr->prob1.l);
+            SWAP_INT32(&ugptr->bo_wt1.l);
+            SWAP_INT32(&ugptr->bigrams);
+        }
+        /* Convert values to log. */
+        ugptr->prob1.l = logmath_log10_to_log(lmath, ugptr->prob1.f);
+        ugptr->bo_wt1.l = logmath_log10_to_log(lmath, ugptr->bo_wt1.f);
+        E_DEBUG(2, ("ug %d: prob %d bo %d bigrams %d\n",
+                    i, ugptr->prob1.l, ugptr->bo_wt1.l, ugptr->bigrams));
+        ++ugptr;
+    }
+    E_INFO("%8d = LM.unigrams(+trailer) read\n", n_unigram);
+
+    /* Now mmap() the file and read in the rest of the (read-only) stuff. */
+    if (do_mmap) {
+        offset = ftell(fp);
+        fseek(fp, 0, SEEK_END);
+        filesize = ftell(fp);
+        fseek(fp, offset, SEEK_SET);
+
+        /* Check for improper word alignment. */
+        if (offset & 0x3) {
+            E_WARN("-mmap specified, but trigram index is not word-aligned.  Will not memory-map.\n");
+            do_mmap = FALSE;
+        }
+        else {
+            model->dump_mmap = mmio_file_read(file_name);
+            if (model->dump_mmap == NULL) {
+                do_mmap = FALSE;
+            }
+            else {
+                map_base = mmio_file_ptr(model->dump_mmap);
+            }
+        }
+    }
+    
+    if (n_bigram > 0) {
+        /* read bigrams */
+       if (do_mmap) {
+           model->lm3g.bigrams = (bigram_t *) (map_base + offset);
+           offset += (n_bigram + 1) * sizeof(bigram_t);
+       }
+       else {
+           model->lm3g.bigrams =
+               ckd_calloc(n_bigram + 1, sizeof(bigram_t));
+           if (fread(model->lm3g.bigrams, sizeof(bigram_t), n_bigram + 1, fp)
+               != (size_t) n_bigram + 1) {
+               E_ERROR("Failed to read bigrams data\n");
+               goto error_out;
+           }
+           if (do_swap) {
+               for (i = 0, bgptr = model->lm3g.bigrams; i <= n_bigram;
+                    i++, bgptr++) {
+                   SWAP_INT16(&bgptr->wid);
+                   SWAP_INT16(&bgptr->prob2);
+                   SWAP_INT16(&bgptr->bo_wt2);
+                   SWAP_INT16(&bgptr->trigrams);
+               }
+           }
+       }
+       E_INFO("%8d = LM.bigrams(+trailer) read\n", n_bigram);
+    }
+
+    /* read trigrams */
+    if (n_trigram > 0) {
+        if (do_mmap) {
+            model->lm3g.trigrams = (trigram_t *) (map_base + offset);
+            offset += n_trigram * sizeof(trigram_t);
+        }
+        else {
+            model->lm3g.trigrams =
+                ckd_calloc(n_trigram, sizeof(trigram_t));
+            if (fread
+                (model->lm3g.trigrams, sizeof(trigram_t), n_trigram, fp)
+                != (size_t) n_trigram) {
+                E_ERROR("Failed to read trigrams data\n");
+                goto error_out;
+            }
+            if (do_swap) {
+                for (i = 0, tgptr = model->lm3g.trigrams; i < n_trigram;
+                     i++, tgptr++) {
+                    SWAP_INT16(&tgptr->wid);
+                    SWAP_INT16(&tgptr->prob3);
+                }
+            }
+        }
+        E_INFO("%8d = LM.trigrams read\n", n_trigram);
+        /* Initialize tginfo */
+        model->lm3g.tginfo = ckd_calloc(n_unigram, sizeof(tginfo_t *));
+        model->lm3g.le = listelem_alloc_init(sizeof(tginfo_t));
+    }
+
+    if (n_bigram > 0) {
+        /* read n_prob2 and prob2 array (in memory) */
+       if (do_mmap)
+           fseek(fp, offset, SEEK_SET);
+        if (fread(&k, sizeof(k), 1, fp) != 1)
+           goto error_out;
+        if (do_swap) SWAP_INT32(&k);
+       model->lm3g.n_prob2 = k;
+        model->lm3g.prob2 = ckd_calloc(k, sizeof(*model->lm3g.prob2));
+       if (fread(model->lm3g.prob2, sizeof(*model->lm3g.prob2), k, fp) != (size_t) k) {
+           E_ERROR("fread(prob2) failed\n");
+           goto error_out;
+       }
+       for (i = 0; i < k; i++) {
+           if (do_swap)
+               SWAP_INT32(&model->lm3g.prob2[i].l);
+           /* Convert values to log. */
+           model->lm3g.prob2[i].l = logmath_log10_to_log(lmath, model->lm3g.prob2[i].f);
+       }
+       E_INFO("%8d = LM.prob2 entries read\n", k);
+    }
+
+    /* read n_bo_wt2 and bo_wt2 array (in memory) */
+    if (base->n > 2) {
+        if (fread(&k, sizeof(k), 1, fp) != 1)
+            goto error_out;
+        if (do_swap) SWAP_INT32(&k);
+        model->lm3g.n_bo_wt2 = k;
+        model->lm3g.bo_wt2 = ckd_calloc(k, sizeof(*model->lm3g.bo_wt2));
+        if (fread(model->lm3g.bo_wt2, sizeof(*model->lm3g.bo_wt2), k, fp) != (size_t) k) {
+            E_ERROR("Failed to read backoff weights\n");
+            goto error_out;
+        }
+        for (i = 0; i < k; i++) {
+            if (do_swap)
+                SWAP_INT32(&model->lm3g.bo_wt2[i].l);
+            /* Convert values to log. */
+            model->lm3g.bo_wt2[i].l = logmath_log10_to_log(lmath, model->lm3g.bo_wt2[i].f);
+        }
+        E_INFO("%8d = LM.bo_wt2 entries read\n", k);
+    }
+
+    /* read n_prob3 and prob3 array (in memory) */
+    if (base->n > 2) {
+        if (fread(&k, sizeof(k), 1, fp) != 1)
+               goto error_out;
+       if (do_swap) SWAP_INT32(&k);
+       model->lm3g.n_prob3 = k;
+       model->lm3g.prob3 = ckd_calloc(k, sizeof(*model->lm3g.prob3));
+       if (fread(model->lm3g.prob3, sizeof(*model->lm3g.prob3), k, fp) != (size_t) k) {
+           E_ERROR("Failed to read trigram probability\n");
+           goto error_out;
+       }
+       for (i = 0; i < k; i++) {
+           if (do_swap)
+                SWAP_INT32(&model->lm3g.prob3[i].l);
+           /* Convert values to log. */
+           model->lm3g.prob3[i].l = logmath_log10_to_log(lmath, model->lm3g.prob3[i].f);
+       }
+        E_INFO("%8d = LM.prob3 entries read\n", k);
+    }
+
+    /* read tseg_base size and tseg_base */
+    if (do_mmap)
+        offset = ftell(fp);
+    if (n_trigram > 0) {
+        if (do_mmap) {
+            memcpy(&k, map_base + offset, sizeof(k));
+            offset += sizeof(int32);
+            model->lm3g.tseg_base = (int32 *) (map_base + offset);
+            offset += k * sizeof(int32);
+        }
+        else {
+            k = (n_bigram + 1) / BG_SEG_SZ + 1;
+            if (fread(&k, sizeof(k), 1, fp) != 1)
+                goto error_out;
+            if (do_swap) SWAP_INT32(&k);
+            model->lm3g.tseg_base = ckd_calloc(k, sizeof(int32));
+            if (fread(model->lm3g.tseg_base, sizeof(int32), k, fp) !=
+                (size_t) k) {
+                E_ERROR("Failed to read trigram index\n");
+                goto error_out;
+            }
+            if (do_swap)
+                for (i = 0; i < k; i++)
+                    SWAP_INT32(&model->lm3g.tseg_base[i]);
+        }
+        E_INFO("%8d = LM.tseg_base entries read\n", k);
+    }
+
+    /* read ascii word strings */
+    if (do_mmap) {
+        memcpy(&k, map_base + offset, sizeof(k));
+        offset += sizeof(int32);
+        tmp_word_str = (char *) (map_base + offset);
+        offset += k;
+    }
+    else {
+        base->writable = TRUE;
+        if (fread(&k, sizeof(k), 1, fp) != 1)
+            goto error_out;
+        if (do_swap) SWAP_INT32(&k);
+        tmp_word_str = ckd_calloc(k, 1);
+        if (fread(tmp_word_str, 1, k, fp) != (size_t) k) {
+            E_ERROR("Failed to read words\n");
+            goto error_out;
+        }
+    }
+
+    /* First make sure string just read contains n_counts[0] words (PARANOIA!!) */
+    for (i = 0, j = 0; i < k; i++)
+        if (tmp_word_str[i] == '\0')
+            j++;
+    if (j != n_unigram) {
+        E_ERROR("Error reading word strings (%d doesn't match n_unigrams %d)\n",
+                j, n_unigram);
+        goto error_out;
+    }
+
+    /* Break up string just read into words */
+    if (do_mmap) {
+        j = 0;
+        for (i = 0; i < n_unigram; i++) {
+            base->word_str[i] = tmp_word_str + j;
+            if (hash_table_enter(base->wid, base->word_str[i],
+                                 (void *)(long)i) != (void *)(long)i) {
+                E_WARN("Duplicate word in dictionary: %s\n", base->word_str[i]);
+            }
+            j += strlen(base->word_str[i]) + 1;
+        }
+    }
+    else {
+        j = 0;
+        for (i = 0; i < n_unigram; i++) {
+            base->word_str[i] = ckd_salloc(tmp_word_str + j);
+            if (hash_table_enter(base->wid, base->word_str[i],
+                                 (void *)(long)i) != (void *)(long)i) {
+                E_WARN("Duplicate word in dictionary: %s\n", base->word_str[i]);
+            }
+            j += strlen(base->word_str[i]) + 1;
+        }
+        free(tmp_word_str);
+    }
+    E_INFO("%8d = ascii word strings read\n", i);
+
+    fclose_comp(fp, is_pipe);
+    return base;
+
+error_out:
+    if (fp)
+        fclose_comp(fp, is_pipe);
+    ngram_model_free(base);
+    return NULL;
+}
+
+ngram_model_dmp_t *
+ngram_model_dmp_build(ngram_model_t *base)
+{
+    ngram_model_dmp_t *model;
+    ngram_model_t *newbase;
+    ngram_iter_t *itor;
+    sorted_list_t sorted_prob2;
+    sorted_list_t sorted_bo_wt2;
+    sorted_list_t sorted_prob3;
+    bigram_t *bgptr;
+    trigram_t *tgptr;
+    int i, bgcount, tgcount, seg;
+
+    if (base->funcs == &ngram_model_dmp_funcs) {
+        E_INFO("Using existing DMP model.\n");
+        return (ngram_model_dmp_t *)ngram_model_retain(base);
+    }
+
+    /* Initialize new base model structure with params from base. */
+    E_INFO("Building DMP model...\n");
+    model = ckd_calloc(1, sizeof(*model));
+    newbase = &model->base;
+    ngram_model_init(newbase, &ngram_model_dmp_funcs,
+                     logmath_retain(base->lmath),
+                     base->n, base->n_counts[0]);
+    /* Copy N-gram counts over. */
+    memcpy(newbase->n_counts, base->n_counts,
+           base->n * sizeof(*base->n_counts));
+    /* Make sure word strings are freed. */
+    newbase->writable = TRUE;
+    /* Initialize unigram table and string table. */
+    model->lm3g.unigrams = new_unigram_table(newbase->n_counts[0] + 1);
+    for (itor = ngram_model_mgrams(base, 0); itor;
+         itor = ngram_iter_next(itor)) {
+        int32 prob1, bo_wt1;
+        int32 const *wids;
+
+        /* Can't guarantee they will go in unigram order, so just to
+         * be correct, we do this... */
+        wids = ngram_iter_get(itor, &prob1, &bo_wt1);
+        model->lm3g.unigrams[wids[0]].prob1.l = prob1;
+        model->lm3g.unigrams[wids[0]].bo_wt1.l = bo_wt1;
+        newbase->word_str[wids[0]] = ckd_salloc(ngram_word(base, wids[0]));
+        if ((hash_table_enter_int32(newbase->wid,
+                                    newbase->word_str[wids[0]], wids[0]))
+            != wids[0]) {
+                E_WARN("Duplicate word in dictionary: %s\n", newbase->word_str[wids[0]]);
+        }
+    }
+    E_INFO("%8d = #unigrams created\n", newbase->n_counts[0]);
+               
+    if (newbase->n < 2) 
+        return model;
+                        
+    /* Construct quantized probability table for bigrams and
+     * (optionally) trigrams.  Hesitate to use the "sorted list" thing
+     * since it isn't so useful, but it's there already. */
+    init_sorted_list(&sorted_prob2);
+    if (newbase->n > 2) {
+        init_sorted_list(&sorted_bo_wt2);
+        init_sorted_list(&sorted_prob3);
+    }
+    /* Construct bigram and trigram arrays. */
+    bgptr = model->lm3g.bigrams = ckd_calloc(newbase->n_counts[1] + 1, sizeof(bigram_t));
+    if (newbase->n > 2) {
+        tgptr = model->lm3g.trigrams = ckd_calloc(newbase->n_counts[2], sizeof(trigram_t));
+        model->lm3g.tseg_base =
+            ckd_calloc((newbase->n_counts[1] + 1) / BG_SEG_SZ + 1, sizeof(int32));
+    }
+    else
+        tgptr = NULL;
+    /* Since bigrams and trigrams have to be contiguous with others
+     * with the same N-1-gram, we traverse them in depth-first order
+     * to build the bigram and trigram arrays. */
+    for (i = 0; i < newbase->n_counts[0]; ++i) {
+        ngram_iter_t *uitor;
+        bgcount = bgptr - model->lm3g.bigrams;
+        /* First bigram index (same as next if no bigrams...) */
+        model->lm3g.unigrams[i].bigrams = bgcount;
+        E_DEBUG(2, ("unigram %d: %s => bigram %d\n", i, newbase->word_str[i], bgcount));
+        /* All bigrams corresponding to unigram i */
+        uitor = ngram_ng_iter(base, i, NULL, 0);
+        for (itor = ngram_iter_successors(uitor);
+             itor; ++bgptr, itor = ngram_iter_next(itor)) {
+            int32 prob2, bo_wt2;
+            int32 const *wids;
+            ngram_iter_t *titor;
+
+            wids = ngram_iter_get(itor, &prob2, &bo_wt2);
+
+            assert (bgptr - model->lm3g.bigrams < newbase->n_counts[1]);
+
+            bgptr->wid = wids[1];
+            bgptr->prob2 = sorted_id(&sorted_prob2, &prob2);
+            if (newbase->n > 2) {
+                tgcount = (tgptr - model->lm3g.trigrams);
+               bgcount = (bgptr - model->lm3g.bigrams);
+
+                /* Backoff weight (only if there are trigrams...) */
+                bgptr->bo_wt2 = sorted_id(&sorted_bo_wt2, &bo_wt2);
+
+                /* Find bigram segment for this bigram (this isn't
+                 * used unless there are trigrams) */
+                seg = bgcount >> LOG_BG_SEG_SZ;
+                /* If we just crossed a bigram segment boundary, then
+                 * point tseg_base for the new segment to the current
+                 * trigram pointer. */
+                if (seg != (bgcount - 1) >> LOG_BG_SEG_SZ)
+                    model->lm3g.tseg_base[seg] = tgcount;
+                /* Now calculate the trigram offset. */
+                bgptr->trigrams = tgcount - model->lm3g.tseg_base[seg];
+                E_DEBUG(2, ("bigram %d %s %s => trigram %d:%d\n",
+                            bgcount,
+                            newbase->word_str[wids[0]],
+                            newbase->word_str[wids[1]],
+                            seg, bgptr->trigrams));
+
+                /* And fill in successors' trigram info. */
+                for (titor = ngram_iter_successors(itor);
+                     titor; ++tgptr, titor = ngram_iter_next(titor)) {
+                    int32 prob3, dummy;
+
+                    assert(tgptr - model->lm3g.trigrams < newbase->n_counts[2]);
+                    wids = ngram_iter_get(titor, &prob3, &dummy);
+                    tgptr->wid = wids[2];
+                    tgptr->prob3 = sorted_id(&sorted_prob3, &prob3);
+                    E_DEBUG(2, ("trigram %d %s %s %s => prob %d\n",
+                                tgcount,
+                                newbase->word_str[wids[0]],
+                                newbase->word_str[wids[1]],
+                                newbase->word_str[wids[2]],
+                                tgptr->prob3));
+                }
+            }
+        }
+        ngram_iter_free(uitor);
+    }
+    /* Add sentinal unigram and bigram records. */
+    bgcount = bgptr - model->lm3g.bigrams;
+    tgcount = tgptr - model->lm3g.trigrams;
+    seg = bgcount >> LOG_BG_SEG_SZ;
+    if (seg != (bgcount - 1) >> LOG_BG_SEG_SZ)
+        model->lm3g.tseg_base[seg] = tgcount;
+    model->lm3g.unigrams[i].bigrams = bgcount;
+    if (newbase->n > 2)
+        bgptr->trigrams = tgcount - model->lm3g.tseg_base[seg];
+
+    /* Now create probability tables. */
+    model->lm3g.n_prob2 = sorted_prob2.free;
+    model->lm3g.prob2 = vals_in_sorted_list(&sorted_prob2);
+    E_INFO("%8d = #bigrams created\n", newbase->n_counts[1]);
+    E_INFO("%8d = #prob2 entries\n", model->lm3g.n_prob2);
+    free_sorted_list(&sorted_prob2);
+    if (newbase->n > 2) {
+        /* Create trigram bo-wts array. */
+        model->lm3g.n_bo_wt2 = sorted_bo_wt2.free;
+        model->lm3g.bo_wt2 = vals_in_sorted_list(&sorted_bo_wt2);
+        free_sorted_list(&sorted_bo_wt2);
+        E_INFO("%8d = #bo_wt2 entries\n", model->lm3g.n_bo_wt2);
+        /* Create trigram probability table. */
+        model->lm3g.n_prob3 = sorted_prob3.free;
+        model->lm3g.prob3 = vals_in_sorted_list(&sorted_prob3);
+        E_INFO("%8d = #trigrams created\n", newbase->n_counts[2]);
+        E_INFO("%8d = #prob3 entries\n", model->lm3g.n_prob3);
+        free_sorted_list(&sorted_prob3);
+        /* Initialize tginfo */
+        model->lm3g.tginfo = ckd_calloc(newbase->n_counts[0], sizeof(tginfo_t *));
+        model->lm3g.le = listelem_alloc_init(sizeof(tginfo_t));
+    }
+
+    return model;
+}
+
+static void
+fwrite_int32(FILE *fh, int32 val)
+{
+    fwrite(&val, 4, 1, fh);
+}
+
+static void
+fwrite_ug(FILE *fh, unigram_t *ug, logmath_t *lmath)
+{
+    int32 bogus = -1;
+    float32 log10val;
+
+    /* Bogus dictionary mapping field. */
+    fwrite(&bogus, 4, 1, fh);
+    /* Convert values to log10. */
+    log10val = logmath_log_to_log10(lmath, ug->prob1.l);
+    fwrite(&log10val, 4, 1, fh);
+    log10val = logmath_log_to_log10(lmath, ug->bo_wt1.l);
+    fwrite(&log10val, 4, 1, fh);
+    fwrite_int32(fh, ug->bigrams);
+}
+
+static void
+fwrite_bg(FILE *fh, bigram_t *bg)
+{
+    fwrite(bg, sizeof(*bg), 1, fh);
+}
+
+static void
+fwrite_tg(FILE *fh, trigram_t *tg)
+{
+    fwrite(tg, sizeof(*tg), 1, fh);
+}
+
+/** Please look at the definition of 
+ */
+static char const *fmtdesc[] = {
+    "BEGIN FILE FORMAT DESCRIPTION",
+    "Header string length (int32) and string (including trailing 0)",
+    "Original LM filename string-length (int32) and filename (including trailing 0)",
+    "(int32) version number (present iff value <= 0)",
+    "(int32) original LM file modification timestamp (iff version# present)",
+    "(int32) string-length and string (including trailing 0) (iff version# present)",
+    "... previous entry continued any number of times (iff version# present)",
+    "(int32) 0 (terminating sequence of strings) (iff version# present)",
+    "(int32) log_bg_seg_sz (present iff different from default value of LOG2_BG_SEG_SZ)",
+    "(int32) lm_t.ucount (must be > 0)",
+    "(int32) lm_t.bcount",
+    "(int32) lm_t.tcount",
+    "lm_t.ucount+1 unigrams (including sentinel)",
+    "lm_t.bcount+1 bigrams (including sentinel 64 bits (bg_t) each if version=-1/-2, 128 bits (bg32_t) each if version=-3",
+    "lm_t.tcount trigrams (present iff lm_t.tcount > 0 32 bits (tg_t) each if version=-1/-2, 64 bits (tg32_t) each if version=-3)",
+    "(int32) lm_t.n_prob2",
+    "(int32) lm_t.prob2[]",
+    "(int32) lm_t.n_bo_wt2 (present iff lm_t.tcount > 0)",
+    "(int32) lm_t.bo_wt2[] (present iff lm_t.tcount > 0)",
+    "(int32) lm_t.n_prob3 (present iff lm_t.tcount > 0)",
+    "(int32) lm_t.prob3[] (present iff lm_t.tcount > 0)",
+    "(int32) (lm_t.bcount+1)/BG_SEG_SZ+1 (present iff lm_t.tcount > 0)",
+    "(int32) lm_t.tseg_base[] (present iff lm_t.tcount > 0)",
+    "(int32) Sum(all word string-lengths, including trailing 0 for each)",
+    "All word strings (including trailing 0 for each)",
+    "END FILE FORMAT DESCRIPTION",
+    NULL,
+};
+
+static void
+ngram_model_dmp_write_header(FILE * fh)
+{
+    int32 k;
+    k = strlen(darpa_hdr) + 1;
+    fwrite_int32(fh, k);
+    fwrite(darpa_hdr, 1, k, fh);
+}
+
+static void
+ngram_model_dmp_write_lm_filename(FILE * fh, const char *lmfile)
+{
+    int32 k;
+
+    k = strlen(lmfile) + 1;
+    fwrite_int32(fh, k);
+    fwrite(lmfile, 1, k, fh);
+}
+
+#define LMDMP_VERSION_TG_16BIT -1 /**< VERSION 1 is the simplest DMP file which
+                                    is trigram or lower which used 16 bits in
+                                    bigram and trigram.*/
+
+static void
+ngram_model_dmp_write_version(FILE * fh, int32 mtime)
+{
+    fwrite_int32(fh, LMDMP_VERSION_TG_16BIT);   /* version # */
+    fwrite_int32(fh, mtime);
+}
+
+static void
+ngram_model_dmp_write_ngram_counts(FILE * fh, ngram_model_t *model)
+{
+    fwrite_int32(fh, model->n_counts[0]);
+    fwrite_int32(fh, model->n_counts[1]);
+    fwrite_int32(fh, model->n_counts[2]);
+}
+
+static void
+ngram_model_dmp_write_fmtdesc(FILE * fh)
+{
+    int32 i, k;
+    long pos;
+
+    /* Write file format description into header */
+    for (i = 0; fmtdesc[i] != NULL; i++) {
+        k = strlen(fmtdesc[i]) + 1;
+        fwrite_int32(fh, k);
+        fwrite(fmtdesc[i], 1, k, fh);
+    }
+    /* Pad it out in order to achieve 32-bit alignment */
+    pos = ftell(fh);
+    k = pos & 3;
+    if (k) {
+        fwrite_int32(fh, 4-k);
+        fwrite("!!!!", 1, 4-k, fh);
+    }
+    fwrite_int32(fh, 0);
+}
+
+static void
+ngram_model_dmp_write_unigram(FILE *fh, ngram_model_t *model)
+{
+    ngram_model_dmp_t *lm = (ngram_model_dmp_t *)model;
+    int32 i;
+
+    for (i = 0; i <= model->n_counts[0]; i++) {
+        fwrite_ug(fh, &(lm->lm3g.unigrams[i]), model->lmath);
+    }
+}
+
+
+static void
+ngram_model_dmp_write_bigram(FILE *fh, ngram_model_t *model)
+{
+    ngram_model_dmp_t *lm = (ngram_model_dmp_t *)model;
+    int32 i;
+
+    for (i = 0; i <= model->n_counts[1]; i++) {
+        fwrite_bg(fh, &(lm->lm3g.bigrams[i]));
+    }
+
+}
+
+static void
+ngram_model_dmp_write_trigram(FILE *fh, ngram_model_t *model)
+{
+    ngram_model_dmp_t *lm = (ngram_model_dmp_t *)model;
+    int32 i;
+
+    for (i = 0; i < model->n_counts[2]; i++) {
+        fwrite_tg(fh, &(lm->lm3g.trigrams[i]));
+    }
+}
+
+static void
+ngram_model_dmp_write_bgprob(FILE *fh, ngram_model_t *model)
+{
+    ngram_model_dmp_t *lm = (ngram_model_dmp_t *)model;
+    int32 i;
+
+    fwrite_int32(fh, lm->lm3g.n_prob2);
+    for (i = 0; i < lm->lm3g.n_prob2; i++) {
+        float32 log10val = logmath_log_to_log10(model->lmath, lm->lm3g.prob2[i].l);
+        fwrite(&log10val, 4, 1, fh);
+    }
+}
+
+static void
+ngram_model_dmp_write_tgbowt(FILE *fh, ngram_model_t *model)
+{
+    ngram_model_dmp_t *lm = (ngram_model_dmp_t *)model;
+    int32 i;
+
+    fwrite_int32(fh, lm->lm3g.n_bo_wt2);
+    for (i = 0; i < lm->lm3g.n_bo_wt2; i++) {
+        float32 log10val = logmath_log_to_log10(model->lmath, lm->lm3g.bo_wt2[i].l);
+        fwrite(&log10val, 4, 1, fh);
+    }
+}
+
+static void
+ngram_model_dmp_write_tgprob(FILE *fh, ngram_model_t *model)
+{
+    ngram_model_dmp_t *lm = (ngram_model_dmp_t *)model;
+    int32 i;
+
+    fwrite_int32(fh, lm->lm3g.n_prob3);
+    for (i = 0; i < lm->lm3g.n_prob3; i++) {
+        float32 log10val = logmath_log_to_log10(model->lmath, lm->lm3g.prob3[i].l);
+        fwrite(&log10val, 4, 1, fh);
+    }
+}
+
+static void
+ngram_model_dmp_write_tg_segbase(FILE *fh, ngram_model_t *model)
+{
+    ngram_model_dmp_t *lm = (ngram_model_dmp_t *)model;
+    int32 i, k;
+
+    k = (model->n_counts[1] + 1) / BG_SEG_SZ + 1;
+    fwrite_int32(fh, k);
+    for (i = 0; i < k; i++)
+        fwrite_int32(fh, lm->lm3g.tseg_base[i]);
+}
+
+static void
+ngram_model_dmp_write_wordstr(FILE *fh, ngram_model_t *model)
+{
+    int32 i, k;
+
+    k = 0;
+    for (i = 0; i < model->n_counts[0]; i++)
+        k += strlen(model->word_str[i]) + 1;
+    fwrite_int32(fh, k);
+    for (i = 0; i < model->n_counts[0]; i++)
+        fwrite(model->word_str[i], 1,
+               strlen(model->word_str[i]) + 1, fh);
+}
+
+int
+ngram_model_dmp_write(ngram_model_t *base,
+                      const char *file_name)
+{
+    ngram_model_dmp_t *model;
+    ngram_model_t *newbase;
+    FILE *fh;
+
+    /* First, construct a DMP model from the base model. */
+    model = ngram_model_dmp_build(base);
+    newbase = &model->base;
+
+    /* Now write it, confident in the knowledge that it's the right
+     * kind of language model internally. */
+    if ((fh = fopen(file_name, "wb")) == NULL) {
+        E_ERROR("Cannot create file %s\n", file_name);
+        return -1;
+    }
+    ngram_model_dmp_write_header(fh);
+    ngram_model_dmp_write_lm_filename(fh, file_name);
+    ngram_model_dmp_write_version(fh, 0);
+    ngram_model_dmp_write_fmtdesc(fh);
+    ngram_model_dmp_write_ngram_counts(fh, newbase);
+    ngram_model_dmp_write_unigram(fh, newbase);
+    if (newbase->n > 1) {
+        ngram_model_dmp_write_bigram(fh, newbase);
+       if (newbase->n > 2) {
+           ngram_model_dmp_write_trigram(fh, newbase);
+       }
+       ngram_model_dmp_write_bgprob(fh, newbase);
+       if (newbase->n > 2) {
+               ngram_model_dmp_write_tgbowt(fh, newbase);
+               ngram_model_dmp_write_tgprob(fh, newbase);
+               ngram_model_dmp_write_tg_segbase(fh, newbase);
+        }
+    }
+    ngram_model_dmp_write_wordstr(fh, newbase);
+    ngram_model_free(newbase);
+
+    return fclose(fh);
+}
+
+static int
+ngram_model_dmp_apply_weights(ngram_model_t *base, float32 lw,
+                              float32 wip, float32 uw)
+{
+    ngram_model_dmp_t *model = (ngram_model_dmp_t *)base;
+    lm3g_apply_weights(base, &model->lm3g, lw, wip, uw);
+    return 0;
+}
+
+/* Lousy "templating" for things that are largely the same in DMP and
+ * ARPA models, except for the bigram and trigram types and some
+ * names. */
+#define NGRAM_MODEL_TYPE ngram_model_dmp_t
+#include "lm3g_templates.c"
+
+static void
+ngram_model_dmp_free(ngram_model_t *base)
+{
+    ngram_model_dmp_t *model = (ngram_model_dmp_t *)base;
+
+    ckd_free(model->lm3g.unigrams);
+    ckd_free(model->lm3g.prob2);
+    if (model->dump_mmap) {
+        mmio_file_unmap(model->dump_mmap);
+    } 
+    else {
+        ckd_free(model->lm3g.bigrams);
+        if (base->n > 2) {
+            ckd_free(model->lm3g.trigrams);
+            ckd_free(model->lm3g.tseg_base);
+        }
+    }
+    if (base->n > 2) {
+        ckd_free(model->lm3g.bo_wt2);
+        ckd_free(model->lm3g.prob3);
+    }
+
+    lm3g_tginfo_free(base, &model->lm3g);
+}
+
+static ngram_funcs_t ngram_model_dmp_funcs = {
+    ngram_model_dmp_free,          /* free */
+    ngram_model_dmp_apply_weights, /* apply_weights */
+    lm3g_template_score,           /* score */
+    lm3g_template_raw_score,       /* raw_score */
+    lm3g_template_add_ug,          /* add_ug */
+    lm3g_template_flush,           /* flush */
+    lm3g_template_iter,             /* iter */
+    lm3g_template_mgrams,          /* mgrams */
+    lm3g_template_successors,      /* successors */
+    lm3g_template_iter_get,        /* iter_get */
+    lm3g_template_iter_next,       /* iter_next */
+    lm3g_template_iter_free        /* iter_free */
+};
diff --git a/src/libsphinxbase/lm/ngram_model_dmp.h b/src/libsphinxbase/lm/ngram_model_dmp.h
new file mode 100644 (file)
index 0000000..a3b141a
--- /dev/null
@@ -0,0 +1,92 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file ngram_model_dmp.h DMP format for N-Gram models
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#ifndef __NGRAM_MODEL_DMP_H__
+#define __NGRAM_MODEL_DMP_H__
+
+#include "sphinxbase/mmio.h"
+
+#include "ngram_model_internal.h"
+#include "lm3g_model.h"
+
+/**
+ * On-disk representation of bigrams.
+ */
+struct bigram_s {
+    uint16 wid;        /**< Index of unigram entry for this.  (NOT dictionary id.) */
+    uint16 prob2;      /**< Index into array of actual bigram probs */
+    uint16 bo_wt2;     /**< Index into array of actual bigram backoff wts */
+    uint16 trigrams;   /**< Index of 1st entry in lm_t.trigrams[],
+                          RELATIVE TO its segment base (see lm3g_model.h) */
+};
+
+/**
+ * On-disk representation of trigrams.
+ *
+ * As with bigrams, trigram prob info kept in a separate table for conserving
+ * memory space.
+ */
+struct trigram_s {
+    uint16 wid;          /**< Index of unigram entry for this.  (NOT dictionary id.) */
+    uint16 prob3; /**< Index into array of actual trigram probs */
+};
+
+/**
+ * Subclass of ngram_model for DMP file reading.
+ */
+typedef struct ngram_model_dmp_s {
+    ngram_model_t base;  /**< Base ngram_model_t structure */
+    lm3g_model_t lm3g;   /**< Common lm3g_model_t structure */
+    mmio_file_t *dump_mmap; /**< mmap() of dump file (or NULL if none) */
+} ngram_model_dmp_t;
+
+/**
+ * Construct a DMP format model from a generic base model.
+ *
+ * Note: If base is already a DMP format model, this just calls
+ * ngram_model_retain(), and any changes will also be made in the base
+ * model.
+ */
+ngram_model_dmp_t *ngram_model_dmp_build(ngram_model_t *base);
+
+
+#endif /*  __NGRAM_MODEL_DMP_H__ */
diff --git a/src/libsphinxbase/lm/ngram_model_dmp32.c b/src/libsphinxbase/lm/ngram_model_dmp32.c
new file mode 100644 (file)
index 0000000..d8a0723
--- /dev/null
@@ -0,0 +1,99 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file ngram_model_dmp32.c DMP32 format language models
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "sphinxbase/ckd_alloc.h"
+
+#include "ngram_model_internal.h"
+
+static ngram_funcs_t ngram_model_dmp32_funcs;
+
+ngram_model_t *
+ngram_model_dmp32_read(cmd_ln_t *config,
+                       const char *file_name,
+                       logmath_t *lmath)
+{
+    return NULL;
+}
+
+int
+ngram_model_dmp32_write(ngram_model_t *model,
+                        const char *file_name)
+{
+    return -1;
+}
+
+static int
+ngram_model_dmp32_apply_weights(ngram_model_t *model, float32 lw,
+                              float32 wip, float32 uw)
+{
+    return 0;
+}
+
+static int32
+ngram_model_dmp32_score(ngram_model_t *model, int32 wid,
+                        int32 *history, int32 n_hist,
+                        int32 *n_used)
+{
+    return model->log_zero;
+}
+
+static int32
+ngram_model_dmp32_raw_score(ngram_model_t *model, int32 wid,
+                            int32 *history, int32 n_hist,
+                            int32 *n_used)
+{
+    return model->log_zero;
+}
+
+static void
+ngram_model_dmp32_free(ngram_model_t *base)
+{
+    ckd_free(base);
+}
+
+static ngram_funcs_t ngram_model_dmp32_funcs = {
+    ngram_model_dmp32_free,          /* free */
+    ngram_model_dmp32_apply_weights, /* apply_weights */
+    ngram_model_dmp32_score,         /* score */
+    ngram_model_dmp32_raw_score,     /* raw_score */
+    NULL                             /* add_ug */
+};
diff --git a/src/libsphinxbase/lm/ngram_model_internal.h b/src/libsphinxbase/lm/ngram_model_internal.h
new file mode 100644 (file)
index 0000000..dcc7b5a
--- /dev/null
@@ -0,0 +1,282 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * \file ngram_model_internal.h Internal structures for N-Gram models
+ *
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#ifndef __NGRAM_MODEL_INTERNAL_H__
+#define __NGRAM_MODEL_INTERNAL_H__
+
+#include "sphinxbase/ngram_model.h"
+#include "sphinxbase/hash_table.h"
+
+/**
+ * Common implementation of ngram_model_t.
+ *
+ * The details of bigram, trigram, and higher-order N-gram storage, if any, can
+ * vary somewhat depending on the file format in use.
+ */
+struct ngram_model_s {
+    int refcount;       /**< Reference count */
+    int32 *n_counts;    /**< Counts for 1, 2, 3, ... grams */
+    int32 n_1g_alloc;   /**< Number of allocated word strings (for new word addition) */
+    int32 n_words;      /**< Number of actual word strings (NOT the same as the
+                             number of unigrams, due to class words). */
+    uint8 n;            /**< This is an n-gram model (1, 2, 3, ...). */
+    uint8 n_classes;    /**< Number of classes (maximum 128) */
+    uint8 writable;     /**< Are word strings writable? */
+    uint8 flags;        /**< Any other flags we might care about
+                             (FIXME: Merge this and writable) */
+    logmath_t *lmath;   /**< Log-math object */
+    float32 lw;         /**< Language model scaling factor */
+    int32 log_wip;      /**< Log of word insertion penalty */
+    int32 log_uw;       /**< Log of unigram weight */
+    int32 log_uniform;  /**< Log of uniform (0-gram) probability */
+    int32 log_uniform_weight; /**< Log of uniform weight (i.e. 1 - unigram weight) */
+    int32 log_zero;     /**< Zero probability, cached here for quick lookup */
+    char **word_str;    /**< Unigram names */
+    hash_table_t *wid;  /**< Mapping of unigram names to word IDs. */
+    int32 *tmp_wids;    /**< Temporary array of word IDs for ngram_model_get_ngram() */
+    struct ngram_class_s **classes; /**< Word class definitions. */
+    struct ngram_funcs_s *funcs;   /**< Implementation-specific methods. */
+};
+
+/**
+ * Implementation of ngram_class_t.
+ */
+struct ngram_class_s {
+    int32 tag_wid;  /**< Base word ID for this class tag */
+    int32 start_wid; /**< Starting base word ID for this class' words */
+    int32 n_words;   /**< Number of base words for this class */
+    int32 *prob1;    /**< Probability table for base words */
+    /**
+     * Custom hash table for additional words.
+     */
+    struct ngram_hash_s {
+        int32 wid;    /**< Word ID of this bucket */
+        int32 prob1;  /**< Probability for this word */
+        int32 next;   /**< Index of next bucket (or -1 for no collision) */
+    } *nword_hash;
+    int32 n_hash;       /**< Number of buckets in nword_hash (power of 2) */
+    int32 n_hash_inuse; /**< Number of words in nword_hash */
+};
+
+#define NGRAM_HASH_SIZE 128
+
+#define NGRAM_BASEWID(wid) ((wid)&0xffffff)
+#define NGRAM_CLASSID(wid) (((wid)>>24) & 0x7f)
+#define NGRAM_CLASSWID(wid,classid) (((classid)<<24) | 0x80000000 | (wid))
+#define NGRAM_IS_CLASSWID(wid) ((wid)&0x80000000)
+
+#define UG_ALLOC_STEP 10
+
+/** Implementation-specific functions for operating on ngram_model_t objects */
+typedef struct ngram_funcs_s {
+    /**
+     * Implementation-specific function for freeing an ngram_model_t.
+     */
+    void (*free)(ngram_model_t *model);
+    /**
+     * Implementation-specific function for applying language model weights.
+     */
+    int (*apply_weights)(ngram_model_t *model,
+                         float32 lw,
+                         float32 wip,
+                         float32 uw);
+    /**
+     * Implementation-specific function for querying language model score.
+     */
+    int32 (*score)(ngram_model_t *model,
+                   int32 wid,
+                   int32 *history,
+                   int32 n_hist,
+                   int32 *n_used);
+    /**
+     * Implementation-specific function for querying raw language
+     * model probability.
+     */
+    int32 (*raw_score)(ngram_model_t *model,
+                       int32 wid,
+                       int32 *history,
+                       int32 n_hist,
+                       int32 *n_used);
+    /**
+     * Implementation-specific function for adding unigrams.
+     *
+     * This function updates the internal structures of a language
+     * model to add the given unigram with the given weight (defined
+     * as a log-factor applied to the uniform distribution).  This
+     * includes reallocating or otherwise resizing the set of unigrams.
+     *
+     * @return The language model score (not raw log-probability) of
+     * the new word, or 0 for failure.
+     */
+    int32 (*add_ug)(ngram_model_t *model,
+                    int32 wid, int32 lweight);
+    /**
+     * Implementation-specific function for purging N-Gram cache
+     */
+    void (*flush)(ngram_model_t *model);
+
+    /**
+     * Implementation-specific function for iterating.
+     */
+    ngram_iter_t * (*iter)(ngram_model_t *model, int32 wid, int32 *history, int32 n_hist);
+
+    /**
+     * Implementation-specific function for iterating.
+     */
+    ngram_iter_t * (*mgrams)(ngram_model_t *model, int32 m);
+
+    /**
+     * Implementation-specific function for iterating.
+     */
+    ngram_iter_t * (*successors)(ngram_iter_t *itor);
+
+    /**
+     * Implementation-specific function for iterating.
+     */
+    int32 const * (*iter_get)(ngram_iter_t *itor,
+                              int32 *out_score,
+                              int32 *out_bowt);
+
+    /**
+     * Implementation-specific function for iterating.
+     */
+    ngram_iter_t * (*iter_next)(ngram_iter_t *itor);
+
+    /**
+     * Implementation-specific function for iterating.
+     */
+    void (*iter_free)(ngram_iter_t *itor);
+} ngram_funcs_t;
+
+/**
+ * Base iterator structure for N-grams.
+ */
+struct ngram_iter_s {
+    ngram_model_t *model;
+    int32 *wids;      /**< Scratch space for word IDs. */
+    int16 m;          /**< Order of history. */
+    int16 successor;  /**< Is this a successor iterator? */
+};
+
+/**
+ * One class definition from a classdef file.
+ */
+typedef struct classdef_s {
+    char **words;
+    float32 *weights;
+    int32 n_words;
+} classdef_t;
+
+/**
+ * Initialize the base ngram_model_t structure.
+ */
+int32
+ngram_model_init(ngram_model_t *model,
+                 ngram_funcs_t *funcs,
+                 logmath_t *lmath,
+                 int32 n, int32 n_unigram);
+
+/**
+ * Read an N-Gram model from an ARPABO text file.
+ */
+ngram_model_t *ngram_model_arpa_read(cmd_ln_t *config,
+                                    const char *file_name,
+                                    logmath_t *lmath);
+/**
+ * Read an N-Gram model from a Sphinx .DMP binary file.
+ */
+ngram_model_t *ngram_model_dmp_read(cmd_ln_t *config,
+                                   const char *file_name,
+                                   logmath_t *lmath);
+/**
+ * Read an N-Gram model from a Sphinx .DMP32 binary file.
+ */
+ngram_model_t *ngram_model_dmp32_read(cmd_ln_t *config,
+                                    const char *file_name,
+                                    logmath_t *lmath);
+
+/**
+ * Write an N-Gram model to an ARPABO text file.
+ */
+int ngram_model_arpa_write(ngram_model_t *model,
+                          const char *file_name);
+/**
+ * Write an N-Gram model to a Sphinx .DMP binary file.
+ */
+int ngram_model_dmp_write(ngram_model_t *model,
+                         const char *file_name);
+
+/**
+ * Read a probdef file.
+ */
+int32 read_classdef_file(hash_table_t *classes, const char *classdef_file);
+
+/**
+ * Free a class definition.
+ */
+void classdef_free(classdef_t *classdef);
+
+/**
+ * Allocate and initialize an N-Gram class.
+ */
+ngram_class_t *ngram_class_new(ngram_model_t *model, int32 tag_wid,
+                               int32 start_wid, glist_t classwords);
+
+/**
+ * Deallocate an N-Gram class.
+ */
+void ngram_class_free(ngram_class_t *lmclass);
+
+/**
+ * Get the in-class log probability for a word in an N-Gram class.
+ *
+ * @return This probability, or 1 if word not found.
+ */
+int32 ngram_class_prob(ngram_class_t *lmclass, int32 wid);
+
+/**
+ * Initialize base M-Gram iterator structure.
+ */
+void ngram_iter_init(ngram_iter_t *itor, ngram_model_t *model,
+                     int m, int successor);
+
+#endif /* __NGRAM_MODEL_INTERNAL_H__ */
diff --git a/src/libsphinxbase/lm/ngram_model_set.c b/src/libsphinxbase/lm/ngram_model_set.c
new file mode 100644 (file)
index 0000000..d5806b6
--- /dev/null
@@ -0,0 +1,870 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2008 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * @file ngram_model_set.c Set of language models.
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/strfuncs.h"
+#include "sphinxbase/filename.h"
+
+#include "ngram_model_set.h"
+
+static ngram_funcs_t ngram_model_set_funcs;
+
+static int
+my_compare(const void *a, const void *b)
+{
+    /* Make sure <UNK> floats to the beginning. */
+    if (strcmp(*(char * const *)a, "<UNK>") == 0)
+        return -1;
+    else if (strcmp(*(char * const *)b, "<UNK>") == 0)
+        return 1;
+    else
+        return strcmp(*(char * const *)a, *(char * const *)b);
+}
+
+static void
+build_widmap(ngram_model_t *base, logmath_t *lmath, int32 n)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    ngram_model_t **models = set->lms;
+    hash_table_t *vocab;
+    glist_t hlist;
+    gnode_t *gn;
+    int32 i;
+
+    /* Construct a merged vocabulary and a set of word-ID mappings. */
+    vocab = hash_table_new(models[0]->n_words, FALSE);
+    /* Create the set of merged words. */
+    for (i = 0; i < set->n_models; ++i) {
+        int32 j;
+        for (j = 0; j < models[i]->n_words; ++j) {
+            /* Ignore collisions. */
+            (void)hash_table_enter_int32(vocab, models[i]->word_str[j], j);
+        }
+    }
+    /* Create the array of words, then sort it. */
+    if (hash_table_lookup(vocab, "<UNK>", NULL) != 0)
+        (void)hash_table_enter_int32(vocab, "<UNK>", 0);
+    /* Now we know the number of unigrams, initialize the base model. */
+    ngram_model_init(base, &ngram_model_set_funcs, lmath, n, hash_table_inuse(vocab));
+    base->writable = FALSE; /* We will reuse the pointers from the submodels. */
+    i = 0;
+    hlist = hash_table_tolist(vocab, NULL);
+    for (gn = hlist; gn; gn = gnode_next(gn)) {
+        hash_entry_t *ent = gnode_ptr(gn);
+        base->word_str[i++] = (char *)ent->key;
+    }
+    glist_free(hlist);
+    qsort(base->word_str, base->n_words, sizeof(*base->word_str), my_compare);
+
+    /* Now create the word ID mappings. */
+    if (set->widmap)
+        ckd_free_2d((void **)set->widmap);
+    set->widmap = (int32 **) ckd_calloc_2d(base->n_words, set->n_models,
+                                           sizeof(**set->widmap));
+    for (i = 0; i < base->n_words; ++i) {
+        int32 j;
+        /* Also create the master wid mapping. */
+        (void)hash_table_enter_int32(base->wid, base->word_str[i], i);
+        /* printf("%s: %d => ", base->word_str[i], i); */
+        for (j = 0; j < set->n_models; ++j) {
+            set->widmap[i][j] = ngram_wid(models[j], base->word_str[i]);
+            /* printf("%d ", set->widmap[i][j]); */
+        }
+        /* printf("\n"); */
+    }
+    hash_table_free(vocab);
+}
+
+ngram_model_t *
+ngram_model_set_init(cmd_ln_t *config,
+                     ngram_model_t **models,
+                     char **names,
+                     const float32 *weights,
+                     int32 n_models)
+{
+    ngram_model_set_t *model;
+    ngram_model_t *base;
+    logmath_t *lmath;
+    int32 i, n;
+
+    if (n_models == 0) /* WTF */
+        return NULL;
+
+    /* Do consistency checking on the models.  They must all use the
+     * same logbase and shift. */
+    lmath = models[0]->lmath;
+    for (i = 1; i < n_models; ++i) {
+        if (logmath_get_base(models[i]->lmath) != logmath_get_base(lmath)
+            || logmath_get_shift(models[i]->lmath) != logmath_get_shift(lmath)) {
+            E_ERROR("Log-math parameters don't match, will not create LM set\n");
+            return NULL;
+        }
+    }
+
+    /* Allocate the combined model, initialize it. */
+    model = ckd_calloc(1, sizeof(*model));
+    base = &model->base;
+    model->n_models = n_models;
+    model->lms = ckd_calloc(n_models, sizeof(*model->lms));
+    model->names = ckd_calloc(n_models, sizeof(*model->names));
+    /* Initialize weights to a uniform distribution */
+    model->lweights = ckd_calloc(n_models, sizeof(*model->lweights));
+    {
+        int32 uniform = logmath_log(lmath, 1.0/n_models);
+        for (i = 0; i < n_models; ++i)
+            model->lweights[i] = uniform;
+    }
+    /* Default to interpolate if weights were given. */
+    if (weights)
+        model->cur = -1;
+
+    n = 0;
+    for (i = 0; i < n_models; ++i) {
+        model->lms[i] = models[i];
+        model->names[i] = ckd_salloc(names[i]);
+        if (weights)
+            model->lweights[i] = logmath_log(lmath, weights[i]);
+        /* N is the maximum of all merged models. */
+        if (models[i]->n > n)
+            n = models[i]->n;
+    }
+    /* Allocate the history mapping table. */
+    model->maphist = ckd_calloc(n - 1, sizeof(*model->maphist));
+
+    /* Now build the word-ID mapping and merged vocabulary. */
+    build_widmap(base, lmath, n);
+    return base;
+}
+
+ngram_model_t *
+ngram_model_set_read(cmd_ln_t *config,
+                     const char *lmctlfile,
+                     logmath_t *lmath)
+{
+    FILE *ctlfp;
+    glist_t lms = NULL;
+    glist_t lmnames = NULL;
+    __BIGSTACKVARIABLE__ char str[1024];
+    ngram_model_t *set = NULL;
+    hash_table_t *classes;
+    char *basedir, *c;
+
+    /* Read all the class definition files to accumulate a mapping of
+     * classnames to definitions. */
+    classes = hash_table_new(0, FALSE);
+    if ((ctlfp = fopen(lmctlfile, "r")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open %s", lmctlfile);
+        return NULL;
+    }
+
+    /* Try to find the base directory to append to relative paths in
+     * the lmctl file. */
+    if ((c = strrchr(lmctlfile, '/')) || (c = strrchr(lmctlfile, '\\'))) {
+        /* Include the trailing slash. */
+        basedir = ckd_calloc(c - lmctlfile + 2, 1);
+        memcpy(basedir, lmctlfile, c - lmctlfile + 1);
+    }
+    else {
+        basedir = NULL;
+    }
+    E_INFO("Reading LM control file '%s'\n", lmctlfile);
+    if (basedir)
+        E_INFO("Will prepend '%s' to unqualified paths\n", basedir);
+
+    if (fscanf(ctlfp, "%1023s", str) == 1) {
+        if (strcmp(str, "{") == 0) {
+            /* Load LMclass files */
+            while ((fscanf(ctlfp, "%1023s", str) == 1)
+                   && (strcmp(str, "}") != 0)) {
+                char *deffile;
+                if (basedir && !path_is_absolute(str))
+                    deffile = string_join(basedir, str, NULL);
+                else
+                    deffile = ckd_salloc(str);
+                E_INFO("Reading classdef from '%s'\n", deffile);
+                if (read_classdef_file(classes, deffile) < 0) {
+                    ckd_free(deffile);
+                    goto error_out;
+                }
+                ckd_free(deffile);
+            }
+
+            if (strcmp(str, "}") != 0) {
+                E_ERROR("Unexpected EOF in %s\n", lmctlfile);
+                goto error_out;
+            }
+
+            /* This might be the first LM name. */
+            if (fscanf(ctlfp, "%1023s", str) != 1)
+                str[0] = '\0';
+        }
+    }
+    else
+        str[0] = '\0';
+
+    /* Read in one LM at a time and add classes to them as necessary. */
+    while (str[0] != '\0') {
+        char *lmfile;
+        ngram_model_t *lm;
+
+        if (basedir && str[0] != '/' && str[0] != '\\')
+            lmfile = string_join(basedir, str, NULL);
+        else
+            lmfile = ckd_salloc(str);
+        E_INFO("Reading lm from '%s'\n", lmfile);
+        lm = ngram_model_read(config, lmfile, NGRAM_AUTO, lmath);
+        if (lm == NULL) {
+            ckd_free(lmfile);
+            goto error_out;
+        }
+        if (fscanf(ctlfp, "%1023s", str) != 1) {
+            E_ERROR("LMname missing after LMFileName '%s'\n", lmfile);
+            ckd_free(lmfile);
+            goto error_out;
+        }
+        ckd_free(lmfile);
+        lms = glist_add_ptr(lms, lm);
+        lmnames = glist_add_ptr(lmnames, ckd_salloc(str));
+
+        if (fscanf(ctlfp, "%1023s", str) == 1) {
+            if (strcmp(str, "{") == 0) {
+                /* LM uses classes; read their names */
+                while ((fscanf(ctlfp, "%1023s", str) == 1) &&
+                       (strcmp(str, "}") != 0)) {
+                    void *val;
+                    classdef_t *classdef;
+
+                    if (hash_table_lookup(classes, str, &val) == -1) {
+                        E_ERROR("Unknown class %s in control file\n", str);
+                        goto error_out;
+                    }
+                    classdef = val;
+                    if (ngram_model_add_class(lm, str, 1.0,
+                                              classdef->words, classdef->weights,
+                                              classdef->n_words) < 0) {
+                        goto error_out;
+                    }
+                    E_INFO("Added class %s containing %d words\n",
+                           str, classdef->n_words);
+                }
+                if (strcmp(str, "}") != 0) {
+                    E_ERROR("Unexpected EOF in %s\n", lmctlfile);
+                    goto error_out;
+                }
+                if (fscanf(ctlfp, "%1023s", str) != 1)
+                    str[0] = '\0';
+            }
+        }
+        else
+            str[0] = '\0';
+    }
+    fclose(ctlfp);
+
+    /* Now construct arrays out of lms and lmnames, and build an
+     * ngram_model_set. */
+    lms = glist_reverse(lms);
+    lmnames = glist_reverse(lmnames);
+    {
+        int32 n_models;
+        ngram_model_t **lm_array;
+        char **name_array;
+        gnode_t *lm_node, *name_node;
+        int32 i;
+
+        n_models = glist_count(lms);
+        lm_array = ckd_calloc(n_models, sizeof(*lm_array));
+        name_array = ckd_calloc(n_models, sizeof(*name_array));
+        lm_node = lms;
+        name_node = lmnames;
+        for (i = 0; i < n_models; ++i) {
+            lm_array[i] = gnode_ptr(lm_node);
+            name_array[i] = gnode_ptr(name_node);
+            lm_node = gnode_next(lm_node);
+            name_node = gnode_next(name_node);
+        }
+        set = ngram_model_set_init(config, lm_array, name_array,
+                                   NULL, n_models);
+        ckd_free(lm_array);
+        ckd_free(name_array);
+    }
+error_out:
+    {
+        gnode_t *gn;
+        glist_t hlist;
+
+        if (set == NULL) {
+            for (gn = lms; gn; gn = gnode_next(gn)) {
+                ngram_model_free(gnode_ptr(gn));
+            }
+        }
+        glist_free(lms);
+        for (gn = lmnames; gn; gn = gnode_next(gn)) {
+            ckd_free(gnode_ptr(gn));
+        }
+        glist_free(lmnames);
+        hlist = hash_table_tolist(classes, NULL);
+        for (gn = hlist; gn; gn = gnode_next(gn)) {
+            hash_entry_t *he = gnode_ptr(gn);
+            ckd_free((char *)he->key);
+            classdef_free(he->val);
+        }
+        glist_free(hlist);
+        hash_table_free(classes);
+        ckd_free(basedir);
+    }
+    return set;
+}
+
+int32
+ngram_model_set_count(ngram_model_t *base)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    return set->n_models;
+}
+
+ngram_model_set_iter_t *
+ngram_model_set_iter(ngram_model_t *base)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    ngram_model_set_iter_t *itor;
+
+    if (set == NULL || set->n_models == 0)
+        return NULL;
+    itor = ckd_calloc(1, sizeof(*itor));
+    itor->set = set;
+    return itor;
+}
+
+ngram_model_set_iter_t *
+ngram_model_set_iter_next(ngram_model_set_iter_t *itor)
+{
+    if (++itor->cur == itor->set->n_models) {
+        ngram_model_set_iter_free(itor);
+        return NULL;
+    }
+    return itor;
+}
+
+void
+ngram_model_set_iter_free(ngram_model_set_iter_t *itor)
+{
+    ckd_free(itor);
+}
+
+ngram_model_t *
+ngram_model_set_iter_model(ngram_model_set_iter_t *itor,
+                           char const **lmname)
+{
+    if (lmname) *lmname = itor->set->names[itor->cur];
+    return itor->set->lms[itor->cur];
+}
+
+ngram_model_t *
+ngram_model_set_lookup(ngram_model_t *base,
+                       const char *name)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 i;
+
+    if (name == NULL) {
+        if (set->cur == -1)
+            return NULL;
+        else
+            return set->lms[set->cur];
+    }
+
+    /* There probably won't be very many submodels. */
+    for (i = 0; i < set->n_models; ++i)
+        if (0 == strcmp(set->names[i], name))
+            break;
+    if (i == set->n_models)
+        return NULL;
+    return set->lms[i];
+}
+
+ngram_model_t *
+ngram_model_set_select(ngram_model_t *base,
+                       const char *name)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 i;
+
+    /* There probably won't be very many submodels. */
+    for (i = 0; i < set->n_models; ++i)
+        if (0 == strcmp(set->names[i], name))
+            break;
+    if (i == set->n_models)
+        return NULL;
+    set->cur = i;
+    return set->lms[set->cur];
+}
+
+const char *
+ngram_model_set_current(ngram_model_t *base)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+
+    if (set->cur == -1)
+        return NULL;
+    else
+        return set->names[set->cur];
+}
+
+int32
+ngram_model_set_current_wid(ngram_model_t *base,
+                            int32 set_wid)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+
+    if (set->cur == -1 || set_wid >= base->n_words)
+        return NGRAM_INVALID_WID;
+    else
+        return set->widmap[set_wid][set->cur];
+}
+
+int32
+ngram_model_set_known_wid(ngram_model_t *base,
+                          int32 set_wid)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+
+    if (set_wid >= base->n_words)
+        return FALSE;
+    else if (set->cur == -1) {
+        int32 i;
+        for (i = 0; i < set->n_models; ++i) {
+            if (set->widmap[set_wid][i] != ngram_unknown_wid(set->lms[i]))
+                return TRUE;
+        }
+        return FALSE;
+    }
+    else
+        return (set->widmap[set_wid][set->cur]
+                != ngram_unknown_wid(set->lms[set->cur]));
+}
+
+ngram_model_t *
+ngram_model_set_interp(ngram_model_t *base,
+                       const char **names,
+                       const float32 *weights)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+
+    /* If we have a set of weights here, then set them. */
+    if (names && weights) {
+        int32 i, j;
+
+        /* We hope there aren't many models. */
+        for (i = 0; i < set->n_models; ++i) {
+            for (j = 0; j < set->n_models; ++j)
+                if (0 == strcmp(names[i], set->names[j]))
+                    break;
+            if (j == set->n_models) {
+                E_ERROR("Unknown LM name %s\n", names[i]);
+                return NULL;
+            }
+            set->lweights[j] = logmath_log(base->lmath, weights[i]);
+        }
+    }
+    else if (weights) {
+        memcpy(set->lweights, weights, set->n_models * sizeof(*set->lweights));
+    }
+    /* Otherwise just enable existing weights. */
+    set->cur = -1;
+    return base;
+}
+
+ngram_model_t *
+ngram_model_set_add(ngram_model_t *base,
+                    ngram_model_t *model,
+                    const char *name,
+                    float32 weight,
+                    int reuse_widmap)
+                    
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    float32 fprob;
+    int32 scale, i;
+
+    /* Add it to the array of lms. */
+    ++set->n_models;
+    set->lms = ckd_realloc(set->lms, set->n_models * sizeof(*set->lms));
+    set->lms[set->n_models - 1] = model;
+    set->names = ckd_realloc(set->names, set->n_models * sizeof(*set->names));
+    set->names[set->n_models - 1] = ckd_salloc(name);
+    /* Expand the history mapping table if necessary. */
+    if (model->n > base->n) {
+        base->n = model->n;
+        set->maphist = ckd_realloc(set->maphist,
+                                   (model->n - 1) * sizeof(*set->maphist));
+    }
+
+    /* Renormalize the interpolation weights. */
+    fprob = weight * 1.0 / set->n_models;
+    set->lweights = ckd_realloc(set->lweights,
+                                set->n_models * sizeof(*set->lweights));
+    set->lweights[set->n_models - 1] = logmath_log(base->lmath, fprob);
+    /* Now normalize everything else to fit it in.  This is
+     * accomplished by simply scaling all the other probabilities
+     * by (1-fprob). */
+    scale = logmath_log(base->lmath, 1.0 - fprob);
+    for (i = 0; i < set->n_models - 1; ++i)
+        set->lweights[i] += scale;
+
+    /* Reuse the old word ID mapping if requested. */
+    if (reuse_widmap) {
+        int32 **new_widmap;
+
+        /* Tack another column onto the widmap array. */
+        new_widmap = (int32 **)ckd_calloc_2d(base->n_words, set->n_models,
+                                             sizeof (**new_widmap));
+        for (i = 0; i < base->n_words; ++i) {
+            /* Copy all the existing mappings. */
+            memcpy(new_widmap[i], set->widmap[i],
+                   (set->n_models - 1) * sizeof(**new_widmap));
+            /* Create the new mapping. */
+            new_widmap[i][set->n_models-1] = ngram_wid(model, base->word_str[i]);
+        }
+        ckd_free_2d((void **)set->widmap);
+        set->widmap = new_widmap;
+    }
+    else {
+        build_widmap(base, base->lmath, base->n);
+    }
+    return model;
+}
+
+ngram_model_t *
+ngram_model_set_remove(ngram_model_t *base,
+                       const char *name,
+                       int reuse_widmap)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    ngram_model_t *submodel;
+    int32 lmidx, scale, n, i;
+    float32 fprob;
+
+    for (lmidx = 0; lmidx < set->n_models; ++lmidx)
+        if (0 == strcmp(name, set->names[lmidx]))
+            break;
+    if (lmidx == set->n_models)
+        return NULL;
+    submodel = set->lms[lmidx];
+
+    /* Renormalize the interpolation weights by scaling them by
+     * 1/(1-fprob) */
+    fprob = logmath_exp(base->lmath, set->lweights[lmidx]);
+    scale = logmath_log(base->lmath, 1.0 - fprob);
+
+    /* Remove it from the array of lms, renormalize remaining weights,
+     * and recalcluate n. */
+    --set->n_models;
+    n = 0;
+    ckd_free(set->names[lmidx]);
+    set->names[lmidx] = NULL;
+    for (i = 0; i < set->n_models; ++i) {
+        if (i >= lmidx) {
+            set->lms[i] = set->lms[i+1];
+            set->names[i] = set->names[i+1];
+            set->lweights[i] = set->lweights[i+1];
+        }
+        set->lweights[i] -= scale;
+        if (set->lms[i]->n > n)
+            n = set->lms[i]->n;
+    }
+    /* There's no need to shrink these arrays. */
+    set->lms[set->n_models] = NULL;
+    set->lweights[set->n_models] = base->log_zero;
+    /* No need to shrink maphist either. */
+
+    /* Reuse the existing word ID mapping if requested. */
+    if (reuse_widmap) {
+        /* Just go through and shrink each row. */
+        for (i = 0; i < base->n_words; ++i) {
+            memmove(set->widmap[i] + lmidx, set->widmap[i] + lmidx + 1,
+                    (set->n_models - lmidx) * sizeof(**set->widmap));
+        }
+    }
+    else {
+        build_widmap(base, base->lmath, n);
+    }
+    return submodel;
+}
+
+void
+ngram_model_set_map_words(ngram_model_t *base,
+                          const char **words,
+                          int32 n_words)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 i;
+
+    /* Recreate the word mapping. */
+    if (base->writable) {
+        for (i = 0; i < base->n_words; ++i) {
+            ckd_free(base->word_str[i]);
+        }
+    }
+    ckd_free(base->word_str);
+    ckd_free_2d((void **)set->widmap);
+    base->writable = TRUE;
+    base->n_words = base->n_1g_alloc = n_words;
+    base->word_str = ckd_calloc(n_words, sizeof(*base->word_str));
+    set->widmap = (int32 **)ckd_calloc_2d(n_words, set->n_models, sizeof(**set->widmap));
+    hash_table_empty(base->wid);
+    for (i = 0; i < n_words; ++i) {
+        int32 j;
+        base->word_str[i] = ckd_salloc(words[i]);
+        (void)hash_table_enter_int32(base->wid, base->word_str[i], i);
+        for (j = 0; j < set->n_models; ++j) {
+            set->widmap[i][j] = ngram_wid(set->lms[j], base->word_str[i]);
+        }
+    }
+}
+
+static int
+ngram_model_set_apply_weights(ngram_model_t *base, float32 lw,
+                              float32 wip, float32 uw)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 i;
+
+    /* Apply weights to each sub-model. */
+    for (i = 0; i < set->n_models; ++i)
+        ngram_model_apply_weights(set->lms[i], lw, wip, uw);
+    return 0;
+}
+
+static int32
+ngram_model_set_score(ngram_model_t *base, int32 wid,
+                      int32 *history, int32 n_hist,
+                      int32 *n_used)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 mapwid;
+    int32 score;
+    int32 i;
+
+    /* Truncate the history. */
+    if (n_hist > base->n - 1)
+        n_hist = base->n - 1;
+
+    /* Interpolate if there is no current. */
+    if (set->cur == -1) {
+        score = base->log_zero;
+        for (i = 0; i < set->n_models; ++i) {
+            int32 j;
+            /* Map word and history IDs for each model. */
+            mapwid = set->widmap[wid][i];
+            for (j = 0; j < n_hist; ++j) {
+                if (history[j] == NGRAM_INVALID_WID)
+                    set->maphist[j] = NGRAM_INVALID_WID;
+                else
+                    set->maphist[j] = set->widmap[history[j]][i];
+            }
+            score = logmath_add(base->lmath, score,
+                                set->lweights[i] + 
+                                ngram_ng_score(set->lms[i],
+                                               mapwid, set->maphist, n_hist, n_used));
+        }
+    }
+    else {
+        int32 j;
+        /* Map word and history IDs (FIXME: do this in a function?) */
+        mapwid = set->widmap[wid][set->cur];
+        for (j = 0; j < n_hist; ++j) {
+            if (history[j] == NGRAM_INVALID_WID)
+                set->maphist[j] = NGRAM_INVALID_WID;
+            else
+                set->maphist[j] = set->widmap[history[j]][set->cur];
+        }
+        score = ngram_ng_score(set->lms[set->cur],
+                               mapwid, set->maphist, n_hist, n_used);
+    }
+
+    return score;
+}
+
+static int32
+ngram_model_set_raw_score(ngram_model_t *base, int32 wid,
+                          int32 *history, int32 n_hist,
+                          int32 *n_used)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 mapwid;
+    int32 score;
+    int32 i;
+
+    /* Truncate the history. */
+    if (n_hist > base->n - 1)
+        n_hist = base->n - 1;
+
+    /* Interpolate if there is no current. */
+    if (set->cur == -1) {
+        score = base->log_zero;
+        for (i = 0; i < set->n_models; ++i) {
+            int32 j;
+            /* Map word and history IDs for each model. */
+            mapwid = set->widmap[wid][i];
+            for (j = 0; j < n_hist; ++j) {
+                if (history[j] == NGRAM_INVALID_WID)
+                    set->maphist[j] = NGRAM_INVALID_WID;
+                else
+                    set->maphist[j] = set->widmap[history[j]][i];
+            }
+            score = logmath_add(base->lmath, score,
+                                set->lweights[i] + 
+                                ngram_ng_prob(set->lms[i],
+                                              mapwid, set->maphist, n_hist, n_used));
+        }
+    }
+    else {
+        int32 j;
+        /* Map word and history IDs (FIXME: do this in a function?) */
+        mapwid = set->widmap[wid][set->cur];
+        for (j = 0; j < n_hist; ++j) {
+            if (history[j] == NGRAM_INVALID_WID)
+                set->maphist[j] = NGRAM_INVALID_WID;
+            else
+                set->maphist[j] = set->widmap[history[j]][set->cur];
+        }
+        score = ngram_ng_prob(set->lms[set->cur],
+                              mapwid, set->maphist, n_hist, n_used);
+    }
+
+    return score;
+}
+
+static int32
+ngram_model_set_add_ug(ngram_model_t *base,
+                       int32 wid, int32 lweight)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 *newwid;
+    int32 i, prob;
+
+    /* At this point the word has already been added to the master
+       model and we have a new word ID for it.  Add it to active
+       submodels and track the word IDs. */
+    newwid = ckd_calloc(set->n_models, sizeof(*newwid));
+    prob = base->log_zero;
+    for (i = 0; i < set->n_models; ++i) {
+        int32 wprob, n_hist;
+
+        /* Only add to active models. */
+        if (set->cur == -1 || set->cur == i) {
+            /* Did this word already exist? */
+            newwid[i] = ngram_wid(set->lms[i], base->word_str[wid]);
+            if (newwid[i] == NGRAM_INVALID_WID) {
+                /* Add it to the submodel. */
+                newwid[i] = ngram_model_add_word(set->lms[i], base->word_str[wid],
+                                                 logmath_exp(base->lmath, lweight));
+                if (newwid[i] == NGRAM_INVALID_WID) {
+                    ckd_free(newwid);
+                    return base->log_zero;
+                }
+            }
+            /* Now get the unigram probability for the new word and either
+             * interpolate it or use it (if this is the current model). */
+            wprob = ngram_ng_prob(set->lms[i], newwid[i], NULL, 0, &n_hist);
+            if (set->cur == i)
+                prob = wprob;
+            else if (set->cur == -1)
+                prob = logmath_add(base->lmath, prob, set->lweights[i] + wprob);
+        }
+        else {
+            newwid[i] = NGRAM_INVALID_WID;
+        }
+    }
+    /* Okay we have the word IDs for this in all the submodels.  Now
+       do some complicated memory mangling to add this to the
+       widmap. */
+    set->widmap = ckd_realloc(set->widmap, base->n_words * sizeof(*set->widmap));
+    set->widmap[0] = ckd_realloc(set->widmap[0],
+                                 base->n_words
+                                 * set->n_models
+                                 * sizeof(**set->widmap));
+    for (i = 0; i < base->n_words; ++i)
+        set->widmap[i] = set->widmap[0] + i * set->n_models;
+    memcpy(set->widmap[wid], newwid, set->n_models * sizeof(*newwid));
+    ckd_free(newwid);
+    return prob;
+}
+
+static void
+ngram_model_set_free(ngram_model_t *base)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 i;
+
+    for (i = 0; i < set->n_models; ++i)
+        ngram_model_free(set->lms[i]);
+    ckd_free(set->lms);
+    for (i = 0; i < set->n_models; ++i)
+        ckd_free(set->names[i]);
+    ckd_free(set->names);
+    ckd_free(set->lweights);
+    ckd_free(set->maphist);
+    ckd_free_2d((void **)set->widmap);
+}
+
+static void
+ngram_model_set_flush(ngram_model_t *base)
+{
+    ngram_model_set_t *set = (ngram_model_set_t *)base;
+    int32 i;
+
+    for (i = 0; i < set->n_models; ++i)
+        ngram_model_flush(set->lms[i]);
+}
+
+static ngram_funcs_t ngram_model_set_funcs = {
+    ngram_model_set_free,          /* free */
+    ngram_model_set_apply_weights, /* apply_weights */
+    ngram_model_set_score,         /* score */
+    ngram_model_set_raw_score,     /* raw_score */
+    ngram_model_set_add_ug,        /* add_ug */
+    ngram_model_set_flush          /* flush */
+};
diff --git a/src/libsphinxbase/lm/ngram_model_set.h b/src/libsphinxbase/lm/ngram_model_set.h
new file mode 100644 (file)
index 0000000..5fbc7e5
--- /dev/null
@@ -0,0 +1,71 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * @file ngram_model_set.h Set of language models.
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#ifndef __NGRAM_MODEL_SET_H__
+#define __NGRAM_MODEL_SET_H__
+
+#include "ngram_model_internal.h"
+#include "lm3g_model.h"
+
+/**
+ * Subclass of ngram_model for grouping language models.
+ */
+typedef struct ngram_model_set_s {
+    ngram_model_t base;  /**< Base ngram_model_t structure. */
+
+    int32 n_models;      /**< Number of models in this set. */
+    int32 cur;           /**< Currently selected model, or -1 for none. */
+    ngram_model_t **lms; /**< Language models in this set. */
+    char **names;        /**< Names for language models. */
+    int32 *lweights;     /**< Log interpolation weights. */
+    int32 **widmap;      /**< Word ID mapping for submodels. */
+    int32 *maphist;      /**< Word ID mapping for N-Gram history. */
+} ngram_model_set_t;
+
+/**
+ * Iterator over a model set.
+ */
+struct ngram_model_set_iter_s {
+    ngram_model_set_t *set;
+    int32 cur;
+};
+
+#endif /* __NGRAM_MODEL_SET_H__ */
diff --git a/src/libsphinxbase/util/Makefile.am b/src/libsphinxbase/util/Makefile.am
new file mode 100644 (file)
index 0000000..52f8b19
--- /dev/null
@@ -0,0 +1,51 @@
+noinst_LTLIBRARIES = libsphinxutil.la
+
+if LAPACK_LITE
+LAPACK_LITE_SRCS = \
+       slamch.c \
+       slapack_lite.c \
+       blas_lite.c \
+       f2c_lite.c
+endif
+
+libsphinxutil_la_SOURCES = \
+        bitvec.c \
+       bio.c \
+        case.c \
+        ckd_alloc.c \
+       dtoa.c \
+       listelem_alloc.c \
+        cmd_ln.c \
+        err.c \
+        filename.c \
+       genrand.c \
+        glist.c \
+        hash_table.c \
+        heap.c \
+       huff_code.c \
+        info.c \
+       logmath.c \
+       mmio.c \
+        pio.c \
+       matrix.c \
+        profile.c \
+       sbthread.c \
+        strfuncs.c \
+       unlimit.c \
+       utf8.c \
+       $(LAPACK_LITE_SRCS)
+
+EXTRA_DIST = \
+       slamch.c \
+       slapack_lite.c \
+       blas_lite.c \
+       f2c_lite.c \
+       err_wince.c \
+       string_wce.c \
+       errno.c
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+          -I$(top_srcdir)/include \
+           -I$(top_builddir)/include 
+
+LIBOBJS = @LIBOBJS@
diff --git a/src/libsphinxbase/util/Makefile.in b/src/libsphinxbase/util/Makefile.in
new file mode 100644 (file)
index 0000000..fa222e0
--- /dev/null
@@ -0,0 +1,538 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = src/libsphinxbase/util
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsphinxutil_la_LIBADD =
+am__libsphinxutil_la_SOURCES_DIST = bitvec.c bio.c case.c ckd_alloc.c \
+       dtoa.c listelem_alloc.c cmd_ln.c err.c filename.c genrand.c \
+       glist.c hash_table.c heap.c huff_code.c info.c logmath.c \
+       mmio.c pio.c matrix.c profile.c sbthread.c strfuncs.c \
+       unlimit.c utf8.c slamch.c slapack_lite.c blas_lite.c \
+       f2c_lite.c
+@LAPACK_LITE_TRUE@am__objects_1 = slamch.lo slapack_lite.lo \
+@LAPACK_LITE_TRUE@     blas_lite.lo f2c_lite.lo
+am_libsphinxutil_la_OBJECTS = bitvec.lo bio.lo case.lo ckd_alloc.lo \
+       dtoa.lo listelem_alloc.lo cmd_ln.lo err.lo filename.lo \
+       genrand.lo glist.lo hash_table.lo heap.lo huff_code.lo info.lo \
+       logmath.lo mmio.lo pio.lo matrix.lo profile.lo sbthread.lo \
+       strfuncs.lo unlimit.lo utf8.lo $(am__objects_1)
+libsphinxutil_la_OBJECTS = $(am_libsphinxutil_la_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libsphinxutil_la_SOURCES)
+DIST_SOURCES = $(am__libsphinxutil_la_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libsphinxutil.la
+@LAPACK_LITE_TRUE@LAPACK_LITE_SRCS = \
+@LAPACK_LITE_TRUE@     slamch.c \
+@LAPACK_LITE_TRUE@     slapack_lite.c \
+@LAPACK_LITE_TRUE@     blas_lite.c \
+@LAPACK_LITE_TRUE@     f2c_lite.c
+
+libsphinxutil_la_SOURCES = \
+        bitvec.c \
+       bio.c \
+        case.c \
+        ckd_alloc.c \
+       dtoa.c \
+       listelem_alloc.c \
+        cmd_ln.c \
+        err.c \
+        filename.c \
+       genrand.c \
+        glist.c \
+        hash_table.c \
+        heap.c \
+       huff_code.c \
+        info.c \
+       logmath.c \
+       mmio.c \
+        pio.c \
+       matrix.c \
+        profile.c \
+       sbthread.c \
+        strfuncs.c \
+       unlimit.c \
+       utf8.c \
+       $(LAPACK_LITE_SRCS)
+
+EXTRA_DIST = \
+       slamch.c \
+       slapack_lite.c \
+       blas_lite.c \
+       f2c_lite.c \
+       err_wince.c \
+       string_wce.c \
+       errno.c
+
+INCLUDES = -I$(top_srcdir)/include/sphinxbase \
+          -I$(top_srcdir)/include \
+           -I$(top_builddir)/include 
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/libsphinxbase/util/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/libsphinxbase/util/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
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libsphinxutil.la: $(libsphinxutil_la_OBJECTS) $(libsphinxutil_la_DEPENDENCIES) 
+       $(LINK)  $(libsphinxutil_la_OBJECTS) $(libsphinxutil_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitvec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blas_lite.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/case.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ckd_alloc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd_ln.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtoa.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/f2c_lite.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filename.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genrand.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glist.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash_table.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/heap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/huff_code.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listelem_alloc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logmath.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sbthread.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slamch.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slapack_lite.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strfuncs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlimit.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(LTLIBRARIES)
+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:
+
+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: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# 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/src/libsphinxbase/util/bio.c b/src/libsphinxbase/util/bio.c
new file mode 100644 (file)
index 0000000..dec4745
--- /dev/null
@@ -0,0 +1,559 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * bio.c -- Sphinx-3 binary file I/O functions.
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1996 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.4  2005/06/21  20:40:46  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Add the $ keyword.
+ * 
+ * Revision 1.3  2005/03/30 01:22:46  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 02-Jul-1997 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Bugfix: Added byteswapping in bio_verify_chksum().
+ * 
+ * 18-Dec-1996 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996)
+#endif
+
+#include "sphinxbase/bio.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+
+
+#define BIO_HDRARG_MAX 32
+#define END_COMMENT    "*end_comment*\n"
+
+
+static void
+bcomment_read(FILE * fp)
+{
+    __BIGSTACKVARIABLE__ char iline[16384];
+
+    while (fgets(iline, sizeof(iline), fp) != NULL) {
+        if (strcmp(iline, END_COMMENT) == 0)
+            return;
+    }
+    E_FATAL("Missing %s marker\n", END_COMMENT);
+}
+
+
+static int32
+swap_check(FILE * fp)
+{
+    uint32 magic;
+
+    if (fread(&magic, sizeof(uint32), 1, fp) != 1) {
+        E_ERROR("Cannot read BYTEORDER MAGIC NO.\n");
+        return -1;
+    }
+
+    if (magic != BYTE_ORDER_MAGIC) {
+        /* either need to swap or got bogus magic number */
+        SWAP_INT32(&magic);
+
+        if (magic == BYTE_ORDER_MAGIC)
+            return 1;
+
+        SWAP_INT32(&magic);
+        E_ERROR("Bad BYTEORDER MAGIC NO: %08x, expecting %08x\n",
+                magic, BYTE_ORDER_MAGIC);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+void
+bio_hdrarg_free(char **argname, char **argval)
+{
+    int32 i;
+
+    if (argname == NULL)
+        return;
+    for (i = 0; argname[i]; i++) {
+        ckd_free(argname[i]);
+        ckd_free(argval[i]);
+    }
+    ckd_free(argname);
+    ckd_free(argval);
+}
+
+
+int32
+bio_writehdr_version(FILE * fp, char *version)
+{
+    uint32 b;
+
+    fprintf(fp, "s3\n");
+    fprintf(fp, "version %s\n", version);
+    fprintf(fp, "endhdr\n");
+    fflush(fp);
+
+    b = (uint32) BYTE_ORDER_MAGIC;
+    fwrite(&b, sizeof(uint32), 1, fp);
+    fflush(fp);
+
+    return 0;
+}
+
+
+int32
+bio_writehdr(FILE *fp, ...)
+{
+    char const *key;
+    va_list args;
+    uint32 b;
+
+    fprintf(fp, "s3\n");
+    va_start(args, fp);
+    while ((key = va_arg(args, char const *)) != NULL) {
+        char const *val = va_arg(args, char const *);
+        if (val == NULL) {
+            E_ERROR("Wrong number of arguments\n");
+            va_end(args);
+            return -1;
+        }
+        fprintf(fp, "%s %s\n", key, val);
+    }
+    va_end(args);
+
+    fprintf(fp, "endhdr\n");
+    fflush(fp);
+
+    b = (uint32) BYTE_ORDER_MAGIC;
+    if (fwrite(&b, sizeof(uint32), 1, fp) != 1)
+        return -1;
+    fflush(fp);
+
+    return 0;
+}
+
+
+int32
+bio_readhdr(FILE * fp, char ***argname, char ***argval, int32 * swap)
+{
+    __BIGSTACKVARIABLE__ char line[16384], word[4096];
+    int32 i, l;
+    int32 lineno;
+
+    *argname = (char **) ckd_calloc(BIO_HDRARG_MAX + 1, sizeof(char *));
+    *argval = (char **) ckd_calloc(BIO_HDRARG_MAX, sizeof(char *));
+
+    lineno = 0;
+    if (fgets(line, sizeof(line), fp) == NULL){
+        E_ERROR("Premature EOF, line %d\n", lineno);
+        goto error_out;
+    }
+    lineno++;
+
+    if ((line[0] == 's') && (line[1] == '3') && (line[2] == '\n')) {
+        /* New format (post Dec-1996, including checksums); read argument-value pairs */
+        for (i = 0;;) {
+            if (fgets(line, sizeof(line), fp) == NULL) {
+                E_ERROR("Premature EOF, line %d\n", lineno);
+                goto error_out;
+            }
+            lineno++;
+
+            if (sscanf(line, "%s%n", word, &l) != 1) {
+                E_ERROR("Header format error, line %d\n", lineno);
+                goto error_out;
+            }
+            if (strcmp(word, "endhdr") == 0)
+                break;
+            if (word[0] == '#') /* Skip comments */
+                continue;
+
+            if (i >= BIO_HDRARG_MAX) {
+                E_ERROR
+                    ("Max arg-value limit(%d) exceeded; increase BIO_HDRARG_MAX\n",
+                     BIO_HDRARG_MAX);
+                goto error_out;
+            }
+
+            (*argname)[i] = ckd_salloc(word);
+            if (sscanf(line + l, "%s", word) != 1) {      /* Multi-word values not allowed */
+                E_ERROR("Header format error, line %d\n", lineno);
+                goto error_out;
+            }
+            (*argval)[i] = ckd_salloc(word);
+            i++;
+        }
+    }
+    else {
+        /* Old format (without checksums); the first entry must be the version# */
+        if (sscanf(line, "%s", word) != 1) {
+            E_ERROR("Header format error, line %d\n", lineno);
+            goto error_out;
+        }
+
+        (*argname)[0] = ckd_salloc("version");
+        (*argval)[0] = ckd_salloc(word);
+        i = 1;
+
+        bcomment_read(fp);
+    }
+    (*argname)[i] = NULL;
+
+    if ((*swap = swap_check(fp)) < 0) {
+        E_ERROR("swap_check failed\n");
+        goto error_out;
+    }
+
+    return 0;
+error_out:
+    bio_hdrarg_free(*argname, *argval);
+    *argname = *argval = NULL;
+    return -1;
+}
+
+
+static uint32
+chksum_accum(void *buf, int32 el_sz, int32 n_el, uint32 sum)
+{
+    int32 i;
+    uint8 *i8;
+    uint16 *i16;
+    uint32 *i32;
+
+    switch (el_sz) {
+    case 1:
+        i8 = (uint8 *) buf;
+        for (i = 0; i < n_el; i++)
+            sum = (sum << 5 | sum >> 27) + i8[i];
+        break;
+    case 2:
+        i16 = (uint16 *) buf;
+        for (i = 0; i < n_el; i++)
+            sum = (sum << 10 | sum >> 22) + i16[i];
+        break;
+    case 4:
+        i32 = (uint32 *) buf;
+        for (i = 0; i < n_el; i++)
+            sum = (sum << 20 | sum >> 12) + i32[i];
+        break;
+    default:
+        E_FATAL("Unsupported elemsize for checksum: %d\n", el_sz);
+        break;
+    }
+
+    return sum;
+}
+
+
+static void
+swap_buf(void *buf, int32 el_sz, int32 n_el)
+{
+    int32 i;
+    uint16 *buf16;
+    uint32 *buf32;
+
+    switch (el_sz) {
+    case 1:
+        break;
+    case 2:
+        buf16 = (uint16 *) buf;
+        for (i = 0; i < n_el; i++)
+            SWAP_INT16(buf16 + i);
+        break;
+    case 4:
+        buf32 = (uint32 *) buf;
+        for (i = 0; i < n_el; i++)
+            SWAP_INT32(buf32 + i);
+        break;
+    default:
+        E_FATAL("Unsupported elemsize for byteswapping: %d\n", el_sz);
+        break;
+    }
+}
+
+
+int32
+bio_fread(void *buf, int32 el_sz, int32 n_el, FILE * fp, int32 swap,
+          uint32 * chksum)
+{
+    if (fread(buf, el_sz, n_el, fp) != (size_t) n_el)
+        return -1;
+
+    if (swap)
+        swap_buf(buf, el_sz, n_el);
+
+    if (chksum)
+        *chksum = chksum_accum(buf, el_sz, n_el, *chksum);
+
+    return n_el;
+}
+
+int32
+bio_fwrite(void *buf, int32 el_sz, int32 n_el, FILE *fp,
+           int32 swap, uint32 *chksum)
+{
+    if (chksum)
+        *chksum = chksum_accum(buf, el_sz, n_el, *chksum);
+    if (swap) {
+        void *nbuf;
+        int rv;
+
+        nbuf = ckd_calloc(n_el, el_sz);
+        memcpy(nbuf, buf, n_el * el_sz);
+        swap_buf(nbuf, el_sz, n_el);
+        rv = fwrite(nbuf, el_sz, n_el, fp);
+        ckd_free(nbuf);
+        return rv;
+    }
+    else {
+        return fwrite(buf, el_sz, n_el, fp);
+    }
+}
+
+int32
+bio_fread_1d(void **buf, size_t el_sz, uint32 * n_el, FILE * fp,
+             int32 sw, uint32 * ck)
+{
+    /* Read 1-d array size */
+    if (bio_fread(n_el, sizeof(int32), 1, fp, sw, ck) != 1)
+        E_FATAL("fread(arraysize) failed\n");
+    if (*n_el <= 0)
+        E_FATAL("Bad arraysize: %d\n", *n_el);
+
+    /* Allocate memory for array data */
+    *buf = (void *) ckd_calloc(*n_el, el_sz);
+
+    /* Read array data */
+    if (bio_fread(*buf, el_sz, *n_el, fp, sw, ck) != *n_el)
+        E_FATAL("fread(arraydata) failed\n");
+
+    return *n_el;
+}
+
+int32
+bio_fread_2d(void ***arr,
+             size_t e_sz,
+             uint32 *d1,
+             uint32 *d2,
+             FILE *fp,
+             uint32 swap,
+             uint32 *chksum)
+{
+    uint32 l_d1, l_d2;
+    uint32 n;
+    size_t ret;
+    void *raw;
+    
+    ret = bio_fread(&l_d1, sizeof(uint32), 1, fp, swap, chksum);
+    if (ret != 1) {
+       if (ret == 0) {
+           E_ERROR_SYSTEM("Unable to read complete data");
+       }
+       else {
+           E_ERROR_SYSTEM("OS error in bio_fread_2d");
+       }
+       return -1;
+    }
+    ret = bio_fread(&l_d2, sizeof(uint32), 1, fp, swap, chksum);
+    if (ret != 1) {
+       if (ret == 0) {
+           E_ERROR_SYSTEM("Unable to read complete data");
+       }
+       else {
+           E_ERROR_SYSTEM("OS error in bio_fread_2d");
+       }
+       return -1;
+    }
+    if (bio_fread_1d(&raw, e_sz, &n, fp, swap, chksum) != n)
+       return -1;
+
+    assert(n == l_d1*l_d2);
+
+    *d1 = l_d1;
+    *d2 = l_d2;
+    *arr = ckd_alloc_2d_ptr(l_d1, l_d2, raw, e_sz);
+
+    return n;
+}
+
+int32
+bio_fread_3d(void ****arr,
+             size_t e_sz,
+             uint32 *d1,
+             uint32 *d2,
+             uint32 *d3,
+             FILE *fp,
+             uint32 swap,
+             uint32 *chksum)
+{
+    uint32 l_d1;
+    uint32 l_d2;
+    uint32 l_d3;
+    uint32 n;
+    void *raw;
+    size_t ret;
+
+    ret = bio_fread(&l_d1, sizeof(uint32), 1, fp, swap, chksum);
+    if (ret != 1) {
+       if (ret == 0) {
+           E_ERROR_SYSTEM("Unable to read complete data");
+       }
+       else {
+           E_ERROR_SYSTEM("OS error in bio_fread_3d");
+       }
+       return -1;
+    }
+    ret = bio_fread(&l_d2, sizeof(uint32), 1, fp, swap, chksum);
+    if (ret != 1) {
+       if (ret == 0) {
+           E_ERROR_SYSTEM("Unable to read complete data");
+       }
+       else {
+           E_ERROR_SYSTEM("OS error in bio_fread_3d");
+       }
+       return -1;
+    }
+    ret = bio_fread(&l_d3, sizeof(uint32), 1, fp, swap, chksum);
+    if (ret != 1) {
+       if (ret == 0) {
+           E_ERROR_SYSTEM("Unable to read complete data");
+       }
+       else {
+           E_ERROR_SYSTEM("OS error in bio_fread_3d");
+       }
+       return -1;
+    }
+
+    if (bio_fread_1d(&raw, e_sz, &n, fp, swap, chksum) != n) {
+       return -1;
+    }
+
+    assert(n == l_d1 * l_d2 * l_d3);
+
+    *arr = ckd_alloc_3d_ptr(l_d1, l_d2, l_d3, raw, e_sz);
+    *d1 = l_d1;
+    *d2 = l_d2;
+    *d3 = l_d3;
+    
+    return n;
+}
+
+void
+bio_verify_chksum(FILE * fp, int32 byteswap, uint32 chksum)
+{
+    uint32 file_chksum;
+
+    if (fread(&file_chksum, sizeof(uint32), 1, fp) != 1)
+        E_FATAL("fread(chksum) failed\n");
+    if (byteswap)
+        SWAP_INT32(&file_chksum);
+    if (file_chksum != chksum)
+        E_FATAL
+            ("Checksum error; file-checksum %08x, computed %08x\n",
+             file_chksum, chksum);
+}
+
+int16*
+bio_read_wavfile(char const *directory,
+                char const *filename,
+                char const *extension,
+                int32 header,
+                int32 endian,
+                int32 *nsamps)
+{
+    FILE *uttfp;
+    char *inputfile;
+    int32 n, l;
+    int16 *data;
+
+    n = strlen(extension);
+    l = strlen(filename);
+    if ((n <= l) && (0 == strcmp(filename + l - n, extension)))
+        extension = "";
+    inputfile = ckd_calloc(strlen(directory) + l + n + 2, 1);
+    if (directory) {
+        sprintf(inputfile, "%s/%s%s", directory, filename, extension);
+    } else {
+        sprintf(inputfile, "%s%s", filename, extension);
+    }
+
+    if ((uttfp = fopen(inputfile, "rb")) == NULL) {
+        E_FATAL("fopen(%s,rb) failed\n", inputfile);
+    }
+    fseek(uttfp, 0, SEEK_END);
+    n = ftell(uttfp);
+    fseek(uttfp, 0, SEEK_SET);
+    if (header > 0) {
+        if (fseek(uttfp, header, SEEK_SET) < 0) {
+            E_ERROR("fseek(%s,%d) failed\n", inputfile, header);
+            fclose(uttfp);
+            ckd_free(inputfile);
+            return NULL;
+        }
+        n -= header;
+    }
+    n /= sizeof(int16);
+    data = ckd_calloc(n, sizeof(*data));
+    if ((l = fread(data, sizeof(int16), n, uttfp)) < n) {
+        E_ERROR_SYSTEM("Failed to read %d samples from %s: %d", n, inputfile, l);
+        ckd_free(data);
+        ckd_free(inputfile);
+        fclose(uttfp);
+        return NULL;
+    }
+    ckd_free(inputfile);
+    fclose(uttfp);
+    if (nsamps) *nsamps = n;
+
+    return data;
+}
diff --git a/src/libsphinxbase/util/bitvec.c b/src/libsphinxbase/util/bitvec.c
new file mode 100644 (file)
index 0000000..259d26d
--- /dev/null
@@ -0,0 +1,85 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * bitvec.c -- Bit vector type.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: bitvec.c,v $
+ * Revision 1.4  2005/06/22 02:58:22  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 05-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Started.
+ */
+
+
+#include "sphinxbase/bitvec.h"
+
+size_t
+bitvec_count_set(bitvec_t *vec, size_t len)
+{
+    size_t words, bits, w, b, n;
+    bitvec_t *v;
+
+    words = len / BITVEC_BITS;
+    bits = len % BITVEC_BITS;
+    v = vec;
+    n = 0;
+    for (w = 0; w < words; ++w, ++v) {
+        if (*v == 0)
+            continue;
+        for (b = 0; b < BITVEC_BITS; ++b)
+            if (*v & (1<<b))
+                ++n;
+    }
+    for (b = 0; b < bits; ++b)
+        if (*v & (1<<b))
+            ++n;
+
+    return n;
+}
diff --git a/src/libsphinxbase/util/blas_lite.c b/src/libsphinxbase/util/blas_lite.c
new file mode 100644 (file)
index 0000000..c175eaa
--- /dev/null
@@ -0,0 +1,2147 @@
+/*
+NOTE: This is generated code. Look in README.python for information on
+      remaking this file.
+*/
+#include "sphinxbase/f2c.h"
+
+#ifdef HAVE_CONFIG
+#include "config.h"
+#else
+extern doublereal slamch_(char *);
+#define EPSILON slamch_("Epsilon")
+#define SAFEMINIMUM slamch_("Safe minimum")
+#define PRECISION slamch_("Precision")
+#define BASE slamch_("Base")
+#endif
+
+
+extern doublereal slapy2_(real *, real *);
+
+
+
+/* Table of constant values */
+
+static integer c__1 = 1;
+
+logical lsame_(char *ca, char *cb)
+{
+    /* System generated locals */
+    logical ret_val;
+
+    /* Local variables */
+    static integer inta, intb, zcode;
+
+
+/*
+    -- LAPACK auxiliary routine (version 3.0) --
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+       Courant Institute, Argonne National Lab, and Rice University
+       September 30, 1994
+
+
+    Purpose
+    =======
+
+    LSAME returns .TRUE. if CA is the same letter as CB regardless of
+    case.
+
+    Arguments
+    =========
+
+    CA      (input) CHARACTER*1
+    CB      (input) CHARACTER*1
+            CA and CB specify the single characters to be compared.
+
+   =====================================================================
+
+
+       Test if the characters are equal
+*/
+
+    ret_val = *(unsigned char *)ca == *(unsigned char *)cb;
+    if (ret_val) {
+       return ret_val;
+    }
+
+/*     Now test for equivalence if both characters are alphabetic. */
+
+    zcode = 'Z';
+
+/*
+       Use 'Z' rather than 'A' so that ASCII can be detected on Prime
+       machines, on which ICHAR returns a value with bit 8 set.
+       ICHAR('A') on Prime machines returns 193 which is the same as
+       ICHAR('A') on an EBCDIC machine.
+*/
+
+    inta = *(unsigned char *)ca;
+    intb = *(unsigned char *)cb;
+
+    if (zcode == 90 || zcode == 122) {
+
+/*
+          ASCII is assumed - ZCODE is the ASCII code of either lower or
+          upper case 'Z'.
+*/
+
+       if (inta >= 97 && inta <= 122) {
+           inta += -32;
+       }
+       if (intb >= 97 && intb <= 122) {
+           intb += -32;
+       }
+
+    } else if (zcode == 233 || zcode == 169) {
+
+/*
+          EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or
+          upper case 'Z'.
+*/
+
+       if (inta >= 129 && inta <= 137 || inta >= 145 && inta <= 153 || inta
+               >= 162 && inta <= 169) {
+           inta += 64;
+       }
+       if (intb >= 129 && intb <= 137 || intb >= 145 && intb <= 153 || intb
+               >= 162 && intb <= 169) {
+           intb += 64;
+       }
+
+    } else if (zcode == 218 || zcode == 250) {
+
+/*
+          ASCII is assumed, on Prime machines - ZCODE is the ASCII code
+          plus 128 of either lower or upper case 'Z'.
+*/
+
+       if (inta >= 225 && inta <= 250) {
+           inta += -32;
+       }
+       if (intb >= 225 && intb <= 250) {
+           intb += -32;
+       }
+    }
+    ret_val = inta == intb;
+
+/*
+       RETURN
+
+       End of LSAME
+*/
+
+    return ret_val;
+} /* lsame_ */
+
+doublereal sdot_(integer *n, real *sx, integer *incx, real *sy, integer *incy)
+{
+    /* System generated locals */
+    integer i__1;
+    real ret_val;
+
+    /* Local variables */
+    static integer i__, m, ix, iy, mp1;
+    static real stemp;
+
+
+/*
+       forms the dot product of two vectors.
+       uses unrolled loops for increments equal to one.
+       jack dongarra, linpack, 3/11/78.
+       modified 12/3/93, array(1) declarations changed to array(*)
+*/
+
+
+    /* Parameter adjustments */
+    --sy;
+    --sx;
+
+    /* Function Body */
+    stemp = 0.f;
+    ret_val = 0.f;
+    if (*n <= 0) {
+       return ret_val;
+    }
+    if (*incx == 1 && *incy == 1) {
+       goto L20;
+    }
+
+/*
+          code for unequal increments or equal increments
+            not equal to 1
+*/
+
+    ix = 1;
+    iy = 1;
+    if (*incx < 0) {
+       ix = (-(*n) + 1) * *incx + 1;
+    }
+    if (*incy < 0) {
+       iy = (-(*n) + 1) * *incy + 1;
+    }
+    i__1 = *n;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+       stemp += sx[ix] * sy[iy];
+       ix += *incx;
+       iy += *incy;
+/* L10: */
+    }
+    ret_val = stemp;
+    return ret_val;
+
+/*
+          code for both increments equal to 1
+
+
+          clean-up loop
+*/
+
+L20:
+    m = *n % 5;
+    if (m == 0) {
+       goto L40;
+    }
+    i__1 = m;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+       stemp += sx[i__] * sy[i__];
+/* L30: */
+    }
+    if (*n < 5) {
+       goto L60;
+    }
+L40:
+    mp1 = m + 1;
+    i__1 = *n;
+    for (i__ = mp1; i__ <= i__1; i__ += 5) {
+       stemp = stemp + sx[i__] * sy[i__] + sx[i__ + 1] * sy[i__ + 1] + sx[
+               i__ + 2] * sy[i__ + 2] + sx[i__ + 3] * sy[i__ + 3] + sx[i__ +
+               4] * sy[i__ + 4];
+/* L50: */
+    }
+L60:
+    ret_val = stemp;
+    return ret_val;
+} /* sdot_ */
+
+/* Subroutine */ int sgemm_(char *transa, char *transb, integer *m, integer *
+       n, integer *k, real *alpha, real *a, integer *lda, real *b, integer *
+       ldb, real *beta, real *c__, integer *ldc)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, b_dim1, b_offset, c_dim1, c_offset, i__1, i__2,
+           i__3;
+
+    /* Local variables */
+    static integer i__, j, l, info;
+    static logical nota, notb;
+    static real temp;
+    static integer ncola;
+    extern logical lsame_(char *, char *);
+    static integer nrowa, nrowb;
+    extern /* Subroutine */ int xerbla_(char *, integer *);
+
+
+/*
+    Purpose
+    =======
+
+    SGEMM  performs one of the matrix-matrix operations
+
+       C := alpha*op( A )*op( B ) + beta*C,
+
+    where  op( X ) is one of
+
+       op( X ) = X   or   op( X ) = X',
+
+    alpha and beta are scalars, and A, B and C are matrices, with op( A )
+    an m by k matrix,  op( B )  a  k by n matrix and  C an m by n matrix.
+
+    Parameters
+    ==========
+
+    TRANSA - CHARACTER*1.
+             On entry, TRANSA specifies the form of op( A ) to be used in
+             the matrix multiplication as follows:
+
+                TRANSA = 'N' or 'n',  op( A ) = A.
+
+                TRANSA = 'T' or 't',  op( A ) = A'.
+
+                TRANSA = 'C' or 'c',  op( A ) = A'.
+
+             Unchanged on exit.
+
+    TRANSB - CHARACTER*1.
+             On entry, TRANSB specifies the form of op( B ) to be used in
+             the matrix multiplication as follows:
+
+                TRANSB = 'N' or 'n',  op( B ) = B.
+
+                TRANSB = 'T' or 't',  op( B ) = B'.
+
+                TRANSB = 'C' or 'c',  op( B ) = B'.
+
+             Unchanged on exit.
+
+    M      - INTEGER.
+             On entry,  M  specifies  the number  of rows  of the  matrix
+             op( A )  and of the  matrix  C.  M  must  be at least  zero.
+             Unchanged on exit.
+
+    N      - INTEGER.
+             On entry,  N  specifies the number  of columns of the matrix
+             op( B ) and the number of columns of the matrix C. N must be
+             at least zero.
+             Unchanged on exit.
+
+    K      - INTEGER.
+             On entry,  K  specifies  the number of columns of the matrix
+             op( A ) and the number of rows of the matrix op( B ). K must
+             be at least  zero.
+             Unchanged on exit.
+
+    ALPHA  - REAL            .
+             On entry, ALPHA specifies the scalar alpha.
+             Unchanged on exit.
+
+    A      - REAL             array of DIMENSION ( LDA, ka ), where ka is
+             k  when  TRANSA = 'N' or 'n',  and is  m  otherwise.
+             Before entry with  TRANSA = 'N' or 'n',  the leading  m by k
+             part of the array  A  must contain the matrix  A,  otherwise
+             the leading  k by m  part of the array  A  must contain  the
+             matrix A.
+             Unchanged on exit.
+
+    LDA    - INTEGER.
+             On entry, LDA specifies the first dimension of A as declared
+             in the calling (sub) program. When  TRANSA = 'N' or 'n' then
+             LDA must be at least  max( 1, m ), otherwise  LDA must be at
+             least  max( 1, k ).
+             Unchanged on exit.
+
+    B      - REAL             array of DIMENSION ( LDB, kb ), where kb is
+             n  when  TRANSB = 'N' or 'n',  and is  k  otherwise.
+             Before entry with  TRANSB = 'N' or 'n',  the leading  k by n
+             part of the array  B  must contain the matrix  B,  otherwise
+             the leading  n by k  part of the array  B  must contain  the
+             matrix B.
+             Unchanged on exit.
+
+    LDB    - INTEGER.
+             On entry, LDB specifies the first dimension of B as declared
+             in the calling (sub) program. When  TRANSB = 'N' or 'n' then
+             LDB must be at least  max( 1, k ), otherwise  LDB must be at
+             least  max( 1, n ).
+             Unchanged on exit.
+
+    BETA   - REAL            .
+             On entry,  BETA  specifies the scalar  beta.  When  BETA  is
+             supplied as zero then C need not be set on input.
+             Unchanged on exit.
+
+    C      - REAL             array of DIMENSION ( LDC, n ).
+             Before entry, the leading  m by n  part of the array  C must
+             contain the matrix  C,  except when  beta  is zero, in which
+             case C need not be set on entry.
+             On exit, the array  C  is overwritten by the  m by n  matrix
+             ( alpha*op( A )*op( B ) + beta*C ).
+
+    LDC    - INTEGER.
+             On entry, LDC specifies the first dimension of C as declared
+             in  the  calling  (sub)  program.   LDC  must  be  at  least
+             max( 1, m ).
+             Unchanged on exit.
+
+
+    Level 3 Blas routine.
+
+    -- Written on 8-February-1989.
+       Jack Dongarra, Argonne National Laboratory.
+       Iain Duff, AERE Harwell.
+       Jeremy Du Croz, Numerical Algorithms Group Ltd.
+       Sven Hammarling, Numerical Algorithms Group Ltd.
+
+
+       Set  NOTA  and  NOTB  as  true if  A  and  B  respectively are not
+       transposed and set  NROWA, NCOLA and  NROWB  as the number of rows
+       and  columns of  A  and the  number of  rows  of  B  respectively.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+    b_dim1 = *ldb;
+    b_offset = 1 + b_dim1;
+    b -= b_offset;
+    c_dim1 = *ldc;
+    c_offset = 1 + c_dim1;
+    c__ -= c_offset;
+
+    /* Function Body */
+    nota = lsame_(transa, "N");
+    notb = lsame_(transb, "N");
+    if (nota) {
+       nrowa = *m;
+       ncola = *k;
+    } else {
+       nrowa = *k;
+       ncola = *m;
+    }
+    if (notb) {
+       nrowb = *k;
+    } else {
+       nrowb = *n;
+    }
+
+/*     Test the input parameters. */
+
+    info = 0;
+    if (! nota && ! lsame_(transa, "C") && ! lsame_(
+           transa, "T")) {
+       info = 1;
+    } else if (! notb && ! lsame_(transb, "C") && !
+           lsame_(transb, "T")) {
+       info = 2;
+    } else if (*m < 0) {
+       info = 3;
+    } else if (*n < 0) {
+       info = 4;
+    } else if (*k < 0) {
+       info = 5;
+    } else if (*lda < max(1,nrowa)) {
+       info = 8;
+    } else if (*ldb < max(1,nrowb)) {
+       info = 10;
+    } else if (*ldc < max(1,*m)) {
+       info = 13;
+    }
+    if (info != 0) {
+       xerbla_("SGEMM ", &info);
+       return 0;
+    }
+
+/*     Quick return if possible. */
+
+    if (*m == 0 || *n == 0 || (*alpha == 0.f || *k == 0) && *beta == 1.f) {
+       return 0;
+    }
+
+/*     And if  alpha.eq.zero. */
+
+    if (*alpha == 0.f) {
+       if (*beta == 0.f) {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   c__[i__ + j * c_dim1] = 0.f;
+/* L10: */
+               }
+/* L20: */
+           }
+       } else {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
+/* L30: */
+               }
+/* L40: */
+           }
+       }
+       return 0;
+    }
+
+/*     Start the operations. */
+
+    if (notb) {
+       if (nota) {
+
+/*           Form  C := alpha*A*B + beta*C. */
+
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               if (*beta == 0.f) {
+                   i__2 = *m;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = 0.f;
+/* L50: */
+                   }
+               } else if (*beta != 1.f) {
+                   i__2 = *m;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
+/* L60: */
+                   }
+               }
+               i__2 = *k;
+               for (l = 1; l <= i__2; ++l) {
+                   if (b[l + j * b_dim1] != 0.f) {
+                       temp = *alpha * b[l + j * b_dim1];
+                       i__3 = *m;
+                       for (i__ = 1; i__ <= i__3; ++i__) {
+                           c__[i__ + j * c_dim1] += temp * a[i__ + l *
+                                   a_dim1];
+/* L70: */
+                       }
+                   }
+/* L80: */
+               }
+/* L90: */
+           }
+       } else {
+
+/*           Form  C := alpha*A'*B + beta*C */
+
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   temp = 0.f;
+                   i__3 = *k;
+                   for (l = 1; l <= i__3; ++l) {
+                       temp += a[l + i__ * a_dim1] * b[l + j * b_dim1];
+/* L100: */
+                   }
+                   if (*beta == 0.f) {
+                       c__[i__ + j * c_dim1] = *alpha * temp;
+                   } else {
+                       c__[i__ + j * c_dim1] = *alpha * temp + *beta * c__[
+                               i__ + j * c_dim1];
+                   }
+/* L110: */
+               }
+/* L120: */
+           }
+       }
+    } else {
+       if (nota) {
+
+/*           Form  C := alpha*A*B' + beta*C */
+
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               if (*beta == 0.f) {
+                   i__2 = *m;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = 0.f;
+/* L130: */
+                   }
+               } else if (*beta != 1.f) {
+                   i__2 = *m;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
+/* L140: */
+                   }
+               }
+               i__2 = *k;
+               for (l = 1; l <= i__2; ++l) {
+                   if (b[j + l * b_dim1] != 0.f) {
+                       temp = *alpha * b[j + l * b_dim1];
+                       i__3 = *m;
+                       for (i__ = 1; i__ <= i__3; ++i__) {
+                           c__[i__ + j * c_dim1] += temp * a[i__ + l *
+                                   a_dim1];
+/* L150: */
+                       }
+                   }
+/* L160: */
+               }
+/* L170: */
+           }
+       } else {
+
+/*           Form  C := alpha*A'*B' + beta*C */
+
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   temp = 0.f;
+                   i__3 = *k;
+                   for (l = 1; l <= i__3; ++l) {
+                       temp += a[l + i__ * a_dim1] * b[j + l * b_dim1];
+/* L180: */
+                   }
+                   if (*beta == 0.f) {
+                       c__[i__ + j * c_dim1] = *alpha * temp;
+                   } else {
+                       c__[i__ + j * c_dim1] = *alpha * temp + *beta * c__[
+                               i__ + j * c_dim1];
+                   }
+/* L190: */
+               }
+/* L200: */
+           }
+       }
+    }
+
+    return 0;
+
+/*     End of SGEMM . */
+
+} /* sgemm_ */
+
+/* Subroutine */ int sgemv_(char *trans, integer *m, integer *n, real *alpha,
+       real *a, integer *lda, real *x, integer *incx, real *beta, real *y,
+       integer *incy)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, i__1, i__2;
+
+    /* Local variables */
+    static integer i__, j, ix, iy, jx, jy, kx, ky, info;
+    static real temp;
+    static integer lenx, leny;
+    extern logical lsame_(char *, char *);
+    extern /* Subroutine */ int xerbla_(char *, integer *);
+
+
+/*
+    Purpose
+    =======
+
+    SGEMV  performs one of the matrix-vector operations
+
+       y := alpha*A*x + beta*y,   or   y := alpha*A'*x + beta*y,
+
+    where alpha and beta are scalars, x and y are vectors and A is an
+    m by n matrix.
+
+    Parameters
+    ==========
+
+    TRANS  - CHARACTER*1.
+             On entry, TRANS specifies the operation to be performed as
+             follows:
+
+                TRANS = 'N' or 'n'   y := alpha*A*x + beta*y.
+
+                TRANS = 'T' or 't'   y := alpha*A'*x + beta*y.
+
+                TRANS = 'C' or 'c'   y := alpha*A'*x + beta*y.
+
+             Unchanged on exit.
+
+    M      - INTEGER.
+             On entry, M specifies the number of rows of the matrix A.
+             M must be at least zero.
+             Unchanged on exit.
+
+    N      - INTEGER.
+             On entry, N specifies the number of columns of the matrix A.
+             N must be at least zero.
+             Unchanged on exit.
+
+    ALPHA  - REAL            .
+             On entry, ALPHA specifies the scalar alpha.
+             Unchanged on exit.
+
+    A      - REAL             array of DIMENSION ( LDA, n ).
+             Before entry, the leading m by n part of the array A must
+             contain the matrix of coefficients.
+             Unchanged on exit.
+
+    LDA    - INTEGER.
+             On entry, LDA specifies the first dimension of A as declared
+             in the calling (sub) program. LDA must be at least
+             max( 1, m ).
+             Unchanged on exit.
+
+    X      - REAL             array of DIMENSION at least
+             ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n'
+             and at least
+             ( 1 + ( m - 1 )*abs( INCX ) ) otherwise.
+             Before entry, the incremented array X must contain the
+             vector x.
+             Unchanged on exit.
+
+    INCX   - INTEGER.
+             On entry, INCX specifies the increment for the elements of
+             X. INCX must not be zero.
+             Unchanged on exit.
+
+    BETA   - REAL            .
+             On entry, BETA specifies the scalar beta. When BETA is
+             supplied as zero then Y need not be set on input.
+             Unchanged on exit.
+
+    Y      - REAL             array of DIMENSION at least
+             ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n'
+             and at least
+             ( 1 + ( n - 1 )*abs( INCY ) ) otherwise.
+             Before entry with BETA non-zero, the incremented array Y
+             must contain the vector y. On exit, Y is overwritten by the
+             updated vector y.
+
+    INCY   - INTEGER.
+             On entry, INCY specifies the increment for the elements of
+             Y. INCY must not be zero.
+             Unchanged on exit.
+
+
+    Level 2 Blas routine.
+
+    -- Written on 22-October-1986.
+       Jack Dongarra, Argonne National Lab.
+       Jeremy Du Croz, Nag Central Office.
+       Sven Hammarling, Nag Central Office.
+       Richard Hanson, Sandia National Labs.
+
+
+       Test the input parameters.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+    --x;
+    --y;
+
+    /* Function Body */
+    info = 0;
+    if (! lsame_(trans, "N") && ! lsame_(trans, "T") && ! lsame_(trans, "C")
+           ) {
+       info = 1;
+    } else if (*m < 0) {
+       info = 2;
+    } else if (*n < 0) {
+       info = 3;
+    } else if (*lda < max(1,*m)) {
+       info = 6;
+    } else if (*incx == 0) {
+       info = 8;
+    } else if (*incy == 0) {
+       info = 11;
+    }
+    if (info != 0) {
+       xerbla_("SGEMV ", &info);
+       return 0;
+    }
+
+/*     Quick return if possible. */
+
+    if (*m == 0 || *n == 0 || *alpha == 0.f && *beta == 1.f) {
+       return 0;
+    }
+
+/*
+       Set  LENX  and  LENY, the lengths of the vectors x and y, and set
+       up the start points in  X  and  Y.
+*/
+
+    if (lsame_(trans, "N")) {
+       lenx = *n;
+       leny = *m;
+    } else {
+       lenx = *m;
+       leny = *n;
+    }
+    if (*incx > 0) {
+       kx = 1;
+    } else {
+       kx = 1 - (lenx - 1) * *incx;
+    }
+    if (*incy > 0) {
+       ky = 1;
+    } else {
+       ky = 1 - (leny - 1) * *incy;
+    }
+
+/*
+       Start the operations. In this version the elements of A are
+       accessed sequentially with one pass through A.
+
+       First form  y := beta*y.
+*/
+
+    if (*beta != 1.f) {
+       if (*incy == 1) {
+           if (*beta == 0.f) {
+               i__1 = leny;
+               for (i__ = 1; i__ <= i__1; ++i__) {
+                   y[i__] = 0.f;
+/* L10: */
+               }
+           } else {
+               i__1 = leny;
+               for (i__ = 1; i__ <= i__1; ++i__) {
+                   y[i__] = *beta * y[i__];
+/* L20: */
+               }
+           }
+       } else {
+           iy = ky;
+           if (*beta == 0.f) {
+               i__1 = leny;
+               for (i__ = 1; i__ <= i__1; ++i__) {
+                   y[iy] = 0.f;
+                   iy += *incy;
+/* L30: */
+               }
+           } else {
+               i__1 = leny;
+               for (i__ = 1; i__ <= i__1; ++i__) {
+                   y[iy] = *beta * y[iy];
+                   iy += *incy;
+/* L40: */
+               }
+           }
+       }
+    }
+    if (*alpha == 0.f) {
+       return 0;
+    }
+    if (lsame_(trans, "N")) {
+
+/*        Form  y := alpha*A*x + y. */
+
+       jx = kx;
+       if (*incy == 1) {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               if (x[jx] != 0.f) {
+                   temp = *alpha * x[jx];
+                   i__2 = *m;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       y[i__] += temp * a[i__ + j * a_dim1];
+/* L50: */
+                   }
+               }
+               jx += *incx;
+/* L60: */
+           }
+       } else {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               if (x[jx] != 0.f) {
+                   temp = *alpha * x[jx];
+                   iy = ky;
+                   i__2 = *m;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       y[iy] += temp * a[i__ + j * a_dim1];
+                       iy += *incy;
+/* L70: */
+                   }
+               }
+               jx += *incx;
+/* L80: */
+           }
+       }
+    } else {
+
+/*        Form  y := alpha*A'*x + y. */
+
+       jy = ky;
+       if (*incx == 1) {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               temp = 0.f;
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   temp += a[i__ + j * a_dim1] * x[i__];
+/* L90: */
+               }
+               y[jy] += *alpha * temp;
+               jy += *incy;
+/* L100: */
+           }
+       } else {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               temp = 0.f;
+               ix = kx;
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   temp += a[i__ + j * a_dim1] * x[ix];
+                   ix += *incx;
+/* L110: */
+               }
+               y[jy] += *alpha * temp;
+               jy += *incy;
+/* L120: */
+           }
+       }
+    }
+
+    return 0;
+
+/*     End of SGEMV . */
+
+} /* sgemv_ */
+
+/* Subroutine */ int sscal_(integer *n, real *sa, real *sx, integer *incx)
+{
+    /* System generated locals */
+    integer i__1, i__2;
+
+    /* Local variables */
+    static integer i__, m, mp1, nincx;
+
+
+/*
+       scales a vector by a constant.
+       uses unrolled loops for increment equal to 1.
+       jack dongarra, linpack, 3/11/78.
+       modified 3/93 to return if incx .le. 0.
+       modified 12/3/93, array(1) declarations changed to array(*)
+*/
+
+
+    /* Parameter adjustments */
+    --sx;
+
+    /* Function Body */
+    if (*n <= 0 || *incx <= 0) {
+       return 0;
+    }
+    if (*incx == 1) {
+       goto L20;
+    }
+
+/*        code for increment not equal to 1 */
+
+    nincx = *n * *incx;
+    i__1 = nincx;
+    i__2 = *incx;
+    for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
+       sx[i__] = *sa * sx[i__];
+/* L10: */
+    }
+    return 0;
+
+/*
+          code for increment equal to 1
+
+
+          clean-up loop
+*/
+
+L20:
+    m = *n % 5;
+    if (m == 0) {
+       goto L40;
+    }
+    i__2 = m;
+    for (i__ = 1; i__ <= i__2; ++i__) {
+       sx[i__] = *sa * sx[i__];
+/* L30: */
+    }
+    if (*n < 5) {
+       return 0;
+    }
+L40:
+    mp1 = m + 1;
+    i__2 = *n;
+    for (i__ = mp1; i__ <= i__2; i__ += 5) {
+       sx[i__] = *sa * sx[i__];
+       sx[i__ + 1] = *sa * sx[i__ + 1];
+       sx[i__ + 2] = *sa * sx[i__ + 2];
+       sx[i__ + 3] = *sa * sx[i__ + 3];
+       sx[i__ + 4] = *sa * sx[i__ + 4];
+/* L50: */
+    }
+    return 0;
+} /* sscal_ */
+
+/* Subroutine */ int ssymm_(char *side, char *uplo, integer *m, integer *n,
+       real *alpha, real *a, integer *lda, real *b, integer *ldb, real *beta,
+        real *c__, integer *ldc)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, b_dim1, b_offset, c_dim1, c_offset, i__1, i__2,
+           i__3;
+
+    /* Local variables */
+    static integer i__, j, k, info;
+    static real temp1, temp2;
+    extern logical lsame_(char *, char *);
+    static integer nrowa;
+    static logical upper;
+    extern /* Subroutine */ int xerbla_(char *, integer *);
+
+
+/*
+    Purpose
+    =======
+
+    SSYMM  performs one of the matrix-matrix operations
+
+       C := alpha*A*B + beta*C,
+
+    or
+
+       C := alpha*B*A + beta*C,
+
+    where alpha and beta are scalars,  A is a symmetric matrix and  B and
+    C are  m by n matrices.
+
+    Parameters
+    ==========
+
+    SIDE   - CHARACTER*1.
+             On entry,  SIDE  specifies whether  the  symmetric matrix  A
+             appears on the  left or right  in the  operation as follows:
+
+                SIDE = 'L' or 'l'   C := alpha*A*B + beta*C,
+
+                SIDE = 'R' or 'r'   C := alpha*B*A + beta*C,
+
+             Unchanged on exit.
+
+    UPLO   - CHARACTER*1.
+             On  entry,   UPLO  specifies  whether  the  upper  or  lower
+             triangular  part  of  the  symmetric  matrix   A  is  to  be
+             referenced as follows:
+
+                UPLO = 'U' or 'u'   Only the upper triangular part of the
+                                    symmetric matrix is to be referenced.
+
+                UPLO = 'L' or 'l'   Only the lower triangular part of the
+                                    symmetric matrix is to be referenced.
+
+             Unchanged on exit.
+
+    M      - INTEGER.
+             On entry,  M  specifies the number of rows of the matrix  C.
+             M  must be at least zero.
+             Unchanged on exit.
+
+    N      - INTEGER.
+             On entry, N specifies the number of columns of the matrix C.
+             N  must be at least zero.
+             Unchanged on exit.
+
+    ALPHA  - REAL            .
+             On entry, ALPHA specifies the scalar alpha.
+             Unchanged on exit.
+
+    A      - REAL             array of DIMENSION ( LDA, ka ), where ka is
+             m  when  SIDE = 'L' or 'l'  and is  n otherwise.
+             Before entry  with  SIDE = 'L' or 'l',  the  m by m  part of
+             the array  A  must contain the  symmetric matrix,  such that
+             when  UPLO = 'U' or 'u', the leading m by m upper triangular
+             part of the array  A  must contain the upper triangular part
+             of the  symmetric matrix and the  strictly  lower triangular
+             part of  A  is not referenced,  and when  UPLO = 'L' or 'l',
+             the leading  m by m  lower triangular part  of the  array  A
+             must  contain  the  lower triangular part  of the  symmetric
+             matrix and the  strictly upper triangular part of  A  is not
+             referenced.
+             Before entry  with  SIDE = 'R' or 'r',  the  n by n  part of
+             the array  A  must contain the  symmetric matrix,  such that
+             when  UPLO = 'U' or 'u', the leading n by n upper triangular
+             part of the array  A  must contain the upper triangular part
+             of the  symmetric matrix and the  strictly  lower triangular
+             part of  A  is not referenced,  and when  UPLO = 'L' or 'l',
+             the leading  n by n  lower triangular part  of the  array  A
+             must  contain  the  lower triangular part  of the  symmetric
+             matrix and the  strictly upper triangular part of  A  is not
+             referenced.
+             Unchanged on exit.
+
+    LDA    - INTEGER.
+             On entry, LDA specifies the first dimension of A as declared
+             in the calling (sub) program.  When  SIDE = 'L' or 'l'  then
+             LDA must be at least  max( 1, m ), otherwise  LDA must be at
+             least  max( 1, n ).
+             Unchanged on exit.
+
+    B      - REAL             array of DIMENSION ( LDB, n ).
+             Before entry, the leading  m by n part of the array  B  must
+             contain the matrix B.
+             Unchanged on exit.
+
+    LDB    - INTEGER.
+             On entry, LDB specifies the first dimension of B as declared
+             in  the  calling  (sub)  program.   LDB  must  be  at  least
+             max( 1, m ).
+             Unchanged on exit.
+
+    BETA   - REAL            .
+             On entry,  BETA  specifies the scalar  beta.  When  BETA  is
+             supplied as zero then C need not be set on input.
+             Unchanged on exit.
+
+    C      - REAL             array of DIMENSION ( LDC, n ).
+             Before entry, the leading  m by n  part of the array  C must
+             contain the matrix  C,  except when  beta  is zero, in which
+             case C need not be set on entry.
+             On exit, the array  C  is overwritten by the  m by n updated
+             matrix.
+
+    LDC    - INTEGER.
+             On entry, LDC specifies the first dimension of C as declared
+             in  the  calling  (sub)  program.   LDC  must  be  at  least
+             max( 1, m ).
+             Unchanged on exit.
+
+
+    Level 3 Blas routine.
+
+    -- Written on 8-February-1989.
+       Jack Dongarra, Argonne National Laboratory.
+       Iain Duff, AERE Harwell.
+       Jeremy Du Croz, Numerical Algorithms Group Ltd.
+       Sven Hammarling, Numerical Algorithms Group Ltd.
+
+
+       Set NROWA as the number of rows of A.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+    b_dim1 = *ldb;
+    b_offset = 1 + b_dim1;
+    b -= b_offset;
+    c_dim1 = *ldc;
+    c_offset = 1 + c_dim1;
+    c__ -= c_offset;
+
+    /* Function Body */
+    if (lsame_(side, "L")) {
+       nrowa = *m;
+    } else {
+       nrowa = *n;
+    }
+    upper = lsame_(uplo, "U");
+
+/*     Test the input parameters. */
+
+    info = 0;
+    if (! lsame_(side, "L") && ! lsame_(side, "R")) {
+       info = 1;
+    } else if (! upper && ! lsame_(uplo, "L")) {
+       info = 2;
+    } else if (*m < 0) {
+       info = 3;
+    } else if (*n < 0) {
+       info = 4;
+    } else if (*lda < max(1,nrowa)) {
+       info = 7;
+    } else if (*ldb < max(1,*m)) {
+       info = 9;
+    } else if (*ldc < max(1,*m)) {
+       info = 12;
+    }
+    if (info != 0) {
+       xerbla_("SSYMM ", &info);
+       return 0;
+    }
+
+/*     Quick return if possible. */
+
+    if (*m == 0 || *n == 0 || *alpha == 0.f && *beta == 1.f) {
+       return 0;
+    }
+
+/*     And when  alpha.eq.zero. */
+
+    if (*alpha == 0.f) {
+       if (*beta == 0.f) {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   c__[i__ + j * c_dim1] = 0.f;
+/* L10: */
+               }
+/* L20: */
+           }
+       } else {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
+/* L30: */
+               }
+/* L40: */
+           }
+       }
+       return 0;
+    }
+
+/*     Start the operations. */
+
+    if (lsame_(side, "L")) {
+
+/*        Form  C := alpha*A*B + beta*C. */
+
+       if (upper) {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   temp1 = *alpha * b[i__ + j * b_dim1];
+                   temp2 = 0.f;
+                   i__3 = i__ - 1;
+                   for (k = 1; k <= i__3; ++k) {
+                       c__[k + j * c_dim1] += temp1 * a[k + i__ * a_dim1];
+                       temp2 += b[k + j * b_dim1] * a[k + i__ * a_dim1];
+/* L50: */
+                   }
+                   if (*beta == 0.f) {
+                       c__[i__ + j * c_dim1] = temp1 * a[i__ + i__ * a_dim1]
+                               + *alpha * temp2;
+                   } else {
+                       c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1]
+                               + temp1 * a[i__ + i__ * a_dim1] + *alpha *
+                               temp2;
+                   }
+/* L60: */
+               }
+/* L70: */
+           }
+       } else {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               for (i__ = *m; i__ >= 1; --i__) {
+                   temp1 = *alpha * b[i__ + j * b_dim1];
+                   temp2 = 0.f;
+                   i__2 = *m;
+                   for (k = i__ + 1; k <= i__2; ++k) {
+                       c__[k + j * c_dim1] += temp1 * a[k + i__ * a_dim1];
+                       temp2 += b[k + j * b_dim1] * a[k + i__ * a_dim1];
+/* L80: */
+                   }
+                   if (*beta == 0.f) {
+                       c__[i__ + j * c_dim1] = temp1 * a[i__ + i__ * a_dim1]
+                               + *alpha * temp2;
+                   } else {
+                       c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1]
+                               + temp1 * a[i__ + i__ * a_dim1] + *alpha *
+                               temp2;
+                   }
+/* L90: */
+               }
+/* L100: */
+           }
+       }
+    } else {
+
+/*        Form  C := alpha*B*A + beta*C. */
+
+       i__1 = *n;
+       for (j = 1; j <= i__1; ++j) {
+           temp1 = *alpha * a[j + j * a_dim1];
+           if (*beta == 0.f) {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   c__[i__ + j * c_dim1] = temp1 * b[i__ + j * b_dim1];
+/* L110: */
+               }
+           } else {
+               i__2 = *m;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1] +
+                           temp1 * b[i__ + j * b_dim1];
+/* L120: */
+               }
+           }
+           i__2 = j - 1;
+           for (k = 1; k <= i__2; ++k) {
+               if (upper) {
+                   temp1 = *alpha * a[k + j * a_dim1];
+               } else {
+                   temp1 = *alpha * a[j + k * a_dim1];
+               }
+               i__3 = *m;
+               for (i__ = 1; i__ <= i__3; ++i__) {
+                   c__[i__ + j * c_dim1] += temp1 * b[i__ + k * b_dim1];
+/* L130: */
+               }
+/* L140: */
+           }
+           i__2 = *n;
+           for (k = j + 1; k <= i__2; ++k) {
+               if (upper) {
+                   temp1 = *alpha * a[j + k * a_dim1];
+               } else {
+                   temp1 = *alpha * a[k + j * a_dim1];
+               }
+               i__3 = *m;
+               for (i__ = 1; i__ <= i__3; ++i__) {
+                   c__[i__ + j * c_dim1] += temp1 * b[i__ + k * b_dim1];
+/* L150: */
+               }
+/* L160: */
+           }
+/* L170: */
+       }
+    }
+
+    return 0;
+
+/*     End of SSYMM . */
+
+} /* ssymm_ */
+
+/* Subroutine */ int ssyrk_(char *uplo, char *trans, integer *n, integer *k,
+       real *alpha, real *a, integer *lda, real *beta, real *c__, integer *
+       ldc)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, c_dim1, c_offset, i__1, i__2, i__3;
+
+    /* Local variables */
+    static integer i__, j, l, info;
+    static real temp;
+    extern logical lsame_(char *, char *);
+    static integer nrowa;
+    static logical upper;
+    extern /* Subroutine */ int xerbla_(char *, integer *);
+
+
+/*
+    Purpose
+    =======
+
+    SSYRK  performs one of the symmetric rank k operations
+
+       C := alpha*A*A' + beta*C,
+
+    or
+
+       C := alpha*A'*A + beta*C,
+
+    where  alpha and beta  are scalars, C is an  n by n  symmetric matrix
+    and  A  is an  n by k  matrix in the first case and a  k by n  matrix
+    in the second case.
+
+    Parameters
+    ==========
+
+    UPLO   - CHARACTER*1.
+             On  entry,   UPLO  specifies  whether  the  upper  or  lower
+             triangular  part  of the  array  C  is to be  referenced  as
+             follows:
+
+                UPLO = 'U' or 'u'   Only the  upper triangular part of  C
+                                    is to be referenced.
+
+                UPLO = 'L' or 'l'   Only the  lower triangular part of  C
+                                    is to be referenced.
+
+             Unchanged on exit.
+
+    TRANS  - CHARACTER*1.
+             On entry,  TRANS  specifies the operation to be performed as
+             follows:
+
+                TRANS = 'N' or 'n'   C := alpha*A*A' + beta*C.
+
+                TRANS = 'T' or 't'   C := alpha*A'*A + beta*C.
+
+                TRANS = 'C' or 'c'   C := alpha*A'*A + beta*C.
+
+             Unchanged on exit.
+
+    N      - INTEGER.
+             On entry,  N specifies the order of the matrix C.  N must be
+             at least zero.
+             Unchanged on exit.
+
+    K      - INTEGER.
+             On entry with  TRANS = 'N' or 'n',  K  specifies  the number
+             of  columns   of  the   matrix   A,   and  on   entry   with
+             TRANS = 'T' or 't' or 'C' or 'c',  K  specifies  the  number
+             of rows of the matrix  A.  K must be at least zero.
+             Unchanged on exit.
+
+    ALPHA  - REAL            .
+             On entry, ALPHA specifies the scalar alpha.
+             Unchanged on exit.
+
+    A      - REAL             array of DIMENSION ( LDA, ka ), where ka is
+             k  when  TRANS = 'N' or 'n',  and is  n  otherwise.
+             Before entry with  TRANS = 'N' or 'n',  the  leading  n by k
+             part of the array  A  must contain the matrix  A,  otherwise
+             the leading  k by n  part of the array  A  must contain  the
+             matrix A.
+             Unchanged on exit.
+
+    LDA    - INTEGER.
+             On entry, LDA specifies the first dimension of A as declared
+             in  the  calling  (sub)  program.   When  TRANS = 'N' or 'n'
+             then  LDA must be at least  max( 1, n ), otherwise  LDA must
+             be at least  max( 1, k ).
+             Unchanged on exit.
+
+    BETA   - REAL            .
+             On entry, BETA specifies the scalar beta.
+             Unchanged on exit.
+
+    C      - REAL             array of DIMENSION ( LDC, n ).
+             Before entry  with  UPLO = 'U' or 'u',  the leading  n by n
+             upper triangular part of the array C must contain the upper
+             triangular part  of the  symmetric matrix  and the strictly
+             lower triangular part of C is not referenced.  On exit, the
+             upper triangular part of the array  C is overwritten by the
+             upper triangular part of the updated matrix.
+             Before entry  with  UPLO = 'L' or 'l',  the leading  n by n
+             lower triangular part of the array C must contain the lower
+             triangular part  of the  symmetric matrix  and the strictly
+             upper triangular part of C is not referenced.  On exit, the
+             lower triangular part of the array  C is overwritten by the
+             lower triangular part of the updated matrix.
+
+    LDC    - INTEGER.
+             On entry, LDC specifies the first dimension of C as declared
+             in  the  calling  (sub)  program.   LDC  must  be  at  least
+             max( 1, n ).
+             Unchanged on exit.
+
+
+    Level 3 Blas routine.
+
+    -- Written on 8-February-1989.
+       Jack Dongarra, Argonne National Laboratory.
+       Iain Duff, AERE Harwell.
+       Jeremy Du Croz, Numerical Algorithms Group Ltd.
+       Sven Hammarling, Numerical Algorithms Group Ltd.
+
+
+       Test the input parameters.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+    c_dim1 = *ldc;
+    c_offset = 1 + c_dim1;
+    c__ -= c_offset;
+
+    /* Function Body */
+    if (lsame_(trans, "N")) {
+       nrowa = *n;
+    } else {
+       nrowa = *k;
+    }
+    upper = lsame_(uplo, "U");
+
+    info = 0;
+    if (! upper && ! lsame_(uplo, "L")) {
+       info = 1;
+    } else if (! lsame_(trans, "N") && ! lsame_(trans,
+           "T") && ! lsame_(trans, "C")) {
+       info = 2;
+    } else if (*n < 0) {
+       info = 3;
+    } else if (*k < 0) {
+       info = 4;
+    } else if (*lda < max(1,nrowa)) {
+       info = 7;
+    } else if (*ldc < max(1,*n)) {
+       info = 10;
+    }
+    if (info != 0) {
+       xerbla_("SSYRK ", &info);
+       return 0;
+    }
+
+/*     Quick return if possible. */
+
+    if (*n == 0 || (*alpha == 0.f || *k == 0) && *beta == 1.f) {
+       return 0;
+    }
+
+/*     And when  alpha.eq.zero. */
+
+    if (*alpha == 0.f) {
+       if (upper) {
+           if (*beta == 0.f) {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   i__2 = j;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = 0.f;
+/* L10: */
+                   }
+/* L20: */
+               }
+           } else {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   i__2 = j;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
+/* L30: */
+                   }
+/* L40: */
+               }
+           }
+       } else {
+           if (*beta == 0.f) {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   i__2 = *n;
+                   for (i__ = j; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = 0.f;
+/* L50: */
+                   }
+/* L60: */
+               }
+           } else {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   i__2 = *n;
+                   for (i__ = j; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
+/* L70: */
+                   }
+/* L80: */
+               }
+           }
+       }
+       return 0;
+    }
+
+/*     Start the operations. */
+
+    if (lsame_(trans, "N")) {
+
+/*        Form  C := alpha*A*A' + beta*C. */
+
+       if (upper) {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               if (*beta == 0.f) {
+                   i__2 = j;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = 0.f;
+/* L90: */
+                   }
+               } else if (*beta != 1.f) {
+                   i__2 = j;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
+/* L100: */
+                   }
+               }
+               i__2 = *k;
+               for (l = 1; l <= i__2; ++l) {
+                   if (a[j + l * a_dim1] != 0.f) {
+                       temp = *alpha * a[j + l * a_dim1];
+                       i__3 = j;
+                       for (i__ = 1; i__ <= i__3; ++i__) {
+                           c__[i__ + j * c_dim1] += temp * a[i__ + l *
+                                   a_dim1];
+/* L110: */
+                       }
+                   }
+/* L120: */
+               }
+/* L130: */
+           }
+       } else {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               if (*beta == 0.f) {
+                   i__2 = *n;
+                   for (i__ = j; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = 0.f;
+/* L140: */
+                   }
+               } else if (*beta != 1.f) {
+                   i__2 = *n;
+                   for (i__ = j; i__ <= i__2; ++i__) {
+                       c__[i__ + j * c_dim1] = *beta * c__[i__ + j * c_dim1];
+/* L150: */
+                   }
+               }
+               i__2 = *k;
+               for (l = 1; l <= i__2; ++l) {
+                   if (a[j + l * a_dim1] != 0.f) {
+                       temp = *alpha * a[j + l * a_dim1];
+                       i__3 = *n;
+                       for (i__ = j; i__ <= i__3; ++i__) {
+                           c__[i__ + j * c_dim1] += temp * a[i__ + l *
+                                   a_dim1];
+/* L160: */
+                       }
+                   }
+/* L170: */
+               }
+/* L180: */
+           }
+       }
+    } else {
+
+/*        Form  C := alpha*A'*A + beta*C. */
+
+       if (upper) {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = j;
+               for (i__ = 1; i__ <= i__2; ++i__) {
+                   temp = 0.f;
+                   i__3 = *k;
+                   for (l = 1; l <= i__3; ++l) {
+                       temp += a[l + i__ * a_dim1] * a[l + j * a_dim1];
+/* L190: */
+                   }
+                   if (*beta == 0.f) {
+                       c__[i__ + j * c_dim1] = *alpha * temp;
+                   } else {
+                       c__[i__ + j * c_dim1] = *alpha * temp + *beta * c__[
+                               i__ + j * c_dim1];
+                   }
+/* L200: */
+               }
+/* L210: */
+           }
+       } else {
+           i__1 = *n;
+           for (j = 1; j <= i__1; ++j) {
+               i__2 = *n;
+               for (i__ = j; i__ <= i__2; ++i__) {
+                   temp = 0.f;
+                   i__3 = *k;
+                   for (l = 1; l <= i__3; ++l) {
+                       temp += a[l + i__ * a_dim1] * a[l + j * a_dim1];
+/* L220: */
+                   }
+                   if (*beta == 0.f) {
+                       c__[i__ + j * c_dim1] = *alpha * temp;
+                   } else {
+                       c__[i__ + j * c_dim1] = *alpha * temp + *beta * c__[
+                               i__ + j * c_dim1];
+                   }
+/* L230: */
+               }
+/* L240: */
+           }
+       }
+    }
+
+    return 0;
+
+/*     End of SSYRK . */
+
+} /* ssyrk_ */
+
+/* Subroutine */ int strsm_(char *side, char *uplo, char *transa, char *diag,
+       integer *m, integer *n, real *alpha, real *a, integer *lda, real *b,
+       integer *ldb)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, b_dim1, b_offset, i__1, i__2, i__3;
+
+    /* Local variables */
+    static integer i__, j, k, info;
+    static real temp;
+    static logical lside;
+    extern logical lsame_(char *, char *);
+    static integer nrowa;
+    static logical upper;
+    extern /* Subroutine */ int xerbla_(char *, integer *);
+    static logical nounit;
+
+
+/*
+    Purpose
+    =======
+
+    STRSM  solves one of the matrix equations
+
+       op( A )*X = alpha*B,   or   X*op( A ) = alpha*B,
+
+    where alpha is a scalar, X and B are m by n matrices, A is a unit, or
+    non-unit,  upper or lower triangular matrix  and  op( A )  is one  of
+
+       op( A ) = A   or   op( A ) = A'.
+
+    The matrix X is overwritten on B.
+
+    Parameters
+    ==========
+
+    SIDE   - CHARACTER*1.
+             On entry, SIDE specifies whether op( A ) appears on the left
+             or right of X as follows:
+
+                SIDE = 'L' or 'l'   op( A )*X = alpha*B.
+
+                SIDE = 'R' or 'r'   X*op( A ) = alpha*B.
+
+             Unchanged on exit.
+
+    UPLO   - CHARACTER*1.
+             On entry, UPLO specifies whether the matrix A is an upper or
+             lower triangular matrix as follows:
+
+                UPLO = 'U' or 'u'   A is an upper triangular matrix.
+
+                UPLO = 'L' or 'l'   A is a lower triangular matrix.
+
+             Unchanged on exit.
+
+    TRANSA - CHARACTER*1.
+             On entry, TRANSA specifies the form of op( A ) to be used in
+             the matrix multiplication as follows:
+
+                TRANSA = 'N' or 'n'   op( A ) = A.
+
+                TRANSA = 'T' or 't'   op( A ) = A'.
+
+                TRANSA = 'C' or 'c'   op( A ) = A'.
+
+             Unchanged on exit.
+
+    DIAG   - CHARACTER*1.
+             On entry, DIAG specifies whether or not A is unit triangular
+             as follows:
+
+                DIAG = 'U' or 'u'   A is assumed to be unit triangular.
+
+                DIAG = 'N' or 'n'   A is not assumed to be unit
+                                    triangular.
+
+             Unchanged on exit.
+
+    M      - INTEGER.
+             On entry, M specifies the number of rows of B. M must be at
+             least zero.
+             Unchanged on exit.
+
+    N      - INTEGER.
+             On entry, N specifies the number of columns of B.  N must be
+             at least zero.
+             Unchanged on exit.
+
+    ALPHA  - REAL            .
+             On entry,  ALPHA specifies the scalar  alpha. When  alpha is
+             zero then  A is not referenced and  B need not be set before
+             entry.
+             Unchanged on exit.
+
+    A      - REAL             array of DIMENSION ( LDA, k ), where k is m
+             when  SIDE = 'L' or 'l'  and is  n  when  SIDE = 'R' or 'r'.
+             Before entry  with  UPLO = 'U' or 'u',  the  leading  k by k
+             upper triangular part of the array  A must contain the upper
+             triangular matrix  and the strictly lower triangular part of
+             A is not referenced.
+             Before entry  with  UPLO = 'L' or 'l',  the  leading  k by k
+             lower triangular part of the array  A must contain the lower
+             triangular matrix  and the strictly upper triangular part of
+             A is not referenced.
+             Note that when  DIAG = 'U' or 'u',  the diagonal elements of
+             A  are not referenced either,  but are assumed to be  unity.
+             Unchanged on exit.
+
+    LDA    - INTEGER.
+             On entry, LDA specifies the first dimension of A as declared
+             in the calling (sub) program.  When  SIDE = 'L' or 'l'  then
+             LDA  must be at least  max( 1, m ),  when  SIDE = 'R' or 'r'
+             then LDA must be at least max( 1, n ).
+             Unchanged on exit.
+
+    B      - REAL             array of DIMENSION ( LDB, n ).
+             Before entry,  the leading  m by n part of the array  B must
+             contain  the  right-hand  side  matrix  B,  and  on exit  is
+             overwritten by the solution matrix  X.
+
+    LDB    - INTEGER.
+             On entry, LDB specifies the first dimension of B as declared
+             in  the  calling  (sub)  program.   LDB  must  be  at  least
+             max( 1, m ).
+             Unchanged on exit.
+
+
+    Level 3 Blas routine.
+
+
+    -- Written on 8-February-1989.
+       Jack Dongarra, Argonne National Laboratory.
+       Iain Duff, AERE Harwell.
+       Jeremy Du Croz, Numerical Algorithms Group Ltd.
+       Sven Hammarling, Numerical Algorithms Group Ltd.
+
+
+       Test the input parameters.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+    b_dim1 = *ldb;
+    b_offset = 1 + b_dim1;
+    b -= b_offset;
+
+    /* Function Body */
+    lside = lsame_(side, "L");
+    if (lside) {
+       nrowa = *m;
+    } else {
+       nrowa = *n;
+    }
+    nounit = lsame_(diag, "N");
+    upper = lsame_(uplo, "U");
+
+    info = 0;
+    if (! lside && ! lsame_(side, "R")) {
+       info = 1;
+    } else if (! upper && ! lsame_(uplo, "L")) {
+       info = 2;
+    } else if (! lsame_(transa, "N") && ! lsame_(transa,
+            "T") && ! lsame_(transa, "C")) {
+       info = 3;
+    } else if (! lsame_(diag, "U") && ! lsame_(diag,
+           "N")) {
+       info = 4;
+    } else if (*m < 0) {
+       info = 5;
+    } else if (*n < 0) {
+       info = 6;
+    } else if (*lda < max(1,nrowa)) {
+       info = 9;
+    } else if (*ldb < max(1,*m)) {
+       info = 11;
+    }
+    if (info != 0) {
+       xerbla_("STRSM ", &info);
+       return 0;
+    }
+
+/*     Quick return if possible. */
+
+    if (*n == 0) {
+       return 0;
+    }
+
+/*     And when  alpha.eq.zero. */
+
+    if (*alpha == 0.f) {
+       i__1 = *n;
+       for (j = 1; j <= i__1; ++j) {
+           i__2 = *m;
+           for (i__ = 1; i__ <= i__2; ++i__) {
+               b[i__ + j * b_dim1] = 0.f;
+/* L10: */
+           }
+/* L20: */
+       }
+       return 0;
+    }
+
+/*     Start the operations. */
+
+    if (lside) {
+       if (lsame_(transa, "N")) {
+
+/*           Form  B := alpha*inv( A )*B. */
+
+           if (upper) {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   if (*alpha != 1.f) {
+                       i__2 = *m;
+                       for (i__ = 1; i__ <= i__2; ++i__) {
+                           b[i__ + j * b_dim1] = *alpha * b[i__ + j * b_dim1]
+                                   ;
+/* L30: */
+                       }
+                   }
+                   for (k = *m; k >= 1; --k) {
+                       if (b[k + j * b_dim1] != 0.f) {
+                           if (nounit) {
+                               b[k + j * b_dim1] /= a[k + k * a_dim1];
+                           }
+                           i__2 = k - 1;
+                           for (i__ = 1; i__ <= i__2; ++i__) {
+                               b[i__ + j * b_dim1] -= b[k + j * b_dim1] * a[
+                                       i__ + k * a_dim1];
+/* L40: */
+                           }
+                       }
+/* L50: */
+                   }
+/* L60: */
+               }
+           } else {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   if (*alpha != 1.f) {
+                       i__2 = *m;
+                       for (i__ = 1; i__ <= i__2; ++i__) {
+                           b[i__ + j * b_dim1] = *alpha * b[i__ + j * b_dim1]
+                                   ;
+/* L70: */
+                       }
+                   }
+                   i__2 = *m;
+                   for (k = 1; k <= i__2; ++k) {
+                       if (b[k + j * b_dim1] != 0.f) {
+                           if (nounit) {
+                               b[k + j * b_dim1] /= a[k + k * a_dim1];
+                           }
+                           i__3 = *m;
+                           for (i__ = k + 1; i__ <= i__3; ++i__) {
+                               b[i__ + j * b_dim1] -= b[k + j * b_dim1] * a[
+                                       i__ + k * a_dim1];
+/* L80: */
+                           }
+                       }
+/* L90: */
+                   }
+/* L100: */
+               }
+           }
+       } else {
+
+/*           Form  B := alpha*inv( A' )*B. */
+
+           if (upper) {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   i__2 = *m;
+                   for (i__ = 1; i__ <= i__2; ++i__) {
+                       temp = *alpha * b[i__ + j * b_dim1];
+                       i__3 = i__ - 1;
+                       for (k = 1; k <= i__3; ++k) {
+                           temp -= a[k + i__ * a_dim1] * b[k + j * b_dim1];
+/* L110: */
+                       }
+                       if (nounit) {
+                           temp /= a[i__ + i__ * a_dim1];
+                       }
+                       b[i__ + j * b_dim1] = temp;
+/* L120: */
+                   }
+/* L130: */
+               }
+           } else {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   for (i__ = *m; i__ >= 1; --i__) {
+                       temp = *alpha * b[i__ + j * b_dim1];
+                       i__2 = *m;
+                       for (k = i__ + 1; k <= i__2; ++k) {
+                           temp -= a[k + i__ * a_dim1] * b[k + j * b_dim1];
+/* L140: */
+                       }
+                       if (nounit) {
+                           temp /= a[i__ + i__ * a_dim1];
+                       }
+                       b[i__ + j * b_dim1] = temp;
+/* L150: */
+                   }
+/* L160: */
+               }
+           }
+       }
+    } else {
+       if (lsame_(transa, "N")) {
+
+/*           Form  B := alpha*B*inv( A ). */
+
+           if (upper) {
+               i__1 = *n;
+               for (j = 1; j <= i__1; ++j) {
+                   if (*alpha != 1.f) {
+                       i__2 = *m;
+                       for (i__ = 1; i__ <= i__2; ++i__) {
+                           b[i__ + j * b_dim1] = *alpha * b[i__ + j * b_dim1]
+                                   ;
+/* L170: */
+                       }
+                   }
+                   i__2 = j - 1;
+                   for (k = 1; k <= i__2; ++k) {
+                       if (a[k + j * a_dim1] != 0.f) {
+                           i__3 = *m;
+                           for (i__ = 1; i__ <= i__3; ++i__) {
+                               b[i__ + j * b_dim1] -= a[k + j * a_dim1] * b[
+                                       i__ + k * b_dim1];
+/* L180: */
+                           }
+                       }
+/* L190: */
+                   }
+                   if (nounit) {
+                       temp = 1.f / a[j + j * a_dim1];
+                       i__2 = *m;
+                       for (i__ = 1; i__ <= i__2; ++i__) {
+                           b[i__ + j * b_dim1] = temp * b[i__ + j * b_dim1];
+/* L200: */
+                       }
+                   }
+/* L210: */
+               }
+           } else {
+               for (j = *n; j >= 1; --j) {
+                   if (*alpha != 1.f) {
+                       i__1 = *m;
+                       for (i__ = 1; i__ <= i__1; ++i__) {
+                           b[i__ + j * b_dim1] = *alpha * b[i__ + j * b_dim1]
+                                   ;
+/* L220: */
+                       }
+                   }
+                   i__1 = *n;
+                   for (k = j + 1; k <= i__1; ++k) {
+                       if (a[k + j * a_dim1] != 0.f) {
+                           i__2 = *m;
+                           for (i__ = 1; i__ <= i__2; ++i__) {
+                               b[i__ + j * b_dim1] -= a[k + j * a_dim1] * b[
+                                       i__ + k * b_dim1];
+/* L230: */
+                           }
+                       }
+/* L240: */
+                   }
+                   if (nounit) {
+                       temp = 1.f / a[j + j * a_dim1];
+                       i__1 = *m;
+                       for (i__ = 1; i__ <= i__1; ++i__) {
+                           b[i__ + j * b_dim1] = temp * b[i__ + j * b_dim1];
+/* L250: */
+                       }
+                   }
+/* L260: */
+               }
+           }
+       } else {
+
+/*           Form  B := alpha*B*inv( A' ). */
+
+           if (upper) {
+               for (k = *n; k >= 1; --k) {
+                   if (nounit) {
+                       temp = 1.f / a[k + k * a_dim1];
+                       i__1 = *m;
+                       for (i__ = 1; i__ <= i__1; ++i__) {
+                           b[i__ + k * b_dim1] = temp * b[i__ + k * b_dim1];
+/* L270: */
+                       }
+                   }
+                   i__1 = k - 1;
+                   for (j = 1; j <= i__1; ++j) {
+                       if (a[j + k * a_dim1] != 0.f) {
+                           temp = a[j + k * a_dim1];
+                           i__2 = *m;
+                           for (i__ = 1; i__ <= i__2; ++i__) {
+                               b[i__ + j * b_dim1] -= temp * b[i__ + k *
+                                       b_dim1];
+/* L280: */
+                           }
+                       }
+/* L290: */
+                   }
+                   if (*alpha != 1.f) {
+                       i__1 = *m;
+                       for (i__ = 1; i__ <= i__1; ++i__) {
+                           b[i__ + k * b_dim1] = *alpha * b[i__ + k * b_dim1]
+                                   ;
+/* L300: */
+                       }
+                   }
+/* L310: */
+               }
+           } else {
+               i__1 = *n;
+               for (k = 1; k <= i__1; ++k) {
+                   if (nounit) {
+                       temp = 1.f / a[k + k * a_dim1];
+                       i__2 = *m;
+                       for (i__ = 1; i__ <= i__2; ++i__) {
+                           b[i__ + k * b_dim1] = temp * b[i__ + k * b_dim1];
+/* L320: */
+                       }
+                   }
+                   i__2 = *n;
+                   for (j = k + 1; j <= i__2; ++j) {
+                       if (a[j + k * a_dim1] != 0.f) {
+                           temp = a[j + k * a_dim1];
+                           i__3 = *m;
+                           for (i__ = 1; i__ <= i__3; ++i__) {
+                               b[i__ + j * b_dim1] -= temp * b[i__ + k *
+                                       b_dim1];
+/* L330: */
+                           }
+                       }
+/* L340: */
+                   }
+                   if (*alpha != 1.f) {
+                       i__2 = *m;
+                       for (i__ = 1; i__ <= i__2; ++i__) {
+                           b[i__ + k * b_dim1] = *alpha * b[i__ + k * b_dim1]
+                                   ;
+/* L350: */
+                       }
+                   }
+/* L360: */
+               }
+           }
+       }
+    }
+
+    return 0;
+
+/*     End of STRSM . */
+
+} /* strsm_ */
+
+/* Subroutine */ int xerbla_(char *srname, integer *info)
+{
+    /* Format strings */
+    static char fmt_9999[] = "(\002 ** On entry to \002,a6,\002 parameter nu"
+           "mber \002,i2,\002 had \002,\002an illegal value\002)";
+
+    /* Builtin functions */
+    integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void);
+    /* Subroutine */ int s_stop(char *, ftnlen);
+
+    /* Fortran I/O blocks */
+    static cilist io___60 = { 0, 6, 0, fmt_9999, 0 };
+
+
+/*
+    -- LAPACK auxiliary routine (preliminary version) --
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+       Courant Institute, Argonne National Lab, and Rice University
+       February 29, 1992
+
+
+    Purpose
+    =======
+
+    XERBLA  is an error handler for the LAPACK routines.
+    It is called by an LAPACK routine if an input parameter has an
+    invalid value.  A message is printed and execution stops.
+
+    Installers may consider modifying the STOP statement in order to
+    call system-specific exception-handling facilities.
+
+    Arguments
+    =========
+
+    SRNAME  (input) CHARACTER*6
+            The name of the routine which called XERBLA.
+
+    INFO    (input) INTEGER
+            The position of the invalid parameter in the parameter list
+            of the calling routine.
+*/
+
+
+    s_wsfe(&io___60);
+    do_fio(&c__1, srname, (ftnlen)6);
+    do_fio(&c__1, (char *)&(*info), (ftnlen)sizeof(integer));
+    e_wsfe();
+
+    s_stop("", (ftnlen)0);
+
+
+/*     End of XERBLA */
+
+    return 0;
+} /* xerbla_ */
+
diff --git a/src/libsphinxbase/util/case.c b/src/libsphinxbase/util/case.c
new file mode 100644 (file)
index 0000000..f9e24ac
--- /dev/null
@@ -0,0 +1,141 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * case.c -- Upper/lower case conversion routines
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: case.c,v $
+ * Revision 1.7  2005/06/22 02:58:54  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 18-Jun-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Added strcmp_nocase.  Moved UPPER_CASE and LOWER_CASE definitions to .h.
+ * 
+ * 16-Feb-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Created.
+ */
+
+
+#include <stdlib.h>
+#include <assert.h>
+
+#include "sphinxbase/case.h"
+#include "sphinxbase/err.h"
+
+
+void
+lcase(register char *cp)
+{
+    if (cp) {
+        while (*cp) {
+            *cp = LOWER_CASE(*cp);
+            cp++;
+        }
+    }
+}
+
+void
+ucase(register char *cp)
+{
+    if (cp) {
+        while (*cp) {
+            *cp = UPPER_CASE(*cp);
+            cp++;
+        }
+    }
+}
+
+int32
+strcmp_nocase(const char *str1, const char *str2)
+{
+    char c1, c2;
+
+    if (str1 == str2)
+        return 0;
+    if (str1 && str2) {
+        for (;;) {
+            c1 = *(str1++);
+            c1 = UPPER_CASE(c1);
+            c2 = *(str2++);
+            c2 = UPPER_CASE(c2);
+            if (c1 != c2)
+                return (c1 - c2);
+            if (c1 == '\0')
+                return 0;
+        }
+    }
+    else
+        return (str1 == NULL) ? -1 : 1;
+
+    return 0;
+}
+
+int32
+strncmp_nocase(const char *str1, const char *str2, size_t len)
+{
+    char c1, c2;
+
+    if (str1 && str2) {
+        size_t n;
+
+        for (n = 0; n < len; ++n) {
+            c1 = *(str1++);
+            c1 = UPPER_CASE(c1);
+            c2 = *(str2++);
+            c2 = UPPER_CASE(c2);
+            if (c1 != c2)
+                return (c1 - c2);
+            if (c1 == '\0')
+                return 0;
+        }
+    }
+    else
+        return (str1 == NULL) ? -1 : 1;
+
+    return 0;
+}
diff --git a/src/libsphinxbase/util/ckd_alloc.c b/src/libsphinxbase/util/ckd_alloc.c
new file mode 100644 (file)
index 0000000..d11640d
--- /dev/null
@@ -0,0 +1,422 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * ckd_alloc.c -- Memory allocation package.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: ckd_alloc.c,v $
+ * Revision 1.6  2005/06/22 02:59:25  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 19-Jun-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Removed file,line arguments from free functions.
+ *             Removed debugging stuff.
+ * 
+ * 01-Jan-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+
+/*********************************************************************
+ *
+ * $Header: /cvsroot/cmusphinx/sphinx3/src/libutil/ckd_alloc.c,v 1.6 2005/06/22 02:59:25 arthchan2003 Exp $
+ *
+ * Carnegie Mellon ARPA Speech Group
+ *
+ * Copyright (c) 1994 Carnegie Mellon University.
+ * All rights reserved.
+ *
+ *********************************************************************
+ *
+ * file: ckd_alloc.c
+ * 
+ * traceability: 
+ * 
+ * description: 
+ * 
+ * author: 
+ * 
+ *********************************************************************/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996)
+#endif
+
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/err.h"
+
+/**
+ * Target for longjmp() on failure.
+ * 
+ * FIXME: This should be in thread-local storage.
+ */
+static jmp_buf *ckd_target;
+static int jmp_abort;
+
+jmp_buf *
+ckd_set_jump(jmp_buf *env, int abort)
+{
+    jmp_buf *old;
+
+    if (abort)
+        jmp_abort = 1;
+
+    old = ckd_target;
+    ckd_target = env;
+    return old;
+}
+
+void
+ckd_fail(char *format, ...)
+{
+    va_list args;
+
+    va_start(args, format);
+    vfprintf(stderr, format, args);
+    va_end(args);
+
+    if (jmp_abort)
+        /* Silvio Moioli: abort() doesn't exist in Windows CE */
+        #if defined(_WIN32_WCE)
+        exit(-1);
+        #else
+        abort();
+        #endif
+    else if (ckd_target)
+        longjmp(*ckd_target, 1);
+    else
+        exit(-1);
+}
+
+void *
+__ckd_calloc__(size_t n_elem, size_t elem_size,
+               const char *caller_file, int caller_line)
+{
+    void *mem;
+
+#if defined(__ADSPBLACKFIN__) && !defined(__linux__)
+    if ((mem = heap_calloc(heap_lookup(1),n_elem, elem_size)) == NULL)
+       if ((mem = heap_calloc(heap_lookup(0),n_elem, elem_size)) == NULL) 
+       {
+               ckd_fail("calloc(%d,%d) failed from %s(%d), free space: %d\n", n_elem,
+                elem_size, caller_file, caller_line,space_unused());
+       }
+#else
+    if ((mem = calloc(n_elem, elem_size)) == NULL) {
+        ckd_fail("calloc(%d,%d) failed from %s(%d)\n", n_elem,
+                elem_size, caller_file, caller_line);
+       }
+#endif
+       
+
+    return mem;
+}
+
+
+void *
+__ckd_malloc__(size_t size, const char *caller_file, int caller_line)
+{
+    void *mem;
+
+#if defined(__ADSPBLACKFIN__) && !defined(__linux__)
+    if ((mem = heap_malloc(heap_lookup(0),size)) == NULL)
+               if ((mem = heap_malloc(heap_lookup(1),size)) == NULL) 
+#else
+    if ((mem = malloc(size)) == NULL)
+#endif
+               ckd_fail("malloc(%d) failed from %s(%d)\n", size,
+                caller_file, caller_line);
+                
+    return mem;
+}
+
+
+void *
+__ckd_realloc__(void *ptr, size_t new_size,
+                const char *caller_file, int caller_line)
+{
+    void *mem;
+#if defined(__ADSPBLACKFIN__) && !defined(__linux__)
+    if ((mem = heap_realloc(heap_lookup(0),ptr, new_size)) == NULL) {
+#else
+    if ((mem = realloc(ptr, new_size)) == NULL) {
+#endif
+        ckd_fail("malloc(%d) failed from %s(%d)\n", new_size,
+                caller_file, caller_line);
+    }
+
+    return mem;
+}
+
+
+char *
+__ckd_salloc__(const char *orig, const char *caller_file,
+               int caller_line)
+{
+    size_t len;
+    char *buf;
+
+    len = strlen(orig) + 1;
+    buf = (char *) __ckd_malloc__(len, caller_file, caller_line);
+
+    strcpy(buf, orig);
+    return (buf);
+}
+
+
+void *
+__ckd_calloc_2d__(size_t d1, size_t d2, size_t elemsize,
+                  const char *caller_file, int caller_line)
+{
+    char **ref, *mem;
+    size_t i, offset;
+
+    mem =
+        (char *) __ckd_calloc__(d1 * d2, elemsize, caller_file,
+                                caller_line);
+    ref =
+        (char **) __ckd_malloc__(d1 * sizeof(void *), caller_file,
+                                 caller_line);
+
+    for (i = 0, offset = 0; i < d1; i++, offset += d2 * elemsize)
+        ref[i] = mem + offset;
+
+    return ref;
+}
+
+
+void
+ckd_free(void *ptr)
+{
+    if (ptr)
+#if defined(__ADSPBLACKFIN__) && !defined(__linux__)
+        heap_free(0,ptr);
+#else
+               free(ptr);
+#endif
+}
+
+void
+ckd_free_2d(void *tmpptr)
+{
+    void **ptr = (void **)tmpptr;
+    if (ptr)
+        ckd_free(ptr[0]);
+    ckd_free(ptr);
+}
+
+
+void *
+__ckd_calloc_3d__(size_t d1, size_t d2, size_t d3, size_t elemsize,
+                  const char *caller_file, int caller_line)
+{
+    char ***ref1, **ref2, *mem;
+    size_t i, j, offset;
+
+    mem =
+        (char *) __ckd_calloc__(d1 * d2 * d3, elemsize, caller_file,
+                                caller_line);
+    ref1 =
+        (char ***) __ckd_malloc__(d1 * sizeof(void **), caller_file,
+                                  caller_line);
+    ref2 =
+        (char **) __ckd_malloc__(d1 * d2 * sizeof(void *), caller_file,
+                                 caller_line);
+
+    for (i = 0, offset = 0; i < d1; i++, offset += d2)
+        ref1[i] = ref2 + offset;
+
+    offset = 0;
+    for (i = 0; i < d1; i++) {
+        for (j = 0; j < d2; j++) {
+            ref1[i][j] = mem + offset;
+            offset += d3 * elemsize;
+        }
+    }
+
+    return ref1;
+}
+
+
+void
+ckd_free_3d(void *inptr)
+{
+    void ***ptr = (void ***)inptr;
+
+    if (ptr && ptr[0])
+        ckd_free(ptr[0][0]);
+    if (ptr)
+        ckd_free(ptr[0]);
+    ckd_free(ptr);
+}
+
+
+void ****
+__ckd_calloc_4d__(size_t d1,
+                 size_t d2,
+                 size_t d3,
+                 size_t d4,
+                 size_t elem_size,
+                 char *file,
+                 int line)
+{
+    void *store;
+    void **tmp1;
+    void ***tmp2;
+    void ****out;
+    size_t i, j;
+
+    store = calloc(d1 * d2 * d3 * d4, elem_size);
+    if (store == NULL) {
+       E_FATAL("ckd_calloc_4d failed for caller at %s(%d) at %s(%d)\n",
+               file, line, __FILE__, __LINE__);
+    }
+    
+    tmp1 = calloc(d1 * d2 * d3, sizeof(void *));
+    if (tmp1 == NULL) {
+       E_FATAL("ckd_calloc_4d failed for caller at %s(%d) at %s(%d)\n",
+               file, line, __FILE__, __LINE__);
+    }
+
+    tmp2 = ckd_calloc(d1 * d2, sizeof(void **));
+    if (tmp2 == NULL) {
+       E_FATAL("ckd_calloc_4d failed for caller at %s(%d) at %s(%d)\n",
+               file, line, __FILE__, __LINE__);
+    }
+
+    out = ckd_calloc(d1, sizeof(void ***));
+    if (out == NULL) {
+       E_FATAL("ckd_calloc_4d failed for caller at %s(%d) at %s(%d)\n",
+               file, line, __FILE__, __LINE__);
+    }
+    
+    for (i = 0, j = 0; i < d1*d2*d3; i++, j += d4) {
+       tmp1[i] = &((char *)store)[j*elem_size];
+    }
+
+    for (i = 0, j = 0; i < d1*d2; i++, j += d3) {
+       tmp2[i] = &tmp1[j];
+    }
+
+    for (i = 0, j = 0; i < d1; i++, j += d2) {
+       out[i] = &tmp2[j];
+    }
+
+    return out;
+}
+
+void
+ckd_free_4d(void *inptr)
+{
+    void ****ptr = (void ****)inptr;
+    if (ptr == NULL)
+       return;
+    /* free the underlying store */
+    ckd_free(ptr[0][0][0]);
+
+    /* free the access overhead */
+    ckd_free(ptr[0][0]);
+    ckd_free(ptr[0]);
+    ckd_free(ptr);
+}
+
+/* Layers a 3d array access structure over a preallocated storage area */
+void *
+__ckd_alloc_3d_ptr(size_t d1,
+                  size_t d2,
+                  size_t d3,
+                  void *store,
+                  size_t elem_size,
+                  char *file,
+                  int line)
+{
+    void **tmp1;
+    void ***out;
+    size_t i, j;
+    
+    tmp1 = __ckd_calloc__(d1 * d2, sizeof(void *), file, line);
+
+    out  = __ckd_calloc__(d1, sizeof(void **), file, line);
+    
+    for (i = 0, j = 0; i < d1*d2; i++, j += d3) {
+       tmp1[i] = &((char *)store)[j*elem_size];
+    }
+    
+    for (i = 0, j = 0; i < d1; i++, j += d2) {
+       out[i] = &tmp1[j];
+    }
+    
+    return out;
+}
+
+void *
+__ckd_alloc_2d_ptr(size_t d1,
+                  size_t d2,
+                  void *store,
+                  size_t elem_size,
+                  char *file,
+                  int line)
+{
+    void **out;
+    size_t i, j;
+    
+    out = __ckd_calloc__(d1, sizeof(void *), file, line);
+    
+    for (i = 0, j = 0; i < d1; i++, j += d2) {
+       out[i] = &((char *)store)[j*elem_size];
+    }
+
+    return out;
+}
diff --git a/src/libsphinxbase/util/cmd_ln.c b/src/libsphinxbase/util/cmd_ln.c
new file mode 100644 (file)
index 0000000..871f0e0
--- /dev/null
@@ -0,0 +1,1076 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * cmd_ln.c -- Command line argument parsing.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * 
+ * 10-Sep-1998 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Changed strcasecmp() call in cmp_name() to strcmp_nocase() call.
+ * 
+ * 15-Jul-1997 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added required arguments handling.
+ * 
+ * 07-Dec-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created, based on Eric's implementation.  Basically, combined several
+ *             functions into one, eliminated validation, and simplified the interface.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996 4018)
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "sphinxbase/cmd_ln.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/hash_table.h"
+#include "sphinxbase/case.h"
+#include "sphinxbase/strfuncs.h"
+
+typedef struct cmd_ln_val_s {
+    anytype_t val;
+    int type;
+} cmd_ln_val_t;
+
+struct cmd_ln_s {
+    int refcount;
+    hash_table_t *ht;
+    char **f_argv;
+    uint32 f_argc;
+};
+
+/** Global command-line, for non-reentrant API. */
+cmd_ln_t *global_cmdln;
+static void arg_dump_r(cmd_ln_t *cmdln, FILE * fp, arg_t const *defn, int32 doc);
+static cmd_ln_t * parse_options(cmd_ln_t *cmdln, const arg_t *defn, int32 argc, char* argv[], int32 strict);
+
+/*
+ * Find max length of name and default fields in the given defn array.
+ * Return #items in defn array.
+ */
+static int32
+arg_strlen(const arg_t * defn, int32 * namelen, int32 * deflen)
+{
+    int32 i, l;
+
+    *namelen = *deflen = 0;
+    for (i = 0; defn[i].name; i++) {
+        l = strlen(defn[i].name);
+        if (*namelen < l)
+            *namelen = l;
+
+        if (defn[i].deflt)
+            l = strlen(defn[i].deflt);
+        else
+            l = strlen("(null)");
+        /*      E_INFO("string default, %s , name %s, length %d\n",defn[i].deflt,defn[i].name,l); */
+        if (*deflen < l)
+            *deflen = l;
+    }
+
+    return i;
+}
+
+
+static int32
+cmp_name(const void *a, const void *b)
+{
+    return (strcmp_nocase
+            ((* (arg_t**) a)->name,
+             (* (arg_t**) b)->name));
+}
+
+static const arg_t **
+arg_sort(const arg_t * defn, int32 n)
+{
+    const arg_t ** pos;
+    int32 i;
+
+    pos = (const arg_t **) ckd_calloc(n, sizeof(arg_t *));
+    for (i = 0; i < n; ++i)
+        pos[i] = &defn[i];
+    qsort(pos, n, sizeof(arg_t *), cmp_name);
+
+    return pos;
+}
+
+static size_t
+strnappend(char **dest, size_t *dest_allocation, 
+       const char *source, size_t n)
+{
+    size_t source_len, required_allocation;
+
+    if (dest == NULL || dest_allocation == NULL)
+        return -1;
+    if (*dest == NULL && *dest_allocation != 0)
+        return -1;
+    if (source == NULL)
+        return *dest_allocation;
+
+    source_len = strlen(source);
+    if (n && n < source_len)
+        source_len = n;
+
+    required_allocation = (*dest ? strlen(*dest) : 0) + source_len + 1;
+    if (*dest_allocation < required_allocation) {
+        if (*dest_allocation == 0) {
+            *dest = ckd_calloc(required_allocation * 2, 1);
+        } else {
+            *dest = ckd_realloc(*dest, required_allocation * 2);
+        }
+        *dest_allocation = required_allocation * 2;
+    } 
+
+    strncat(*dest, source, source_len);
+
+    return *dest_allocation;
+}
+
+static size_t
+strappend(char **dest, size_t *dest_allocation, 
+       const char *source)
+{
+    return strnappend(dest, dest_allocation, source, 0);
+}
+
+static char*
+arg_resolve_env(const char *str)
+{
+    char *resolved_str = NULL;
+    char env_name[100];
+    const char *env_val;
+    size_t alloced = 0;
+    const char *i = str, *j;
+
+    /* calculate required resolved_str size */
+    do {
+        j = strstr(i, "$(");
+        if (j != NULL) {
+            if (j != i) {
+                strnappend(&resolved_str, &alloced, i, j - i);
+                i = j;
+            }
+            j = strchr(i + 2, ')');
+            if (j != NULL) {
+                if (j - (i + 2) < 100) {
+                    strncpy(env_name, i + 2, j - (i + 2));
+                    env_name[j - (i + 2)] = '\0';
+                    #if !defined(_WIN32_WCE)
+                    env_val = getenv(env_name);
+                    if (env_val)
+                        strappend(&resolved_str, &alloced, env_val);
+                    #else
+                    env_val = 0;
+                    #endif
+                }
+                i = j + 1;
+            } else {
+                /* unclosed, copy and skip */
+                j = i + 2;
+                strnappend(&resolved_str, &alloced, i, j - i);
+                i = j;
+            }
+        } else {
+            strappend(&resolved_str, &alloced, i);
+        }
+    } while(j != NULL);
+
+    return resolved_str;
+}
+
+static void
+arg_dump_r(cmd_ln_t *cmdln, FILE * fp, const arg_t * defn, int32 doc)
+{
+    const arg_t **pos;
+    int32 i, l, n;
+    int32 namelen, deflen;
+    anytype_t *vp;
+    char const **array;
+
+    /* No definitions, do nothing. */
+    if (defn == NULL)
+        return;
+    if (fp == NULL)
+        return;
+
+    /* Find max lengths of name and default value fields, and #entries in defn */
+    n = arg_strlen(defn, &namelen, &deflen);
+    /*    E_INFO("String length %d. Name length %d, Default Length %d\n",n, namelen, deflen); */
+    namelen = namelen & 0xfffffff8;     /* Previous tab position */
+    deflen = deflen & 0xfffffff8;       /* Previous tab position */
+
+    fprintf(fp, "[NAME]");
+    for (l = strlen("[NAME]"); l < namelen; l += 8)
+        fprintf(fp, "\t");
+    fprintf(fp, "\t[DEFLT]");
+    for (l = strlen("[DEFLT]"); l < deflen; l += 8)
+        fprintf(fp, "\t");
+
+    if (doc) {
+        fprintf(fp, "\t[DESCR]\n");
+    }
+    else {
+        fprintf(fp, "\t[VALUE]\n");
+    }
+
+    /* Print current configuration, sorted by name */
+    pos = arg_sort(defn, n);
+    for (i = 0; i < n; i++) {
+        fprintf(fp, "%s", pos[i]->name);
+        for (l = strlen(pos[i]->name); l < namelen; l += 8)
+            fprintf(fp, "\t");
+
+        fprintf(fp, "\t");
+        if (pos[i]->deflt) {
+            fprintf(fp, "%s", pos[i]->deflt);
+            l = strlen(pos[i]->deflt);
+        }
+        else
+            l = 0;
+        for (; l < deflen; l += 8)
+            fprintf(fp, "\t");
+
+        fprintf(fp, "\t");
+        if (doc) {
+            if (pos[i]->doc)
+                fprintf(fp, "%s", pos[i]->doc);
+        }
+        else {
+            vp = cmd_ln_access_r(cmdln, pos[i]->name);
+            if (vp) {
+                switch (pos[i]->type) {
+                case ARG_INTEGER:
+                case REQARG_INTEGER:
+                    fprintf(fp, "%ld", vp->i);
+                    break;
+                case ARG_FLOATING:
+                case REQARG_FLOATING:
+                    fprintf(fp, "%e", vp->fl);
+                    break;
+                case ARG_STRING:
+                case REQARG_STRING:
+                    if (vp->ptr)
+                        fprintf(fp, "%s", (char *)vp->ptr);
+                    break;
+                case ARG_STRING_LIST:
+                   array = (char const**)vp->ptr;
+                   if (array)
+                       for (l = 0; array[l] != 0; l++) {
+                           fprintf(fp, "%s,", array[l]);
+                       }
+                   break;
+                case ARG_BOOLEAN:
+                case REQARG_BOOLEAN:
+                    fprintf(fp, "%s", vp->i ? "yes" : "no");
+                    break;
+                default:
+                    E_ERROR("Unknown argument type: %d\n", pos[i]->type);
+                }
+            }
+        }
+
+        fprintf(fp, "\n");
+    }
+    ckd_free(pos);
+
+    fprintf(fp, "\n");
+    fflush(fp);
+}
+
+static char **
+parse_string_list(const char *str)
+{
+    int count, i, j;
+    const char *p;
+    char ** result;
+
+    p = str;
+    count = 1;
+    while (*p) {
+       if (*p == ',')
+           count++;
+       p++;
+    }
+    /* Should end with NULL */
+    result = (char **) ckd_calloc(count + 1, sizeof(char *));
+    p = str;
+    for (i = 0; i < count; i++) {
+       for (j = 0; p[j] != ',' && p[j] != 0; j++);
+       result[i] = ckd_calloc(j + 1, sizeof(char));
+       strncpy( result[i], p, j);
+       p = p + j + 1;
+    }
+    return result;
+}
+
+static cmd_ln_val_t *
+cmd_ln_val_init(int t, const char *str)
+{
+    cmd_ln_val_t *v;
+    anytype_t val;
+    char *e_str;
+
+    if (!str) {
+        /* For lack of a better default value. */
+        memset(&val, 0, sizeof(val));
+    }
+    else {
+        int valid = 1;
+        e_str = arg_resolve_env(str);
+
+        switch (t) {
+        case ARG_INTEGER:
+        case REQARG_INTEGER:
+            if (sscanf(e_str, "%ld", &val.i) != 1)
+                valid = 0;
+            break;
+        case ARG_FLOATING:
+        case REQARG_FLOATING:
+            if (e_str == NULL || e_str[0] == 0)
+               valid = 0;
+            val.fl = atof_c(e_str);
+            break;
+        case ARG_BOOLEAN:
+        case REQARG_BOOLEAN:
+            if ((e_str[0] == 'y') || (e_str[0] == 't') ||
+                (e_str[0] == 'Y') || (e_str[0] == 'T') || (e_str[0] == '1')) {
+                val.i = TRUE;
+            }
+            else if ((e_str[0] == 'n') || (e_str[0] == 'f') ||
+                     (e_str[0] == 'N') || (e_str[0] == 'F') |
+                     (e_str[0] == '0')) {
+                val.i = FALSE;
+            }
+            else {
+                E_ERROR("Unparsed boolean value '%s'\n", str);
+                valid = 0;
+            }
+            break;
+        case ARG_STRING:
+        case REQARG_STRING:
+            val.ptr = ckd_salloc(e_str);
+            break;
+        case ARG_STRING_LIST:
+           val.ptr = parse_string_list(e_str);
+            break;
+        default:
+            E_ERROR("Unknown argument type: %d\n", t);
+            valid = 0;
+        }
+
+        ckd_free(e_str);
+        if (valid == 0)
+            return NULL;
+    }
+
+    v = ckd_calloc(1, sizeof(*v));
+    memcpy(v, &val, sizeof(val));
+    v->type = t;
+
+    return v;
+}
+
+/*
+ * Handles option parsing for cmd_ln_parse_file_r() and cmd_ln_init()
+ * also takes care of storing argv.
+ * DO NOT call it from cmd_ln_parse_r()
+ */
+static cmd_ln_t *
+parse_options(cmd_ln_t *cmdln, const arg_t *defn, int32 argc, char* argv[], int32 strict)
+{
+    cmd_ln_t *new_cmdln;
+
+    new_cmdln = cmd_ln_parse_r(cmdln, defn, argc, argv, strict);
+    /* If this failed then clean up and return NULL. */
+    if (new_cmdln == NULL) {
+        int32 i;
+        for (i = 0; i < argc; ++i)
+            ckd_free(argv[i]);
+        ckd_free(argv);
+        return NULL;
+    }
+
+    /* Otherwise, we need to add the contents of f_argv to the new object. */
+    if (new_cmdln == cmdln) {
+        /* If we are adding to a previously passed-in cmdln, then
+         * store our allocated strings in its f_argv. */
+        new_cmdln->f_argv = ckd_realloc(new_cmdln->f_argv,
+                                        (new_cmdln->f_argc + argc)
+                                        * sizeof(*new_cmdln->f_argv));
+        memcpy(new_cmdln->f_argv + new_cmdln->f_argc, argv,
+               argc * sizeof(*argv));
+        ckd_free(argv);
+        new_cmdln->f_argc += argc;
+    }
+    else {
+        /* Otherwise, store f_argc and f_argv. */
+        new_cmdln->f_argc = argc;
+        new_cmdln->f_argv = argv;
+    }
+
+    return new_cmdln;
+}
+
+void
+cmd_ln_val_free(cmd_ln_val_t *val)
+{
+    int i;
+    if (val->type & ARG_STRING_LIST) {
+       char const** array = (char const **)val->val.ptr;
+       if (array) {
+           for (i = 0; array[i] != NULL; i++) {
+               ckd_free(val->val.ptr);
+           }
+           ckd_free(array);
+       }
+    }
+    if (val->type & ARG_STRING)
+        ckd_free(val->val.ptr);
+    ckd_free(val);
+}
+
+cmd_ln_t *
+cmd_ln_get(void)
+{
+    return global_cmdln;
+}
+
+void
+cmd_ln_appl_enter(int argc, char *argv[],
+                  const char *default_argfn,
+                  const arg_t * defn)
+{
+    /* Look for default or specified arguments file */
+    const char *str;
+
+    str = NULL;
+
+    if ((argc == 2) && (strcmp(argv[1], "help") == 0)) {
+        cmd_ln_print_help(stderr, defn);
+        exit(1);
+    }
+
+    if ((argc == 2) && (argv[1][0] != '-'))
+        str = argv[1];
+    else if (argc == 1) {
+        FILE *fp;
+        E_INFO("Looking for default argument file: %s\n", default_argfn);
+
+        if ((fp = fopen(default_argfn, "r")) == NULL) {
+            E_INFO("Can't find default argument file %s.\n",
+                   default_argfn);
+        }
+        else {
+            str = default_argfn;
+        }
+        if (fp != NULL)
+            fclose(fp);
+    }
+
+
+    if (str) {
+        /* Build command line argument list from file */
+        E_INFO("Parsing command lines from file %s\n", str);
+        if (cmd_ln_parse_file(defn, str, TRUE)) {
+            E_INFOCONT("Usage:\n");
+            E_INFOCONT("\t%s argument-list, or\n", argv[0]);
+            E_INFOCONT("\t%s [argument-file] (default file: . %s)\n\n",
+                    argv[0], default_argfn);
+            cmd_ln_print_help(stderr, defn);
+            exit(1);
+        }
+    }
+    else {
+        cmd_ln_parse(defn, argc, argv, TRUE);
+    }
+}
+
+void
+cmd_ln_appl_exit()
+{
+    cmd_ln_free();
+}
+
+
+cmd_ln_t *
+cmd_ln_parse_r(cmd_ln_t *inout_cmdln, const arg_t * defn, int32 argc, char *argv[], int strict)
+{
+    int32 i, j, n, argstart;
+    hash_table_t *defidx = NULL;
+    cmd_ln_t *cmdln;
+    
+    /* Construct command-line object */
+    if (inout_cmdln == NULL) {
+        cmdln = ckd_calloc(1, sizeof(*cmdln));
+        cmdln->refcount = 1;
+    }
+    else
+        cmdln = inout_cmdln;
+
+    /* Build a hash table for argument definitions */
+    defidx = hash_table_new(50, 0);
+    if (defn) {
+        for (n = 0; defn[n].name; n++) {
+            void *v;
+
+            v = hash_table_enter(defidx, defn[n].name, (void *)&defn[n]);
+            if (strict && (v != &defn[n])) {
+                E_ERROR("Duplicate argument name in definition: %s\n", defn[n].name);
+                goto error;
+            }
+        }
+    }
+    else {
+        /* No definitions. */
+        n = 0;
+    }
+
+    /* Allocate memory for argument values */
+    if (cmdln->ht == NULL)
+        cmdln->ht = hash_table_new(n, 0 /* argument names are case-sensitive */ );
+
+
+    /* skip argv[0] if it doesn't start with dash */
+    argstart = 0;
+    if (argc > 0 && argv[0][0] != '-') {
+        argstart = 1;
+    } 
+
+    /* Parse command line arguments (name-value pairs) */
+    for (j = argstart; j < argc; j += 2) {
+        arg_t *argdef;
+        cmd_ln_val_t *val;
+        void *v;
+
+        if (hash_table_lookup(defidx, argv[j], &v) < 0) {
+            if (strict) {
+                E_ERROR("Unknown argument name '%s'\n", argv[j]);
+                goto error;
+            }
+            else if (defn == NULL)
+                v = NULL;
+            else
+                continue;
+        }
+        argdef = v;
+
+        /* Enter argument value */     
+       if (j + 1 >= argc) {
+            cmd_ln_print_help_r(cmdln, stderr, defn);
+            E_ERROR("Argument value for '%s' missing\n", argv[j]);
+            goto error;
+        }
+
+        if (argdef == NULL)
+            val = cmd_ln_val_init(ARG_STRING, argv[j + 1]);
+        else {
+            if ((val = cmd_ln_val_init(argdef->type, argv[j + 1])) == NULL) {
+                cmd_ln_print_help_r(cmdln, stderr, defn);
+                E_ERROR("Bad argument value for %s: %s\n", argv[j],
+                        argv[j + 1]);
+                goto error;
+            }
+        }
+
+        if ((v = hash_table_enter(cmdln->ht, argv[j], (void *)val)) != (void *)val) {
+            if (strict) {
+                cmd_ln_val_free(val);
+                E_ERROR("Duplicate argument name in arguments: %s\n",
+                        argdef->name);
+                goto error;
+            }
+            else {
+                v = hash_table_replace(cmdln->ht, argv[j], (void *)val);
+                cmd_ln_val_free((cmd_ln_val_t *)v);
+            }
+        }
+    }
+
+    /* Fill in default values, if any, for unspecified arguments */
+    for (i = 0; i < n; i++) {
+        cmd_ln_val_t *val;
+        void *v;
+
+        if (hash_table_lookup(cmdln->ht, defn[i].name, &v) < 0) {
+            if ((val = cmd_ln_val_init(defn[i].type, defn[i].deflt)) == NULL) {
+                E_ERROR
+                    ("Bad default argument value for %s: %s\n",
+                     defn[i].name, defn[i].deflt);
+                goto error;
+            }
+            hash_table_enter(cmdln->ht, defn[i].name, (void *)val);
+        }
+    }
+
+    /* Check for required arguments; exit if any missing */
+    j = 0;
+    for (i = 0; i < n; i++) {
+        if (defn[i].type & ARG_REQUIRED) {
+            void *v;
+            if (hash_table_lookup(cmdln->ht, defn[i].name, &v) != 0)
+                E_ERROR("Missing required argument %s\n", defn[i].name);
+        }
+    }
+    if (j > 0) {
+        cmd_ln_print_help_r(cmdln, stderr, defn);
+        goto error;
+    }
+
+    if (strict && argc == 1) {
+        E_ERROR("No arguments given, available options are:\n");
+        cmd_ln_print_help_r(cmdln, stderr, defn);
+        if (defidx)
+           hash_table_free(defidx);
+        if (inout_cmdln == NULL)
+           cmd_ln_free_r(cmdln);
+        return NULL;
+    }
+
+#ifndef _WIN32_WCE
+    /* Set up logging. We need to do this earlier because we want to dump
+     * the information to the configured log, not to the stderr. */
+    if (cmd_ln_exists_r(cmdln, "-logfn") && cmd_ln_str_r(cmdln, "-logfn"))
+        err_set_logfile(cmd_ln_str_r(cmdln, "-logfn"));
+
+    /* Echo command line */
+    E_INFO("Parsing command line:\n");
+    for (i = 0; i < argc; i++) {
+        if (argv[i][0] == '-')
+            E_INFOCONT("\\\n\t");
+        E_INFOCONT("%s ", argv[i]);
+    }
+    E_INFOCONT("\n\n");
+    fflush(stderr);
+
+    /* Print configuration */
+    E_INFOCONT("Current configuration:\n");
+    arg_dump_r(cmdln, err_get_logfp(), defn, 0);
+#endif
+
+    hash_table_free(defidx);
+    return cmdln;
+
+  error:
+    if (defidx)
+        hash_table_free(defidx);
+    if (inout_cmdln == NULL)
+        cmd_ln_free_r(cmdln);
+    E_ERROR("Failed to parse arguments list\n");
+    return NULL;
+}
+
+cmd_ln_t *
+cmd_ln_init(cmd_ln_t *inout_cmdln, const arg_t *defn, int32 strict, ...)
+{
+    va_list args;
+    const char *arg, *val;
+    char **f_argv;
+    int32 f_argc;
+
+    va_start(args, strict);
+    f_argc = 0;
+    while ((arg = va_arg(args, const char *))) {
+        ++f_argc;
+        val = va_arg(args, const char*);
+        if (val == NULL) {
+            E_ERROR("Number of arguments must be even!\n");
+            return NULL;
+        }
+        ++f_argc;
+    }
+    va_end(args);
+
+    /* Now allocate f_argv */
+    f_argv = ckd_calloc(f_argc, sizeof(*f_argv));
+    va_start(args, strict);
+    f_argc = 0;
+    while ((arg = va_arg(args, const char *))) {
+        f_argv[f_argc] = ckd_salloc(arg);
+        ++f_argc;
+        val = va_arg(args, const char*);
+        f_argv[f_argc] = ckd_salloc(val);
+        ++f_argc;
+    }
+    va_end(args);
+
+    return parse_options(inout_cmdln, defn, f_argc, f_argv, strict);
+}
+
+int
+cmd_ln_parse(const arg_t * defn, int32 argc, char *argv[], int strict)
+{
+    cmd_ln_t *cmdln;
+
+    cmdln = cmd_ln_parse_r(global_cmdln, defn, argc, argv, strict);
+    if (cmdln == NULL) {
+        /* Old, bogus behaviour... */
+        E_ERROR("Failed to parse arguments list, forced exit\n");
+        exit(-1);
+    }
+    /* Initialize global_cmdln if not present. */
+    if (global_cmdln == NULL) {
+        global_cmdln = cmdln;
+    }
+    return 0;
+}
+
+cmd_ln_t *
+cmd_ln_parse_file_r(cmd_ln_t *inout_cmdln, const arg_t * defn, const char *filename, int32 strict)
+{
+    FILE *file;
+    int argc;
+    int argv_size;
+    char *str;
+    int arg_max_length = 512;
+    int len = 0;
+    int quoting, ch;
+    char **f_argv;
+    int rv = 0;
+    const char separator[] = " \t\r\n";
+
+    if ((file = fopen(filename, "r")) == NULL) {
+        E_ERROR("Cannot open configuration file %s for reading\n",
+                filename);
+        return NULL;
+    }
+
+    ch = fgetc(file);
+    /* Skip to the next interesting character */
+    for (; ch != EOF && strchr(separator, ch); ch = fgetc(file)) ;
+
+    if (ch == EOF) {
+        fclose(file);
+        return NULL;
+    }
+
+    /*
+     * Initialize default argv, argc, and argv_size.
+     */
+    argv_size = 10;
+    argc = 0;
+    f_argv = ckd_calloc(argv_size, sizeof(char *));
+    /* Silently make room for \0 */
+    str = ckd_calloc(arg_max_length + 1, sizeof(char));
+    quoting = 0;
+
+    do {
+        /* Handle arguments that are commented out */
+        if (len == 0 && argc % 2 == 0) {
+            while (ch == '#') {
+                /* Skip everything until newline */
+                for (ch = fgetc(file); ch != EOF && ch != '\n'; ch = fgetc(file)) ;
+                /* Skip to the next interesting character */
+                for (ch = fgetc(file); ch != EOF && strchr(separator, ch); ch = fgetc(file)) ;
+            }
+
+            /* Check if we are at the last line (without anything interesting in it) */
+            if (ch == EOF)
+                break;
+        }
+
+        /* Handle quoted arguments */
+        if (ch == '"' || ch == '\'') {
+            if (quoting == ch) /* End a quoted section with the same type */
+                quoting = 0;
+            else if (quoting) {
+                E_ERROR("Nesting quotations is not supported!\n");
+                rv = 1;
+                break;
+            }
+            else
+                quoting = ch; /* Start a quoted section */
+        }
+        else if (ch == EOF || (!quoting && strchr(separator, ch))) {
+            /* Reallocate argv so it is big enough to contain all the arguments */
+            if (argc >= argv_size) {
+                char **tmp_argv;
+                if (!(tmp_argv =
+                       ckd_realloc(f_argv, argv_size * 2 * sizeof(char *)))) {
+                    rv = 1;
+                    break;
+                }
+                f_argv = tmp_argv;
+                argv_size *= 2;
+            }
+            /* Add the string to the list of arguments */
+            f_argv[argc] = ckd_salloc(str);
+            len = 0;
+            str[0] = '\0';
+            argc++;
+
+            if (quoting)
+                E_WARN("Unclosed quotation, having EOF close it...\n");
+
+            /* Skip to the next interesting character */
+            for (; ch != EOF && strchr(separator, ch); ch = fgetc(file)) ;
+
+            if (ch == EOF)
+                break;
+
+            /* We already have the next character */
+            continue;
+        }
+        else {
+            if (len >= arg_max_length) {
+                /* Make room for more chars (including the \0 !) */
+                char *tmp_str = str;
+                if ((tmp_str = ckd_realloc(str, (1 + arg_max_length * 2) * sizeof(char))) == NULL) {
+                    rv = 1;
+                    break;
+                }
+                str = tmp_str;
+                arg_max_length *= 2;
+            }
+            /* Add the char to the argument string */
+            str[len++] = ch;
+            /* Always null terminate */
+            str[len] = '\0';
+        }
+
+        ch = fgetc(file);
+    } while (1);
+
+    fclose(file);
+
+    ckd_free(str);
+
+    if (rv) {
+        for (ch = 0; ch < argc; ++ch)
+            ckd_free(f_argv[ch]);
+        ckd_free(f_argv);
+        return NULL;
+    }
+
+    return parse_options(inout_cmdln, defn, argc, f_argv, strict);
+}
+
+int
+cmd_ln_parse_file(const arg_t * defn, const char *filename, int32 strict)
+{
+    cmd_ln_t *cmdln;
+
+    cmdln = cmd_ln_parse_file_r(global_cmdln, defn, filename, strict);
+    if (cmdln == NULL) {
+        return -1;
+    }
+    /* Initialize global_cmdln if not present. */
+    if (global_cmdln == NULL) {
+        global_cmdln = cmdln;
+    }
+    return 0;
+}
+
+void
+cmd_ln_print_help_r(cmd_ln_t *cmdln, FILE * fp, arg_t const* defn)
+{
+    if (defn == NULL)
+        return;
+    fprintf(fp, "Arguments list definition:\n");
+    arg_dump_r(cmdln, fp, defn, 1);
+    fflush(fp);
+}
+
+int
+cmd_ln_exists_r(cmd_ln_t *cmdln, const char *name)
+{
+    void *val;
+    if (cmdln == NULL)
+        return FALSE;
+    return (hash_table_lookup(cmdln->ht, name, &val) == 0);
+}
+
+anytype_t *
+cmd_ln_access_r(cmd_ln_t *cmdln, const char *name)
+{
+    void *val;
+    if (hash_table_lookup(cmdln->ht, name, &val) < 0) {
+        E_ERROR("Unknown argument: %s\n", name);
+        return NULL;
+    }
+    return (anytype_t *)val;
+}
+
+char const *
+cmd_ln_str_r(cmd_ln_t *cmdln, char const *name)
+{
+    anytype_t *val;
+    val = cmd_ln_access_r(cmdln, name);
+    if (val == NULL)
+        return NULL;
+    return (char const *)val->ptr;
+}
+
+char const **
+cmd_ln_str_list_r(cmd_ln_t *cmdln, char const *name)
+{
+    anytype_t *val;
+    val = cmd_ln_access_r(cmdln, name);
+    if (val == NULL)
+        return NULL;
+    return (char const **)val->ptr;
+}
+
+long
+cmd_ln_int_r(cmd_ln_t *cmdln, char const *name)
+{
+    anytype_t *val;
+    val = cmd_ln_access_r(cmdln, name);
+    if (val == NULL)
+        return 0L;
+    return val->i;
+}
+
+double
+cmd_ln_float_r(cmd_ln_t *cmdln, char const *name)
+{
+    anytype_t *val;
+    val = cmd_ln_access_r(cmdln, name);
+    if (val == NULL)
+        return 0.0;
+    return val->fl;
+}
+
+void
+cmd_ln_set_str_r(cmd_ln_t *cmdln, char const *name, char const *str)
+{
+    anytype_t *val;
+    val = cmd_ln_access_r(cmdln, name);
+    if (val == NULL) {
+        E_ERROR("Unknown argument: %s\n", name);
+        return;
+    }
+    ckd_free(val->ptr);
+    if (str == NULL)
+        val->ptr = NULL;
+    else
+        val->ptr = ckd_salloc(str);
+}
+
+void
+cmd_ln_set_int_r(cmd_ln_t *cmdln, char const *name, long iv)
+{
+    anytype_t *val;
+    val = cmd_ln_access_r(cmdln, name);
+    if (val == NULL) {
+        E_ERROR("Unknown argument: %s\n", name);
+        return;
+    }
+    val->i = iv;
+}
+
+void
+cmd_ln_set_float_r(cmd_ln_t *cmdln, char const *name, double fv)
+{
+    anytype_t *val;
+    val = cmd_ln_access_r(cmdln, name);
+    if (val == NULL) {
+        E_ERROR("Unknown argument: %s\n", name);
+        return;
+    }
+    val->fl = fv;
+}
+
+cmd_ln_t *
+cmd_ln_retain(cmd_ln_t *cmdln)
+{
+    ++cmdln->refcount;
+    return cmdln;
+}
+
+int
+cmd_ln_free_r(cmd_ln_t *cmdln)
+{
+    if (cmdln == NULL)
+        return 0;
+    if (--cmdln->refcount > 0)
+        return cmdln->refcount;
+
+    if (cmdln->ht) {
+        glist_t entries;
+        gnode_t *gn;
+        int32 n;
+
+        entries = hash_table_tolist(cmdln->ht, &n);
+        for (gn = entries; gn; gn = gnode_next(gn)) {
+            hash_entry_t *e = gnode_ptr(gn);
+            cmd_ln_val_free((cmd_ln_val_t *)e->val);
+        }
+        glist_free(entries);
+        hash_table_free(cmdln->ht);
+        cmdln->ht = NULL;
+    }
+
+    if (cmdln->f_argv) {
+        int32 i;
+        for (i = 0; i < cmdln->f_argc; ++i) {
+            ckd_free(cmdln->f_argv[i]);
+        }
+        ckd_free(cmdln->f_argv);
+        cmdln->f_argv = NULL;
+        cmdln->f_argc = 0;
+    }
+    ckd_free(cmdln);
+    return 0;
+}
+
+void
+cmd_ln_free(void)
+{
+    cmd_ln_free_r(global_cmdln);
+    global_cmdln = NULL;
+}
diff --git a/src/libsphinxbase/util/dtoa.c b/src/libsphinxbase/util/dtoa.c
new file mode 100644 (file)
index 0000000..d65071e
--- /dev/null
@@ -0,0 +1,2393 @@
+/****************************************************************
+ *
+ * The author of this software is David M. Gay.
+ *
+ * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose without fee is hereby granted, provided that this entire notice
+ * is included in all copies of any software which is or includes a copy
+ * or modification of this software and in all copies of the supporting
+ * documentation for such software.
+ *
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ ***************************************************************/
+
+/* Please send bug reports to David M. Gay (dmg at acm dot org,
+ * with " at " changed at "@" and " dot " changed to ".").     */
+
+/* On a machine with IEEE extended-precision registers, it is
+ * necessary to specify double-precision (53-bit) rounding precision
+ * before invoking strtod or dtoa.  If the machine uses (the equivalent
+ * of) Intel 80x87 arithmetic, the call
+ *     _control87(PC_53, MCW_PC);
+ * does this with many compilers.  Whether this or another call is
+ * appropriate depends on the compiler; for this to work, it may be
+ * necessary to #include "float.h" or another system-dependent header
+ * file.
+ */
+
+/* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
+ *
+ * This strtod returns a nearest machine number to the input decimal
+ * string (or sets errno to ERANGE).  With IEEE arithmetic, ties are
+ * broken by the IEEE round-even rule.  Otherwise ties are broken by
+ * biased rounding (add half and chop).
+ *
+ * Inspired loosely by William D. Clinger's paper "How to Read Floating
+ * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
+ *
+ * Modifications:
+ *
+ *     1. We only require IEEE, IBM, or VAX double-precision
+ *             arithmetic (not IEEE double-extended).
+ *     2. We get by with floating-point arithmetic in a case that
+ *             Clinger missed -- when we're computing d * 10^n
+ *             for a small integer d and the integer n is not too
+ *             much larger than 22 (the maximum integer k for which
+ *             we can represent 10^k exactly), we may be able to
+ *             compute (d*10^k) * 10^(e-k) with just one roundoff.
+ *     3. Rather than a bit-at-a-time adjustment of the binary
+ *             result in the hard case, we use floating-point
+ *             arithmetic to determine the adjustment to within
+ *             one bit; only in really hard cases do we need to
+ *             compute a second residual.
+ *     4. Because of 3., we don't need a large table of powers of 10
+ *             for ten-to-e (just some small tables, e.g. of 10^k
+ *             for 0 <= k <= 22).
+ */
+
+/*
+ * This file has been modified to remove dtoa() and all
+ * non-reentrancy.  This makes it slower, but it also makes life a lot
+ * easier on Windows and other platforms without static lock
+ * initializers (grumble).
+ */
+
+/* Added by dhuggins@cs.cmu.edu to use autoconf results. */
+/* We do not care about the VAX. */
+#include "config.h"
+#ifdef WORDS_BIGENDIAN
+#define IEEE_MC68k
+#else
+#define IEEE_8087
+#endif
+#ifndef HAVE_LONG_LONG
+#define NO_LONG_LONG
+#endif
+#define Omit_Private_Memory
+#include "sphinxbase/ckd_alloc.h"
+#undef USE_LOCALE
+
+/* Correct totally bogus typedefs in this code. */
+#include "sphinxbase/prim_type.h"
+#define Long int32   /* ZOMG */
+#define ULong uint32 /* WTF */
+
+/*
+ * #define IEEE_8087 for IEEE-arithmetic machines where the least
+ *     significant byte has the lowest address.
+ * #define IEEE_MC68k for IEEE-arithmetic machines where the most
+ *     significant byte has the lowest address.
+ * #define Long int on machines with 32-bit ints and 64-bit longs.
+ * #define IBM for IBM mainframe-style floating-point arithmetic.
+ * #define VAX for VAX-style floating-point arithmetic (D_floating).
+ * #define No_leftright to omit left-right logic in fast floating-point
+ *     computation of dtoa.
+ * #define Honor_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3
+ *     and strtod and dtoa should round accordingly.
+ * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3
+ *     and Honor_FLT_ROUNDS is not #defined.
+ * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines
+ *     that use extended-precision instructions to compute rounded
+ *     products and quotients) with IBM.
+ * #define ROUND_BIASED for IEEE-format with biased rounding.
+ * #define Inaccurate_Divide for IEEE-format with correctly rounded
+ *     products but inaccurate quotients, e.g., for Intel i860.
+ * #define NO_LONG_LONG on machines that do not have a "long long"
+ *     integer type (of >= 64 bits).  On such machines, you can
+ *     #define Just_16 to store 16 bits per 32-bit Long when doing
+ *     high-precision integer arithmetic.  Whether this speeds things
+ *     up or slows things down depends on the machine and the number
+ *     being converted.  If long long is available and the name is
+ *     something other than "long long", #define Llong to be the name,
+ *     and if "unsigned Llong" does not work as an unsigned version of
+ *     Llong, #define #ULLong to be the corresponding unsigned type.
+ * #define KR_headers for old-style C function headers.
+ * #define Bad_float_h if your system lacks a float.h or if it does not
+ *     define some or all of DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP,
+ *     FLT_RADIX, FLT_ROUNDS, and DBL_MAX.
+ * #define MALLOC your_malloc, where your_malloc(n) acts like malloc(n)
+ *     if memory is available and otherwise does something you deem
+ *     appropriate.  If MALLOC is undefined, malloc will be invoked
+ *     directly -- and assumed always to succeed.
+ * #define Omit_Private_Memory to omit logic (added Jan. 1998) for making
+ *     memory allocations from a private pool of memory when possible.
+ *     When used, the private pool is PRIVATE_MEM bytes long:  2304 bytes,
+ *     unless #defined to be a different length.  This default length
+ *     suffices to get rid of MALLOC calls except for unusual cases,
+ *     such as decimal-to-binary conversion of a very long string of
+ *     digits.  The longest string dtoa can return is about 751 bytes
+ *     long.  For conversions by strtod of strings of 800 digits and
+ *     all dtoa conversions in single-threaded executions with 8-byte
+ *     pointers, PRIVATE_MEM >= 7400 appears to suffice; with 4-byte
+ *     pointers, PRIVATE_MEM >= 7112 appears adequate.
+ * #define NO_INFNAN_CHECK if you do not wish to have INFNAN_CHECK
+ *     #defined automatically on IEEE systems.  On such systems,
+ *     when INFNAN_CHECK is #defined, strtod checks
+ *     for Infinity and NaN (case insensitively).  On some systems
+ *     (e.g., some HP systems), it may be necessary to #define NAN_WORD0
+ *     appropriately -- to the most significant word of a quiet NaN.
+ *     (On HP Series 700/800 machines, -DNAN_WORD0=0x7ff40000 works.)
+ *     When INFNAN_CHECK is #defined and No_Hex_NaN is not #defined,
+ *     strtod also accepts (case insensitively) strings of the form
+ *     NaN(x), where x is a string of hexadecimal digits and spaces;
+ *     if there is only one string of hexadecimal digits, it is taken
+ *     for the 52 fraction bits of the resulting NaN; if there are two
+ *     or more strings of hex digits, the first is for the high 20 bits,
+ *     the second and subsequent for the low 32 bits, with intervening
+ *     white space ignored; but if this results in none of the 52
+ *     fraction bits being on (an IEEE Infinity symbol), then NAN_WORD0
+ *     and NAN_WORD1 are used instead.
+ * #define MULTIPLE_THREADS if the system offers preemptively scheduled
+ *     multiple threads.  In this case, you must provide (or suitably
+ *     #define) two locks, acquired by ACQUIRE_DTOA_LOCK(n) and freed
+ *     by FREE_DTOA_LOCK(n) for n = 0 or 1.  (The second lock, accessed
+ *     in pow5mult, ensures lazy evaluation of only one copy of high
+ *     powers of 5; omitting this lock would introduce a small
+ *     probability of wasting memory, but would otherwise be harmless.)
+ *     You must also invoke freedtoa(s) to free the value s returned by
+ *     dtoa.  You may do so whether or not MULTIPLE_THREADS is #defined.
+ * #define NO_IEEE_Scale to disable new (Feb. 1997) logic in strtod that
+ *     avoids underflows on inputs whose result does not underflow.
+ *     If you #define NO_IEEE_Scale on a machine that uses IEEE-format
+ *     floating-point numbers and flushes underflows to zero rather
+ *     than implementing gradual underflow, then you must also #define
+ *     Sudden_Underflow.
+ * #define YES_ALIAS to permit aliasing certain double values with
+ *     arrays of ULongs.  This leads to slightly better code with
+ *     some compilers and was always used prior to 19990916, but it
+ *     is not strictly legal and can cause trouble with aggressively
+ *     optimizing compilers (e.g., gcc 2.95.1 under -O2).
+ * #define USE_LOCALE to use the current locale's decimal_point value.
+ * #define SET_INEXACT if IEEE arithmetic is being used and extra
+ *     computation should be done to set the inexact flag when the
+ *     result is inexact and avoid setting inexact when the result
+ *     is exact.  In this case, dtoa.c must be compiled in
+ *     an environment, perhaps provided by #include "dtoa.c" in a
+ *     suitable wrapper, that defines two functions,
+ *             int get_inexact(void);
+ *             void clear_inexact(void);
+ *     such that get_inexact() returns a nonzero value if the
+ *     inexact bit is already set, and clear_inexact() sets the
+ *     inexact bit to 0.  When SET_INEXACT is #defined, strtod
+ *     also does extra computations to set the underflow and overflow
+ *     flags when appropriate (i.e., when the result is tiny and
+ *     inexact or when it is a numeric value rounded to +-infinity).
+ * #define NO_ERRNO if strtod should not assign errno = ERANGE when
+ *     the result overflows to +-Infinity or underflows to 0.
+ */
+
+#ifndef Long
+#define Long long
+#endif
+#ifndef ULong
+typedef unsigned Long ULong;
+#endif
+
+#ifdef DEBUG
+#include "stdio.h"
+#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
+#endif
+
+#include "stdlib.h"
+#include "string.h"
+
+#ifdef USE_LOCALE
+#include "locale.h"
+#endif
+
+/* Private memory and other non-reentrant stuff removed. */
+
+#undef IEEE_Arith
+#undef Avoid_Underflow
+#ifdef IEEE_MC68k
+#define IEEE_Arith
+#endif
+#ifdef IEEE_8087
+#define IEEE_Arith
+#endif
+
+#ifdef IEEE_Arith
+#ifndef NO_INFNAN_CHECK
+#undef INFNAN_CHECK
+#define INFNAN_CHECK
+#endif
+#else
+#undef INFNAN_CHECK
+#endif
+
+#include "errno.h"
+
+#ifdef Bad_float_h
+
+#ifdef IEEE_Arith
+#define DBL_DIG 15
+#define DBL_MAX_10_EXP 308
+#define DBL_MAX_EXP 1024
+#define FLT_RADIX 2
+#endif /*IEEE_Arith*/
+
+#ifdef IBM
+#define DBL_DIG 16
+#define DBL_MAX_10_EXP 75
+#define DBL_MAX_EXP 63
+#define FLT_RADIX 16
+#define DBL_MAX 7.2370055773322621e+75
+#endif
+
+#ifdef VAX
+#define DBL_DIG 16
+#define DBL_MAX_10_EXP 38
+#define DBL_MAX_EXP 127
+#define FLT_RADIX 2
+#define DBL_MAX 1.7014118346046923e+38
+#endif
+
+#ifndef LONG_MAX
+#define LONG_MAX 2147483647
+#endif
+
+#else /* ifndef Bad_float_h */
+#include "float.h"
+#endif /* Bad_float_h */
+
+#ifndef __MATH_H__
+#include "math.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef CONST
+#ifdef KR_headers
+#define CONST /* blank */
+#else
+#define CONST const
+#endif
+#endif
+
+
+#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1
+Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
+#endif
+
+/** Union to extract the bytes of a double */
+typedef union { double d; ULong L[2]; } U;
+
+#ifdef YES_ALIAS
+#define dval(x) x
+#ifdef IEEE_8087
+#define word0(x) ((ULong *)&x)[1]
+#define word1(x) ((ULong *)&x)[0]
+#else
+#define word0(x) ((ULong *)&x)[0]
+#define word1(x) ((ULong *)&x)[1]
+#endif
+#else
+#ifdef IEEE_8087
+#define word0(x) ((U*)&x)->L[1]
+#define word1(x) ((U*)&x)->L[0]
+#else
+#define word0(x) ((U*)&x)->L[0]
+#define word1(x) ((U*)&x)->L[1]
+#endif
+#define dval(x) ((U*)&x)->d
+#endif
+
+/* The following definition of Storeinc is appropriate for MIPS processors.
+ * An alternative that might be better on some machines is
+ * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
+ */
+#if defined(IEEE_8087) + defined(VAX)
+#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
+((unsigned short *)a)[0] = (unsigned short)c, a++)
+#else
+#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
+((unsigned short *)a)[1] = (unsigned short)c, a++)
+#endif
+
+/* #define P DBL_MANT_DIG */
+/* Ten_pmax = floor(P*log(2)/log(5)) */
+/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
+/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
+/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
+
+#ifdef IEEE_Arith
+#define Exp_shift  20
+#define Exp_shift1 20
+#define Exp_msk1    0x100000
+#define Exp_msk11   0x100000
+#define Exp_mask  0x7ff00000
+#define P 53
+#define Bias 1023
+#define Emin (-1022)
+#define Exp_1  0x3ff00000
+#define Exp_11 0x3ff00000
+#define Ebits 11
+#define Frac_mask  0xfffff
+#define Frac_mask1 0xfffff
+#define Ten_pmax 22
+#define Bletch 0x10
+#define Bndry_mask  0xfffff
+#define Bndry_mask1 0xfffff
+#define LSB 1
+#define Sign_bit 0x80000000
+#define Log2P 1
+#define Tiny0 0
+#define Tiny1 1
+#define Quick_max 14
+#define Int_max 14
+#ifndef NO_IEEE_Scale
+#define Avoid_Underflow
+#ifdef Flush_Denorm    /* debugging option */
+#undef Sudden_Underflow
+#endif
+#endif
+
+#ifndef Flt_Rounds
+#ifdef FLT_ROUNDS
+#define Flt_Rounds FLT_ROUNDS
+#else
+#define Flt_Rounds 1
+#endif
+#endif /*Flt_Rounds*/
+
+#ifdef Honor_FLT_ROUNDS
+#define Rounding rounding
+#undef Check_FLT_ROUNDS
+#define Check_FLT_ROUNDS
+#else
+#define Rounding Flt_Rounds
+#endif
+
+#else /* ifndef IEEE_Arith */
+#undef Check_FLT_ROUNDS
+#undef Honor_FLT_ROUNDS
+#undef SET_INEXACT
+#undef  Sudden_Underflow
+#define Sudden_Underflow
+#ifdef IBM
+#undef Flt_Rounds
+#define Flt_Rounds 0
+#define Exp_shift  24
+#define Exp_shift1 24
+#define Exp_msk1   0x1000000
+#define Exp_msk11  0x1000000
+#define Exp_mask  0x7f000000
+#define P 14
+#define Bias 65
+#define Exp_1  0x41000000
+#define Exp_11 0x41000000
+#define Ebits 8        /* exponent has 7 bits, but 8 is the right value in b2d */
+#define Frac_mask  0xffffff
+#define Frac_mask1 0xffffff
+#define Bletch 4
+#define Ten_pmax 22
+#define Bndry_mask  0xefffff
+#define Bndry_mask1 0xffffff
+#define LSB 1
+#define Sign_bit 0x80000000
+#define Log2P 4
+#define Tiny0 0x100000
+#define Tiny1 0
+#define Quick_max 14
+#define Int_max 15
+#else /* VAX */
+#undef Flt_Rounds
+#define Flt_Rounds 1
+#define Exp_shift  23
+#define Exp_shift1 7
+#define Exp_msk1    0x80
+#define Exp_msk11   0x800000
+#define Exp_mask  0x7f80
+#define P 56
+#define Bias 129
+#define Exp_1  0x40800000
+#define Exp_11 0x4080
+#define Ebits 8
+#define Frac_mask  0x7fffff
+#define Frac_mask1 0xffff007f
+#define Ten_pmax 24
+#define Bletch 2
+#define Bndry_mask  0xffff007f
+#define Bndry_mask1 0xffff007f
+#define LSB 0x10000
+#define Sign_bit 0x8000
+#define Log2P 1
+#define Tiny0 0x80
+#define Tiny1 0
+#define Quick_max 15
+#define Int_max 15
+#endif /* IBM, VAX */
+#endif /* IEEE_Arith */
+
+#ifndef IEEE_Arith
+#define ROUND_BIASED
+#endif
+
+#ifdef RND_PRODQUOT
+#define rounded_product(a,b) a = rnd_prod(a, b)
+#define rounded_quotient(a,b) a = rnd_quot(a, b)
+#ifdef KR_headers
+extern double rnd_prod(), rnd_quot();
+#else
+extern double rnd_prod(double, double), rnd_quot(double, double);
+#endif
+#else
+#define rounded_product(a,b) a *= b
+#define rounded_quotient(a,b) a /= b
+#endif
+
+#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
+#define Big1 0xffffffff
+
+#ifndef Pack_32
+#define Pack_32
+#endif
+
+#ifdef KR_headers
+#define FFFFFFFF ((((unsigned long)0xffff)<<16)|(unsigned long)0xffff)
+#else
+#define FFFFFFFF 0xffffffffUL
+#endif
+
+#ifdef NO_LONG_LONG
+#undef ULLong
+#ifdef Just_16
+#undef Pack_32
+/* When Pack_32 is not defined, we store 16 bits per 32-bit Long.
+ * This makes some inner loops simpler and sometimes saves work
+ * during multiplications, but it often seems to make things slightly
+ * slower.  Hence the default is now to store 32 bits per Long.
+ */
+#endif
+#else  /* long long available */
+#ifndef Llong
+#define Llong long long
+#endif
+#ifndef ULLong
+#define ULLong unsigned Llong
+#endif
+#endif /* NO_LONG_LONG */
+
+#ifndef MULTIPLE_THREADS
+#define ACQUIRE_DTOA_LOCK(n)   /*nothing*/
+#define FREE_DTOA_LOCK(n)      /*nothing*/
+#endif
+
+#define Kmax 15
+
+#ifdef __cplusplus
+extern "C" double sb_strtod(const char *s00, char **se);
+#endif
+
+ struct
+Bigint {
+       struct Bigint *next;
+       int k, maxwds, sign, wds;
+       ULong x[1];
+       };
+
+ typedef struct Bigint Bigint;
+
+ static Bigint *
+Balloc
+#ifdef KR_headers
+       (k) int k;
+#else
+       (int k)
+#endif
+{
+       int x;
+       size_t len;
+       Bigint *rv;
+
+       x = 1 << k;
+       len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
+               /sizeof(double);
+       rv = ckd_malloc(len*sizeof(double));
+       rv->k = k;
+       rv->maxwds = x;
+       rv->sign = rv->wds = 0;
+       return rv;
+}
+
+ static void
+Bfree
+#ifdef KR_headers
+       (v) Bigint *v;
+#else
+       (Bigint *v)
+#endif
+{
+       ckd_free(v);
+}
+
+#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \
+y->wds*sizeof(Long) + 2*sizeof(int))
+
+ static Bigint *
+multadd
+#ifdef KR_headers
+       (b, m, a) Bigint *b; int m, a;
+#else
+       (Bigint *b, int m, int a)       /* multiply by m and add a */
+#endif
+{
+       int i, wds;
+#ifdef ULLong
+       ULong *x;
+       ULLong carry, y;
+#else
+       ULong carry, *x, y;
+#ifdef Pack_32
+       ULong xi, z;
+#endif
+#endif
+       Bigint *b1;
+
+       wds = b->wds;
+       x = b->x;
+       i = 0;
+       carry = a;
+       do {
+#ifdef ULLong
+               y = *x * (ULLong)m + carry;
+               carry = y >> 32;
+               *x++ = y & FFFFFFFF;
+#else
+#ifdef Pack_32
+               xi = *x;
+               y = (xi & 0xffff) * m + carry;
+               z = (xi >> 16) * m + (y >> 16);
+               carry = z >> 16;
+               *x++ = (z << 16) + (y & 0xffff);
+#else
+               y = *x * m + carry;
+               carry = y >> 16;
+               *x++ = y & 0xffff;
+#endif
+#endif
+               }
+               while(++i < wds);
+       if (carry) {
+               if (wds >= b->maxwds) {
+                       b1 = Balloc(b->k+1);
+                       Bcopy(b1, b);
+                       Bfree(b);
+                       b = b1;
+                       }
+               b->x[wds++] = carry;
+               b->wds = wds;
+               }
+       return b;
+       }
+
+ static Bigint *
+s2b
+#ifdef KR_headers
+       (s, nd0, nd, y9) CONST char *s; int nd0, nd; ULong y9;
+#else
+       (CONST char *s, int nd0, int nd, ULong y9)
+#endif
+{
+       Bigint *b;
+       int i, k;
+       Long x, y;
+
+       x = (nd + 8) / 9;
+       for(k = 0, y = 1; x > y; y <<= 1, k++) ;
+#ifdef Pack_32
+       b = Balloc(k);
+       b->x[0] = y9;
+       b->wds = 1;
+#else
+       b = Balloc(k+1);
+       b->x[0] = y9 & 0xffff;
+       b->wds = (b->x[1] = y9 >> 16) ? 2 : 1;
+#endif
+
+       i = 9;
+       if (9 < nd0) {
+               s += 9;
+               do b = multadd(b, 10, *s++ - '0');
+                       while(++i < nd0);
+               s++;
+               }
+       else
+               s += 10;
+       for(; i < nd; i++)
+               b = multadd(b, 10, *s++ - '0');
+       return b;
+       }
+
+ static int
+hi0bits
+#ifdef KR_headers
+       (x) register ULong x;
+#else
+       (register ULong x)
+#endif
+{
+       register int k = 0;
+
+       if (!(x & 0xffff0000)) {
+               k = 16;
+               x <<= 16;
+               }
+       if (!(x & 0xff000000)) {
+               k += 8;
+               x <<= 8;
+               }
+       if (!(x & 0xf0000000)) {
+               k += 4;
+               x <<= 4;
+               }
+       if (!(x & 0xc0000000)) {
+               k += 2;
+               x <<= 2;
+               }
+       if (!(x & 0x80000000)) {
+               k++;
+               if (!(x & 0x40000000))
+                       return 32;
+               }
+       return k;
+       }
+
+ static int
+lo0bits
+#ifdef KR_headers
+       (y) ULong *y;
+#else
+       (ULong *y)
+#endif
+{
+       register int k;
+       register ULong x = *y;
+
+       if (x & 7) {
+               if (x & 1)
+                       return 0;
+               if (x & 2) {
+                       *y = x >> 1;
+                       return 1;
+                       }
+               *y = x >> 2;
+               return 2;
+               }
+       k = 0;
+       if (!(x & 0xffff)) {
+               k = 16;
+               x >>= 16;
+               }
+       if (!(x & 0xff)) {
+               k += 8;
+               x >>= 8;
+               }
+       if (!(x & 0xf)) {
+               k += 4;
+               x >>= 4;
+               }
+       if (!(x & 0x3)) {
+               k += 2;
+               x >>= 2;
+               }
+       if (!(x & 1)) {
+               k++;
+               x >>= 1;
+               if (!x)
+                       return 32;
+               }
+       *y = x;
+       return k;
+       }
+
+ static Bigint *
+i2b
+#ifdef KR_headers
+       (i) int i;
+#else
+       (int i)
+#endif
+{
+       Bigint *b;
+
+       b = Balloc(1);
+       b->x[0] = i;
+       b->wds = 1;
+       return b;
+       }
+
+ static Bigint *
+mult
+#ifdef KR_headers
+       (a, b) Bigint *a, *b;
+#else
+       (Bigint *a, Bigint *b)
+#endif
+{
+       Bigint *c;
+       int k, wa, wb, wc;
+       ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
+       ULong y;
+#ifdef ULLong
+       ULLong carry, z;
+#else
+       ULong carry, z;
+#ifdef Pack_32
+       ULong z2;
+#endif
+#endif
+
+       if (a->wds < b->wds) {
+               c = a;
+               a = b;
+               b = c;
+               }
+       k = a->k;
+       wa = a->wds;
+       wb = b->wds;
+       wc = wa + wb;
+       if (wc > a->maxwds)
+               k++;
+       c = Balloc(k);
+       for(x = c->x, xa = x + wc; x < xa; x++)
+               *x = 0;
+       xa = a->x;
+       xae = xa + wa;
+       xb = b->x;
+       xbe = xb + wb;
+       xc0 = c->x;
+#ifdef ULLong
+       for(; xb < xbe; xc0++) {
+               if ((y = *xb++)) {
+                       x = xa;
+                       xc = xc0;
+                       carry = 0;
+                       do {
+                               z = *x++ * (ULLong)y + *xc + carry;
+                               carry = z >> 32;
+                               *xc++ = z & FFFFFFFF;
+                               }
+                               while(x < xae);
+                       *xc = carry;
+                       }
+               }
+#else
+#ifdef Pack_32
+       for(; xb < xbe; xb++, xc0++) {
+               if (y = *xb & 0xffff) {
+                       x = xa;
+                       xc = xc0;
+                       carry = 0;
+                       do {
+                               z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
+                               carry = z >> 16;
+                               z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
+                               carry = z2 >> 16;
+                               Storeinc(xc, z2, z);
+                               }
+                               while(x < xae);
+                       *xc = carry;
+                       }
+               if (y = *xb >> 16) {
+                       x = xa;
+                       xc = xc0;
+                       carry = 0;
+                       z2 = *xc;
+                       do {
+                               z = (*x & 0xffff) * y + (*xc >> 16) + carry;
+                               carry = z >> 16;
+                               Storeinc(xc, z, z2);
+                               z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
+                               carry = z2 >> 16;
+                               }
+                               while(x < xae);
+                       *xc = z2;
+                       }
+               }
+#else
+       for(; xb < xbe; xc0++) {
+               if (y = *xb++) {
+                       x = xa;
+                       xc = xc0;
+                       carry = 0;
+                       do {
+                               z = *x++ * y + *xc + carry;
+                               carry = z >> 16;
+                               *xc++ = z & 0xffff;
+                               }
+                               while(x < xae);
+                       *xc = carry;
+                       }
+               }
+#endif
+#endif
+       for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
+       c->wds = wc;
+       return c;
+       }
+
+ static Bigint *
+pow5mult
+#ifdef KR_headers
+       (b, k) Bigint *b; int k;
+#else
+       (Bigint *b, int k)
+#endif
+{
+       Bigint *b1, *p5, *p51;
+       int i;
+       static int CONST p05[3] = { 5, 25, 125 };
+
+       if ((i = k & 3))
+               b = multadd(b, p05[i-1], 0);
+
+       if (!(k >>= 2))
+               return b;
+
+       p5 = i2b(625);
+       for(;;) {
+               if (k & 1) {
+                       b1 = mult(b, p5);
+                       Bfree(b);
+                       b = b1;
+               }
+               if (!(k >>= 1))
+                       break;
+               p51 = mult(p5,p5);
+               Bfree(p5);
+               p5 = p51;
+       }
+       Bfree(p5);
+       return b;
+}
+
+ static Bigint *
+lshift
+#ifdef KR_headers
+       (b, k) Bigint *b; int k;
+#else
+       (Bigint *b, int k)
+#endif
+{
+       int i, k1, n, n1;
+       Bigint *b1;
+       ULong *x, *x1, *xe, z;
+
+#ifdef Pack_32
+       n = k >> 5;
+#else
+       n = k >> 4;
+#endif
+       k1 = b->k;
+       n1 = n + b->wds + 1;
+       for(i = b->maxwds; n1 > i; i <<= 1)
+               k1++;
+       b1 = Balloc(k1);
+       x1 = b1->x;
+       for(i = 0; i < n; i++)
+               *x1++ = 0;
+       x = b->x;
+       xe = x + b->wds;
+#ifdef Pack_32
+       if (k &= 0x1f) {
+               k1 = 32 - k;
+               z = 0;
+               do {
+                       *x1++ = *x << k | z;
+                       z = *x++ >> k1;
+                       }
+                       while(x < xe);
+               if ((*x1 = z))
+                       ++n1;
+               }
+#else
+       if (k &= 0xf) {
+               k1 = 16 - k;
+               z = 0;
+               do {
+                       *x1++ = *x << k  & 0xffff | z;
+                       z = *x++ >> k1;
+                       }
+                       while(x < xe);
+               if (*x1 = z)
+                       ++n1;
+               }
+#endif
+       else do
+               *x1++ = *x++;
+               while(x < xe);
+       b1->wds = n1 - 1;
+       Bfree(b);
+       return b1;
+       }
+
+ static int
+cmp
+#ifdef KR_headers
+       (a, b) Bigint *a, *b;
+#else
+       (Bigint *a, Bigint *b)
+#endif
+{
+       ULong *xa, *xa0, *xb, *xb0;
+       int i, j;
+
+       i = a->wds;
+       j = b->wds;
+#ifdef DEBUG
+       if (i > 1 && !a->x[i-1])
+               Bug("cmp called with a->x[a->wds-1] == 0");
+       if (j > 1 && !b->x[j-1])
+               Bug("cmp called with b->x[b->wds-1] == 0");
+#endif
+       if (i -= j)
+               return i;
+       xa0 = a->x;
+       xa = xa0 + j;
+       xb0 = b->x;
+       xb = xb0 + j;
+       for(;;) {
+               if (*--xa != *--xb)
+                       return *xa < *xb ? -1 : 1;
+               if (xa <= xa0)
+                       break;
+               }
+       return 0;
+       }
+
+ static Bigint *
+diff
+#ifdef KR_headers
+       (a, b) Bigint *a, *b;
+#else
+       (Bigint *a, Bigint *b)
+#endif
+{
+       Bigint *c;
+       int i, wa, wb;
+       ULong *xa, *xae, *xb, *xbe, *xc;
+#ifdef ULLong
+       ULLong borrow, y;
+#else
+       ULong borrow, y;
+#ifdef Pack_32
+       ULong z;
+#endif
+#endif
+
+       i = cmp(a,b);
+       if (!i) {
+               c = Balloc(0);
+               c->wds = 1;
+               c->x[0] = 0;
+               return c;
+               }
+       if (i < 0) {
+               c = a;
+               a = b;
+               b = c;
+               i = 1;
+               }
+       else
+               i = 0;
+       c = Balloc(a->k);
+       c->sign = i;
+       wa = a->wds;
+       xa = a->x;
+       xae = xa + wa;
+       wb = b->wds;
+       xb = b->x;
+       xbe = xb + wb;
+       xc = c->x;
+       borrow = 0;
+#ifdef ULLong
+       do {
+               y = (ULLong)*xa++ - *xb++ - borrow;
+               borrow = y >> 32 & (ULong)1;
+               *xc++ = y & FFFFFFFF;
+               }
+               while(xb < xbe);
+       while(xa < xae) {
+               y = *xa++ - borrow;
+               borrow = y >> 32 & (ULong)1;
+               *xc++ = y & FFFFFFFF;
+               }
+#else
+#ifdef Pack_32
+       do {
+               y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
+               borrow = (y & 0x10000) >> 16;
+               z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
+               borrow = (z & 0x10000) >> 16;
+               Storeinc(xc, z, y);
+               }
+               while(xb < xbe);
+       while(xa < xae) {
+               y = (*xa & 0xffff) - borrow;
+               borrow = (y & 0x10000) >> 16;
+               z = (*xa++ >> 16) - borrow;
+               borrow = (z & 0x10000) >> 16;
+               Storeinc(xc, z, y);
+               }
+#else
+       do {
+               y = *xa++ - *xb++ - borrow;
+               borrow = (y & 0x10000) >> 16;
+               *xc++ = y & 0xffff;
+               }
+               while(xb < xbe);
+       while(xa < xae) {
+               y = *xa++ - borrow;
+               borrow = (y & 0x10000) >> 16;
+               *xc++ = y & 0xffff;
+               }
+#endif
+#endif
+       while(!*--xc)
+               wa--;
+       c->wds = wa;
+       return c;
+       }
+
+ static double
+ulp
+#ifdef KR_headers
+       (x) double x;
+#else
+       (double x)
+#endif
+{
+       register Long L;
+       U a;
+
+       L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
+#ifndef Avoid_Underflow
+#ifndef Sudden_Underflow
+       if (L > 0) {
+#endif
+#endif
+#ifdef IBM
+               L |= Exp_msk1 >> 4;
+#endif
+               word0(a) = L;
+               word1(a) = 0;
+#ifndef Avoid_Underflow
+#ifndef Sudden_Underflow
+               }
+       else {
+               L = -L >> Exp_shift;
+               if (L < Exp_shift) {
+                       word0(a) = 0x80000 >> L;
+                       word1(a) = 0;
+                       }
+               else {
+                       word0(a) = 0;
+                       L -= Exp_shift;
+                       word1(a) = L >= 31 ? 1 : 1 << 31 - L;
+                       }
+               }
+#endif
+#endif
+       return dval(a);
+       }
+
+ static double
+b2d
+#ifdef KR_headers
+       (a, e) Bigint *a; int *e;
+#else
+       (Bigint *a, int *e)
+#endif
+{
+       ULong *xa, *xa0, w, y, z;
+       int k;
+       U d;
+#ifdef VAX
+       ULong d0, d1;
+#else
+#define d0 word0(d)
+#define d1 word1(d)
+#endif
+
+       xa0 = a->x;
+       xa = xa0 + a->wds;
+       y = *--xa;
+#ifdef DEBUG
+       if (!y) Bug("zero y in b2d");
+#endif
+       k = hi0bits(y);
+       *e = 32 - k;
+#ifdef Pack_32
+       if (k < Ebits) {
+               d0 = Exp_1 | y >> (Ebits - k);
+               w = xa > xa0 ? *--xa : 0;
+               d1 = y << ((32-Ebits) + k) | w >> (Ebits - k);
+               goto ret_d;
+               }
+       z = xa > xa0 ? *--xa : 0;
+       if (k -= Ebits) {
+               d0 = Exp_1 | y << k | z >> (32 - k);
+               y = xa > xa0 ? *--xa : 0;
+               d1 = z << k | y >> (32 - k);
+               }
+       else {
+               d0 = Exp_1 | y;
+               d1 = z;
+               }
+#else
+       if (k < Ebits + 16) {
+               z = xa > xa0 ? *--xa : 0;
+               d0 = Exp_1 | y << k - Ebits | z >> Ebits + 16 - k;
+               w = xa > xa0 ? *--xa : 0;
+               y = xa > xa0 ? *--xa : 0;
+               d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k;
+               goto ret_d;
+               }
+       z = xa > xa0 ? *--xa : 0;
+       w = xa > xa0 ? *--xa : 0;
+       k -= Ebits + 16;
+       d0 = Exp_1 | y << k + 16 | z << k | w >> 16 - k;
+       y = xa > xa0 ? *--xa : 0;
+       d1 = w << k + 16 | y << k;
+#endif
+ ret_d:
+#ifdef VAX
+       word0(d) = d0 >> 16 | d0 << 16;
+       word1(d) = d1 >> 16 | d1 << 16;
+#else
+#undef d0
+#undef d1
+#endif
+       return dval(d);
+       }
+
+ static Bigint *
+d2b
+#ifdef KR_headers
+       (d, e, bits) double d; int *e, *bits;
+#else
+       (double _d, int *e, int *bits)
+#endif
+{
+       Bigint *b;
+       int de, k;
+       ULong *x, y, z;
+       U d;
+#ifndef Sudden_Underflow
+       int i;
+#endif
+#ifdef VAX
+       ULong d0, d1;
+       d0 = word0(d) >> 16 | word0(d) << 16;
+       d1 = word1(d) >> 16 | word1(d) << 16;
+#else
+#define d0 word0(d)
+#define d1 word1(d)
+#endif
+       dval(d) = _d;
+
+#ifdef Pack_32
+       b = Balloc(1);
+#else
+       b = Balloc(2);
+#endif
+       x = b->x;
+
+       z = d0 & Frac_mask;
+       d0 &= 0x7fffffff;       /* clear sign bit, which we ignore */
+#ifdef Sudden_Underflow
+       de = (int)(d0 >> Exp_shift);
+#ifndef IBM
+       z |= Exp_msk11;
+#endif
+#else
+       if ((de = (int)(d0 >> Exp_shift)))
+               z |= Exp_msk1;
+#endif
+#ifdef Pack_32
+       if ((y = d1)) {
+               if ((k = lo0bits(&y))) {
+                       x[0] = y | z << (32 - k);
+                       z >>= k;
+                       }
+               else
+                       x[0] = y;
+#ifndef Sudden_Underflow
+               i =
+#endif
+                   b->wds = (x[1] = z) ? 2 : 1;
+               }
+       else {
+#ifdef DEBUG
+               if (!z)
+                       Bug("Zero passed to d2b");
+#endif
+               k = lo0bits(&z);
+               x[0] = z;
+#ifndef Sudden_Underflow
+               i =
+#endif
+                   b->wds = 1;
+               k += 32;
+               }
+#else
+       if (y = d1) {
+               if (k = lo0bits(&y))
+                       if (k >= 16) {
+                               x[0] = y | z << 32 - k & 0xffff;
+                               x[1] = z >> k - 16 & 0xffff;
+                               x[2] = z >> k;
+                               i = 2;
+                               }
+                       else {
+                               x[0] = y & 0xffff;
+                               x[1] = y >> 16 | z << 16 - k & 0xffff;
+                               x[2] = z >> k & 0xffff;
+                               x[3] = z >> k+16;
+                               i = 3;
+                               }
+               else {
+                       x[0] = y & 0xffff;
+                       x[1] = y >> 16;
+                       x[2] = z & 0xffff;
+                       x[3] = z >> 16;
+                       i = 3;
+                       }
+               }
+       else {
+#ifdef DEBUG
+               if (!z)
+                       Bug("Zero passed to d2b");
+#endif
+               k = lo0bits(&z);
+               if (k >= 16) {
+                       x[0] = z;
+                       i = 0;
+                       }
+               else {
+                       x[0] = z & 0xffff;
+                       x[1] = z >> 16;
+                       i = 1;
+                       }
+               k += 32;
+               }
+       while(!x[i])
+               --i;
+       b->wds = i + 1;
+#endif
+#ifndef Sudden_Underflow
+       if (de) {
+#endif
+#ifdef IBM
+               *e = (de - Bias - (P-1) << 2) + k;
+               *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask);
+#else
+               *e = de - Bias - (P-1) + k;
+               *bits = P - k;
+#endif
+#ifndef Sudden_Underflow
+               }
+       else {
+               *e = de - Bias - (P-1) + 1 + k;
+#ifdef Pack_32
+               *bits = 32*i - hi0bits(x[i-1]);
+#else
+               *bits = (i+2)*16 - hi0bits(x[i]);
+#endif
+               }
+#endif
+       return b;
+       }
+#undef d0
+#undef d1
+
+ static double
+ratio
+#ifdef KR_headers
+       (a, b) Bigint *a, *b;
+#else
+       (Bigint *a, Bigint *b)
+#endif
+{
+       U da, db;
+       int k, ka, kb;
+
+       dval(da) = b2d(a, &ka);
+       dval(db) = b2d(b, &kb);
+#ifdef Pack_32
+       k = ka - kb + 32*(a->wds - b->wds);
+#else
+       k = ka - kb + 16*(a->wds - b->wds);
+#endif
+#ifdef IBM
+       if (k > 0) {
+               word0(da) += (k >> 2)*Exp_msk1;
+               if (k &= 3)
+                       dval(da) *= 1 << k;
+               }
+       else {
+               k = -k;
+               word0(db) += (k >> 2)*Exp_msk1;
+               if (k &= 3)
+                       dval(db) *= 1 << k;
+               }
+#else
+       if (k > 0)
+               word0(da) += k*Exp_msk1;
+       else {
+               k = -k;
+               word0(db) += k*Exp_msk1;
+               }
+#endif
+       return dval(da) / dval(db);
+       }
+
+ static CONST double
+tens[] = {
+               1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
+               1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
+               1e20, 1e21, 1e22
+#ifdef VAX
+               , 1e23, 1e24
+#endif
+               };
+
+ static CONST double
+#ifdef IEEE_Arith
+bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
+static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
+#ifdef Avoid_Underflow
+               9007199254740992.*9007199254740992.e-256
+               /* = 2^106 * 1e-53 */
+#else
+               1e-256
+#endif
+               };
+/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
+/* flag unnecessarily.  It leads to a song and dance at the end of strtod. */
+#define Scale_Bit 0x10
+#define n_bigtens 5
+#else
+#ifdef IBM
+bigtens[] = { 1e16, 1e32, 1e64 };
+static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 };
+#define n_bigtens 3
+#else
+bigtens[] = { 1e16, 1e32 };
+static CONST double tinytens[] = { 1e-16, 1e-32 };
+#define n_bigtens 2
+#endif
+#endif
+
+#ifdef INFNAN_CHECK
+
+#ifndef NAN_WORD0
+#define NAN_WORD0 0x7ff80000
+#endif
+
+#ifndef NAN_WORD1
+#define NAN_WORD1 0
+#endif
+
+ static int
+match
+#ifdef KR_headers
+       (sp, t) char **sp, *t;
+#else
+       (CONST char **sp, char *t)
+#endif
+{
+       int c, d;
+       CONST char *s = *sp;
+
+       while((d = *t++)) {
+               if ((c = *++s) >= 'A' && c <= 'Z')
+                       c += 'a' - 'A';
+               if (c != d)
+                       return 0;
+               }
+       *sp = s + 1;
+       return 1;
+       }
+
+#ifndef No_Hex_NaN
+ static void
+hexnan
+#ifdef KR_headers
+       (rvp, sp) double *rvp; CONST char **sp;
+#else
+       (U *rvp, CONST char **sp)
+#endif
+{
+       ULong c, x[2];
+       CONST char *s;
+       int havedig, udx0, xshift;
+
+       x[0] = x[1] = 0;
+       havedig = xshift = 0;
+       udx0 = 1;
+       s = *sp;
+       /* allow optional initial 0x or 0X */
+       while((c = *(CONST unsigned char*)(s+1)) && c <= ' ')
+               ++s;
+       if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X'))
+               s += 2;
+       while((c = *(CONST unsigned char*)++s)) {
+               if (c >= '0' && c <= '9')
+                       c -= '0';
+               else if (c >= 'a' && c <= 'f')
+                       c += 10 - 'a';
+               else if (c >= 'A' && c <= 'F')
+                       c += 10 - 'A';
+               else if (c <= ' ') {
+                       if (udx0 && havedig) {
+                               udx0 = 0;
+                               xshift = 1;
+                               }
+                       continue;
+                       }
+#ifdef GDTOA_NON_PEDANTIC_NANCHECK
+               else if (/*(*/ c == ')' && havedig) {
+                       *sp = s + 1;
+                       break;
+                       }
+               else
+                       return; /* invalid form: don't change *sp */
+#else
+               else {
+                       do {
+                               if (/*(*/ c == ')') {
+                                       *sp = s + 1;
+                                       break;
+                                       }
+                       } while((c = *++s));
+                       break;
+               }
+#endif
+               havedig = 1;
+               if (xshift) {
+                       xshift = 0;
+                       x[0] = x[1];
+                       x[1] = 0;
+                       }
+               if (udx0)
+                       x[0] = (x[0] << 4) | (x[1] >> 28);
+               x[1] = (x[1] << 4) | c;
+               }
+       if ((x[0] &= 0xfffff) || x[1]) {
+               word0(*rvp) = Exp_mask | x[0];
+               word1(*rvp) = x[1];
+               }
+       }
+#endif /*No_Hex_NaN*/
+#endif /* INFNAN_CHECK */
+
+ double
+sb_strtod
+#ifdef KR_headers
+       (s00, se) CONST char *s00; char **se;
+#else
+       (CONST char *s00, char **se)
+#endif
+{
+#ifdef Avoid_Underflow
+       int scale;
+#endif
+       int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign,
+                e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
+       CONST char *s, *s0, *s1;
+       double aadj, adj;
+       U rv, rv0, aadj1;
+       Long L;
+       ULong y, z;
+       Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
+#ifdef SET_INEXACT
+       int inexact, oldinexact;
+#endif
+#ifdef Honor_FLT_ROUNDS
+       int rounding;
+#endif
+#ifdef USE_LOCALE
+       CONST char *s2;
+#endif
+
+       sign = nz0 = nz = 0;
+       dval(rv) = 0.;
+       for(s = s00;;s++) switch(*s) {
+               case '-':
+                       sign = 1;
+                       /* no break */
+               case '+':
+                       if (*++s)
+                               goto break2;
+                       /* no break */
+               case 0:
+                       goto ret0;
+               case '\t':
+               case '\n':
+               case '\v':
+               case '\f':
+               case '\r':
+               case ' ':
+                       continue;
+               default:
+                       goto break2;
+               }
+ break2:
+       if (*s == '0') {
+               nz0 = 1;
+               while(*++s == '0') ;
+               if (!*s)
+                       goto ret;
+               }
+       s0 = s;
+       y = z = 0;
+       for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
+               if (nd < 9)
+                       y = 10*y + c - '0';
+               else if (nd < 16)
+                       z = 10*z + c - '0';
+       nd0 = nd;
+#ifdef USE_LOCALE
+       s1 = localeconv()->decimal_point;
+       if (c == *s1) {
+               c = '.';
+               if (*++s1) {
+                       s2 = s;
+                       for(;;) {
+                               if (*++s2 != *s1) {
+                                       c = 0;
+                                       break;
+                                       }
+                               if (!*++s1) {
+                                       s = s2;
+                                       break;
+                                       }
+                               }
+                       }
+               }
+#endif
+       if (c == '.') {
+               c = *++s;
+               if (!nd) {
+                       for(; c == '0'; c = *++s)
+                               nz++;
+                       if (c > '0' && c <= '9') {
+                               s0 = s;
+                               nf += nz;
+                               nz = 0;
+                               goto have_dig;
+                               }
+                       goto dig_done;
+                       }
+               for(; c >= '0' && c <= '9'; c = *++s) {
+ have_dig:
+                       nz++;
+                       if (c -= '0') {
+                               nf += nz;
+                               for(i = 1; i < nz; i++)
+                                       if (nd++ < 9)
+                                               y *= 10;
+                                       else if (nd <= DBL_DIG + 1)
+                                               z *= 10;
+                               if (nd++ < 9)
+                                       y = 10*y + c;
+                               else if (nd <= DBL_DIG + 1)
+                                       z = 10*z + c;
+                               nz = 0;
+                               }
+                       }
+               }
+ dig_done:
+       e = 0;
+       if (c == 'e' || c == 'E') {
+               if (!nd && !nz && !nz0) {
+                       goto ret0;
+                       }
+               s00 = s;
+               esign = 0;
+               switch(c = *++s) {
+                       case '-':
+                               esign = 1;
+                       case '+':
+                               c = *++s;
+                       }
+               if (c >= '0' && c <= '9') {
+                       while(c == '0')
+                               c = *++s;
+                       if (c > '0' && c <= '9') {
+                               L = c - '0';
+                               s1 = s;
+                               while((c = *++s) >= '0' && c <= '9')
+                                       L = 10*L + c - '0';
+                               if (s - s1 > 8 || L > 19999)
+                                       /* Avoid confusion from exponents
+                                        * so large that e might overflow.
+                                        */
+                                       e = 19999; /* safe for 16 bit ints */
+                               else
+                                       e = (int)L;
+                               if (esign)
+                                       e = -e;
+                               }
+                       else
+                               e = 0;
+                       }
+               else
+                       s = s00;
+               }
+       if (!nd) {
+               if (!nz && !nz0) {
+#ifdef INFNAN_CHECK
+                       /* Check for Nan and Infinity */
+                       switch(c) {
+                         case 'i':
+                         case 'I':
+                               if (match(&s,"nf")) {
+                                       --s;
+                                       if (!match(&s,"inity"))
+                                               ++s;
+                                       word0(rv) = 0x7ff00000;
+                                       word1(rv) = 0;
+                                       goto ret;
+                                       }
+                               break;
+                         case 'n':
+                         case 'N':
+                               if (match(&s, "an")) {
+                                       word0(rv) = NAN_WORD0;
+                                       word1(rv) = NAN_WORD1;
+#ifndef No_Hex_NaN
+                                       if (*s == '(') /*)*/
+                                               hexnan(&rv, &s);
+#endif
+                                       goto ret;
+                                       }
+                         }
+#endif /* INFNAN_CHECK */
+ ret0:
+                       s = s00;
+                       sign = 0;
+                       }
+               goto ret;
+               }
+       e1 = e -= nf;
+
+       /* Now we have nd0 digits, starting at s0, followed by a
+        * decimal point, followed by nd-nd0 digits.  The number we're
+        * after is the integer represented by those digits times
+        * 10**e */
+
+       if (!nd0)
+               nd0 = nd;
+       k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
+       dval(rv) = y;
+       if (k > 9) {
+#ifdef SET_INEXACT
+               if (k > DBL_DIG)
+                       oldinexact = get_inexact();
+#endif
+               dval(rv) = tens[k - 9] * dval(rv) + z;
+               }
+       bd0 = 0;
+       if (nd <= DBL_DIG
+#ifndef RND_PRODQUOT
+#ifndef Honor_FLT_ROUNDS
+               && Flt_Rounds == 1
+#endif
+#endif
+                       ) {
+               if (!e)
+                       goto ret;
+               if (e > 0) {
+                       if (e <= Ten_pmax) {
+#ifdef VAX
+                               goto vax_ovfl_check;
+#else
+#ifdef Honor_FLT_ROUNDS
+                               /* round correctly FLT_ROUNDS = 2 or 3 */
+                               if (sign) {
+                                       rv = -rv;
+                                       sign = 0;
+                                       }
+#endif
+                               /* rv = */ rounded_product(dval(rv), tens[e]);
+                               goto ret;
+#endif
+                               }
+                       i = DBL_DIG - nd;
+                       if (e <= Ten_pmax + i) {
+                               /* A fancier test would sometimes let us do
+                                * this for larger i values.
+                                */
+#ifdef Honor_FLT_ROUNDS
+                               /* round correctly FLT_ROUNDS = 2 or 3 */
+                               if (sign) {
+                                       rv = -rv;
+                                       sign = 0;
+                                       }
+#endif
+                               e -= i;
+                               dval(rv) *= tens[i];
+#ifdef VAX
+                               /* VAX exponent range is so narrow we must
+                                * worry about overflow here...
+                                */
+ vax_ovfl_check:
+                               word0(rv) -= P*Exp_msk1;
+                               /* rv = */ rounded_product(dval(rv), tens[e]);
+                               if ((word0(rv) & Exp_mask)
+                                > Exp_msk1*(DBL_MAX_EXP+Bias-1-P))
+                                       goto ovfl;
+                               word0(rv) += P*Exp_msk1;
+#else
+                               /* rv = */ rounded_product(dval(rv), tens[e]);
+#endif
+                               goto ret;
+                               }
+                       }
+#ifndef Inaccurate_Divide
+               else if (e >= -Ten_pmax) {
+#ifdef Honor_FLT_ROUNDS
+                       /* round correctly FLT_ROUNDS = 2 or 3 */
+                       if (sign) {
+                               rv = -rv;
+                               sign = 0;
+                               }
+#endif
+                       /* rv = */ rounded_quotient(dval(rv), tens[-e]);
+                       goto ret;
+                       }
+#endif
+               }
+       e1 += nd - k;
+
+#ifdef IEEE_Arith
+#ifdef SET_INEXACT
+       inexact = 1;
+       if (k <= DBL_DIG)
+               oldinexact = get_inexact();
+#endif
+#ifdef Avoid_Underflow
+       scale = 0;
+#endif
+#ifdef Honor_FLT_ROUNDS
+       if ((rounding = Flt_Rounds) >= 2) {
+               if (sign)
+                       rounding = rounding == 2 ? 0 : 2;
+               else
+                       if (rounding != 2)
+                               rounding = 0;
+               }
+#endif
+#endif /*IEEE_Arith*/
+
+       /* Get starting approximation = rv * 10**e1 */
+
+       if (e1 > 0) {
+               if ((i = e1 & 15))
+                       dval(rv) *= tens[i];
+               if (e1 &= ~15) {
+                       if (e1 > DBL_MAX_10_EXP) {
+ ovfl:
+#ifndef NO_ERRNO
+                               errno = ERANGE;
+#endif
+                               /* Can't trust HUGE_VAL */
+#ifdef IEEE_Arith
+#ifdef Honor_FLT_ROUNDS
+                               switch(rounding) {
+                                 case 0: /* toward 0 */
+                                 case 3: /* toward -infinity */
+                                       word0(rv) = Big0;
+                                       word1(rv) = Big1;
+                                       break;
+                                 default:
+                                       word0(rv) = Exp_mask;
+                                       word1(rv) = 0;
+                                 }
+#else /*Honor_FLT_ROUNDS*/
+                               word0(rv) = Exp_mask;
+                               word1(rv) = 0;
+#endif /*Honor_FLT_ROUNDS*/
+#ifdef SET_INEXACT
+                               /* set overflow bit */
+                               dval(rv0) = 1e300;
+                               dval(rv0) *= dval(rv0);
+#endif
+#else /*IEEE_Arith*/
+                               word0(rv) = Big0;
+                               word1(rv) = Big1;
+#endif /*IEEE_Arith*/
+                               if (bd0)
+                                       goto retfree;
+                               goto ret;
+                               }
+                       e1 >>= 4;
+                       for(j = 0; e1 > 1; j++, e1 >>= 1)
+                               if (e1 & 1)
+                                       dval(rv) *= bigtens[j];
+               /* The last multiplication could overflow. */
+                       word0(rv) -= P*Exp_msk1;
+                       dval(rv) *= bigtens[j];
+                       if ((z = word0(rv) & Exp_mask)
+                        > Exp_msk1*(DBL_MAX_EXP+Bias-P))
+                               goto ovfl;
+                       if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
+                               /* set to largest number */
+                               /* (Can't trust DBL_MAX) */
+                               word0(rv) = Big0;
+                               word1(rv) = Big1;
+                               }
+                       else
+                               word0(rv) += P*Exp_msk1;
+                       }
+               }
+       else if (e1 < 0) {
+               e1 = -e1;
+               if ((i = e1 & 15))
+                       dval(rv) /= tens[i];
+               if (e1 >>= 4) {
+                       if (e1 >= 1 << n_bigtens)
+                               goto undfl;
+#ifdef Avoid_Underflow
+                       if (e1 & Scale_Bit)
+                               scale = 2*P;
+                       for(j = 0; e1 > 0; j++, e1 >>= 1)
+                               if (e1 & 1)
+                                       dval(rv) *= tinytens[j];
+                       if (scale && (j = 2*P + 1 - ((word0(rv) & Exp_mask)
+                                               >> Exp_shift)) > 0) {
+                               /* scaled rv is denormal; zap j low bits */
+                               if (j >= 32) {
+                                       word1(rv) = 0;
+                                       if (j >= 53)
+                                        word0(rv) = (P+2)*Exp_msk1;
+                                       else
+                                               word0(rv) &= 0xffffffff << (j-32);
+                                       }
+                               else
+                                       word1(rv) &= 0xffffffff << j;
+                               }
+#else
+                       for(j = 0; e1 > 1; j++, e1 >>= 1)
+                               if (e1 & 1)
+                                       dval(rv) *= tinytens[j];
+                       /* The last multiplication could underflow. */
+                       dval(rv0) = dval(rv);
+                       dval(rv) *= tinytens[j];
+                       if (!dval(rv)) {
+                               dval(rv) = 2.*dval(rv0);
+                               dval(rv) *= tinytens[j];
+#endif
+                               if (!dval(rv)) {
+ undfl:
+                                       dval(rv) = 0.;
+#ifndef NO_ERRNO
+                                       errno = ERANGE;
+#endif
+                                       if (bd0)
+                                               goto retfree;
+                                       goto ret;
+                                       }
+#ifndef Avoid_Underflow
+                               word0(rv) = Tiny0;
+                               word1(rv) = Tiny1;
+                               /* The refinement below will clean
+                                * this approximation up.
+                                */
+                               }
+#endif
+                       }
+               }
+
+       /* Now the hard part -- adjusting rv to the correct value.*/
+
+       /* Put digits into bd: true value = bd * 10^e */
+
+       bd0 = s2b(s0, nd0, nd, y);
+
+       for(;;) {
+               bd = Balloc(bd0->k);
+               Bcopy(bd, bd0);
+               bb = d2b(dval(rv), &bbe, &bbbits);      /* rv = bb * 2^bbe */
+               bs = i2b(1);
+
+               if (e >= 0) {
+                       bb2 = bb5 = 0;
+                       bd2 = bd5 = e;
+                       }
+               else {
+                       bb2 = bb5 = -e;
+                       bd2 = bd5 = 0;
+                       }
+               if (bbe >= 0)
+                       bb2 += bbe;
+               else
+                       bd2 -= bbe;
+               bs2 = bb2;
+#ifdef Honor_FLT_ROUNDS
+               if (rounding != 1)
+                       bs2++;
+#endif
+#ifdef Avoid_Underflow
+               j = bbe - scale;
+               i = j + bbbits - 1;     /* logb(rv) */
+               if (i < Emin)   /* denormal */
+                       j += P - Emin;
+               else
+                       j = P + 1 - bbbits;
+#else /*Avoid_Underflow*/
+#ifdef Sudden_Underflow
+#ifdef IBM
+               j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3);
+#else
+               j = P + 1 - bbbits;
+#endif
+#else /*Sudden_Underflow*/
+               j = bbe;
+               i = j + bbbits - 1;     /* logb(rv) */
+               if (i < Emin)   /* denormal */
+                       j += P - Emin;
+               else
+                       j = P + 1 - bbbits;
+#endif /*Sudden_Underflow*/
+#endif /*Avoid_Underflow*/
+               bb2 += j;
+               bd2 += j;
+#ifdef Avoid_Underflow
+               bd2 += scale;
+#endif
+               i = bb2 < bd2 ? bb2 : bd2;
+               if (i > bs2)
+                       i = bs2;
+               if (i > 0) {
+                       bb2 -= i;
+                       bd2 -= i;
+                       bs2 -= i;
+                       }
+               if (bb5 > 0) {
+                       bs = pow5mult(bs, bb5);
+                       bb1 = mult(bs, bb);
+                       Bfree(bb);
+                       bb = bb1;
+                       }
+               if (bb2 > 0)
+                       bb = lshift(bb, bb2);
+               if (bd5 > 0)
+                       bd = pow5mult(bd, bd5);
+               if (bd2 > 0)
+                       bd = lshift(bd, bd2);
+               if (bs2 > 0)
+                       bs = lshift(bs, bs2);
+               delta = diff(bb, bd);
+               dsign = delta->sign;
+               delta->sign = 0;
+               i = cmp(delta, bs);
+#ifdef Honor_FLT_ROUNDS
+               if (rounding != 1) {
+                       if (i < 0) {
+                               /* Error is less than an ulp */
+                               if (!delta->x[0] && delta->wds <= 1) {
+                                       /* exact */
+#ifdef SET_INEXACT
+                                       inexact = 0;
+#endif
+                                       break;
+                                       }
+                               if (rounding) {
+                                       if (dsign) {
+                                               adj = 1.;
+                                               goto apply_adj;
+                                               }
+                                       }
+                               else if (!dsign) {
+                                       adj = -1.;
+                                       if (!word1(rv)
+                                        && !(word0(rv) & Frac_mask)) {
+                                               y = word0(rv) & Exp_mask;
+#ifdef Avoid_Underflow
+                                               if (!scale || y > 2*P*Exp_msk1)
+#else
+                                               if (y)
+#endif
+                                                 {
+                                                 delta = lshift(delta,Log2P);
+                                                 if (cmp(delta, bs) <= 0)
+                                                       adj = -0.5;
+                                                 }
+                                               }
+ apply_adj:
+#ifdef Avoid_Underflow
+                                       if (scale && (y = word0(rv) & Exp_mask)
+                                               <= 2*P*Exp_msk1)
+                                         word0(adj) += (2*P+1)*Exp_msk1 - y;
+#else
+#ifdef Sudden_Underflow
+                                       if ((word0(rv) & Exp_mask) <=
+                                                       P*Exp_msk1) {
+                                               word0(rv) += P*Exp_msk1;
+                                               dval(rv) += adj*ulp(dval(rv));
+                                               word0(rv) -= P*Exp_msk1;
+                                               }
+                                       else
+#endif /*Sudden_Underflow*/
+#endif /*Avoid_Underflow*/
+                                       dval(rv) += adj*ulp(dval(rv));
+                                       }
+                               break;
+                               }
+                       adj = ratio(delta, bs);
+                       if (adj < 1.)
+                               adj = 1.;
+                       if (adj <= 0x7ffffffe) {
+                               /* adj = rounding ? ceil(adj) : floor(adj); */
+                               y = adj;
+                               if (y != adj) {
+                                       if (!((rounding>>1) ^ dsign))
+                                               y++;
+                                       adj = y;
+                                       }
+                               }
+#ifdef Avoid_Underflow
+                       if (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1)
+                               word0(adj) += (2*P+1)*Exp_msk1 - y;
+#else
+#ifdef Sudden_Underflow
+                       if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
+                               word0(rv) += P*Exp_msk1;
+                               adj *= ulp(dval(rv));
+                               if (dsign)
+                                       dval(rv) += adj;
+                               else
+                                       dval(rv) -= adj;
+                               word0(rv) -= P*Exp_msk1;
+                               goto cont;
+                               }
+#endif /*Sudden_Underflow*/
+#endif /*Avoid_Underflow*/
+                       adj *= ulp(dval(rv));
+                       if (dsign)
+                               dval(rv) += adj;
+                       else
+                               dval(rv) -= adj;
+                       goto cont;
+                       }
+#endif /*Honor_FLT_ROUNDS*/
+
+               if (i < 0) {
+                       /* Error is less than half an ulp -- check for
+                        * special case of mantissa a power of two.
+                        */
+                       if (dsign || word1(rv) || word0(rv) & Bndry_mask
+#ifdef IEEE_Arith
+#ifdef Avoid_Underflow
+                        || (word0(rv) & Exp_mask) <= (2*P+1)*Exp_msk1
+#else
+                        || (word0(rv) & Exp_mask) <= Exp_msk1
+#endif
+#endif
+                               ) {
+#ifdef SET_INEXACT
+                               if (!delta->x[0] && delta->wds <= 1)
+                                       inexact = 0;
+#endif
+                               break;
+                               }
+                       if (!delta->x[0] && delta->wds <= 1) {
+                               /* exact result */
+#ifdef SET_INEXACT
+                               inexact = 0;
+#endif
+                               break;
+                               }
+                       delta = lshift(delta,Log2P);
+                       if (cmp(delta, bs) > 0)
+                               goto drop_down;
+                       break;
+                       }
+               if (i == 0) {
+                       /* exactly half-way between */
+                       if (dsign) {
+                               if ((word0(rv) & Bndry_mask1) == Bndry_mask1
+                                &&  word1(rv) == (
+#ifdef Avoid_Underflow
+                       (scale && (y = word0(rv) & Exp_mask) <= 2*P*Exp_msk1)
+               ? (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
+#endif
+                                                  0xffffffff)) {
+                                       /*boundary case -- increment exponent*/
+                                       word0(rv) = (word0(rv) & Exp_mask)
+                                               + Exp_msk1
+#ifdef IBM
+                                               | Exp_msk1 >> 4
+#endif
+                                               ;
+                                       word1(rv) = 0;
+#ifdef Avoid_Underflow
+                                       dsign = 0;
+#endif
+                                       break;
+                                       }
+                               }
+                       else if (!(word0(rv) & Bndry_mask) && !word1(rv)) {
+ drop_down:
+                               /* boundary case -- decrement exponent */
+#ifdef Sudden_Underflow /*{{*/
+                               L = word0(rv) & Exp_mask;
+#ifdef IBM
+                               if (L <  Exp_msk1)
+#else
+#ifdef Avoid_Underflow
+                               if (L <= (scale ? (2*P+1)*Exp_msk1 : Exp_msk1))
+#else
+                               if (L <= Exp_msk1)
+#endif /*Avoid_Underflow*/
+#endif /*IBM*/
+                                       goto undfl;
+                               L -= Exp_msk1;
+#else /*Sudden_Underflow}{*/
+#ifdef Avoid_Underflow
+                               if (scale) {
+                                       L = word0(rv) & Exp_mask;
+                                       if (L <= (2*P+1)*Exp_msk1) {
+                                               if (L > (P+2)*Exp_msk1)
+                                                       /* round even ==> */
+                                                       /* accept rv */
+                                                       break;
+                                               /* rv = smallest denormal */
+                                               goto undfl;
+                                               }
+                                       }
+#endif /*Avoid_Underflow*/
+                               L = (word0(rv) & Exp_mask) - Exp_msk1;
+#endif /*Sudden_Underflow}}*/
+                               word0(rv) = L | Bndry_mask1;
+                               word1(rv) = 0xffffffff;
+#ifdef IBM
+                               goto cont;
+#else
+                               break;
+#endif
+                               }
+#ifndef ROUND_BIASED
+                       if (!(word1(rv) & LSB))
+                               break;
+#endif
+                       if (dsign)
+                               dval(rv) += ulp(dval(rv));
+#ifndef ROUND_BIASED
+                       else {
+                               dval(rv) -= ulp(dval(rv));
+#ifndef Sudden_Underflow
+                               if (!dval(rv))
+                                       goto undfl;
+#endif
+                               }
+#ifdef Avoid_Underflow
+                       dsign = 1 - dsign;
+#endif
+#endif
+                       break;
+                       }
+               if ((aadj = ratio(delta, bs)) <= 2.) {
+                       if (dsign)
+                               aadj = dval(aadj1) = 1.;
+                       else if (word1(rv) || word0(rv) & Bndry_mask) {
+#ifndef Sudden_Underflow
+                               if (word1(rv) == Tiny1 && !word0(rv))
+                                       goto undfl;
+#endif
+                               aadj = 1.;
+                               dval(aadj1) = -1.;
+                               }
+                       else {
+                               /* special case -- power of FLT_RADIX to be */
+                               /* rounded down... */
+
+                               if (aadj < 2./FLT_RADIX)
+                                       aadj = 1./FLT_RADIX;
+                               else
+                                       aadj *= 0.5;
+                               dval(aadj1) = -aadj;
+                               }
+                       }
+               else {
+                       aadj *= 0.5;
+                       dval(aadj1) = dsign ? aadj : -aadj;
+#ifdef Check_FLT_ROUNDS
+                       switch(Rounding) {
+                               case 2: /* towards +infinity */
+                                       dval(aadj1) -= 0.5;
+                                       break;
+                               case 0: /* towards 0 */
+                               case 3: /* towards -infinity */
+                                       dval(aadj1) += 0.5;
+                               }
+#else
+                       if (Flt_Rounds == 0)
+                               dval(aadj1) += 0.5;
+#endif /*Check_FLT_ROUNDS*/
+                       }
+               y = word0(rv) & Exp_mask;
+
+               /* Check for overflow */
+
+               if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
+                       dval(rv0) = dval(rv);
+                       word0(rv) -= P*Exp_msk1;
+                       adj = dval(aadj1) * ulp(dval(rv));
+                       dval(rv) += adj;
+                       if ((word0(rv) & Exp_mask) >=
+                                       Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
+                               if (word0(rv0) == Big0 && word1(rv0) == Big1)
+                                       goto ovfl;
+                               word0(rv) = Big0;
+                               word1(rv) = Big1;
+                               goto cont;
+                               }
+                       else
+                               word0(rv) += P*Exp_msk1;
+                       }
+               else {
+#ifdef Avoid_Underflow
+                       if (scale && y <= 2*P*Exp_msk1) {
+                               if (aadj <= 0x7fffffff) {
+                                       if ((z = (uint32)aadj) <= 0)
+                                               z = 1;
+                                       aadj = z;
+                                       dval(aadj1) = dsign ? aadj : -aadj;
+                                       }
+                               word0(aadj1) += (2*P+1)*Exp_msk1 - y;
+                               }
+                       adj = dval(aadj1) * ulp(dval(rv));
+                       dval(rv) += adj;
+#else
+#ifdef Sudden_Underflow
+                       if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
+                               dval(rv0) = dval(rv);
+                               word0(rv) += P*Exp_msk1;
+                               adj = aadj1 * ulp(dval(rv));
+                               dval(rv) += adj;
+#ifdef IBM
+                               if ((word0(rv) & Exp_mask) <  P*Exp_msk1)
+#else
+                               if ((word0(rv) & Exp_mask) <= P*Exp_msk1)
+#endif
+                                       {
+                                       if (word0(rv0) == Tiny0
+                                        && word1(rv0) == Tiny1)
+                                               goto undfl;
+                                       word0(rv) = Tiny0;
+                                       word1(rv) = Tiny1;
+                                       goto cont;
+                                       }
+                               else
+                                       word0(rv) -= P*Exp_msk1;
+                               }
+                       else {
+                               adj = aadj1 * ulp(dval(rv));
+                               dval(rv) += adj;
+                               }
+#else /*Sudden_Underflow*/
+                       /* Compute adj so that the IEEE rounding rules will
+                        * correctly round rv + adj in some half-way cases.
+                        * If rv * ulp(rv) is denormalized (i.e.,
+                        * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid
+                        * trouble from bits lost to denormalization;
+                        * example: 1.2e-307 .
+                        */
+                       if (y <= (P-1)*Exp_msk1 && aadj > 1.) {
+                               aadj1 = (double)(int)(aadj + 0.5);
+                               if (!dsign)
+                                       aadj1 = -aadj1;
+                               }
+                       adj = aadj1 * ulp(dval(rv));
+                       dval(rv) += adj;
+#endif /*Sudden_Underflow*/
+#endif /*Avoid_Underflow*/
+                       }
+               z = word0(rv) & Exp_mask;
+#ifndef SET_INEXACT
+#ifdef Avoid_Underflow
+               if (!scale)
+#endif
+               if (y == z) {
+                       /* Can we stop now? */
+                       L = (Long)aadj;
+                       aadj -= L;
+                       /* The tolerances below are conservative. */
+                       if (dsign || word1(rv) || word0(rv) & Bndry_mask) {
+                               if (aadj < .4999999 || aadj > .5000001)
+                                       break;
+                               }
+                       else if (aadj < .4999999/FLT_RADIX)
+                               break;
+                       }
+#endif
+ cont:
+               Bfree(bb);
+               Bfree(bd);
+               Bfree(bs);
+               Bfree(delta);
+               }
+#ifdef SET_INEXACT
+       if (inexact) {
+               if (!oldinexact) {
+                       word0(rv0) = Exp_1 + (70 << Exp_shift);
+                       word1(rv0) = 0;
+                       dval(rv0) += 1.;
+                       }
+               }
+       else if (!oldinexact)
+               clear_inexact();
+#endif
+#ifdef Avoid_Underflow
+       if (scale) {
+               word0(rv0) = Exp_1 - 2*P*Exp_msk1;
+               word1(rv0) = 0;
+               dval(rv) *= dval(rv0);
+#ifndef NO_ERRNO
+               /* try to avoid the bug of testing an 8087 register value */
+               if (word0(rv) == 0 && word1(rv) == 0)
+                       errno = ERANGE;
+#endif
+               }
+#endif /* Avoid_Underflow */
+#ifdef SET_INEXACT
+       if (inexact && !(word0(rv) & Exp_mask)) {
+               /* set underflow bit */
+               dval(rv0) = 1e-300;
+               dval(rv0) *= dval(rv0);
+               }
+#endif
+ retfree:
+       Bfree(bb);
+       Bfree(bd);
+       Bfree(bs);
+       Bfree(bd0);
+       Bfree(delta);
+ ret:
+       if (se)
+               *se = (char *)s;
+       return sign ? -dval(rv) : dval(rv);
+       }
diff --git a/src/libsphinxbase/util/err.c b/src/libsphinxbase/util/err.c
new file mode 100644 (file)
index 0000000..709d07e
--- /dev/null
@@ -0,0 +1,370 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * @file err.c
+ * @brief Somewhat antiquated logging and error interface.
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+
+#include "sphinxbase/err.h"
+
+#ifdef SPHINX_DEBUG
+static int sphinx_debug_level;
+int
+err_set_debug_level(int level)
+{
+    int prev = sphinx_debug_level;
+    sphinx_debug_level = level;
+    return prev;
+}
+int
+err_get_debug_level(void)
+{
+    return sphinx_debug_level;
+}
+#else
+int
+err_set_debug_level(int level)
+{
+    return 0;
+}
+
+int
+err_get_debug_level(void)
+{
+    return 0;
+}
+#endif
+
+#if defined(HAVE_PTHREAD_H)
+#include <pthread.h>
+static pthread_key_t logfp_index;
+static pthread_once_t logfp_index_once = PTHREAD_ONCE_INIT;
+
+void
+logfp_index_alloc(void)
+{
+    pthread_key_create(&logfp_index, NULL);
+}
+
+FILE *
+err_get_logfp(void)
+{
+    FILE *logfp;
+
+    pthread_once(&logfp_index_once, logfp_index_alloc);
+    logfp = (FILE *)pthread_getspecific(logfp_index);
+
+    if (logfp == NULL)
+        return stderr;
+    else if (logfp == (FILE*) -1)
+       return NULL;
+    else
+        return logfp;
+}
+
+static void
+internal_set_logfp(FILE *fh)
+{
+    if (fh == NULL)
+       fh = (FILE*) -1;
+
+    pthread_setspecific(logfp_index, (void *)fh);
+}
+
+#elif defined(_WIN32) || defined(__CYGWIN__) /* Use Windows TLS on Cygwin */
+#include <windows.h>
+static DWORD logfp_index; /** TLS index for log file */
+static LONG logfp_index_once = 0; /** True if we have initialized TLS */
+
+void
+logfp_index_alloc(void)
+{
+    logfp_index = TlsAlloc();
+}
+
+FILE *
+err_get_logfp(void)
+{
+    FILE *logfp;
+
+    if (InterlockedExchange(&logfp_index_once, 1) == 0)
+        logfp_index_alloc();
+    logfp = (FILE *)TlsGetValue(logfp_index);
+
+    if (logfp == NULL)
+        return stderr;
+    else if (logfp == (FILE*) -1)
+       return NULL;
+    else
+        return logfp;
+}
+
+static void
+internal_set_logfp(FILE *fh)
+{
+    if (fh == NULL)
+       fh = (FILE*) -1;
+
+    TlsSetValue(logfp_index, (void *)fh);
+}
+
+#else
+FILE *logfp = NULL;
+
+FILE *
+err_get_logfp(void)
+{
+    if (logfp == NULL)
+        return stderr;
+    else if (logfp == (FILE*) -1)
+       return NULL;
+    else
+        return logfp;
+}
+
+static void
+internal_set_logfp(FILE *fh)
+{
+    if (fh == NULL)
+       fh = (FILE*) -1;
+
+    logfp = fh;
+}
+
+#endif
+FILE *
+err_set_logfp(FILE *newfp)
+{
+    FILE *oldfp;
+
+    oldfp = err_get_logfp();
+    internal_set_logfp(newfp);
+
+    return oldfp;
+}
+
+int
+err_set_logfile(char const *file)
+{
+    FILE *newfp, *oldfp;
+
+    if ((newfp = fopen(file, "a")) == NULL)
+        return -1;
+    oldfp = err_get_logfp();
+    internal_set_logfp(newfp);
+    if (oldfp != NULL && oldfp != stdout && oldfp != stderr)
+        fclose(oldfp);
+    return 0;
+}
+
+
+void
+_E__pr_info_header_wofn(char const *msg)
+{
+    FILE *logfp;
+
+    logfp = err_get_logfp();
+    if (logfp == NULL)
+        return;
+    /* make different format so as not to be parsed by emacs compile */
+    fprintf(logfp, "%s:\t", msg);
+    fflush(logfp);
+}
+
+void
+_E__pr_header(char const *f, long ln, char const *msg)
+{
+    char const *fname;
+    FILE *logfp;
+
+    logfp = err_get_logfp();
+    if (logfp == NULL)
+        return;
+    fname = strrchr(f,'\\');
+    if (fname == NULL)
+        fname = strrchr(f,'/');
+    fprintf(logfp, "%s: \"%s\", line %ld: ", msg, fname == NULL ? f : fname + 1, ln);
+    fflush(logfp);
+}
+
+void
+_E__pr_info_header(char const *f, long ln, char const *msg)
+{
+    char const *fname;
+    FILE *logfp;
+
+    logfp = err_get_logfp();
+    if (logfp == NULL)
+        return;
+    fname = strrchr(f,'\\');
+    if (fname == NULL)
+        fname = strrchr(f,'/');
+    /* make different format so as not to be parsed by emacs compile */
+    fprintf(logfp, "%s: %s(%ld): ", msg, fname == NULL ? f : fname + 1, ln);
+    fflush(logfp);
+}
+
+void
+_E__pr_warn(char const *fmt, ...)
+{
+    va_list pvar;
+    FILE *logfp;
+
+    logfp = err_get_logfp();
+    if (logfp == NULL)
+        return;
+    va_start(pvar, fmt);
+    vfprintf(logfp, fmt, pvar);
+    va_end(pvar);
+
+    fflush(logfp);
+}
+
+void
+_E__pr_info(char const *fmt, ...)
+{
+    va_list pvar;
+    FILE *logfp;
+
+    logfp = err_get_logfp();
+    if (logfp == NULL)
+        return;
+    va_start(pvar, fmt);
+    vfprintf(logfp, fmt, pvar);
+    va_end(pvar);
+
+    fflush(logfp);
+}
+
+void
+_E__die_error(char const *fmt, ...)
+{
+    va_list pvar;
+    FILE *logfp;
+
+    logfp = err_get_logfp();
+    if (logfp) {
+        va_start(pvar, fmt);
+        vfprintf(logfp, fmt, pvar);
+        va_end(pvar);
+        fflush(logfp);
+    }
+
+#if defined(__ADSPBLACKFIN__) && !defined(__linux__)
+    while(1);
+#else 
+       exit(-1);
+#endif
+}
+
+void
+_E__fatal_sys_error(char const *fmt, ...)
+{
+    va_list pvar;
+    FILE *logfp;
+    int local_errno = errno;
+
+    logfp = err_get_logfp();
+    if (logfp) {
+        va_start(pvar, fmt);
+        vfprintf(logfp, fmt, pvar);
+        va_end(pvar);
+
+        fprintf(logfp, ": %s\n", strerror(local_errno));
+        fflush(logfp);
+    }
+
+
+#if defined(__ADSPBLACKFIN__) && !defined(__linux__)
+    while(1);
+#else 
+       exit(-1);
+#endif
+
+}
+
+void
+_E__sys_error(char const *fmt, ...)
+{
+    va_list pvar;
+    FILE *logfp;
+    int local_errno = errno;
+
+    logfp = err_get_logfp();
+    if (logfp == NULL)
+        return;
+
+    va_start(pvar, fmt);
+    vfprintf(logfp, fmt, pvar);
+    va_end(pvar);
+
+    fprintf(logfp, "; %s\n", strerror(local_errno));
+    fflush(logfp);
+}
+
+void
+_E__abort_error(char const *fmt, ...)
+{
+    va_list pvar;
+    FILE *logfp;
+
+    logfp = err_get_logfp();
+    if (logfp) {
+        va_start(pvar, fmt);
+        vfprintf(logfp, fmt, pvar);
+        va_end(pvar);
+        fflush(logfp);
+    }
+
+#if defined(__ADSPBLACKFIN__) && !defined(__linux__)
+while(1);
+#elif defined(_WIN32_WCE)
+exit(-1);
+#else
+abort();
+#endif
+
+}
diff --git a/src/libsphinxbase/util/err_wince.c b/src/libsphinxbase/util/err_wince.c
new file mode 100644 (file)
index 0000000..97f83b5
--- /dev/null
@@ -0,0 +1,193 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * err_wince.c -- Package for checking and catching common errors, printing out
+ *             errors nicely, etc.
+ * WinCE has no standard library worth the name so we need this
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <windows.h>
+#include <assert.h>
+
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+
+int cst_verrmsg(const char *fmt, va_list args)
+{
+    char msg[256];
+    WCHAR *wmsg;
+    size_t len;
+
+    _vsnprintf(msg,256,fmt,args);
+
+    len = mbstowcs(NULL,msg,0) + 1;
+    wmsg = ckd_calloc(len,sizeof(*wmsg));
+    mbstowcs(wmsg,msg,len);
+
+    OutputDebugStringW(wmsg);
+    ckd_free(wmsg);
+    return 0;
+}
+
+int cst_errmsg(const char *fmt, ...)
+{
+    va_list args;
+
+    va_start(args,fmt);
+    cst_verrmsg(fmt, args);
+    va_end(args);
+    return 0;
+}
+
+void
+_E__pr_info_header_wofn(char const *msg)
+{
+    cst_errmsg("%s:\t", msg);
+}
+
+void
+_E__pr_header(char const *f, long ln, char const *msg)
+{
+    cst_errmsg("%s: \"%s\", line %ld: ", msg, f, ln);
+}
+
+void
+_E__pr_info_header(char const *f, long ln, char const *msg)
+{
+    cst_errmsg("%s: %s(%ld): ", msg, f, ln);
+}
+
+void
+_E__pr_warn(char const *fmt, ...)
+{
+    va_list pvar;
+
+    va_start(pvar, fmt);
+    cst_verrmsg(fmt, pvar);
+    va_end(pvar);
+}
+
+void
+_E__pr_info(char const *fmt, ...)
+{
+    va_list pvar;
+
+    va_start(pvar, fmt);
+    cst_verrmsg(fmt, pvar);
+    va_end(pvar);
+}
+
+void
+_E__die_error(char const *fmt, ...)
+{
+    va_list pvar;
+
+    va_start(pvar, fmt);
+    cst_verrmsg(fmt, pvar);
+    va_end(pvar);
+    exit(-1);
+}
+
+void
+_E__fatal_sys_error(char const *fmt, ...)
+{
+    LPVOID msg_buf;
+    DWORD error;
+    va_list pvar;
+
+    error = GetLastError();
+    va_start(pvar, fmt);
+    cst_verrmsg(fmt, pvar);
+    va_end(pvar);
+
+    OutputDebugStringW(L"; ");
+    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
+                  FORMAT_MESSAGE_FROM_SYSTEM | 
+                  FORMAT_MESSAGE_IGNORE_INSERTS,
+                  NULL,
+                  error,
+                  0, // Default language
+                  (LPTSTR) &msg_buf,
+                  0,
+                  NULL);
+    OutputDebugString(msg_buf);
+    LocalFree(msg_buf);
+
+    exit(error);
+}
+
+void
+_E__sys_error(char const *fmt, ...)
+{
+    LPVOID msg_buf;
+    DWORD error;
+    va_list pvar;
+
+    error = GetLastError();
+    va_start(pvar, fmt);
+    cst_verrmsg(fmt, pvar);
+    va_end(pvar);
+
+    OutputDebugStringW(L"; ");
+    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
+                  FORMAT_MESSAGE_FROM_SYSTEM | 
+                  FORMAT_MESSAGE_IGNORE_INSERTS,
+                  NULL,
+                  error,
+                  0, // Default language
+                  (LPTSTR) &msg_buf,
+                  0,
+                  NULL);
+    OutputDebugString(msg_buf);
+    LocalFree(msg_buf);
+}
+
+void
+_E__abort_error(char const *fmt, ...)
+{
+    va_list pvar;
+
+    va_start(pvar, fmt);
+    cst_verrmsg(fmt, pvar);
+    va_end(pvar);
+
+    assert(2+2 == 5);
+}
diff --git a/src/libsphinxbase/util/errno.c b/src/libsphinxbase/util/errno.c
new file mode 100644 (file)
index 0000000..ac61ef6
--- /dev/null
@@ -0,0 +1,57 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+/*********************************************************************
+ *
+ * File: errno.c
+ * 
+ * Description: functions and variables missing from Windows CE standard
+ * library
+ * 
+ * Author: Silvio Moioli <silvio@moioli.net>
+ * 
+ *********************************************************************/
+
+#include <errno.h>
+
+#if defined(_WIN32_WCE)
+int errno;
+int _doserrno;
+int _sys_nerr;
+
+char* strerror(int errno){ 
+    static char buf[32]="wince::strerror called."; 
+    return buf; 
+} 
+#endif
\ No newline at end of file
diff --git a/src/libsphinxbase/util/f2c_lite.c b/src/libsphinxbase/util/f2c_lite.c
new file mode 100644 (file)
index 0000000..58fbc4e
--- /dev/null
@@ -0,0 +1,551 @@
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "sphinxbase/f2c.h"
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4244)
+#endif
+
+
+extern void
+s_wsfe(cilist * f)
+{;
+}
+extern void
+e_wsfe(void)
+{;
+}
+extern void
+do_fio(integer * c, char *s, ftnlen l)
+{;
+}
+
+/* You'll want this if you redo the *_lite.c files with the -C option
+ * to f2c for checking array subscripts. (It's not suggested you do that
+ * for production use, of course.) */
+extern int
+s_rnge(char *var, int index, char *routine, int lineno)
+{
+    fprintf(stderr,
+            "array index out-of-bounds for %s[%d] in routine %s:%d\n", var,
+            index, routine, lineno);
+    fflush(stderr);
+       assert(2+2 == 5);
+       return 0;
+}
+
+
+#ifdef KR_headers
+extern double sqrt();
+float
+f__cabs(real, imag)
+float real, imag;
+#else
+#undef abs
+
+float
+f__cabs(float real, float imag)
+#endif
+{
+    float temp;
+
+    if (real < 0)
+        real = -real;
+    if (imag < 0)
+        imag = -imag;
+    if (imag > real) {
+        temp = real;
+        real = imag;
+        imag = temp;
+    }
+    if ((imag + real) == real)
+        return ((float) real);
+
+    temp = imag / real;
+    temp = real * sqrt(1.0 + temp * temp);      /*overflow!! */
+    return (temp);
+}
+
+
+VOID
+#ifdef KR_headers
+s_cnjg(r, z)
+complex *r, *z;
+#else
+s_cnjg(complex * r, complex * z)
+#endif
+{
+    r->r = z->r;
+    r->i = -z->i;
+}
+
+
+#ifdef KR_headers
+float
+r_imag(z)
+complex *z;
+#else
+float
+r_imag(complex * z)
+#endif
+{
+    return (z->i);
+}
+
+
+#define log10e 0.43429448190325182765
+
+#ifdef KR_headers
+double log();
+float
+r_lg10(x)
+real *x;
+#else
+#undef abs
+
+float
+r_lg10(real * x)
+#endif
+{
+    return (log10e * log(*x));
+}
+
+
+#ifdef KR_headers
+float
+r_sign(a, b)
+real *a, *b;
+#else
+float
+r_sign(real * a, real * b)
+#endif
+{
+    float x;
+    x = (*a >= 0 ? *a : -*a);
+    return (*b >= 0 ? x : -x);
+}
+
+
+#ifdef KR_headers
+double floor();
+integer
+i_dnnt(x)
+real *x;
+#else
+#undef abs
+
+integer
+i_dnnt(real * x)
+#endif
+{
+    return ((*x) >= 0 ? floor(*x + .5) : -floor(.5 - *x));
+}
+
+
+#ifdef KR_headers
+double pow();
+double
+pow_dd(ap, bp)
+doublereal *ap, *bp;
+#else
+#undef abs
+
+double
+pow_dd(doublereal * ap, doublereal * bp)
+#endif
+{
+    return (pow(*ap, *bp));
+}
+
+
+#ifdef KR_headers
+float
+pow_ri(ap, bp)
+real *ap;
+integer *bp;
+#else
+float
+pow_ri(real * ap, integer * bp)
+#endif
+{
+    float pow, x;
+    integer n;
+    unsigned long u;
+
+    pow = 1;
+    x = *ap;
+    n = *bp;
+
+    if (n != 0) {
+        if (n < 0) {
+            n = -n;
+            x = 1 / x;
+        }
+        for (u = n;;) {
+            if (u & 01)
+                pow *= x;
+            if (u >>= 1)
+                x *= x;
+            else
+                break;
+        }
+    }
+    return (pow);
+}
+
+/* Unless compiled with -DNO_OVERWRITE, this variant of s_cat allows the
+ * target of a concatenation to appear on its right-hand side (contrary
+ * to the Fortran 77 Standard, but in accordance with Fortran 90).
+ */
+#define NO_OVERWRITE
+
+
+#ifndef NO_OVERWRITE
+
+#undef abs
+#ifdef KR_headers
+extern char *F77_aloc();
+extern void free();
+extern void exit_();
+#else
+
+extern char *F77_aloc(ftnlen, char *);
+#endif
+
+#endif                          /* NO_OVERWRITE */
+
+VOID
+#ifdef KR_headers
+s_cat(lp, rpp, rnp, np, ll)
+char *lp, *rpp[];
+ftnlen rnp[], *np, ll;
+#else
+s_cat(char *lp, char *rpp[], ftnlen rnp[], ftnlen * np, ftnlen ll)
+#endif
+{
+    ftnlen i, nc;
+    char *rp;
+    ftnlen n = *np;
+#ifndef NO_OVERWRITE
+    ftnlen L, m;
+    char *lp0, *lp1;
+
+    lp0 = 0;
+    lp1 = lp;
+    L = ll;
+    i = 0;
+    while (i < n) {
+        rp = rpp[i];
+        m = rnp[i++];
+        if (rp >= lp1 || rp + m <= lp) {
+            if ((L -= m) <= 0) {
+                n = i;
+                break;
+            }
+            lp1 += m;
+            continue;
+        }
+        lp0 = lp;
+        lp = lp1 = F77_aloc(L = ll, "s_cat");
+        break;
+    }
+    lp1 = lp;
+#endif                          /* NO_OVERWRITE */
+    for (i = 0; i < n; ++i) {
+        nc = ll;
+        if (rnp[i] < nc)
+            nc = rnp[i];
+        ll -= nc;
+        rp = rpp[i];
+        while (--nc >= 0)
+            *lp++ = *rp++;
+    }
+    while (--ll >= 0)
+        *lp++ = ' ';
+#ifndef NO_OVERWRITE
+    if (lp0) {
+        memmove(lp0, lp1, L);
+        free(lp1);
+    }
+#endif
+}
+
+
+/* compare two strings */
+
+#ifdef KR_headers
+integer
+s_cmp(a0, b0, la, lb)
+char *a0, *b0;
+ftnlen la, lb;
+#else
+integer
+s_cmp(char *a0, char *b0, ftnlen la, ftnlen lb)
+#endif
+{
+    register unsigned char *a, *aend, *b, *bend;
+    a = (unsigned char *) a0;
+    b = (unsigned char *) b0;
+    aend = a + la;
+    bend = b + lb;
+
+    if (la <= lb) {
+        while (a < aend)
+            if (*a != *b)
+                return (*a - *b);
+            else {
+                ++a;
+                ++b;
+            }
+
+        while (b < bend)
+            if (*b != ' ')
+                return (' ' - *b);
+            else
+                ++b;
+    }
+
+    else {
+        while (b < bend)
+            if (*a == *b) {
+                ++a;
+                ++b;
+            }
+            else
+                return (*a - *b);
+        while (a < aend)
+            if (*a != ' ')
+                return (*a - ' ');
+            else
+                ++a;
+    }
+    return (0);
+}
+
+/* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the
+ * target of an assignment to appear on its right-hand side (contrary
+ * to the Fortran 77 Standard, but in accordance with Fortran 90),
+ * as in  a(2:5) = a(4:7) .
+ */
+
+
+
+/* assign strings:  a = b */
+
+#ifdef KR_headers
+VOID
+s_copy(a, b, la, lb)
+register char *a, *b;
+ftnlen la, lb;
+#else
+void
+s_copy(register char *a, register char *b, ftnlen la, ftnlen lb)
+#endif
+{
+    register char *aend, *bend;
+
+    aend = a + la;
+
+    if (la <= lb)
+#ifndef NO_OVERWRITE
+        if (a <= b || a >= b + la)
+#endif
+            while (a < aend)
+                *a++ = *b++;
+#ifndef NO_OVERWRITE
+        else
+            for (b += la; a < aend;)
+                *--aend = *--b;
+#endif
+
+    else {
+        bend = b + lb;
+#ifndef NO_OVERWRITE
+        if (a <= b || a >= bend)
+#endif
+            while (b < bend)
+                *a++ = *b++;
+#ifndef NO_OVERWRITE
+        else {
+            a += lb;
+            while (b < bend)
+                *--a = *--bend;
+            a += lb;
+        }
+#endif
+        while (a < aend)
+            *a++ = ' ';
+    }
+}
+
+
+#ifdef KR_headers
+float f__cabs();
+float
+z_abs(z)
+complex *z;
+#else
+float f__cabs(float, float);
+float
+z_abs(complex * z)
+#endif
+{
+    return (f__cabs(z->r, z->i));
+}
+
+
+#ifdef KR_headers
+extern void sig_die();
+VOID
+z_div(c, a, b)
+complex *a, *b, *c;
+#else
+extern void sig_die(char *, int);
+void
+z_div(complex * c, complex * a, complex * b)
+#endif
+{
+    float ratio, den;
+    float abr, abi;
+
+    if ((abr = b->r) < 0.)
+        abr = -abr;
+    if ((abi = b->i) < 0.)
+        abi = -abi;
+    if (abr <= abi) {
+        /*Let IEEE Infinties handle this ;( */
+        /*if(abi == 0)
+           sig_die("complex division by zero", 1); */
+        ratio = b->r / b->i;
+        den = b->i * (1 + ratio * ratio);
+        c->r = (a->r * ratio + a->i) / den;
+        c->i = (a->i * ratio - a->r) / den;
+    }
+
+    else {
+        ratio = b->i / b->r;
+        den = b->r * (1 + ratio * ratio);
+        c->r = (a->r + a->i * ratio) / den;
+        c->i = (a->i - a->r * ratio) / den;
+    }
+
+}
+
+
+#ifdef KR_headers
+double sqrt();
+double f__cabs();
+VOID
+z_sqrt(r, z)
+complex *r, *z;
+#else
+#undef abs
+
+extern float f__cabs(float, float);
+void
+z_sqrt(complex * r, complex * z)
+#endif
+{
+    float mag;
+
+    if ((mag = f__cabs(z->r, z->i)) == 0.)
+        r->r = r->i = 0.;
+    else if (z->r > 0) {
+        r->r = sqrt(0.5 * (mag + z->r));
+        r->i = z->i / r->r / 2;
+    }
+    else {
+        r->i = sqrt(0.5 * (mag - z->r));
+        if (z->i < 0)
+            r->i = -r->i;
+        r->r = z->i / r->i / 2;
+    }
+}
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef KR_headers
+    integer pow_ii(ap, bp) integer *ap, *bp;
+#else
+    integer pow_ii(integer * ap, integer * bp)
+#endif
+    {
+        integer pow, x, n;
+        unsigned long u;
+
+         x = *ap;
+         n = *bp;
+
+        if (n <= 0) {
+            if (n == 0 || x == 1)
+                return 1;
+            if (x != -1)
+                return x != 0 ? 1 / x : 0;
+            n = -n;
+        } u = n;
+        for (pow = 1;;) {
+            if (u & 01)
+                pow *= x;
+            if (u >>= 1)
+                x *= x;
+            else
+                break;
+        }
+        return (pow);
+    }
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef KR_headers
+extern void f_exit();
+VOID
+s_stop(s, n)
+char *s;
+ftnlen n;
+#else
+#undef abs
+#undef min
+#undef max
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef __cplusplus
+    extern "C" {
+#endif
+        void f_exit(void);
+
+        int s_stop(char *s, ftnlen n)
+#endif
+        {
+            int i;
+
+            if (n > 0) {
+                fprintf(stderr, "STOP ");
+                for (i = 0; i < n; ++i)
+                    putc(*s++, stderr);
+                fprintf(stderr, " statement executed\n");
+            }
+#ifdef NO_ONEXIT
+            f_exit();
+#endif
+             exit(0);
+
+/* We cannot avoid (useless) compiler diagnostics here:                */
+/* some compilers complain if there is no return statement,    */
+/* and others complain that this one cannot be reached.                */
+
+             return 0;          /* NOT REACHED */
+        }
+#ifdef __cplusplus
+    }
+#endif
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/libsphinxbase/util/filename.c b/src/libsphinxbase/util/filename.c
new file mode 100644 (file)
index 0000000..ae78100
--- /dev/null
@@ -0,0 +1,141 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * filename.c -- File and path name operations.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: filename.c,v $
+ * Revision 1.5  2005/06/22 03:01:07  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 30-Oct-1997 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University.
+ *             Started.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "sphinxbase/filename.h"
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996)
+#endif
+
+
+/* Strip off all leading pathname components */
+void
+path2basename(const char *path, char *base)
+{
+    int32 i, l;
+
+    l = strlen(path);
+#if defined(_WIN32) || defined(__CYGWIN__)
+    for (i = l - 1; (i >= 0) && !(path[i] == '/' || path[i] == '\\'); --i);
+#else
+    for (i = l - 1; (i >= 0) && !(path[i] == '/'); --i);
+#endif
+    strcpy(base, path + i + 1);
+}
+
+/* Return all leading pathname components */
+void
+path2dirname(const char *path, char *dir)
+{
+    int32 i, l;
+
+    l = strlen(path);
+#if defined(_WIN32) || defined(__CYGWIN__)
+    for (i = l - 1; (i >= 0) && !(path[i] == '/' || path[i] == '\\'); --i);
+#else
+    for (i = l - 1; (i >= 0) && !(path[i] == '/'); --i);
+#endif
+    if (i <= 0)
+        dir[0] = '\0';
+    else {
+        memcpy(dir, path, i);
+        dir[i] = '\0';
+    }
+}
+
+
+/* Strip off the shortest trailing .xyz suffix */
+void
+strip_fileext(const char *path, char *root)
+{
+    int32 i, l;
+
+    l = strlen(path);
+    for (i = l - 1; (i >= 0) && (path[i] != '.'); --i);
+    if (i < 0)
+        strcpy(root, path);     /* Didn't find a . */
+    else {
+        strncpy(root, path, i);
+    }
+}
+
+/* Test if this path is absolute. */
+int
+path_is_absolute(const char *path)
+{
+#if defined(_WIN32) && !defined(_WIN32_WCE) /* FIXME: Also SymbianOS */
+    return /* Starts with drive letter : \ or / */
+        (strlen(path) >= 3
+         &&
+         ((path[0] >= 'A' && path[0] <= 'Z')
+          || (path[0] >= 'a' && path[0] <= 'z'))
+         && path[1] == ':'
+         && (path[2] == '/' || path[2] == '\\'));
+#elif defined(_WIN32_WCE)
+    return path[0] == '\\' || path[0] == '/';
+#else /* Assume Unix */
+    return path[0] == '/';
+#endif
+}
diff --git a/src/libsphinxbase/util/genrand.c b/src/libsphinxbase/util/genrand.c
new file mode 100644 (file)
index 0000000..a6c69cb
--- /dev/null
@@ -0,0 +1,234 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/* 
+   A C-program for MT19937, with initialization improved 2002/1/26.
+   Coded by Takuji Nishimura and Makoto Matsumoto.
+
+   Before using, initialize the state by using init_genrand(seed)  
+   or init_by_array(init_key, key_length).
+
+   Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+   All rights reserved.                          
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above copyright
+`        notice, this list of conditions and the following disclaimer in the
+        documentation and/or other materials provided with the distribution.
+
+     3. The names of its contributors may not be used to endorse or promote 
+        products derived from this software without specific prior written 
+        permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+   Any feedback is very welcome.
+   http://www.math.keio.ac.jp/matumoto/emt.html
+   email: matumoto@math.keio.ac.jp
+*/
+
+
+/*
+ * randgen.c   : a portable random generator 
+ * 
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: genrand.c,v $
+ * Revision 1.2  2005/06/22 03:01:50  arthchan2003
+ * Added  keyword
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 18-Nov-04 ARCHAN (archan@cs.cmu.edu) at Carnegie Mellon University
+ *              First incorporated from the Mersenne Twister Random
+ *              Number Generator package. It was chosen because it is
+ *              in BSD-license and its performance is quite
+ *              reasonable. Of course if you look at the inventors's
+ *              page.  This random generator can actually gives
+ *              19937-bits period.  This is already far from we need. 
+ *              This will possibly good enough for the next 10 years. 
+ *
+ *              I also downgrade the code a little bit to avoid Sphinx's
+ *              developers misused it. 
+ */
+
+
+
+#include <stdio.h>
+
+#include "sphinxbase/genrand.h"
+
+/* Period parameters */
+#define N 624
+#define M 397
+#define MATRIX_A 0x9908b0dfUL   /* constant vector a */
+#define UPPER_MASK 0x80000000UL /* most significant w-r bits */
+#define LOWER_MASK 0x7fffffffUL /* least significant r bits */
+
+void init_genrand(unsigned long s);
+
+void
+genrand_seed(unsigned long s)
+{
+    init_genrand(s);
+}
+
+
+static unsigned long mt[N];     /* the array for the state vector  */
+static int mti = N + 1;         /* mti==N+1 means mt[N] is not initialized */
+
+/* initializes mt[N] with a seed */
+void
+init_genrand(unsigned long s)
+{
+    mt[0] = s & 0xffffffffUL;
+    for (mti = 1; mti < N; mti++) {
+        mt[mti] =
+            (1812433253UL * (mt[mti - 1] ^ (mt[mti - 1] >> 30)) + mti);
+        /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
+        /* In the previous versions, MSBs of the seed affect   */
+        /* only MSBs of the array mt[].                        */
+        /* 2002/01/09 modified by Makoto Matsumoto             */
+        mt[mti] &= 0xffffffffUL;
+        /* for >32 bit machines */
+    }
+}
+
+/* generates a random number on [0,0xffffffff]-interval */
+unsigned long
+genrand_int32(void)
+{
+    unsigned long y;
+    static unsigned long mag01[2] = { 0x0UL, MATRIX_A };
+    /* mag01[x] = x * MATRIX_A  for x=0,1 */
+
+    if (mti >= N) {             /* generate N words at one time */
+        int kk;
+
+        if (mti == N + 1)       /* if init_genrand() has not been called, */
+            init_genrand(5489UL);       /* a default initial seed is used */
+
+        for (kk = 0; kk < N - M; kk++) {
+            y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK);
+            mt[kk] = mt[kk + M] ^ (y >> 1) ^ mag01[y & 0x1UL];
+        }
+        for (; kk < N - 1; kk++) {
+            y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK);
+            mt[kk] = mt[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1UL];
+        }
+        y = (mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK);
+        mt[N - 1] = mt[M - 1] ^ (y >> 1) ^ mag01[y & 0x1UL];
+
+        mti = 0;
+    }
+
+    y = mt[mti++];
+
+    /* Tempering */
+    y ^= (y >> 11);
+    y ^= (y << 7) & 0x9d2c5680UL;
+    y ^= (y << 15) & 0xefc60000UL;
+    y ^= (y >> 18);
+
+    return y;
+}
+
+/* generates a random number on [0,0x7fffffff]-interval */
+long
+genrand_int31(void)
+{
+    return (long) (genrand_int32() >> 1);
+}
+
+/* generates a random number on [0,1]-real-interval */
+double
+genrand_real1(void)
+{
+    return genrand_int32() * (1.0 / 4294967295.0);
+    /* divided by 2^32-1 */
+}
+
+/* generates a random number on [0,1)-real-interval */
+double
+genrand_real2(void)
+{
+    return genrand_int32() * (1.0 / 4294967296.0);
+    /* divided by 2^32 */
+}
+
+/* generates a random number on (0,1)-real-interval */
+double
+genrand_real3(void)
+{
+    return (((double) genrand_int32()) + 0.5) * (1.0 / 4294967296.0);
+    /* divided by 2^32 */
+}
+
+/* generates a random number on [0,1) with 53-bit resolution*/
+double
+genrand_res53(void)
+{
+    unsigned long a = genrand_int32() >> 5, b = genrand_int32() >> 6;
+    return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
+}
+
+/* These real versions are due to Isaku Wada, 2002/01/09 added */
diff --git a/src/libsphinxbase/util/glist.c b/src/libsphinxbase/util/glist.c
new file mode 100644 (file)
index 0000000..a97e719
--- /dev/null
@@ -0,0 +1,271 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * glist.h -- Module for maintaining a generic, linear linked-list structure.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: glist.c,v $
+ * Revision 1.8  2005/06/22 03:02:51  arthchan2003
+ * 1, Fixed doxygen documentation, 2, add  keyword.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 09-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added glist_chkdup_*().
+ * 
+ * 13-Feb-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created from earlier version.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "sphinxbase/glist.h"
+#include "sphinxbase/ckd_alloc.h"
+
+
+glist_t
+glist_add_ptr(glist_t g, void *ptr)
+{
+    gnode_t *gn;
+
+    gn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    gn->data.ptr = ptr;
+    gn->next = g;
+    return ((glist_t) gn);      /* Return the new head of the list */
+}
+
+
+glist_t
+glist_add_int32(glist_t g, int32 val)
+{
+    gnode_t *gn;
+
+    gn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    gn->data.i = (long)val;
+    gn->next = g;
+    return ((glist_t) gn);      /* Return the new head of the list */
+}
+
+
+glist_t
+glist_add_uint32(glist_t g, uint32 val)
+{
+    gnode_t *gn;
+
+    gn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    gn->data.ui = (unsigned long)val;
+    gn->next = g;
+    return ((glist_t) gn);      /* Return the new head of the list */
+}
+
+
+glist_t
+glist_add_float32(glist_t g, float32 val)
+{
+    gnode_t *gn;
+
+    gn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    gn->data.fl = (double)val;
+    gn->next = g;
+    return ((glist_t) gn);      /* Return the new head of the list */
+}
+
+
+glist_t
+glist_add_float64(glist_t g, float64 val)
+{
+    gnode_t *gn;
+
+    gn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    gn->data.fl = (double)val;
+    gn->next = g;
+    return ((glist_t) gn);      /* Return the new head of the list */
+}
+
+void
+glist_free(glist_t g)
+{
+    gnode_t *gn;
+
+    while (g) {
+        gn = g;
+        g = gn->next;
+        ckd_free((void *) gn);
+    }
+}
+
+int32
+glist_count(glist_t g)
+{
+    gnode_t *gn;
+    int32 n;
+
+    for (gn = g, n = 0; gn; gn = gn->next, n++);
+    return n;
+}
+
+
+gnode_t *
+glist_tail(glist_t g)
+{
+    gnode_t *gn;
+
+    if (!g)
+        return NULL;
+
+    for (gn = g; gn->next; gn = gn->next);
+    return gn;
+}
+
+
+glist_t
+glist_reverse(glist_t g)
+{
+    gnode_t *gn, *nextgn;
+    gnode_t *rev;
+
+    rev = NULL;
+    for (gn = g; gn; gn = nextgn) {
+        nextgn = gn->next;
+
+        gn->next = rev;
+        rev = gn;
+    }
+
+    return rev;
+}
+
+
+gnode_t *
+glist_insert_ptr(gnode_t * gn, void *ptr)
+{
+    gnode_t *newgn;
+
+    newgn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    newgn->data.ptr = ptr;
+    newgn->next = gn->next;
+    gn->next = newgn;
+
+    return newgn;
+}
+
+
+gnode_t *
+glist_insert_int32(gnode_t * gn, int32 val)
+{
+    gnode_t *newgn;
+
+    newgn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    newgn->data.i = val;
+    newgn->next = gn->next;
+    gn->next = newgn;
+
+    return newgn;
+}
+
+
+gnode_t *
+glist_insert_uint32(gnode_t * gn, uint32 val)
+{
+    gnode_t *newgn;
+
+    newgn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    newgn->data.ui = val;
+    newgn->next = gn->next;
+
+    gn->next = newgn;
+
+    return newgn;
+}
+
+
+gnode_t *
+glist_insert_float32(gnode_t * gn, float32 val)
+{
+    gnode_t *newgn;
+
+    newgn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    newgn->data.fl = (double)val;
+    newgn->next = gn->next;
+    gn->next = newgn;
+
+    return newgn;
+}
+
+
+gnode_t *
+glist_insert_float64(gnode_t * gn, float64 val)
+{
+    gnode_t *newgn;
+
+    newgn = (gnode_t *) ckd_calloc(1, sizeof(gnode_t));
+    newgn->data.fl = (double)val;
+    newgn->next = gn->next;
+    gn->next = newgn;
+
+    return newgn;
+}
+
+gnode_t *
+gnode_free(gnode_t * gn, gnode_t * pred)
+{
+    gnode_t *next;
+
+    next = gn->next;
+    if (pred) {
+        assert(pred->next == gn);
+
+        pred->next = next;
+    }
+
+    ckd_free((char *) gn);
+
+    return next;
+}
diff --git a/src/libsphinxbase/util/hash_table.c b/src/libsphinxbase/util/hash_table.c
new file mode 100644 (file)
index 0000000..ac7648d
--- /dev/null
@@ -0,0 +1,712 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * hash.c -- Hash table module.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: hash.c,v $
+ * Revision 1.5  2005/06/22 03:04:01  arthchan2003
+ * 1, Implemented hash_delete and hash_display, 2, Fixed doxygen documentation, 3, Added  keyword.
+ *
+ * Revision 1.9  2005/05/25 06:17:53  archan
+ * Delete the test code in cmd_ln.c and fixed platform specific code of hash.c
+ *
+ * Revision 1.8  2005/05/24 01:10:54  archan
+ * Fix a bug when the value only appear in the hash but there is no chain.   Also make sure that prev was initialized to NULL. All success cases were tested, but not tested with the deletion is tested.
+ *
+ * Revision 1.6  2005/05/24 00:00:45  archan
+ * Added basic functionalities to hash_t: 1, display and 2, delete a key from a hash. \n
+ *
+ * Revision 1.5  2005/05/11 07:01:38  archan
+ * Added comments on the usage of the current implementation of hash tables.
+ *
+ * Revision 1.4  2005/05/03 04:09:11  archan
+ * Implemented the heart of word copy search. For every ci-phone, every word end, a tree will be allocated to preserve its pathscore.  This is different from 3.5 or below, only the best score for a particular ci-phone, regardless of the word-ends will be preserved at every frame.  The graph propagation will not collect unused word tree at this point. srch_WST_propagate_wd_lv2 is also as the most stupid in the century.  But well, after all, everything needs a start.  I will then really get the results from the search and see how it looks.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 05-May-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Removed hash_key2hash().  Added hash_enter_bkey() and hash_lookup_bkey(),
+ *             and len attribute to hash_entry_t.
+ * 
+ * 30-Apr-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Added hash_key2hash().
+ * 
+ * 18-Jun-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Included case sensitive/insensitive option.  Removed local, static
+ *             maintenance of all hash tables.
+ * 
+ * 31-Jul-95   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon
+ *             Created.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4018)
+#endif
+
+#include "sphinxbase/hash_table.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/case.h"
+
+
+#if 0
+static void
+prime_sieve(int32 max)
+{
+    char *notprime;
+    int32 p, pp;
+
+    notprime = (char *) ckd_calloc(max + 1, 1);
+    p = 2;
+    for (;;) {
+        printf("%d\n", p);
+        for (pp = p + p; pp <= max; pp += p)
+            notprime[pp] = 1;
+        for (++p; (p <= max) && notprime[p]; p++);
+        if (p > max)
+            break;
+    }
+}
+#endif
+
+
+/*
+ * HACK!!  Initial hash table size is restricted by this set of primes.  (Of course,
+ * collision resolution by chaining will accommodate more entries indefinitely, but
+ * efficiency will drop.)
+ */
+const int32 prime[] = {
+    101, 211, 307, 401, 503, 601, 701, 809, 907,
+    1009, 1201, 1601, 2003, 2411, 3001, 4001, 5003, 6007, 7001, 8009,
+    9001,
+    10007, 12007, 16001, 20011, 24001, 30011, 40009, 50021, 60013,
+    70001, 80021, 90001,
+    100003, 120011, 160001, 200003, 240007, 300007, 400009, 500009,
+    600011, 700001, 800011, 900001,
+    -1
+};
+
+
+/**
+ * This function returns a very large prime. 
+ */
+static int32
+prime_size(int32 size)
+{
+    int32 i;
+
+    for (i = 0; (prime[i] > 0) && (prime[i] < size); i++);
+    if (prime[i] <= 0) {
+        E_WARN("Very large hash table requested (%d entries)\n", size);
+        --i;
+    }
+    return (prime[i]);
+}
+
+
+hash_table_t *
+hash_table_new(int32 size, int32 casearg)
+{
+    hash_table_t *h;
+
+    h = (hash_table_t *) ckd_calloc(1, sizeof(hash_table_t));
+    h->size = prime_size(size + (size >> 1));
+    h->nocase = (casearg == HASH_CASE_NO);
+    h->table = (hash_entry_t *) ckd_calloc(h->size, sizeof(hash_entry_t));
+    /* The above calloc clears h->table[*].key and .next to NULL, i.e. an empty table */
+
+    return h;
+}
+
+
+/*
+ * Compute hash value for given key string.
+ * Somewhat tuned for English text word strings.
+ */
+static uint32
+key2hash(hash_table_t * h, const char *key)
+{
+
+    register const char *cp;
+
+    /** ARCHAN 20050712: 
+       [1236322] libutil\str2words special character bgu
+       HACK Apply suggested hack of fixing the hash table such that
+       it can work with extended ascii code . This is a hack because
+       the best way to solve it is to make sure all character
+       representation is unsigned character in the first place. (or
+       better unicode.)
+    **/
+
+    /*register char c; */
+    register unsigned char c;
+    register int32 s;
+    register uint32 hash;
+
+    hash = 0;
+    s = 0;
+
+    if (h->nocase) {
+        for (cp = key; *cp; cp++) {
+            c = *cp;
+            c = UPPER_CASE(c);
+            hash += c << s;
+            s += 5;
+            if (s >= 25)
+                s -= 24;
+        }
+    }
+    else {
+        for (cp = key; *cp; cp++) {
+            hash += (*cp) << s;
+            s += 5;
+            if (s >= 25)
+                s -= 24;
+        }
+    }
+
+    return (hash % h->size);
+}
+
+
+static char *
+makekey(uint8 * data, int32 len, char *key)
+{
+    int32 i, j;
+
+    if (!key)
+        key = (char *) ckd_calloc(len * 2 + 1, sizeof(char));
+
+    for (i = 0, j = 0; i < len; i++, j += 2) {
+        key[j] = 'A' + (data[i] & 0x000f);
+        key[j + 1] = 'J' + ((data[i] >> 4) & 0x000f);
+    }
+    key[j] = '\0';
+
+    return key;
+}
+
+
+static int32
+keycmp_nocase(hash_entry_t * entry, const char *key)
+{
+    char c1, c2;
+    int32 i;
+    const char *str;
+
+    str = entry->key;
+    for (i = 0; i < entry->len; i++) {
+        c1 = *(str++);
+        c1 = UPPER_CASE(c1);
+        c2 = *(key++);
+        c2 = UPPER_CASE(c2);
+        if (c1 != c2)
+            return (c1 - c2);
+    }
+
+    return 0;
+}
+
+
+static int32
+keycmp_case(hash_entry_t * entry, const char *key)
+{
+    char c1, c2;
+    int32 i;
+    const char *str;
+
+    str = entry->key;
+    for (i = 0; i < entry->len; i++) {
+        c1 = *(str++);
+        c2 = *(key++);
+        if (c1 != c2)
+            return (c1 - c2);
+    }
+
+    return 0;
+}
+
+
+/*
+ * Lookup entry with hash-value hash in table h for given key
+ * Return value: hash_entry_t for key
+ */
+static hash_entry_t *
+lookup(hash_table_t * h, uint32 hash, const char *key, size_t len)
+{
+    hash_entry_t *entry;
+
+    entry = &(h->table[hash]);
+    if (entry->key == NULL)
+        return NULL;
+
+    if (h->nocase) {
+        while (entry && ((entry->len != len)
+                         || (keycmp_nocase(entry, key) != 0)))
+            entry = entry->next;
+    }
+    else {
+        while (entry && ((entry->len != len)
+                         || (keycmp_case(entry, key) != 0)))
+            entry = entry->next;
+    }
+
+    return entry;
+}
+
+
+int32
+hash_table_lookup(hash_table_t * h, const char *key, void ** val)
+{
+    hash_entry_t *entry;
+    uint32 hash;
+    int32 len;
+
+    hash = key2hash(h, key);
+    len = strlen(key);
+
+    entry = lookup(h, hash, key, len);
+    if (entry) {
+        if (val)
+            *val = entry->val;
+        return 0;
+    }
+    else
+        return -1;
+}
+
+int32
+hash_table_lookup_int32(hash_table_t * h, const char *key, int32 *val)
+{
+    void *vval;
+    int32 rv;
+
+    rv = hash_table_lookup(h, key, &vval);
+    if (rv != 0)
+        return rv;
+    if (val)
+        *val = (int32)(long)vval;
+    return 0;
+}
+
+
+int32
+hash_table_lookup_bkey(hash_table_t * h, const char *key, size_t len, void ** val)
+{
+    hash_entry_t *entry;
+    uint32 hash;
+    char *str;
+
+    str = makekey((uint8 *) key, len, NULL);
+    hash = key2hash(h, str);
+    ckd_free(str);
+
+    entry = lookup(h, hash, key, len);
+    if (entry) {
+        if (val)
+            *val = entry->val;
+        return 0;
+    }
+    else
+        return -1;
+}
+
+int32
+hash_table_lookup_bkey_int32(hash_table_t * h, const char *key, size_t len, int32 *val)
+{
+    void *vval;
+    int32 rv;
+
+    rv = hash_table_lookup_bkey(h, key, len, &vval);
+    if (rv != 0)
+        return rv;
+    if (val)
+        *val = (int32)(long)vval;
+    return 0;
+}
+
+
+static void *
+enter(hash_table_t * h, uint32 hash, const char *key, size_t len, void *val, int32 replace)
+{
+    hash_entry_t *cur, *new;
+
+    if ((cur = lookup(h, hash, key, len)) != NULL) {
+        void *oldval;
+        /* Key already exists. */
+        oldval = cur->val;
+        if (replace) {
+            /* Replace the pointer if replacement is requested,
+             * because this might be a different instance of the same
+             * string (this verges on magic, sorry) */
+            cur->key = key;
+            cur->val = val;
+        }
+        return oldval;
+    }
+
+    cur = &(h->table[hash]);
+    if (cur->key == NULL) {
+        /* Empty slot at hashed location; add this entry */
+        cur->key = key;
+        cur->len = len;
+        cur->val = val;
+
+        /* Added by ARCHAN at 20050515. This allows deletion could work. */
+        cur->next = NULL;
+
+    }
+    else {
+        /* Key collision; create new entry and link to hashed location */
+        new = (hash_entry_t *) ckd_calloc(1, sizeof(hash_entry_t));
+        new->key = key;
+        new->len = len;
+        new->val = val;
+        new->next = cur->next;
+        cur->next = new;
+    }
+    ++h->inuse;
+
+    return val;
+}
+
+/* 20050523 Added by ARCHAN  to delete a key from a hash table */
+static void *
+delete(hash_table_t * h, uint32 hash, const char *key, size_t len)
+{
+    hash_entry_t *entry, *prev;
+    void *val;
+
+    prev = NULL;
+    entry = &(h->table[hash]);
+    if (entry->key == NULL)
+        return NULL;
+
+    if (h->nocase) {
+        while (entry && ((entry->len != len)
+                         || (keycmp_nocase(entry, key) != 0))) {
+            prev = entry;
+            entry = entry->next;
+        }
+    }
+    else {
+        while (entry && ((entry->len != len)
+                         || (keycmp_case(entry, key) != 0))) {
+            prev = entry;
+            entry = entry->next;
+        }
+    }
+
+    if (entry == NULL)
+        return NULL;
+
+    /* At this point, entry will be the one required to be deleted, prev
+       will contain the previous entry
+     */
+    val = entry->val;
+
+    if (prev == NULL) {
+        /* That is to say the entry in the hash table (not the chain) matched the key. */
+        /* We will then copy the things from the next entry to the hash table */
+        prev = entry;
+        if (entry->next) {      /* There is a next entry, great, copy it. */
+            entry = entry->next;
+            prev->key = entry->key;
+            prev->len = entry->len;
+            prev->val = entry->val;
+            prev->next = entry->next;
+            ckd_free(entry);
+        }
+        else {                  /* There is not a next entry, just set the key to null */
+            prev->key = NULL;
+            prev->len = 0;
+            prev->next = NULL;
+        }
+
+    }
+    else {                      /* This case is simple */
+        prev->next = entry->next;
+        ckd_free(entry);
+    }
+
+    /* Do wiring and free the entry */
+
+    --h->inuse;
+
+    return val;
+}
+
+void
+hash_table_empty(hash_table_t *h)
+{
+    hash_entry_t *e, *e2;
+    int32 i;
+
+    for (i = 0; i < h->size; i++) {
+        /* Free collision lists. */
+        for (e = h->table[i].next; e; e = e2) {
+            e2 = e->next;
+            ckd_free((void *) e);
+        }
+        memset(&h->table[i], 0, sizeof(h->table[i]));
+    }
+    h->inuse = 0;
+}
+
+
+void *
+hash_table_enter(hash_table_t * h, const char *key, void *val)
+{
+    uint32 hash;
+    size_t len;
+
+    hash = key2hash(h, key);
+    len = strlen(key);
+    return (enter(h, hash, key, len, val, 0));
+}
+
+void *
+hash_table_replace(hash_table_t * h, const char *key, void *val)
+{
+    uint32 hash;
+    size_t len;
+
+    hash = key2hash(h, key);
+    len = strlen(key);
+    return (enter(h, hash, key, len, val, 1));
+}
+
+void *
+hash_table_delete(hash_table_t * h, const char *key)
+{
+    uint32 hash;
+    size_t len;
+
+    hash = key2hash(h, key);
+    len = strlen(key);
+
+    return (delete(h, hash, key, len));
+}
+
+void *
+hash_table_enter_bkey(hash_table_t * h, const char *key, size_t len, void *val)
+{
+    uint32 hash;
+    char *str;
+
+    str = makekey((uint8 *) key, len, NULL);
+    hash = key2hash(h, str);
+    ckd_free(str);
+
+    return (enter(h, hash, key, len, val, 0));
+}
+
+void *
+hash_table_replace_bkey(hash_table_t * h, const char *key, size_t len, void *val)
+{
+    uint32 hash;
+    char *str;
+
+    str = makekey((uint8 *) key, len, NULL);
+    hash = key2hash(h, str);
+    ckd_free(str);
+
+    return (enter(h, hash, key, len, val, 1));
+}
+
+void *
+hash_table_delete_bkey(hash_table_t * h, const char *key, size_t len)
+{
+    uint32 hash;
+    char *str;
+
+    str = makekey((uint8 *) key, len, NULL);
+    hash = key2hash(h, str);
+
+    return (delete(h, hash, key, len));
+}
+
+void
+hash_table_display(hash_table_t * h, int32 showdisplay)
+{
+    hash_entry_t *e;
+    int i, j;
+    j = 0;
+
+    E_INFOCONT("Hash with chaining representation of the hash table\n");
+
+    for (i = 0; i < h->size; i++) {
+        e = &(h->table[i]);
+        if (e->key != NULL) {
+            E_INFOCONT("|key:");
+            if (showdisplay)
+                E_INFOCONT("%s", e->key);
+            else
+                E_INFOCONT("%p", e->key);
+
+            E_INFOCONT("|len:%d|val=%ld|->", e->len, (long)e->val);
+            if (e->next == NULL) {
+                E_INFOCONT("NULL\n");
+            }
+            j++;
+
+            for (e = e->next; e; e = e->next) {
+                E_INFOCONT("|key:");
+                if (showdisplay)
+                    E_INFOCONT("%s", e->key);
+
+                E_INFOCONT("|len:%d|val=%ld|->", e->len, (long)e->val);
+                if (e->next == NULL) {
+                    E_INFOCONT("NULL\n");
+                }
+                j++;
+            }
+        }
+    }
+
+    E_INFOCONT("The total number of keys =%d\n", j);
+}
+
+
+glist_t
+hash_table_tolist(hash_table_t * h, int32 * count)
+{
+    glist_t g;
+    hash_entry_t *e;
+    int32 i, j;
+
+    g = NULL;
+
+    j = 0;
+    for (i = 0; i < h->size; i++) {
+        e = &(h->table[i]);
+
+        if (e->key != NULL) {
+            g = glist_add_ptr(g, (void *) e);
+            j++;
+
+            for (e = e->next; e; e = e->next) {
+                g = glist_add_ptr(g, (void *) e);
+                j++;
+            }
+        }
+    }
+
+    if (count)
+        *count = j;
+
+    return g;
+}
+
+hash_iter_t *
+hash_table_iter(hash_table_t *h)
+{
+       hash_iter_t *itor;
+
+       itor = ckd_calloc(1, sizeof(*itor));
+       itor->ht = h;
+       return hash_table_iter_next(itor);
+}
+
+hash_iter_t *
+hash_table_iter_next(hash_iter_t *itor)
+{
+       /* If there is an entry, walk down its list. */
+       if (itor->ent)
+               itor->ent = itor->ent->next;
+       /* If we got to the end of the chain, or we had no entry, scan
+        * forward in the table to find the next non-empty bucket. */
+       if (itor->ent == NULL) {
+               while (itor->idx < itor->ht->size
+                      && itor->ht->table[itor->idx].key == NULL) 
+                       ++itor->idx;
+               /* If we did not find one then delete the iterator and
+                * return NULL. */
+               if (itor->idx == itor->ht->size) {
+                       hash_table_iter_free(itor);
+                       return NULL;
+               }
+               /* Otherwise use this next entry. */
+               itor->ent = itor->ht->table + itor->idx;
+               /* Increase idx for the next time around. */
+               ++itor->idx;
+       }
+       return itor;
+}
+
+void
+hash_table_iter_free(hash_iter_t *itor)
+{
+       ckd_free(itor);
+}
+
+void
+hash_table_free(hash_table_t * h)
+{
+    hash_entry_t *e, *e2;
+    int32 i;
+
+    if (h == NULL)
+        return;
+
+    /* Free additional entries created for key collision cases */
+    for (i = 0; i < h->size; i++) {
+        for (e = h->table[i].next; e; e = e2) {
+            e2 = e->next;
+            ckd_free((void *) e);
+        }
+    }
+
+    ckd_free((void *) h->table);
+    ckd_free((void *) h);
+}
diff --git a/src/libsphinxbase/util/heap.c b/src/libsphinxbase/util/heap.c
new file mode 100644 (file)
index 0000000..2209a03
--- /dev/null
@@ -0,0 +1,292 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * heap.c -- Generic heap structure for inserting in any and popping in sorted
+ *             order.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: heap.c,v $
+ * Revision 1.4  2005/06/22 03:05:49  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Add  keyword.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 05-Mar-99   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Fixed bug in heap_destroy() (in while loop exit condition).
+ * 
+ * 23-Dec-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Started.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "sphinxbase/heap.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+
+/**
+ * One node on the heap
+ */
+typedef struct heapnode_s {
+    void *data;                 /**< Application data at this node */
+    int32 val;                  /**< Associated with above application data; according to which
+                                   heap is sorted (in ascending order) */
+    int32 nl, nr;               /**< #left/right descendants of this node (for balancing heap) */
+    struct heapnode_s *l;       /**< Root of left descendant heap */
+    struct heapnode_s *r;       /**< Root of right descendant heap */
+} heapnode_t;
+
+/**
+ * Internal heap data structure.
+ */
+struct heap_s {
+    heapnode_t *top;
+};
+
+
+#if 0
+static void
+heap_dump(heapnode_t * top, int32 level)
+{
+    int32 i;
+
+    if (!top)
+        return;
+
+    for (i = 0; i < level; i++)
+        printf("  ");
+    /* print top info */
+    heap_dump(top->l, level + 1);
+    heap_dump(top->r, level + 1);
+}
+#endif
+
+
+heap_t *
+heap_new(void)
+{
+    heap_t *h = ckd_calloc(1, sizeof(*h));
+    return h;
+}
+
+
+static heapnode_t *
+subheap_insert(heapnode_t * root, void *data, int32 val)
+{
+    heapnode_t *h;
+    void *tmpdata;
+    int32 tmpval;
+
+    if (!root) {
+        h = (heapnode_t *) ckd_calloc(1, sizeof(heapnode_t));
+        h->data = data;
+        h->val = val;
+        h->l = h->r = NULL;
+        h->nl = h->nr = 0;
+        return h;
+    }
+
+    /* Root already exists; if new value is less, replace root node */
+    if (root->val > val) {
+        tmpdata = root->data;
+        tmpval = root->val;
+        root->data = data;
+        root->val = val;
+        data = tmpdata;
+        val = tmpval;
+    }
+
+    /* Insert new or old (replaced) node in right or left subtree; keep them balanced */
+    if (root->nl > root->nr) {
+        root->r = subheap_insert(root->r, data, val);
+        root->nr++;
+    }
+    else {
+        root->l = subheap_insert(root->l, data, val);
+        root->nl++;
+    }
+
+    return root;
+}
+
+
+int
+heap_insert(heap_t *heap, void *data, int32 val)
+{
+    heap->top = subheap_insert(heap->top, data, val);
+    return 0;
+}
+
+
+static heapnode_t *
+subheap_pop(heapnode_t * root)
+{
+    heapnode_t *l, *r;
+
+    /* Propagate best value from below into root, if any */
+    l = root->l;
+    r = root->r;
+
+    if (!l) {
+        if (!r) {
+            ckd_free((char *) root);
+            return NULL;
+        }
+        else {
+            root->data = r->data;
+            root->val = r->val;
+            root->r = subheap_pop(r);
+            root->nr--;
+        }
+    }
+    else {
+        if ((!r) || (l->val < r->val)) {
+            root->data = l->data;
+            root->val = l->val;
+            root->l = subheap_pop(l);
+            root->nl--;
+        }
+        else {
+            root->data = r->data;
+            root->val = r->val;
+            root->r = subheap_pop(r);
+            root->nr--;
+        }
+    }
+
+    return root;
+}
+
+
+int
+heap_pop(heap_t *heap, void **data, int32 * val)
+{
+    if (heap->top == NULL)
+        return 0;
+    *data = heap->top->data;
+    *val = heap->top->val;
+    heap->top = subheap_pop(heap->top);
+    return 1;
+}
+
+
+int
+heap_top(heap_t *heap, void **data, int32 * val)
+{
+    if (heap->top == NULL)
+        return 0;
+    *data = heap->top->data;
+    *val = heap->top->val;
+    return 1;
+}
+
+static int
+heap_remove_one(heap_t *heap, heapnode_t *top, void *data)
+{
+    if (top == NULL)
+        return -1;
+    else if (top->data == data) {
+        assert(top == heap->top);
+        heap->top = subheap_pop(heap->top);
+        return 0;
+    }
+    if (top->l) {
+        if (top->l->data == data) {
+            top->l = subheap_pop(top->l);
+            --top->nl;
+            return 0;
+        }
+        else if (heap_remove_one(heap, top->l, data) == 0) {
+            --top->nl;
+            return 0;
+        }
+    }
+    if (top->r) {
+        if (top->r->data == data) {
+            top->r = subheap_pop(top->r);
+            --top->nr;
+            return 0;
+        }
+        else if (heap_remove_one(heap, top->r, data) == 0) {
+            --top->nr;
+            return 0;
+        }
+    }
+    return -1;
+}
+
+int
+heap_remove(heap_t *heap, void *data)
+{
+    return heap_remove_one(heap, heap->top, data);
+}
+
+
+size_t
+heap_size(heap_t *heap)
+{
+    if (heap->top == NULL)
+        return 0;
+    return heap->top->nl + heap->top->nr + 1;
+}
+
+int
+heap_destroy(heap_t *heap)
+{
+    void *data;
+    int32 val;
+
+    /* Empty the heap and free it */
+    while (heap_pop(heap, &data, &val) > 0)
+        ;
+    ckd_free(heap);
+
+    return 0;
+}
diff --git a/src/libsphinxbase/util/huff_code.c b/src/libsphinxbase/util/huff_code.c
new file mode 100644 (file)
index 0000000..dd3fb58
--- /dev/null
@@ -0,0 +1,651 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2009 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#include <string.h>
+
+#include "sphinxbase/huff_code.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/hash_table.h"
+#include "sphinxbase/byteorder.h"
+#include "sphinxbase/heap.h"
+#include "sphinxbase/pio.h"
+#include "sphinxbase/err.h"
+
+typedef struct huff_node_s {
+    int nbits;
+    struct huff_node_s *l;
+    union {
+        int32 ival;
+        char *sval;
+        struct huff_node_s *r;
+    } r;
+} huff_node_t;
+
+typedef struct huff_codeword_s {
+    union {
+        int32 ival;
+        char *sval;
+    } r;
+    uint32 nbits, codeword;
+} huff_codeword_t;
+
+enum {
+    HUFF_CODE_INT,
+    HUFF_CODE_STR
+};
+
+struct huff_code_s {
+    int16 refcount;
+    uint8 maxbits;
+    uint8 type;
+    uint32 *firstcode;
+    uint32 *numl;
+    huff_codeword_t **syms;
+    hash_table_t *codewords;
+    FILE *fh;
+    bit_encode_t *be;
+    int boff;
+};
+
+static huff_node_t *
+huff_node_new_int(int32 val)
+{
+    huff_node_t *hn = ckd_calloc(1, sizeof(*hn));
+    hn->r.ival = val;
+    return hn;
+}
+
+static huff_node_t *
+huff_node_new_str(char const *val)
+{
+    huff_node_t *hn = ckd_calloc(1, sizeof(*hn));
+    hn->r.sval = ckd_salloc(val);
+    return hn;
+}
+
+static huff_node_t *
+huff_node_new_parent(huff_node_t *l, huff_node_t *r)
+{
+    huff_node_t *hn = ckd_calloc(1, sizeof(*hn));
+    hn->l = l;
+    hn->r.r = r;
+    /* Propagate maximum bit length. */
+    if (r->nbits > l->nbits)
+        hn->nbits = r->nbits + 1;
+    else
+        hn->nbits = l->nbits + 1;
+    return hn;
+}
+
+static void
+huff_node_free_int(huff_node_t *root)
+{
+    if (root->l) {
+        huff_node_free_int(root->l);
+        huff_node_free_int(root->r.r);
+    }
+    ckd_free(root);
+}
+
+static void
+huff_node_free_str(huff_node_t *root, int freestr)
+{
+    if (root->l) {
+        huff_node_free_str(root->l, freestr);
+        huff_node_free_str(root->r.r, freestr);
+    }
+    else {
+        if (freestr)
+            ckd_free(root->r.sval);
+    }
+    ckd_free(root);
+}
+
+static huff_node_t *
+huff_code_build_tree(heap_t *q)
+{
+    huff_node_t *root = NULL;
+    int32 rf;
+
+    while (heap_size(q) > 1) {
+        huff_node_t *l, *r, *p;
+        int32 lf, rf;
+
+        heap_pop(q, (void *)&l, &lf);
+        heap_pop(q, (void *)&r, &rf);
+        p = huff_node_new_parent(l, r);
+        heap_insert(q, p, lf + rf);
+    }
+    heap_pop(q, (void **)&root, &rf);
+    return root;
+}
+
+static void
+huff_code_canonicalize(huff_code_t *hc, huff_node_t *root)
+{
+    glist_t agenda;
+    uint32 *nextcode;
+    int i, ncw;
+
+    hc->firstcode = ckd_calloc(hc->maxbits+1, sizeof(*hc->firstcode));
+    hc->syms = ckd_calloc(hc->maxbits+1, sizeof(*hc->syms));
+    hc->numl = ckd_calloc(hc->maxbits+1, sizeof(*nextcode));
+    nextcode = ckd_calloc(hc->maxbits+1, sizeof(*nextcode));
+
+    /* Traverse the tree, annotating it with the actual bit
+     * lengths, and histogramming them in numl. */
+    root->nbits = 0;
+    ncw = 0;
+    agenda = glist_add_ptr(NULL, root);
+    while (agenda) {
+        huff_node_t *node = gnode_ptr(agenda);
+        agenda = gnode_free(agenda, NULL);
+        if (node->l) {
+            node->l->nbits = node->nbits + 1;
+            agenda = glist_add_ptr(agenda, node->l);
+            node->r.r->nbits = node->nbits + 1;
+            agenda = glist_add_ptr(agenda, node->r.r);
+        }
+        else {
+            hc->numl[node->nbits]++;
+            ncw++;
+        }
+    }
+    /* Create starting codes and symbol tables for each bit length. */
+    hc->syms[hc->maxbits] = ckd_calloc(hc->numl[hc->maxbits], sizeof(**hc->syms));
+    for (i = hc->maxbits - 1; i > 0; --i) {
+        hc->firstcode[i] = (hc->firstcode[i+1] + hc->numl[i+1]) / 2;
+        hc->syms[i] = ckd_calloc(hc->numl[i], sizeof(**hc->syms));
+    }
+    memcpy(nextcode, hc->firstcode, (hc->maxbits + 1) * sizeof(*nextcode));
+    /* Traverse the tree again to produce the codebook itself. */
+    hc->codewords = hash_table_new(ncw, HASH_CASE_YES);
+    agenda = glist_add_ptr(NULL, root);
+    while (agenda) {
+        huff_node_t *node = gnode_ptr(agenda);
+        agenda = gnode_free(agenda, NULL);
+        if (node->l) {
+            agenda = glist_add_ptr(agenda, node->l);
+            agenda = glist_add_ptr(agenda, node->r.r);
+        }
+        else {
+            /* Initialize codebook entry, which also retains symbol pointer. */
+            huff_codeword_t *cw;
+            uint32 codeword = nextcode[node->nbits] & ((1 << node->nbits) - 1);
+            cw = hc->syms[node->nbits] + (codeword - hc->firstcode[node->nbits]);
+            cw->nbits = node->nbits;
+            cw->r.sval = node->r.sval; /* Will copy ints too... */
+            cw->codeword = codeword;
+            if (hc->type == HUFF_CODE_INT) {
+                hash_table_enter_bkey(hc->codewords,
+                                      (char const *)&cw->r.ival,
+                                      sizeof(cw->r.ival),
+                                      (void *)cw);
+            }
+            else {
+                hash_table_enter(hc->codewords, cw->r.sval, (void *)cw);
+            }
+            ++nextcode[node->nbits];
+        }
+    }
+    ckd_free(nextcode);
+}
+
+huff_code_t *
+huff_code_build_int(int32 const *values, int32 const *frequencies, int nvals)
+{
+    huff_code_t *hc;
+    huff_node_t *root;
+    heap_t *q;
+    int i;
+
+    hc = ckd_calloc(1, sizeof(*hc));
+    hc->refcount = 1;
+    hc->type = HUFF_CODE_INT;
+
+    /* Initialize the heap with nodes for each symbol. */
+    q = heap_new();
+    for (i = 0; i < nvals; ++i) {
+        heap_insert(q,
+                    huff_node_new_int(values[i]),
+                    frequencies[i]);
+    }
+
+    /* Now build the tree, which gives us codeword lengths. */
+    root = huff_code_build_tree(q);
+    heap_destroy(q);
+    if (root == NULL || root->nbits > 32) {
+        E_ERROR("Huffman trees currently limited to 32 bits\n");
+        huff_node_free_int(root);
+        huff_code_free(hc);
+        return NULL;
+    }
+
+    /* Build a canonical codebook. */
+    hc->maxbits = root->nbits;
+    huff_code_canonicalize(hc, root);
+
+    /* Tree no longer needed. */
+    huff_node_free_int(root);
+
+    return hc;
+}
+
+huff_code_t *
+huff_code_build_str(char * const *values, int32 const *frequencies, int nvals)
+{
+    huff_code_t *hc;
+    huff_node_t *root;
+    heap_t *q;
+    int i;
+
+    hc = ckd_calloc(1, sizeof(*hc));
+    hc->refcount = 1;
+    hc->type = HUFF_CODE_STR;
+
+    /* Initialize the heap with nodes for each symbol. */
+    q = heap_new();
+    for (i = 0; i < nvals; ++i) {
+        heap_insert(q,
+                    huff_node_new_str(values[i]),
+                    frequencies[i]);
+    }
+
+    /* Now build the tree, which gives us codeword lengths. */
+    root = huff_code_build_tree(q);
+    heap_destroy(q);
+    if (root == NULL || root->nbits > 32) {
+        E_ERROR("Huffman trees currently limited to 32 bits\n");
+        huff_node_free_str(root, TRUE);
+        huff_code_free(hc);
+        return NULL;
+    }
+
+    /* Build a canonical codebook. */
+    hc->maxbits = root->nbits;
+    huff_code_canonicalize(hc, root);
+
+    /* Tree no longer needed (note we retain pointers to its strings). */
+    huff_node_free_str(root, FALSE);
+
+    return hc;
+}
+
+huff_code_t *
+huff_code_read(FILE *infh)
+{
+    huff_code_t *hc;
+    int i, j;
+
+    hc = ckd_calloc(1, sizeof(*hc));
+    hc->refcount = 1;
+
+    hc->maxbits = fgetc(infh);
+    hc->type = fgetc(infh);
+
+    /* Two bytes of padding. */
+    fgetc(infh);
+    fgetc(infh);
+
+    /* Allocate stuff. */
+    hc->firstcode = ckd_calloc(hc->maxbits + 1, sizeof(*hc->firstcode));
+    hc->numl = ckd_calloc(hc->maxbits + 1, sizeof(*hc->numl));
+    hc->syms = ckd_calloc(hc->maxbits + 1, sizeof(*hc->syms));
+
+    /* Read the symbol tables. */
+    hc->codewords = hash_table_new(hc->maxbits, HASH_CASE_YES);
+    for (i = 1; i <= hc->maxbits; ++i) {
+        if (fread(&hc->firstcode[i], 4, 1, infh) != 1)
+            goto error_out;
+        SWAP_BE_32(&hc->firstcode[i]);
+        if (fread(&hc->numl[i], 4, 1, infh) != 1)
+            goto error_out;
+        SWAP_BE_32(&hc->numl[i]);
+        hc->syms[i] = ckd_calloc(hc->numl[i], sizeof(**hc->syms));
+        for (j = 0; j < hc->numl[i]; ++j) {
+            huff_codeword_t *cw = &hc->syms[i][j];
+            cw->nbits = i;
+            cw->codeword = hc->firstcode[i] + j;
+            if (hc->type == HUFF_CODE_INT) {
+                if (fread(&cw->r.ival, 4, 1, infh) != 1)
+                    goto error_out;
+                SWAP_BE_32(&cw->r.ival);
+                hash_table_enter_bkey(hc->codewords,
+                                      (char const *)&cw->r.ival,
+                                      sizeof(cw->r.ival),
+                                      (void *)cw);
+            }
+            else {
+                size_t len;
+                cw->r.sval = fread_line(infh, &len);
+                cw->r.sval[len-1] = '\0';
+                hash_table_enter(hc->codewords, cw->r.sval, (void *)cw);
+            }
+        }
+    }
+
+    return hc;
+error_out:
+    huff_code_free(hc);
+    return NULL;
+}
+
+int
+huff_code_write(huff_code_t *hc, FILE *outfh)
+{
+    int i, j;
+
+    /* Maximum codeword length */
+    fputc(hc->maxbits, outfh);
+    /* Symbol type */
+    fputc(hc->type, outfh);
+    /* Two extra bytes (for future use and alignment) */
+    fputc(0, outfh);
+    fputc(0, outfh);
+    /* For each codeword length: */
+    for (i = 1; i <= hc->maxbits; ++i) {
+        uint32 val;
+
+        /* Starting code, number of codes. */
+        val = hc->firstcode[i];
+        /* Canonically big-endian (like the data itself) */
+        SWAP_BE_32(&val);
+        fwrite(&val, 4, 1, outfh);
+        val = hc->numl[i];
+        SWAP_BE_32(&val);
+        fwrite(&val, 4, 1, outfh);
+
+        /* Symbols for each code (FIXME: Should compress these too) */
+        for (j = 0; j < hc->numl[i]; ++j) {
+            if (hc->type == HUFF_CODE_INT) {
+                int32 val = hc->syms[i][j].r.ival;
+                SWAP_BE_32(&val);
+                fwrite(&val, 4, 1, outfh);
+            }
+            else {
+                /* Write them all separated by newlines, so that
+                 * fgets() will read them for us. */
+                fprintf(outfh, "%s\n", hc->syms[i][j].r.sval);
+            }
+        }
+    }
+    return 0;
+}
+
+int
+huff_code_dump_codebits(FILE *dumpfh, uint32 nbits, uint32 codeword)
+{
+    uint32 i;
+
+    for (i = 0; i < nbits; ++i)
+        fputc((codeword & (1<<(nbits-i-1))) ? '1' : '0', dumpfh);
+    return 0;
+}
+
+int
+huff_code_dump(huff_code_t *hc, FILE *dumpfh)
+{
+    int i, j;
+
+    /* Print out all codewords. */
+    fprintf(dumpfh, "Maximum codeword length: %d\n", hc->maxbits);
+    fprintf(dumpfh, "Symbols are %s\n", (hc->type == HUFF_CODE_STR) ? "strings" : "ints");
+    fprintf(dumpfh, "Codewords:\n");
+    for (i = 1; i <= hc->maxbits; ++i) {
+        for (j = 0; j < hc->numl[i]; ++j) {
+            if (hc->type == HUFF_CODE_STR)
+                fprintf(dumpfh, "%-30s", hc->syms[i][j].r.sval);
+            else
+                fprintf(dumpfh, "%-30d", hc->syms[i][j].r.ival);
+            huff_code_dump_codebits(dumpfh, hc->syms[i][j].nbits,
+                                    hc->syms[i][j].codeword);
+            fprintf(dumpfh, "\n");
+        }
+    }
+    return 0;
+}
+
+huff_code_t *
+huff_code_retain(huff_code_t *hc)
+{
+    ++hc->refcount;
+    return hc;
+}
+
+int
+huff_code_free(huff_code_t *hc)
+{
+    int i;
+
+    if (hc == NULL)
+        return 0;
+    if (--hc->refcount > 0)
+        return hc->refcount;
+    for (i = 0; i <= hc->maxbits; ++i) {
+        int j;
+        for (j = 0; j < hc->numl[i]; ++j) {
+            if (hc->type == HUFF_CODE_STR)
+                ckd_free(hc->syms[i][j].r.sval);
+        }
+        ckd_free(hc->syms[i]);
+    }
+    ckd_free(hc->firstcode);
+    ckd_free(hc->numl);
+    ckd_free(hc->syms);
+    hash_table_free(hc->codewords);
+    ckd_free(hc);
+    return 0;
+}
+
+FILE *
+huff_code_attach(huff_code_t *hc, FILE *fh, char const *mode)
+{
+    FILE *oldfh = huff_code_detach(hc);
+
+    hc->fh = fh;
+    if (mode[0] == 'w')
+        hc->be = bit_encode_attach(hc->fh);
+    return oldfh;
+}
+
+FILE *
+huff_code_detach(huff_code_t *hc)
+{
+    FILE *oldfh = hc->fh;
+       
+    if (hc->be) {
+        bit_encode_flush(hc->be);
+        bit_encode_free(hc->be);
+        hc->be = NULL;
+    }
+    hc->fh = NULL;
+    return oldfh;
+}
+
+int
+huff_code_encode_int(huff_code_t *hc, int32 sym, uint32 *outcw)
+{
+    huff_codeword_t *cw;
+
+    if (hash_table_lookup_bkey(hc->codewords,
+                               (char const *)&sym,
+                               sizeof(sym),
+                               (void **)&cw) < 0)
+        return 0;
+    if (hc->be)
+        bit_encode_write_cw(hc->be, cw->codeword, cw->nbits);
+    if (outcw) *outcw = cw->codeword;
+    return cw->nbits;
+}
+
+int
+huff_code_encode_str(huff_code_t *hc, char const *sym, uint32 *outcw)
+{
+    huff_codeword_t *cw;
+
+    if (hash_table_lookup(hc->codewords,
+                          sym,
+                          (void **)&cw) < 0)
+        return 0;
+    if (hc->be)
+        bit_encode_write_cw(hc->be, cw->codeword, cw->nbits);
+    if (outcw) *outcw = cw->codeword;
+    return cw->nbits;
+}
+
+static huff_codeword_t *
+huff_code_decode_data(huff_code_t *hc, char const **inout_data,
+                      size_t *inout_data_len, int *inout_offset)
+{
+    char const *data = *inout_data;
+    char const *end = data + *inout_data_len;
+    int offset = *inout_offset;
+    uint32 cw;
+    int cwlen;
+    int byte;
+
+    if (data == end)
+        return NULL;
+    byte = *data++;
+    cw = !!(byte & (1 << (7-offset++)));
+    cwlen = 1;
+    /* printf("%.*x ", cwlen, cw); */
+    while (cwlen <= hc->maxbits && cw < hc->firstcode[cwlen]) {
+        ++cwlen;
+        cw <<= 1;
+        if (offset > 7) {
+            if (data == end)
+                return NULL;
+            byte = *data++;
+            offset = 0;
+        }
+        cw |= !!(byte & (1 << (7-offset++)));
+        /* printf("%.*x ", cwlen, cw); */
+    }
+    if (cwlen > hc->maxbits) /* FAIL: invalid data */
+        return NULL;
+
+    /* Put the last byte back if there are bits left over. */
+    if (offset < 8)
+        --data;
+    else
+        offset = 0;
+
+    /* printf("%.*x\n", cwlen, cw); */
+    *inout_data_len = end - data;
+    *inout_data = data;
+    *inout_offset = offset;
+    return hc->syms[cwlen] + (cw - hc->firstcode[cwlen]);
+}
+
+static huff_codeword_t *
+huff_code_decode_fh(huff_code_t *hc)
+{
+    uint32 cw;
+    int cwlen;
+    int byte;
+
+    if ((byte = fgetc(hc->fh)) == EOF)
+        return NULL;
+    cw = !!(byte & (1 << (7-hc->boff++)));
+    cwlen = 1;
+    /* printf("%.*x ", cwlen, cw); */
+    while (cwlen <= hc->maxbits && cw < hc->firstcode[cwlen]) {
+        ++cwlen;
+        cw <<= 1;
+        if (hc->boff > 7) {
+            if ((byte = fgetc(hc->fh)) == EOF)
+                return NULL;
+            hc->boff = 0;
+        }
+        cw |= !!(byte & (1 << (7-hc->boff++)));
+        /* printf("%.*x ", cwlen, cw); */
+    }
+    if (cwlen > hc->maxbits) /* FAIL: invalid data */
+        return NULL;
+
+    /* Put the last byte back if there are bits left over. */
+    if (hc->boff < 8)
+        ungetc(byte, hc->fh);
+    else
+        hc->boff = 0;
+
+    /* printf("%.*x\n", cwlen, cw); */
+    return hc->syms[cwlen] + (cw - hc->firstcode[cwlen]);
+}
+
+int
+huff_code_decode_int(huff_code_t *hc, int *outval,
+                     char const **inout_data,
+                     size_t *inout_data_len, int *inout_offset)
+{
+    huff_codeword_t *cw;
+
+    if (inout_data)
+        cw = huff_code_decode_data(hc, inout_data, inout_data_len, inout_offset);
+    else if (hc->fh)
+        cw = huff_code_decode_fh(hc);
+    else
+        return -1;
+
+    if (cw == NULL)
+        return -1;
+    if (outval)
+        *outval = cw->r.ival;
+
+    return 0;
+}
+
+char const *
+huff_code_decode_str(huff_code_t *hc,
+                     char const **inout_data,
+                     size_t *inout_data_len, int *inout_offset)
+{
+    huff_codeword_t *cw;
+
+    if (inout_data)
+        cw = huff_code_decode_data(hc, inout_data, inout_data_len, inout_offset);
+    else if (hc->fh)
+        cw = huff_code_decode_fh(hc);
+    else
+        return NULL;
+
+    if (cw == NULL)
+        return NULL;
+
+    return cw->r.sval;
+}
diff --git a/src/libsphinxbase/util/info.c b/src/libsphinxbase/util/info.c
new file mode 100644 (file)
index 0000000..943e390
--- /dev/null
@@ -0,0 +1,75 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/* HISTORY
+ * $Log$
+ * Revision 1.3  2005/06/22  03:06:46  arthchan2003
+ * Add  keyword.
+ * 
+ * Revision 1.2  2005/06/15 04:21:46  archan
+ * 1, Fixed doxygen-documentation, 2, Add  keyword such that changes will be logged into a file.
+ *
+ */
+
+#if !(defined(_WIN32) || defined(_WIN32_WCE))
+#include <unistd.h>
+#endif
+
+#include "sphinxbase/info.h"
+#include "sphinxbase/err.h"
+
+void
+print_appl_info(char *appl_name)
+{
+#if !(defined(_WIN32) || defined(_WIN32_WCE))
+    {
+        /* FIXME: Argh. */
+        char host[4096], path[16384];
+
+        gethostname(host, 1024);
+        host[1023] = '\0';
+
+        E_INFO("Host: '%s'\n", host);
+        if (getcwd(path, sizeof(path)) == NULL)
+            E_ERROR_SYSTEM("Failed to get current directory");
+        else
+            E_INFO("Directory: '%s'\n", path);
+    }
+#endif
+
+    E_INFO("%s Compiled on: %s, AT: %s\n\n", appl_name, __DATE__,
+           __TIME__);
+}
diff --git a/src/libsphinxbase/util/listelem_alloc.c b/src/libsphinxbase/util/listelem_alloc.c
new file mode 100644 (file)
index 0000000..354c476
--- /dev/null
@@ -0,0 +1,294 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/listelem_alloc.h"
+#include "sphinxbase/glist.h"
+
+/**
+ * Fast linked list allocator.
+ * 
+ * We keep a separate linked list for each element-size.  Element-size
+ * must be a multiple of pointer-size.
+ *
+ * Initially a block of empty elements is allocated, where the first
+ * machine word in each element points to the next available element.
+ * To allocate, we use this pointer to move the freelist to the next
+ * element, then return the current element.
+ *
+ * The last element in the list starts with a NULL pointer, which is
+ * used as a signal to allocate a new block of elements.
+ *
+ * In order to be able to actually release the memory allocated, we
+ * have to add a linked list of block pointers.  This shouldn't create
+ * much overhead since we never access it except when freeing the
+ * allocator.
+ */
+struct listelem_alloc_s {
+    char **freelist;            /**< ptr to first element in freelist */
+    glist_t blocks;             /**< Linked list of blocks allocated. */
+    glist_t blocksize;          /**< Number of elements in each block */
+    size_t elemsize;            /**< Number of (char *) in element */
+    size_t blk_alloc;           /**< Number of alloc operations before increasing blocksize */
+    size_t n_blocks;
+    size_t n_alloc;
+    size_t n_freed;
+};
+
+#define MIN_ALLOC      50      /**< Minimum number of elements to allocate in one block */
+#define BLKID_SHIFT     16      /**< Bit position of block number in element ID */
+#define BLKID_MASK ((1<<BLKID_SHIFT)-1)
+
+/**
+ * Allocate a new block of elements.
+ */
+static void listelem_add_block(listelem_alloc_t *list,
+                              char *caller_file, int caller_line);
+
+listelem_alloc_t *
+listelem_alloc_init(size_t elemsize)
+{
+    listelem_alloc_t *list;
+
+    if ((elemsize % sizeof(void *)) != 0) {
+        size_t rounded = (elemsize + sizeof(void *) - 1) & ~(sizeof(void *)-1);
+        E_WARN
+            ("List item size (%lu) not multiple of sizeof(void *), rounding to %lu\n",
+             (unsigned long)elemsize,
+             (unsigned long)rounded);
+        elemsize = rounded;
+    }
+    list = ckd_calloc(1, sizeof(*list));
+    list->freelist = NULL;
+    list->blocks = NULL;
+    list->elemsize = elemsize;
+    /* Intent of this is to increase block size once we allocate
+     * 256KiB (i.e. 1<<18). If somehow the element size is big enough
+     * to overflow that, just fail, people should use malloc anyway. */
+    list->blk_alloc = (1 << 18) / (MIN_ALLOC * elemsize);
+    if (list->blk_alloc <= 0) {
+        E_ERROR("Element size * block size exceeds 256k, use malloc instead.\n");
+        ckd_free(list);
+        return NULL;
+    }
+    list->n_alloc = 0;
+    list->n_freed = 0;
+
+    /* Allocate an initial block to minimize latency. */
+    listelem_add_block(list, __FILE__, __LINE__);
+    return list;
+}
+
+void
+listelem_alloc_free(listelem_alloc_t *list)
+{
+    gnode_t *gn;
+    if (list == NULL)
+       return;
+    for (gn = list->blocks; gn; gn = gnode_next(gn))
+       ckd_free(gnode_ptr(gn));
+    glist_free(list->blocks);
+    glist_free(list->blocksize);
+    ckd_free(list);
+}
+
+static void
+listelem_add_block(listelem_alloc_t *list, char *caller_file, int caller_line)
+{
+    char **cpp, *cp;
+    size_t j;
+    int32 blocksize;
+
+    blocksize = list->blocksize ? gnode_int32(list->blocksize) : MIN_ALLOC;
+    /* Check if block size should be increased (if many requests for this size) */
+    if (list->blk_alloc == 0) {
+        /* See above.  No sense in allocating blocks bigger than
+         * 256KiB (well, actually, there might be, but we'll worry
+         * about that later). */
+       blocksize <<= 1;
+        if (blocksize * list->elemsize > (1 << 18))
+            blocksize = (1 << 18) / list->elemsize;
+       list->blk_alloc = (1 << 18) / (blocksize * list->elemsize);
+    }
+
+    /* Allocate block */
+    cpp = list->freelist =
+       (char **) __ckd_calloc__(blocksize, list->elemsize,
+                                caller_file, caller_line);
+    list->blocks = glist_add_ptr(list->blocks, cpp);
+    list->blocksize = glist_add_int32(list->blocksize, blocksize);
+    cp = (char *) cpp;
+    /* Link up the blocks via their first machine word. */
+    for (j = blocksize - 1; j > 0; --j) {
+       cp += list->elemsize;
+       *cpp = cp;
+       cpp = (char **) cp;
+    }
+    /* Make sure the last element's forward pointer is NULL */
+    *cpp = NULL;
+    --list->blk_alloc;
+    ++list->n_blocks;
+}
+
+
+void *
+__listelem_malloc__(listelem_alloc_t *list, char *caller_file, int caller_line)
+{
+    char **ptr;
+
+    /* Allocate a new block if list empty */
+    if (list->freelist == NULL)
+       listelem_add_block(list, caller_file, caller_line);
+
+    /* Unlink and return first element in freelist */
+    ptr = list->freelist;
+    list->freelist = (char **) (*(list->freelist));
+    (list->n_alloc)++;
+
+    return (void *)ptr;
+}
+
+void *
+__listelem_malloc_id__(listelem_alloc_t *list, char *caller_file,
+                       int caller_line, int32 *out_id)
+{
+    char **ptr;
+
+    /* Allocate a new block if list empty */
+    if (list->freelist == NULL)
+       listelem_add_block(list, caller_file, caller_line);
+
+    /* Unlink and return first element in freelist */
+    ptr = list->freelist;
+    list->freelist = (char **) (*(list->freelist));
+    (list->n_alloc)++;
+
+    if (out_id) {
+        int32 blksize, blkidx, ptridx;
+        gnode_t *gn, *gn2;
+        char **block;
+
+        gn2 = list->blocksize;
+        block = NULL;
+        blkidx = 0;
+        for (gn = list->blocks; gn; gn = gnode_next(gn)) {
+            block = gnode_ptr(gn);
+            blksize = gnode_int32(gn2) * list->elemsize / sizeof(*block);
+            if (ptr >= block && ptr < block + blksize)
+                break;
+            gn2 = gnode_next(gn2);
+            ++blkidx;
+        }
+        if (gn == NULL) {
+            E_ERROR("Failed to find block index for pointer %p!\n", ptr);
+        }
+        ptridx = (ptr - block) / (list->elemsize / sizeof(*block));
+        E_DEBUG(4,("ptr %p block %p blkidx %d ptridx %d\n",
+                   ptr, block, list->n_blocks - blkidx - 1, ptridx));
+        *out_id = ((list->n_blocks - blkidx - 1) << BLKID_SHIFT) | ptridx;
+    }
+
+    return ptr;
+}
+
+void *
+listelem_get_item(listelem_alloc_t *list, int32 id)
+{
+    int32 blkidx, ptridx, i;
+    gnode_t *gn;
+
+    blkidx = (id >> BLKID_SHIFT) & BLKID_MASK;
+    ptridx = id & BLKID_MASK;
+
+    i = 0;
+    blkidx = list->n_blocks - blkidx;
+    for (gn = list->blocks; gn; gn = gnode_next(gn)) {
+        if (++i == blkidx)
+            break;
+    }
+    if (gn == NULL) {
+        E_ERROR("Failed to find block index %d\n", blkidx);
+        return NULL;
+    }
+
+    return (void *)((char **)gnode_ptr(gn)
+                    + ptridx * (list->elemsize / sizeof(void *)));
+}
+
+void
+__listelem_free__(listelem_alloc_t *list, void *elem,
+                  char *caller_file, int caller_line)
+{
+    char **cpp;
+
+    /*
+     * Insert freed item at head of list.
+     */
+    cpp = (char **) elem;
+    *cpp = (char *) list->freelist;
+    list->freelist = cpp;
+    (list->n_freed)++;
+}
+
+
+void
+listelem_stats(listelem_alloc_t *list)
+{
+    gnode_t *gn, *gn2;
+    char **cpp;
+    size_t n;
+
+    E_INFO("Linklist stats:\n");
+    for (n = 0, cpp = list->freelist; cpp;
+         cpp = (char **) (*cpp), n++);
+    E_INFO
+        ("elemsize %lu, #alloc %lu, #freed %lu, #freelist %lu\n",
+         (unsigned long)list->elemsize,
+         (unsigned long)list->n_alloc,
+         (unsigned long)list->n_freed,
+         (unsigned long)n);
+    E_INFO("Allocated blocks:\n");
+    gn2 = list->blocksize;
+    for (gn = list->blocks; gn; gn = gnode_next(gn)) {
+       E_INFO("%p (%d * %d bytes)\n", gnode_ptr(gn), gnode_int32(gn2), list->elemsize);
+        gn2 = gnode_next(gn2);
+    }
+}
diff --git a/src/libsphinxbase/util/logmath.c b/src/libsphinxbase/util/logmath.c
new file mode 100644 (file)
index 0000000..afa4d4a
--- /dev/null
@@ -0,0 +1,483 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+
+#include "sphinxbase/logmath.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/mmio.h"
+#include "sphinxbase/bio.h"
+#include "sphinxbase/strfuncs.h"
+
+struct logmath_s {
+    logadd_t t;
+    int refcount;
+    mmio_file_t *filemap;
+    float64 base;
+    float64 log_of_base;
+    float64 log10_of_base;
+    float64 inv_log_of_base;
+    float64 inv_log10_of_base;
+    int32 zero;
+};
+
+logmath_t *
+logmath_init(float64 base, int shift, int use_table)
+{
+    logmath_t *lmath;
+    uint32 maxyx, i;
+    float64 byx;
+    int width;
+
+    /* Check that the base is correct. */
+    if (base <= 1.0) {
+        E_ERROR("Base must be greater than 1.0\n");
+        return NULL;
+    }
+    
+    /* Set up various necessary constants. */
+    lmath = ckd_calloc(1, sizeof(*lmath));
+    lmath->refcount = 1;
+    lmath->base = base;
+    lmath->log_of_base = log(base);
+    lmath->log10_of_base = log10(base);
+    lmath->inv_log_of_base = 1.0/lmath->log_of_base;
+    lmath->inv_log10_of_base = 1.0/lmath->log10_of_base;
+    lmath->t.shift = shift;
+    /* Shift this sufficiently that overflows can be avoided. */
+    lmath->zero = MAX_NEG_INT32 >> (shift + 2);
+
+    if (!use_table)
+        return lmath;
+
+    /* Create a logadd table with the appropriate width */
+    maxyx = (uint32) (log(2.0) / log(base) + 0.5) >> shift;
+    /* Poor man's log2 */
+    if (maxyx < 256) width = 1;
+    else if (maxyx < 65536) width = 2;
+    else width = 4;
+
+    lmath->t.width = width;
+    /* Figure out size of add table required. */
+    byx = 1.0; /* Maximum possible base^{y-x} value - note that this implies that y-x == 0 */
+    for (i = 0;; ++i) {
+        float64 lobyx = log(1.0 + byx) * lmath->inv_log_of_base; /* log_{base}(1 + base^{y-x}); */
+        int32 k = (int32) (lobyx + 0.5 * (1<<shift)) >> shift; /* Round to shift */
+
+        /* base^{y-x} has reached the smallest representable value. */
+        if (k <= 0)
+            break;
+
+        /* This table is indexed by -(y-x), so we multiply byx by
+         * base^{-1} here which is equivalent to subtracting one from
+         * (y-x). */
+        byx /= base;
+    }
+    i >>= shift;
+
+    /* Never produce a table smaller than 256 entries. */
+    if (i < 255) i = 255;
+
+    lmath->t.table = ckd_calloc(i+1, width);
+    lmath->t.table_size = i + 1;
+    /* Create the add table (see above). */
+    byx = 1.0;
+    for (i = 0;; ++i) {
+        float64 lobyx = log(1.0 + byx) * lmath->inv_log_of_base;
+        int32 k = (int32) (lobyx + 0.5 * (1<<shift)) >> shift; /* Round to shift */
+        uint32 prev = 0;
+
+        /* Check any previous value - if there is a shift, we want to
+         * only store the highest one. */
+        switch (width) {
+        case 1:
+            prev = ((uint8 *)lmath->t.table)[i >> shift];
+            break;
+        case 2:
+            prev = ((uint16 *)lmath->t.table)[i >> shift];
+            break;
+        case 4:
+            prev = ((uint32 *)lmath->t.table)[i >> shift];
+            break;
+        }
+        if (prev == 0) {
+            switch (width) {
+            case 1:
+                ((uint8 *)lmath->t.table)[i >> shift] = (uint8) k;
+                break;
+            case 2:
+                ((uint16 *)lmath->t.table)[i >> shift] = (uint16) k;
+                break;
+            case 4:
+                ((uint32 *)lmath->t.table)[i >> shift] = (uint32) k;
+                break;
+            }
+        }
+        if (k <= 0)
+            break;
+
+        /* Decay base^{y-x} exponentially according to base. */
+        byx /= base;
+    }
+
+    return lmath;
+}
+
+logmath_t *
+logmath_read(const char *file_name)
+{
+    logmath_t *lmath;
+    char **argname, **argval;
+    int32 byteswap, i;
+    int chksum_present, do_mmap;
+    uint32 chksum;
+    long pos;
+    FILE *fp;
+
+    E_INFO("Reading log table file '%s'\n", file_name);
+    if ((fp = fopen(file_name, "rb")) == NULL) {
+        E_ERROR("Failed to open log table file '%s' for reading: %s\n", file_name, strerror(errno));
+        return NULL;
+    }
+
+    /* Read header, including argument-value info and 32-bit byteorder magic */
+    if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0) {
+        E_ERROR("bio_readhdr(%s) failed\n", file_name);
+        fclose(fp);
+        return NULL;
+    }
+
+    lmath = ckd_calloc(1, sizeof(*lmath));
+    /* Default values. */
+    lmath->t.shift = 0;
+    lmath->t.width = 2;
+    lmath->base = 1.0001;
+
+    /* Parse argument-value list */
+    chksum_present = 0;
+    for (i = 0; argname[i]; i++) {
+        if (strcmp(argname[i], "version") == 0) {
+        }
+        else if (strcmp(argname[i], "chksum0") == 0) {
+            if (strcmp(argval[i], "yes") == 0)
+                chksum_present = 1;
+        }
+        else if (strcmp(argname[i], "width") == 0) {
+            lmath->t.width = atoi(argval[i]);
+        }
+        else if (strcmp(argname[i], "shift") == 0) {
+            lmath->t.shift = atoi(argval[i]);
+        }
+        else if (strcmp(argname[i], "logbase") == 0) {
+            lmath->base = atof_c(argval[i]);
+        }
+    }
+    bio_hdrarg_free(argname, argval);
+    chksum = 0;
+
+    /* Set up various necessary constants. */
+    lmath->log_of_base = log(lmath->base);
+    lmath->log10_of_base = log10(lmath->base);
+    lmath->inv_log_of_base = 1.0/lmath->log_of_base;
+    lmath->inv_log10_of_base = 1.0/lmath->log10_of_base;
+    /* Shift this sufficiently that overflows can be avoided. */
+    lmath->zero = MAX_NEG_INT32 >> (lmath->t.shift + 2);
+
+    /* #Values to follow */
+    if (bio_fread(&lmath->t.table_size, sizeof(int32), 1, fp, byteswap, &chksum) != 1) {
+        E_ERROR("fread(%s) (total #values) failed\n", file_name);
+        goto error_out;
+    }
+
+    /* Check alignment constraints for memory mapping */
+    do_mmap = 1;
+    pos = ftell(fp);
+    if (pos & ((long)lmath->t.width - 1)) {
+        E_WARN("%s: Data start %ld is not aligned on %d-byte boundary, will not memory map\n",
+                  file_name, pos, lmath->t.width);
+        do_mmap = 0;
+    }
+    /* Check byte order for memory mapping */
+    if (byteswap) {
+        E_WARN("%s: Data is wrong-endian, will not memory map\n", file_name);
+        do_mmap = 0;
+    }
+
+    if (do_mmap) {
+        lmath->filemap = mmio_file_read(file_name);
+        lmath->t.table = (char *)mmio_file_ptr(lmath->filemap) + pos;
+    }
+    else {
+        lmath->t.table = ckd_calloc(lmath->t.table_size, lmath->t.width);
+        if (bio_fread(lmath->t.table, lmath->t.width, lmath->t.table_size,
+                      fp, byteswap, &chksum) != lmath->t.table_size) {
+            E_ERROR("fread(%s) (%d x %d bytes) failed\n",
+                    file_name, lmath->t.table_size, lmath->t.width);
+            goto error_out;
+        }
+        if (chksum_present)
+            bio_verify_chksum(fp, byteswap, chksum);
+
+        if (fread(&i, 1, 1, fp) == 1) {
+            E_ERROR("%s: More data than expected\n", file_name);
+            goto error_out;
+        }
+    }
+    fclose(fp);
+
+    return lmath;
+error_out:
+    logmath_free(lmath);
+    return NULL;
+}
+
+int32
+logmath_write(logmath_t *lmath, const char *file_name)
+{
+    FILE *fp;
+    long pos;
+    uint32 chksum;
+
+    if (lmath->t.table == NULL) {
+        E_ERROR("No log table to write!\n");
+        return -1;
+    }
+
+    E_INFO("Writing log table file '%s'\n", file_name);
+    if ((fp = fopen(file_name, "wb")) == NULL) {
+        E_ERROR("Failed to open logtable file '%s' for writing: %s\n", file_name, strerror(errno));
+        return -1;
+    }
+
+    /* For whatever reason, we have to do this manually at the
+     * moment. */
+    fprintf(fp, "s3\nversion 1.0\nchksum0 yes\n");
+    fprintf(fp, "width %d\n", lmath->t.width);
+    fprintf(fp, "shift %d\n", lmath->t.shift);
+    fprintf(fp, "logbase %f\n", lmath->base);
+    /* Pad it out to ensure alignment. */
+    pos = ftell(fp) + strlen("endhdr\n");
+    if (pos & ((long)lmath->t.width - 1)) {
+        size_t align = lmath->t.width - (pos & ((long)lmath->t.width - 1));
+        assert(lmath->t.width <= 8);
+        fwrite("        " /* 8 spaces */, 1, align, fp);
+    }
+    fprintf(fp, "endhdr\n");
+
+    /* Now write the binary data. */
+    chksum = (uint32)BYTE_ORDER_MAGIC;
+    fwrite(&chksum, sizeof(uint32), 1, fp);
+    chksum = 0;
+    /* #Values to follow */
+    if (bio_fwrite(&lmath->t.table_size, sizeof(uint32),
+                   1, fp, 0, &chksum) != 1) {
+        E_ERROR("fwrite(%s) (total #values) failed\n", file_name);
+        goto error_out;
+    }
+
+    if (bio_fwrite(lmath->t.table, lmath->t.width, lmath->t.table_size,
+                   fp, 0, &chksum) != lmath->t.table_size) {
+        E_ERROR("fwrite(%s) (%d x %d bytes) failed\n",
+                file_name, lmath->t.table_size, lmath->t.width);
+        goto error_out;
+    }
+    if (bio_fwrite(&chksum, sizeof(uint32), 1, fp, 0, NULL) != 1) {
+        E_ERROR("fwrite(%s) checksum failed\n", file_name);
+        goto error_out;
+    }
+
+    fclose(fp);
+    return 0;
+
+error_out:
+    fclose(fp);
+    return -1;
+}
+
+logmath_t *
+logmath_retain(logmath_t *lmath)
+{
+    ++lmath->refcount;
+    return lmath;
+}
+
+int
+logmath_free(logmath_t *lmath)
+{
+    if (lmath == NULL)
+        return 0;
+    if (--lmath->refcount > 0)
+        return lmath->refcount;
+    if (lmath->filemap)
+        mmio_file_unmap(lmath->filemap);
+    else
+        ckd_free(lmath->t.table);
+    ckd_free(lmath);
+    return 0;
+}
+
+int32
+logmath_get_table_shape(logmath_t *lmath, uint32 *out_size,
+                        uint32 *out_width, uint32 *out_shift)
+{
+    if (out_size) *out_size = lmath->t.table_size;
+    if (out_width) *out_width = lmath->t.width;
+    if (out_shift) *out_shift = lmath->t.shift;
+
+    return lmath->t.table_size * lmath->t.width;
+}
+
+float64
+logmath_get_base(logmath_t *lmath)
+{
+    return lmath->base;
+}
+
+int
+logmath_get_zero(logmath_t *lmath)
+{
+    return lmath->zero;
+}
+
+int
+logmath_get_width(logmath_t *lmath)
+{
+    return lmath->t.width;
+}
+
+int
+logmath_get_shift(logmath_t *lmath)
+{
+    return lmath->t.shift;
+}
+
+int
+logmath_add(logmath_t *lmath, int logb_x, int logb_y)
+{
+    logadd_t *t = LOGMATH_TABLE(lmath);
+    int d, r;
+
+    /* handle 0 + x = x case. */
+    if (logb_x <= lmath->zero)
+        return logb_y;
+    if (logb_y <= lmath->zero)
+        return logb_x;
+
+    if (t->table == NULL)
+        return logmath_add_exact(lmath, logb_x, logb_y);
+
+    /* d must be positive, obviously. */
+    if (logb_x > logb_y) {
+        d = (logb_x - logb_y);
+        r = logb_x;
+    }
+    else {
+        d = (logb_y - logb_x);
+        r = logb_y;
+    }
+
+    if (d < 0) {
+        /* Some kind of overflow has occurred, fail gracefully. */
+        return r;
+    }
+    if ((size_t)d >= t->table_size) {
+        /* If this happens, it's not actually an error, because the
+         * last entry in the logadd table is guaranteed to be zero.
+         * Therefore we just return the larger of the two values. */
+        return r;
+    }
+
+    switch (t->width) {
+    case 1:
+        return r + (((uint8 *)t->table)[d]);
+    case 2:
+        return r + (((uint16 *)t->table)[d]);
+    case 4:
+        return r + (((uint32 *)t->table)[d]);
+    }
+    return r;
+}
+
+int
+logmath_add_exact(logmath_t *lmath, int logb_p, int logb_q)
+{
+    return logmath_log(lmath,
+                       logmath_exp(lmath, logb_p)
+                       + logmath_exp(lmath, logb_q));
+}
+
+int
+logmath_log(logmath_t *lmath, float64 p)
+{
+    if (p <= 0) {
+        return lmath->zero;
+    }
+    return (int)(log(p) * lmath->inv_log_of_base) >> lmath->t.shift;
+}
+
+float64
+logmath_exp(logmath_t *lmath, int logb_p)
+{
+    return pow(lmath->base, (float64)(logb_p << lmath->t.shift));
+}
+
+int
+logmath_ln_to_log(logmath_t *lmath, float64 log_p)
+{
+    return (int)(log_p * lmath->inv_log_of_base) >> lmath->t.shift;
+}
+
+float64
+logmath_log_to_ln(logmath_t *lmath, int logb_p)
+{
+    return (float64)(logb_p << lmath->t.shift) * lmath->log_of_base;
+}
+
+int
+logmath_log10_to_log(logmath_t *lmath, float64 log_p)
+{
+    return (int)(log_p * lmath->inv_log10_of_base) >> lmath->t.shift;
+}
+
+float64
+logmath_log_to_log10(logmath_t *lmath, int logb_p)
+{
+    return (float64)(logb_p << lmath->t.shift) * lmath->log10_of_base;
+}
diff --git a/src/libsphinxbase/util/matrix.c b/src/libsphinxbase/util/matrix.c
new file mode 100644 (file)
index 0000000..703a7b7
--- /dev/null
@@ -0,0 +1,336 @@
+/* -*- c-basic-offset: 4 -*- */
+/* ====================================================================
+ * Copyright (c) 1997-2006 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "sphinxbase/clapack_lite.h"
+#include "sphinxbase/matrix.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+
+void
+norm_3d(float32 ***arr,
+       uint32 d1,
+       uint32 d2,
+       uint32 d3)
+{
+    uint32 i, j, k;
+    float64 s;
+
+    for (i = 0; i < d1; i++) {
+       for (j = 0; j < d2; j++) {
+
+           /* compute sum (i, j) as over all k */
+           for (k = 0, s = 0; k < d3; k++) {
+               s += arr[i][j][k];
+           }
+
+           /* do 1 floating point divide */
+           s = 1.0 / s;
+
+           /* divide all k by sum over k */
+           for (k = 0; k < d3; k++) {
+               arr[i][j][k] *= s;
+           }
+       }
+    }
+}
+\f
+void
+accum_3d(float32 ***out,
+        float32 ***in,
+        uint32 d1,
+        uint32 d2,
+        uint32 d3)
+{
+    uint32 i, j, k;
+
+    for (i = 0; i < d1; i++) {
+       for (j = 0; j < d2; j++) {
+           for (k = 0; k < d3; k++) {
+               out[i][j][k] += in[i][j][k];
+           }
+       }
+    }
+}
+
+void
+floor_nz_3d(float32 ***m,
+           uint32 d1,
+           uint32 d2,
+           uint32 d3,
+           float32 floor)
+{
+    uint32 i, j, k;
+
+    for (i = 0; i < d1; i++) {
+       for (j = 0; j < d2; j++) {
+           for (k = 0; k < d3; k++) {
+               if ((m[i][j][k] != 0) && (m[i][j][k] < floor))
+                   m[i][j][k] = floor;
+           }
+       }
+    }
+}
+void
+floor_nz_1d(float32 *v,
+           uint32 d1,
+           float32 floor)
+{
+    uint32 i;
+
+    for (i = 0; i < d1; i++) {
+       if ((v[i] != 0) && (v[i] < floor))
+           v[i] = floor;
+    }
+}
+
+void
+band_nz_1d(float32 *v,
+          uint32 d1,
+          float32 band)
+{
+    uint32 i;
+
+    for (i = 0; i < d1; i++) {
+       if (v[i] != 0) {
+           if ((v[i] > 0) && (v[i] < band)) {
+               v[i] = band;
+           }
+           else if ((v[i] < 0) && (v[i] > -band)) {
+               v[i] = -band;
+           }
+       }
+    }
+}
+
+#ifndef WITH_LAPACK
+float64
+determinant(float32 **a, int32 n)
+{
+    E_FATAL("No LAPACK library available, cannot compute determinant (FIXME)\n");
+    return 0.0;
+}
+int32
+invert(float32 **ainv, float32 **a, int32 n)
+{
+    E_FATAL("No LAPACK library available, cannot compute matrix inverse (FIXME)\n");
+    return 0;
+}
+int32
+solve(float32 **a, float32 *b, float32 *out_x, int32   n)
+{
+    E_FATAL("No LAPACK library available, cannot solve linear equations (FIXME)\n");
+    return 0;
+}
+
+void
+matrixmultiply(float32 ** c, float32 ** a, float32 ** b, int32 n)
+{
+    int32 i, j, k;
+
+    memset(c[0], 0, n*n*sizeof(float32));
+    for (i = 0; i < n; ++i) {
+       for (j = 0; j < n; ++j) {
+           for (k = 0; k < n; ++k) {
+               c[i][k] += a[i][j] * b[j][k];
+           }
+       }
+    }
+}
+#else /* WITH_LAPACK */
+/* Find determinant through LU decomposition. */
+float64
+determinant(float32 ** a, int32 n)
+{
+    float32 **tmp_a;
+    float64 det;
+    char uplo;
+    int32 info, i;
+
+    /* a is assumed to be symmetric, so we don't need to switch the
+     * ordering of the data.  But we do need to copy it since it is
+     * overwritten by LAPACK. */
+    tmp_a = (float32 **)ckd_calloc_2d(n, n, sizeof(float32));
+    memcpy(tmp_a[0], a[0], n*n*sizeof(float32));
+
+    uplo = 'L';
+    spotrf_(&uplo, &n, tmp_a[0], &n, &info);
+    det = tmp_a[0][0];
+    /* det = prod(diag(l))^2 */
+    for (i = 1; i < n; ++i)
+       det *= tmp_a[i][i];
+    ckd_free_2d((void **)tmp_a);
+    if (info > 0)
+       return -1.0; /* Generic "not positive-definite" answer */
+    else
+       return det * det;
+}
+
+int32
+solve(float32 **a, /*Input : an n*n matrix A */
+      float32 *b,  /*Input : a n dimesion vector b */
+      float32 *out_x,  /*Output : a n dimesion vector x */
+      int32   n)
+{
+    char uplo;
+    float32 **tmp_a;
+    int32 info, nrhs;
+
+    /* a is assumed to be symmetric, so we don't need to switch the
+     * ordering of the data.  But we do need to copy it since it is
+     * overwritten by LAPACK. */
+    tmp_a = (float32 **)ckd_calloc_2d(n, n, sizeof(float32));
+    memcpy(tmp_a[0], a[0], n*n*sizeof(float32));
+    memcpy(out_x, b, n*sizeof(float32));
+    uplo = 'L';
+    nrhs = 1;
+    sposv_(&uplo, &n, &nrhs, tmp_a[0], &n, out_x, &n, &info);
+    ckd_free_2d((void **)tmp_a);
+
+    if (info != 0)
+       return -1;
+    else
+       return info;
+}
+
+/* Find inverse by solving AX=I. */
+int32
+invert(float32 ** ainv, float32 ** a, int32 n)
+{
+    char uplo;
+    float32 **tmp_a;
+    int32 info, nrhs, i;
+
+    /* Construct an identity matrix. */
+    memset(ainv[0], 0, sizeof(float32) * n * n);
+    for (i = 0; i < n; i++)
+        ainv[i][i] = 1.0;
+    /* a is assumed to be symmetric, so we don't need to switch the
+     * ordering of the data.  But we do need to copy it since it is
+     * overwritten by LAPACK. */
+    tmp_a = (float32 **)ckd_calloc_2d(n, n, sizeof(float32));
+    memcpy(tmp_a[0], a[0], n*n*sizeof(float32));
+    uplo = 'L';
+    nrhs = n;
+    sposv_(&uplo, &n, &nrhs, tmp_a[0], &n, ainv[0], &n, &info);
+    ckd_free_2d((void **)tmp_a);
+
+    if (info != 0)
+       return -1;
+    else
+       return info;
+}
+
+void
+matrixmultiply(float32 ** c, float32 ** a, float32 ** b, int32 n)
+{
+    char side, uplo;
+    float32 alpha;
+
+    side = 'L';
+    uplo = 'L';
+    alpha = 1.0;
+    ssymm_(&side, &uplo, &n, &n, &alpha, a[0], &n, b[0], &n, &alpha, c[0], &n);
+}
+
+#endif /* WITH_LAPACK */
+
+void
+outerproduct(float32 ** a, float32 * x, float32 * y, int32 len)
+{
+    int32 i, j;
+
+    for (i = 0; i < len; ++i) {
+        a[i][i] = x[i] * y[i];
+        for (j = i + 1; j < len; ++j) {
+            a[i][j] = x[i] * y[j];
+            a[j][i] = x[j] * y[i];
+        }
+    }
+}
+
+void
+scalarmultiply(float32 ** a, float32 x, int32 n)
+{
+    int32 i, j;
+
+    for (i = 0; i < n; ++i) {
+       a[i][i] *= x;
+        for (j = i+1; j < n; ++j) {
+            a[i][j] *= x;
+            a[j][i] *= x;
+       }
+    }
+}
+
+void
+matrixadd(float32 ** a, float32 ** b, int32 n)
+{
+    int32 i, j;
+
+    for (i = 0; i < n; ++i)
+        for (j = 0; j < n; ++j)
+            a[i][j] += b[i][j];
+}
+
+
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log$
+ * Revision 1.4  2004/07/21  18:05:40  egouvea
+ * Changed the license terms to make it the same as sphinx2 and sphinx3.
+ * 
+ * Revision 1.3  2001/04/05 20:02:30  awb
+ * *** empty log message ***
+ *
+ * Revision 1.2  2000/09/29 22:35:13  awb
+ * *** empty log message ***
+ *
+ * Revision 1.1  2000/09/24 21:38:31  awb
+ * *** empty log message ***
+ *
+ * Revision 1.1  97/07/16  11:36:22  eht
+ * Initial revision
+ * 
+ *
+ */
diff --git a/src/libsphinxbase/util/mmio.c b/src/libsphinxbase/util/mmio.c
new file mode 100644 (file)
index 0000000..443208f
--- /dev/null
@@ -0,0 +1,254 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2005 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*********************************************************************
+ *
+ * File: mmio.c
+ * 
+ * Description: mmap() wrappers for Unix/Windows
+ * 
+ * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
+ * 
+ *********************************************************************/
+
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef GNUWINCE
+# include <sys/wcebase.h>
+# include <sys/wcetypes.h>
+# include <sys/wcememory.h>
+# include <sys/wcefile.h>
+#elif defined(__SYMBIAN32__) /* SYMBIAN32 must be before WIN32 since Symbian SDK defines WIN32 as well */
+# include <unistd.h>
+# include <fcntl.h>
+# include <sys/stat.h>
+# include <sys/mman.h>
+#elif defined(_WIN32)
+# include <windows.h>
+#else
+# include <unistd.h>
+# include <fcntl.h>
+# include <sys/stat.h>
+# include <sys/file.h>
+# include <sys/mman.h>
+#endif
+
+#include "sphinxbase/prim_type.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/mmio.h"
+#include "sphinxbase/ckd_alloc.h"
+
+/** Silvio Moioli: slightly updated */
+#if defined(_WIN32_WCE) || defined(GNUWINCE)
+struct mmio_file_s {
+       int dummy;
+};
+
+mmio_file_t *
+mmio_file_read(const char *filename)
+{
+    HANDLE ffm, fd;
+    WCHAR *wfilename;
+    void *rv;
+    int len;
+
+    len = mbstowcs(NULL, filename, 0) + 1;
+    wfilename = malloc(len * sizeof(WCHAR));
+    mbstowcs(wfilename, filename, len);
+
+    if ((ffm =
+         CreateFileForMappingW(wfilename, GENERIC_READ, FILE_SHARE_READ,
+                               NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
+                               NULL)) == INVALID_HANDLE_VALUE) {
+        E_ERROR("Failed to CreateFileForMapping(%s): %08x\n", filename,
+                GetLastError());
+        return NULL;
+    }
+    if ((fd =
+         CreateFileMappingW(ffm, NULL, PAGE_READONLY, 0, 0, NULL)) == NULL) {
+        E_ERROR("Failed to CreateFileMapping: %08x\n", GetLastError());
+        CloseHandle(ffm);
+        return NULL;
+    }
+    rv = MapViewOfFile(fd, FILE_MAP_READ, 0, 0, 0);
+    free(wfilename);
+    CloseHandle(ffm);
+    CloseHandle(fd);
+
+    return (mmio_file_t *) rv;
+}
+
+void
+mmio_file_unmap(mmio_file_t *mf)
+{
+    if (!UnmapViewOfFile((void *)mf)) {
+        E_ERROR("Failed to UnmapViewOfFile: %08x\n", GetLastError());
+    }
+}
+
+void *
+mmio_file_ptr(mmio_file_t *mf)
+{
+    return (void *)mf;
+}
+
+#elif defined(WIN32) /* !WINCE */
+struct mmio_file_s {
+       int dummy;
+};
+
+mmio_file_t *
+mmio_file_read(const char *filename)
+{
+    HANDLE ffm, fd;
+    void *rv;
+
+    if ((ffm = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ,
+                         NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
+                         NULL)) == INVALID_HANDLE_VALUE) {
+        E_ERROR("Failed to CreateFile(%s): %08x\n",
+                filename, GetLastError());
+        return NULL;
+    }
+    if ((fd = CreateFileMapping(ffm, NULL,
+                                PAGE_READONLY, 0, 0, NULL)) == NULL) {
+        E_ERROR("Failed to CreateFileMapping: %08x\n", GetLastError());
+        CloseHandle(ffm);
+    }
+    rv = MapViewOfFile(fd, FILE_MAP_READ, 0, 0, 0);
+    CloseHandle(ffm);
+    CloseHandle(fd);
+
+    return (mmio_file_t *)rv;
+}
+
+void
+mmio_file_unmap(mmio_file_t *mf)
+{
+    if (!UnmapViewOfFile((void *)mf)) {
+        E_ERROR("Failed to UnmapViewOfFile: %08x\n", GetLastError());
+    }
+}
+
+void *
+mmio_file_ptr(mmio_file_t *mf)
+{
+    return (void *)mf;
+}
+
+#else /* !WIN32, !WINCE */
+#if defined(__ADSPBLACKFIN__) /* This is true for both uClinux and VisualDSP++,
+                                 but actually we need a better way to detect it. */
+struct mmio_file_s {
+    int dummy;
+};
+
+mmio_file_t *
+mmio_file_read(const char *filename)
+{
+       E_FATAL("mmio is not implemented on this platform!");
+    return NULL;
+}
+
+void
+mmio_file_unmap(mmio_file_t *mf)
+{
+       E_FATAL("mmio is not implemented on this platform!");
+}
+
+void *
+mmio_file_ptr(mmio_file_t *mf)
+{
+       E_FATAL("mmio is not implemented on this platform!");
+    return NULL;
+}
+#else /* !__ADSPBLACKFIN__ */
+struct mmio_file_s {
+    void *ptr;
+    size_t mapsize;
+};
+
+mmio_file_t *
+mmio_file_read(const char *filename)
+{
+    mmio_file_t *mf;
+    struct stat buf;
+    void *ptr;
+    int fd;
+    size_t pagesize;
+
+    if ((fd = open(filename, O_RDONLY)) == -1) {
+        E_ERROR_SYSTEM("Failed to open %s", filename);
+        return NULL;
+    }
+    if (fstat(fd, &buf) == -1) {
+        E_ERROR_SYSTEM("Failed to stat %s", filename);
+        return NULL;
+    }
+    ptr = mmap(NULL, buf.st_size, PROT_READ, MAP_SHARED, fd, 0);
+    if (ptr == (void *)-1) {
+        E_ERROR_SYSTEM("Failed to mmap %lld bytes", (unsigned long long)buf.st_size);
+        return NULL;
+    }
+    close(fd);
+    mf = ckd_calloc(1, sizeof(*mf));
+    mf->ptr = ptr;
+    /* Align map size to next page. */
+    pagesize = getpagesize();
+    mf->mapsize = (buf.st_size + pagesize - 1) / pagesize * pagesize;
+
+    return mf;
+}
+
+void
+mmio_file_unmap(mmio_file_t *mf)
+{
+    if (mf == NULL)
+        return;
+    if (munmap(mf->ptr, mf->mapsize) < 0) {
+        E_ERROR_SYSTEM("Failed to unmap %ld bytes at %p", mf->mapsize, mf->ptr);
+    }
+    ckd_free(mf);
+}
+
+void *
+mmio_file_ptr(mmio_file_t *mf)
+{
+    return mf->ptr;
+}
+#endif /* !__ADSPBLACKFIN__ */ 
+#endif /* !(WINCE || WIN32) */
diff --git a/src/libsphinxbase/util/pio.c b/src/libsphinxbase/util/pio.c
new file mode 100644 (file)
index 0000000..21bc3ed
--- /dev/null
@@ -0,0 +1,604 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <assert.h>
+
+#include "sphinxbase/pio.h"
+#include "sphinxbase/filename.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/strfuncs.h"
+#include "sphinxbase/ckd_alloc.h"
+
+#ifndef EXEEXT
+#define EXEEXT ""
+#endif
+
+enum {
+    COMP_NONE,
+    COMP_COMPRESS,
+    COMP_GZIP,
+    COMP_BZIP2
+};
+
+static void
+guess_comptype(char const *file, int32 *ispipe, int32 *isgz)
+{
+    int k;
+
+    k = strlen(file);
+    *ispipe = 0;
+    *isgz = COMP_NONE;
+    if ((k > 2)
+        && ((strcmp(file + k - 2, ".Z") == 0)
+            || (strcmp(file + k - 2, ".z") == 0))) {
+        *ispipe = 1;
+        *isgz = COMP_COMPRESS;
+    }
+    else if ((k > 3) && ((strcmp(file + k - 3, ".gz") == 0)
+                        || (strcmp(file + k - 3, ".GZ") == 0))) {
+        *ispipe = 1;
+        *isgz = COMP_GZIP;
+    }
+    else if ((k > 4) && ((strcmp(file + k - 4, ".bz2") == 0)
+                        || (strcmp(file + k - 4, ".BZ2") == 0))) {
+        *ispipe = 1;
+        *isgz = COMP_BZIP2;
+    }
+}
+
+FILE *
+fopen_comp(const char *file, const char *mode, int32 * ispipe)
+{
+    FILE *fp;
+
+#ifndef HAVE_POPEN
+    *ispipe = 0; /* No popen() on WinCE */
+#else /* HAVE_POPEN */
+    int32 isgz;
+    guess_comptype(file, ispipe, &isgz);
+#endif /* HAVE_POPEN */
+
+    if (*ispipe) {
+#ifndef HAVE_POPEN
+        /* Shouldn't get here, anyway */
+        E_FATAL("No popen() on WinCE\n");
+#else
+        if (strcmp(mode, "r") == 0) {
+            char *command;
+            switch (isgz) {
+            case COMP_GZIP:
+                command = string_join("gunzip" EXEEXT, " -c ", file, NULL);
+                break;
+            case COMP_COMPRESS:
+                command = string_join("zcat" EXEEXT, " ", file, NULL);
+                break;
+            case COMP_BZIP2:
+                command = string_join("bunzip2" EXEEXT, " -c ", file, NULL);
+                break;
+            default:
+                command = NULL; /* Make compiler happy. */
+                E_FATAL("Unknown  compression type %d\n", isgz);
+            }
+            if ((fp = popen(command, mode)) == NULL) {
+                E_ERROR_SYSTEM("popen (%s,%s) failed\n", command, mode);
+                ckd_free(command);
+                return NULL;
+            }
+            ckd_free(command);
+        }
+        else if (strcmp(mode, "w") == 0) {
+            char *command;
+            switch (isgz) {
+            case COMP_GZIP:
+                command = string_join("gzip" EXEEXT, " > ", file, NULL);
+                break;
+            case COMP_COMPRESS:
+                command = string_join("compress" EXEEXT, " -c > ", file, NULL);
+                break;
+            case COMP_BZIP2:
+                command = string_join("bzip2" EXEEXT, " > ", file, NULL);
+                break;
+            default:
+                command = NULL; /* Make compiler happy. */
+                E_FATAL("Unknown compression type %d\n", isgz);
+            }
+            if ((fp = popen(command, mode)) == NULL) {
+                E_ERROR_SYSTEM("popen (%s,%s) failed\n", command, mode);
+                ckd_free(command);
+                return NULL;
+            }
+            ckd_free(command);
+        }
+        else {
+            E_ERROR("fopen_comp not implemented for mode = %s\n", mode);
+            return NULL;
+        }
+#endif /* HAVE_POPEN */
+    }
+    else {
+        fp = fopen(file, mode);
+    }
+
+    return (fp);
+}
+
+
+void
+fclose_comp(FILE * fp, int32 ispipe)
+{
+    if (ispipe) {
+#ifdef HAVE_POPEN
+#if defined(_WIN32) && (!defined(__SYMBIAN32__))
+        _pclose(fp);
+#else
+        pclose(fp);
+#endif
+#endif
+    }
+    else
+        fclose(fp);
+}
+
+
+FILE *
+fopen_compchk(const char *file, int32 * ispipe)
+{
+#ifndef HAVE_POPEN
+    *ispipe = 0; /* No popen() on WinCE */
+    /* And therefore the rest of this function is useless. */
+    return (fopen_comp(file, "r", ispipe));
+#else /* HAVE_POPEN */
+    int32 isgz;
+    FILE *fh;
+
+    /* First just try to fopen_comp() it */
+    if ((fh = fopen_comp(file, "r", ispipe)) != NULL)
+        return fh;
+    else {
+        char *tmpfile;
+        int k;
+
+        /* File doesn't exist; try other compressed/uncompressed form, as appropriate */
+        guess_comptype(file, ispipe, &isgz);
+        k = strlen(file);
+        tmpfile = ckd_calloc(k+5, 1);
+        strcpy(tmpfile, file);
+        switch (isgz) {
+        case COMP_GZIP:
+            tmpfile[k - 3] = '\0';
+            break;
+        case COMP_BZIP2:
+            tmpfile[k - 4] = '\0';
+            break;
+        case COMP_COMPRESS:
+            tmpfile[k - 2] = '\0';
+            break;
+        case COMP_NONE:
+            strcpy(tmpfile + k, ".gz");
+            if ((fh = fopen_comp(tmpfile, "r", ispipe)) != NULL) {
+                E_WARN("Using %s instead of %s\n", tmpfile, file);
+                ckd_free(tmpfile);
+                return fh;
+            }
+            strcpy(tmpfile + k, ".bz2");
+            if ((fh = fopen_comp(tmpfile, "r", ispipe)) != NULL) {
+                E_WARN("Using %s instead of %s\n", tmpfile, file);
+                ckd_free(tmpfile);
+                return fh;
+            }
+            strcpy(tmpfile + k, ".Z");
+            if ((fh = fopen_comp(tmpfile, "r", ispipe)) != NULL) {
+                E_WARN("Using %s instead of %s\n", tmpfile, file);
+                ckd_free(tmpfile);
+                return fh;
+            }
+            ckd_free(tmpfile);
+            return NULL;
+        }
+        E_WARN("Using %s instead of %s\n", tmpfile, file);
+        fh = fopen_comp(tmpfile, "r", ispipe);
+        ckd_free(tmpfile);
+        return NULL;
+    }
+#endif /* HAVE_POPEN */
+}
+
+lineiter_t *
+lineiter_start(FILE *fh)
+{
+    lineiter_t *li;
+
+    li = ckd_calloc(1, sizeof(*li));
+    li->buf = ckd_malloc(128);
+    li->buf[0] = '\0';
+    li->bsiz = 128;
+    li->len = 0;
+    li->fh = fh;
+
+    return lineiter_next(li);
+}
+
+lineiter_t *
+lineiter_next(lineiter_t *li)
+{
+    /* Read a line and check for EOF. */
+    if (fgets(li->buf, li->bsiz, li->fh) == NULL) {
+        lineiter_free(li);
+        return NULL;
+    }
+    /* If we managed to read the whole thing, then we are done
+     * (this will be by far the most common result). */
+    li->len = strlen(li->buf);
+    if (li->len < li->bsiz - 1 || li->buf[li->len - 1] == '\n')
+        return li;
+
+    /* Otherwise we have to reallocate and keep going. */
+    while (1) {
+        li->bsiz *= 2;
+        li->buf = ckd_realloc(li->buf, li->bsiz);
+        /* If we get an EOF, we are obviously done. */
+        if (fgets(li->buf + li->len, li->bsiz - li->len, li->fh) == NULL) {
+            li->len += strlen(li->buf + li->len);
+            return li;
+        }
+        li->len += strlen(li->buf + li->len);
+        /* If we managed to read the whole thing, then we are done. */
+        if (li->len < li->bsiz - 1 || li->buf[li->len - 1] == '\n')
+            return li;
+    }
+
+    /* Shouldn't get here. */
+    return li;
+}
+
+void
+lineiter_free(lineiter_t *li)
+{
+    if (li == NULL)
+        return;
+    ckd_free(li->buf);
+    ckd_free(li);
+}
+
+char *
+fread_line(FILE *stream, size_t *out_len)
+{
+    char *output, *outptr;
+    char buf[128];
+
+    output = outptr = NULL;
+    while (fgets(buf, sizeof(buf), stream)) {
+        size_t len = strlen(buf);
+        /* Append this data to the buffer. */
+        if (output == NULL) {
+            output = ckd_malloc(len + 1);
+            outptr = output;
+        }
+        else {
+            size_t cur = outptr - output;
+            output = ckd_realloc(output, cur + len + 1);
+            outptr = output + cur;
+        }
+        memcpy(outptr, buf, len + 1);
+        outptr += len;
+        /* Stop on a short read or end of line. */
+        if (len < sizeof(buf)-1 || buf[len-1] == '\n')
+            break;
+    }
+    if (out_len) *out_len = outptr - output;
+    return output;
+}
+
+
+#define FREAD_RETRY_COUNT      60
+
+int32
+fread_retry(void *pointer, int32 size, int32 num_items, FILE * stream)
+{
+    char *data;
+    uint32 n_items_read;
+    uint32 n_items_rem;
+    uint32 n_retry_rem;
+    int32 loc;
+
+    n_retry_rem = FREAD_RETRY_COUNT;
+
+    data = pointer;
+    loc = 0;
+    n_items_rem = num_items;
+
+    do {
+        n_items_read = fread(&data[loc], size, n_items_rem, stream);
+
+        n_items_rem -= n_items_read;
+
+        if (n_items_rem > 0) {
+            /* an incomplete read occurred */
+
+            if (n_retry_rem == 0)
+                return -1;
+
+            if (n_retry_rem == FREAD_RETRY_COUNT) {
+                E_ERROR_SYSTEM("fread() failed; retrying...\n");
+            }
+
+            --n_retry_rem;
+
+            loc += n_items_read * size;
+#ifdef HAVE_UNISTD_H
+            sleep(1);
+#endif
+        }
+    } while (n_items_rem > 0);
+
+    return num_items;
+}
+
+
+/* Silvio Moioli: updated to use Unicode */
+#ifdef _WIN32_WCE /* No stat() on WinCE */
+int32
+stat_retry(const char *file, struct stat * statbuf)
+{
+    WIN32_FIND_DATAW file_data;
+    HANDLE *h;
+    wchar_t *wfile;
+    size_t len;
+
+    len = mbstowcs(NULL, file, 0) + 1;
+    wfile = ckd_calloc(len, sizeof(*wfile));
+    mbstowcs(wfile, file, len);
+    if ((h = FindFirstFileW(wfile, &file_data)) == INVALID_HANDLE_VALUE) {
+        ckd_free(wfile);
+        return -1;
+    }
+    ckd_free(wfile);
+    memset(statbuf, 0, sizeof(statbuf));
+    statbuf->st_mtime = file_data.ftLastWriteTime.dwLowDateTime;
+    statbuf->st_size = file_data.nFileSizeLow;
+    FindClose(h);
+
+    return 0;
+}
+
+
+int32
+stat_mtime(const char *file)
+{
+    struct stat statbuf;
+
+    if (stat_retry(file, &statbuf) != 0)
+        return -1;
+
+    return ((int32) statbuf.st_mtime);
+}
+#else
+#define STAT_RETRY_COUNT       10
+int32
+stat_retry(const char *file, struct stat * statbuf)
+{
+    int32 i;
+
+    
+    
+    for (i = 0; i < STAT_RETRY_COUNT; i++) {
+
+#ifndef HAVE_SYS_STAT_H
+               FILE *fp;
+
+               if ((fp=(FILE *)fopen(file, "r"))!= 0)
+               {
+                   fseek( fp, 0, SEEK_END);
+                   statbuf->st_size = ftell( fp );
+                   fclose(fp);
+                   return 0;
+               }
+       
+#else /* HAVE_SYS_STAT_H */
+        if (stat(file, statbuf) == 0)
+            return 0;
+#endif
+        if (i == 0) {
+            E_ERROR_SYSTEM("stat(%s) failed; retrying...\n", file);
+        }
+#ifdef HAVE_UNISTD_H
+        sleep(1);
+#endif
+    }
+
+    return -1;
+}
+
+int32
+stat_mtime(const char *file)
+{
+    struct stat statbuf;
+
+#ifdef HAVE_SYS_STAT_H
+    if (stat(file, &statbuf) != 0)
+        return -1;
+#else /* HAVE_SYS_STAT_H */
+    if (stat_retry(file, &statbuf) != 0)
+        return -1;
+#endif /* HAVE_SYS_STAT_H */
+
+    return ((int32) statbuf.st_mtime);
+}
+#endif /* !_WIN32_WCE */
+
+struct bit_encode_s {
+    FILE *fh;
+    unsigned char buf, bbits;
+    int16 refcount;
+};
+
+bit_encode_t *
+bit_encode_attach(FILE *outfh)
+{
+    bit_encode_t *be;
+
+    be = ckd_calloc(1, sizeof(*be));
+    be->refcount = 1;
+    be->fh = outfh;
+    return be;
+}
+
+bit_encode_t *
+bit_encode_retain(bit_encode_t *be)
+{
+    ++be->refcount;
+    return be;
+}
+
+int
+bit_encode_free(bit_encode_t *be)
+{
+    if (be == NULL)
+        return 0;
+    if (--be->refcount > 0)
+        return be->refcount;
+    ckd_free(be);
+
+    return 0;
+}
+
+int
+bit_encode_write(bit_encode_t *be, unsigned char const *bits, int nbits)
+{
+    int tbits;
+
+    tbits = nbits + be->bbits;
+    if (tbits < 8)  {
+        /* Append to buffer. */
+        be->buf |= ((bits[0] >> (8 - nbits)) << (8 - tbits));
+    }
+    else {
+        int i = 0;
+        while (tbits >= 8) {
+            /* Shift bits out of the buffer and splice with high-order bits */
+            fputc(be->buf | ((bits[i]) >> be->bbits), be->fh);
+            /* Put low-order bits back into buffer */
+            be->buf = (bits[i] << (8 - be->bbits)) & 0xff;
+            tbits -= 8;
+            ++i;
+        }
+    }
+    /* tbits contains remaining number of  bits. */
+    be->bbits = tbits;
+
+    return nbits;
+}
+
+int
+bit_encode_write_cw(bit_encode_t *be, uint32 codeword, int nbits)
+{
+    unsigned char bits[4];
+    codeword <<= (32 - nbits);
+    bits[0] = (codeword >> 24) & 0xff;
+    bits[1] = (codeword >> 16) & 0xff;
+    bits[2] = (codeword >> 8) & 0xff;
+    bits[3] = codeword & 0xff;
+    return bit_encode_write(be, bits, nbits);
+}
+
+int
+bit_encode_flush(bit_encode_t *be)
+{
+    if (be->bbits) {
+        fputc(be->buf, be->fh);
+        be->bbits = 0;
+    }
+    return 0;
+}
+
+#ifdef HAVE_SYS_STAT_H /* Unix, Cygwin */
+int
+build_directory(const char *path)
+{
+    int rv;
+
+    /* Utterly failed... */
+    if (strlen(path) == 0)
+        return -1;
+    /* Utterly succeeded... */
+    else if ((rv = mkdir(path, 0777)) == 0)
+        return 0;
+    /* Or, it already exists... */
+    else if (errno == EEXIST)
+        return 0;
+    else if (errno != ENOENT) {
+        E_ERROR_SYSTEM("Failed to create %s");
+        return -1;
+    }
+    else {
+        char *dirname = ckd_salloc(path);
+        path2dirname(path, dirname);
+        build_directory(dirname);
+        ckd_free(dirname);
+        return mkdir(path, 0777);
+    }
+}
+#elif defined(_WIN32)
+/* FIXME: Implement this. */
+int
+build_directory(const char *path)
+{
+    E_ERROR("build_directory() unimplemented on your platform!\n");
+    return -1;
+}
+#else
+int
+build_directory(const char *path)
+{
+    E_ERROR("build_directory() unimplemented on your platform!\n");
+    return -1;
+}
+#endif
diff --git a/src/libsphinxbase/util/profile.c b/src/libsphinxbase/util/profile.c
new file mode 100644 (file)
index 0000000..4ed0271
--- /dev/null
@@ -0,0 +1,338 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * profile.c -- For timing and event counting.
+ *
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log: profile.c,v $
+ * Revision 1.7  2005/06/22 03:10:59  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Added  keyword.
+ *
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 11-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Added ptmr_init().
+ * 
+ * 19-Jun-97   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined(_WIN32) && !defined(__SYMBIAN32__)
+# include <windows.h>
+# ifndef _WIN32_WCE
+#  include <time.h>
+# endif
+#elif defined(HAVE_UNISTD_H) /* I know this, this is Unix... */
+# include <unistd.h>
+# include <sys/time.h>
+# include <sys/resource.h>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996)
+#endif
+
+#include "sphinxbase/profile.h"
+#include "sphinxbase/err.h"
+#include "sphinxbase/ckd_alloc.h"
+
+/* Silvio Moioli: updated to use Unicode */
+#ifdef _WIN32_WCE
+DWORD unlink(const char *filename)
+{
+       WCHAR *wfilename;
+       DWORD rv;
+       size_t len;
+
+       len = mbstowcs(NULL, filename, 0);
+       wfilename = ckd_calloc(len+1, sizeof(*wfilename));
+       mbstowcs(wfilename, filename, len);
+       rv = DeleteFileW(wfilename);
+       ckd_free(wfilename);
+
+       return rv;
+}
+#endif
+
+pctr_t *
+pctr_new(char *nm)
+{
+    pctr_t *pc;
+
+    pc = ckd_calloc(1, sizeof(pctr_t));
+    pc->name = ckd_salloc(nm);
+    pc->count = 0;
+
+    return pc;
+}
+
+void
+pctr_reset(pctr_t * ctr)
+{
+    ctr->count = 0;
+}
+
+
+void
+pctr_increment(pctr_t * ctr, int32 inc)
+{
+    ctr->count += inc;
+    /*   E_INFO("Name %s, Count %d, inc %d\n",ctr->name, ctr->count, inc); */
+}
+
+void
+pctr_print(FILE * fp, pctr_t * ctr)
+{
+    fprintf(fp, "CTR:");
+    fprintf(fp, "[%d %s]", ctr->count, ctr->name);
+}
+
+void
+pctr_free(pctr_t * pc)
+{
+    if (pc) {
+        if (pc->name)
+            ckd_free(pc->name);
+    }
+    ckd_free(pc);
+}
+
+
+#if defined(_WIN32) && !defined(GNUWINCE) && !defined(__SYMBIAN32__)
+
+#define TM_LOWSCALE    1e-7
+#define TM_HIGHSCALE   (4294967296.0 * TM_LOWSCALE);
+
+static float64
+make_sec(FILETIME * tm)
+{
+    float64 dt;
+
+    dt = tm->dwLowDateTime * TM_LOWSCALE;
+    dt += tm->dwHighDateTime * TM_HIGHSCALE;
+
+    return (dt);
+}
+
+#else /* NOT WINDOWS */
+
+static float64
+make_sec(struct timeval *s)
+{
+    return (s->tv_sec + s->tv_usec * 0.000001);
+}
+
+#endif
+
+
+void
+ptmr_start(ptmr_t * tm)
+{
+#if (! defined(_WIN32)) || defined(GNUWINCE) || defined(__SYMBIAN32__)
+    struct timeval e_start;     /* Elapsed time */
+
+#if (! defined(_HPUX_SOURCE))  && (! defined(__SYMBIAN32__))
+    struct rusage start;        /* CPU time */
+
+    /* Unix but not HPUX */
+    getrusage(RUSAGE_SELF, &start);
+    tm->start_cpu = make_sec(&start.ru_utime) + make_sec(&start.ru_stime);
+#endif
+    /* Unix + HP */
+    gettimeofday(&e_start, 0);
+    tm->start_elapsed = make_sec(&e_start);
+#elif defined(_WIN32_WCE)
+    /* No GetProcessTimes() on WinCE.  (Note CPU time will be bogus) */
+    tm->start_cpu = GetTickCount() / 1000;
+    tm->start_elapsed = GetTickCount() / 1000;
+#else
+    HANDLE pid;
+    FILETIME t_create, t_exit, kst, ust;
+
+    /* PC */
+    pid = GetCurrentProcess();
+    GetProcessTimes(pid, &t_create, &t_exit, &kst, &ust);
+    tm->start_cpu = make_sec(&ust) + make_sec(&kst);
+
+    tm->start_elapsed = (float64) clock() / CLOCKS_PER_SEC;
+#endif
+}
+
+
+void
+ptmr_stop(ptmr_t * tm)
+{
+    float64 dt_cpu, dt_elapsed;
+
+#if (! defined(_WIN32)) || defined(GNUWINCE) || defined(__SYMBIAN32__)
+    struct timeval e_stop;      /* Elapsed time */
+
+#if (! defined(_HPUX_SOURCE))  && (! defined(__SYMBIAN32__))
+    struct rusage stop;         /* CPU time */
+
+    /* Unix but not HPUX */
+    getrusage(RUSAGE_SELF, &stop);
+    dt_cpu =
+        make_sec(&stop.ru_utime) + make_sec(&stop.ru_stime) -
+        tm->start_cpu;
+#else
+    dt_cpu = 0.0;
+#endif
+    /* Unix + HP */
+    gettimeofday(&e_stop, 0);
+    dt_elapsed = (make_sec(&e_stop) - tm->start_elapsed);
+#elif defined(_WIN32_WCE)
+       /* No GetProcessTimes() on WinCE.  (Note CPU time will be bogus) */
+       dt_cpu = GetTickCount() / 1000 - tm->start_cpu;
+       dt_elapsed = GetTickCount() / 1000 - tm->start_elapsed;
+#else
+    HANDLE pid;
+    FILETIME t_create, t_exit, kst, ust;
+
+    /* PC */
+    pid = GetCurrentProcess();
+    GetProcessTimes(pid, &t_create, &t_exit, &kst, &ust);
+    dt_cpu = make_sec(&ust) + make_sec(&kst) - tm->start_cpu;
+    dt_elapsed = ((float64) clock() / CLOCKS_PER_SEC) - tm->start_elapsed;
+#endif
+
+    tm->t_cpu += dt_cpu;
+    tm->t_elapsed += dt_elapsed;
+
+    tm->t_tot_cpu += dt_cpu;
+    tm->t_tot_elapsed += dt_elapsed;
+}
+
+
+void
+ptmr_reset(ptmr_t * tm)
+{
+    tm->t_cpu = 0.0;
+    tm->t_elapsed = 0.0;
+}
+
+
+void
+ptmr_init(ptmr_t * tm)
+{
+    tm->t_cpu = 0.0;
+    tm->t_elapsed = 0.0;
+    tm->t_tot_cpu = 0.0;
+    tm->t_tot_elapsed = 0.0;
+}
+
+
+void
+ptmr_reset_all(ptmr_t * tm)
+{
+    for (; tm->name; tm++)
+        ptmr_reset(tm);
+}
+
+
+void
+ptmr_print_all(FILE * fp, ptmr_t * tm, float64 norm)
+{
+    if (norm != 0.0) {
+        norm = 1.0 / norm;
+        for (; tm->name; tm++)
+            fprintf(fp, "  %6.2fx %s", tm->t_cpu * norm, tm->name);
+    }
+}
+
+
+int32
+host_endian(void)
+{
+    FILE *fp;
+    int32 BYTE_ORDER_MAGIC;
+    char *file;
+    char buf[8];
+    int32 k, endian;
+
+    file = "/tmp/__EnDiAn_TeSt__";
+
+    if ((fp = fopen(file, "wb")) == NULL) {
+        E_ERROR("Failed to open file '%s' for writing: %s\n", file, strerror(errno));
+        return -1;
+    }
+
+    BYTE_ORDER_MAGIC = (int32) 0x11223344;
+
+    k = (int32) BYTE_ORDER_MAGIC;
+    if (fwrite(&k, sizeof(int32), 1, fp) != 1) {
+        E_ERROR("Failed to write to file '%s'\n", file);
+        fclose(fp);
+        unlink(file);
+        return -1;
+    }
+
+    fclose(fp);
+    if ((fp = fopen(file, "rb")) == NULL) {
+        E_ERROR("Failed to open file '%s' for reading: %s\n", file, strerror(errno));
+        unlink(file);
+        return -1;
+    }
+    if (fread(buf, 1, sizeof(int32), fp) != sizeof(int32)) {
+        E_ERROR("Failed to read from file '%s'\n", file);
+        fclose(fp);
+        unlink(file);
+        return -1;
+    }
+    fclose(fp);
+    unlink(file);
+
+    /* If buf[0] == lsB of BYTE_ORDER_MAGIC, we are little-endian */
+    endian = (buf[0] == (BYTE_ORDER_MAGIC & 0x000000ff)) ? 1 : 0;
+
+    return (endian);
+}
diff --git a/src/libsphinxbase/util/sbthread.c b/src/libsphinxbase/util/sbthread.c
new file mode 100644 (file)
index 0000000..c588a6e
--- /dev/null
@@ -0,0 +1,739 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2008 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+/**
+ * @file sbthread.c
+ * @brief Simple portable thread functions
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include <string.h>
+
+#include "sphinxbase/sbthread.h"
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/err.h"
+
+/*
+ * Platform-specific parts: threads, mutexes, and signals.
+ */
+#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(__SYMBIAN32__)
+#define _WIN32_WINNT 0x0400
+#include <windows.h>
+
+struct sbthread_s {
+    cmd_ln_t *config;
+    sbmsgq_t *msgq;
+    sbthread_main func;
+    void *arg;
+    HANDLE th;
+    DWORD tid;
+};
+
+struct sbmsgq_s {
+    /* Ringbuffer for passing messages. */
+    char *data;
+    size_t depth;
+    size_t out;
+    size_t nbytes;
+
+    /* Current message is stored here. */
+    char *msg;
+    size_t msglen;
+    CRITICAL_SECTION mtx;
+    HANDLE evt;
+};
+
+struct sbevent_s {
+    HANDLE evt;
+};
+
+struct sbmtx_s {
+    CRITICAL_SECTION mtx;
+};
+
+DWORD WINAPI
+sbthread_internal_main(LPVOID arg)
+{
+    sbthread_t *th = (sbthread_t *)arg;
+    int rv;
+
+    rv = (*th->func)(th);
+    return (DWORD)rv;
+}
+
+sbthread_t *
+sbthread_start(cmd_ln_t *config, sbthread_main func, void *arg)
+{
+    sbthread_t *th;
+
+    th = ckd_calloc(1, sizeof(*th));
+    th->config = config;
+    th->func = func;
+    th->arg = arg;
+    th->msgq = sbmsgq_init(256);
+    th->th = CreateThread(NULL, 0, sbthread_internal_main, th, 0, &th->tid);
+    if (th->th == NULL) {
+        sbthread_free(th);
+        return NULL;
+    }
+    return th;
+}
+
+int
+sbthread_wait(sbthread_t *th)
+{
+    DWORD rv, exit;
+
+    /* It has already been joined. */
+    if (th->th == NULL)
+        return -1;
+
+    rv = WaitForSingleObject(th->th, INFINITE);
+    if (rv == WAIT_FAILED) {
+        E_ERROR("Failed to join thread: WAIT_FAILED\n");
+        return -1;
+    }
+    GetExitCodeThread(th->th, &exit);
+    CloseHandle(th->th);
+    th->th = NULL;
+    return (int)exit;
+}
+
+static DWORD
+cond_timed_wait(HANDLE cond, int sec, int nsec)
+{
+    DWORD rv;
+    if (sec == -1) {
+        rv = WaitForSingleObject(cond, INFINITE);
+    }
+    else {
+        DWORD ms;
+
+        ms = sec * 1000 + nsec / (1000*1000);
+        rv = WaitForSingleObject(cond, ms);
+    }
+    return rv;
+}
+
+/* Silvio Moioli: updated to use Unicode */
+sbevent_t *
+sbevent_init(void)
+{
+    sbevent_t *evt;
+
+    evt = ckd_calloc(1, sizeof(*evt));
+    evt->evt = CreateEventW(NULL, FALSE, FALSE, NULL);
+    if (evt->evt == NULL) {
+        ckd_free(evt);
+        return NULL;
+    }
+    return evt;
+}
+
+void
+sbevent_free(sbevent_t *evt)
+{
+    CloseHandle(evt->evt);
+    ckd_free(evt);
+}
+
+int
+sbevent_signal(sbevent_t *evt)
+{
+    return SetEvent(evt->evt) ? 0 : -1;
+}
+
+int
+sbevent_wait(sbevent_t *evt, int sec, int nsec)
+{
+    DWORD rv;
+
+    rv = cond_timed_wait(evt->evt, sec, nsec);
+    return rv;
+}
+
+sbmtx_t *
+sbmtx_init(void)
+{
+    sbmtx_t *mtx;
+
+    mtx = ckd_calloc(1, sizeof(*mtx));
+    InitializeCriticalSection(&mtx->mtx);
+    return mtx;
+}
+
+int
+sbmtx_trylock(sbmtx_t *mtx)
+{
+    return TryEnterCriticalSection(&mtx->mtx) ? 0 : -1;
+}
+
+int
+sbmtx_lock(sbmtx_t *mtx)
+{
+    EnterCriticalSection(&mtx->mtx);
+    return 0;
+}
+
+int
+sbmtx_unlock(sbmtx_t *mtx)
+{
+    LeaveCriticalSection(&mtx->mtx);
+    return 0;
+}
+
+void
+sbmtx_free(sbmtx_t *mtx)
+{
+    DeleteCriticalSection(&mtx->mtx);
+    ckd_free(mtx);
+}
+
+sbmsgq_t *
+sbmsgq_init(size_t depth)
+{
+    sbmsgq_t *msgq;
+
+    msgq = ckd_calloc(1, sizeof(*msgq));
+    msgq->depth = depth;
+    msgq->evt = CreateEventW(NULL, FALSE, FALSE, NULL);
+    if (msgq->evt == NULL) {
+        ckd_free(msgq);
+        return NULL;
+    }
+    InitializeCriticalSection(&msgq->mtx);
+    msgq->data = ckd_calloc(depth, 1);
+    msgq->msg = ckd_calloc(depth, 1);
+    return msgq;
+}
+
+void
+sbmsgq_free(sbmsgq_t *msgq)
+{
+    CloseHandle(msgq->evt);
+    ckd_free(msgq->data);
+    ckd_free(msgq->msg);
+    ckd_free(msgq);
+}
+
+int
+sbmsgq_send(sbmsgq_t *q, size_t len, void const *data)
+{
+    char const *cdata = (char const *)data;
+    size_t in;
+
+    /* Don't allow things bigger than depth to be sent! */
+    if (len + sizeof(len) > q->depth)
+        return -1;
+
+    if (q->nbytes + len + sizeof(len) > q->depth)
+        WaitForSingleObject(q->evt, INFINITE);
+
+    /* Lock things while we manipulate the buffer (FIXME: this
+       actually should have been atomic with the wait above ...) */
+    EnterCriticalSection(&q->mtx);
+    in = (q->out + q->nbytes) % q->depth;
+    /* First write the size of the message. */
+    if (in + sizeof(len) > q->depth) {
+        /* Handle the annoying case where the size field gets wrapped around. */
+        size_t len1 = q->depth - in;
+        memcpy(q->data + in, &len, len1);
+        memcpy(q->data, ((char *)&len) + len1, sizeof(len) - len1);
+        q->nbytes += sizeof(len);
+        in = sizeof(len) - len1;
+    }
+    else {
+        memcpy(q->data + in, &len, sizeof(len));
+        q->nbytes += sizeof(len);
+        in += sizeof(len);
+    }
+
+    /* Now write the message body. */
+    if (in + len > q->depth) {
+        /* Handle wraparound. */
+        size_t len1 = q->depth - in;
+        memcpy(q->data + in, cdata, len1);
+        q->nbytes += len1;
+        cdata += len1;
+        len -= len1;
+        in = 0;
+    }
+    memcpy(q->data + in, cdata, len);
+    q->nbytes += len;
+
+    /* Signal the condition variable. */
+    SetEvent(q->evt);
+    /* Unlock. */
+    LeaveCriticalSection(&q->mtx);
+
+    return 0;
+}
+
+void *
+sbmsgq_wait(sbmsgq_t *q, size_t *out_len, int sec, int nsec)
+{
+    char *outptr;
+    size_t len;
+
+    /* Wait for data to be available. */
+    if (q->nbytes == 0) {
+        if (cond_timed_wait(q->evt, sec, nsec) == WAIT_FAILED)
+            /* Timed out or something... */
+            return NULL;
+    }
+    /* Lock to manipulate the queue (FIXME) */
+    EnterCriticalSection(&q->mtx);
+    /* Get the message size. */
+    if (q->out + sizeof(q->msglen) > q->depth) {
+        /* Handle annoying wraparound case. */
+        size_t len1 = q->depth - q->out;
+        memcpy(&q->msglen, q->data + q->out, len1);
+        memcpy(((char *)&q->msglen) + len1, q->data,
+               sizeof(q->msglen) - len1);
+        q->out = sizeof(q->msglen) - len1;
+    }
+    else {
+        memcpy(&q->msglen, q->data + q->out, sizeof(q->msglen));
+        q->out += sizeof(q->msglen);
+    }
+    q->nbytes -= sizeof(q->msglen);
+    /* Get the message body. */
+    outptr = q->msg;
+    len = q->msglen;
+    if (q->out + q->msglen > q->depth) {
+        /* Handle wraparound. */
+        size_t len1 = q->depth - q->out;
+        memcpy(outptr, q->data + q->out, len1);
+        outptr += len1;
+        len -= len1;
+        q->nbytes -= len1;
+        q->out = 0;
+    }
+    memcpy(outptr, q->data + q->out, len);
+    q->nbytes -= len;
+    q->out += len;
+
+    /* Signal the condition variable. */
+    SetEvent(q->evt);
+    /* Unlock. */
+    LeaveCriticalSection(&q->mtx);
+    if (out_len)
+        *out_len = q->msglen;
+    return q->msg;
+}
+
+#else /* POSIX */
+#include <pthread.h>
+#include <sys/time.h>
+
+struct sbthread_s {
+    cmd_ln_t *config;
+    sbmsgq_t *msgq;
+    sbthread_main func;
+    void *arg;
+    pthread_t th;
+};
+
+struct sbmsgq_s {
+    /* Ringbuffer for passing messages. */
+    char *data;
+    size_t depth;
+    size_t out;
+    size_t nbytes;
+
+    /* Current message is stored here. */
+    char *msg;
+    size_t msglen;
+    pthread_mutex_t mtx;
+    pthread_cond_t cond;
+};
+
+struct sbevent_s {
+    pthread_mutex_t mtx;
+    pthread_cond_t cond;
+    int signalled;
+};
+
+struct sbmtx_s {
+    pthread_mutex_t mtx;
+};
+
+static void *
+sbthread_internal_main(void *arg)
+{
+    sbthread_t *th = (sbthread_t *)arg;
+    int rv;
+
+    rv = (*th->func)(th);
+    return (void *)(long)rv;
+}
+
+sbthread_t *
+sbthread_start(cmd_ln_t *config, sbthread_main func, void *arg)
+{
+    sbthread_t *th;
+    int rv;
+
+    th = ckd_calloc(1, sizeof(*th));
+    th->config = config;
+    th->func = func;
+    th->arg = arg;
+    th->msgq = sbmsgq_init(1024);
+    if ((rv = pthread_create(&th->th, NULL, &sbthread_internal_main, th)) != 0) {
+        E_ERROR("Failed to create thread: %d\n", rv);
+        sbthread_free(th);
+        return NULL;
+    }
+    return th;
+}
+
+int
+sbthread_wait(sbthread_t *th)
+{
+    void *exit;
+    int rv;
+
+    /* It has already been joined. */
+    if (th->th == (pthread_t)-1)
+        return -1;
+
+    rv = pthread_join(th->th, &exit);
+    if (rv != 0) {
+        E_ERROR("Failed to join thread: %d\n", rv);
+        return -1;
+    }
+    th->th = (pthread_t)-1;
+    return (int)(long)exit;
+}
+
+sbmsgq_t *
+sbmsgq_init(size_t depth)
+{
+    sbmsgq_t *msgq;
+
+    msgq = ckd_calloc(1, sizeof(*msgq));
+    msgq->depth = depth;
+    if (pthread_cond_init(&msgq->cond, NULL) != 0) {
+        ckd_free(msgq);
+        return NULL;
+    }
+    if (pthread_mutex_init(&msgq->mtx, NULL) != 0) {
+        pthread_cond_destroy(&msgq->cond);
+        ckd_free(msgq);
+        return NULL;
+    }
+    msgq->data = ckd_calloc(depth, 1);
+    msgq->msg = ckd_calloc(depth, 1);
+    return msgq;
+}
+
+void
+sbmsgq_free(sbmsgq_t *msgq)
+{
+    pthread_mutex_destroy(&msgq->mtx);
+    pthread_cond_destroy(&msgq->cond);
+    ckd_free(msgq->data);
+    ckd_free(msgq->msg);
+    ckd_free(msgq);
+}
+
+int
+sbmsgq_send(sbmsgq_t *q, size_t len, void const *data)
+{
+    size_t in;
+
+    /* Don't allow things bigger than depth to be sent! */
+    if (len + sizeof(len) > q->depth)
+        return -1;
+
+    /* Lock the condition variable while we manipulate the buffer. */
+    pthread_mutex_lock(&q->mtx);
+    if (q->nbytes + len + sizeof(len) > q->depth) {
+        /* Unlock and wait for space to be available. */
+        if (pthread_cond_wait(&q->cond, &q->mtx) != 0) {
+            /* Timed out, don't send anything. */
+            pthread_mutex_unlock(&q->mtx);
+            return -1;
+        }
+        /* Condition is now locked again. */
+    }
+    in = (q->out + q->nbytes) % q->depth;
+
+    /* First write the size of the message. */
+    if (in + sizeof(len) > q->depth) {
+        /* Handle the annoying case where the size field gets wrapped around. */
+        size_t len1 = q->depth - in;
+        memcpy(q->data + in, &len, len1);
+        memcpy(q->data, ((char *)&len) + len1, sizeof(len) - len1);
+        q->nbytes += sizeof(len);
+        in = sizeof(len) - len1;
+    }
+    else {
+        memcpy(q->data + in, &len, sizeof(len));
+        q->nbytes += sizeof(len);
+        in += sizeof(len);
+    }
+
+    /* Now write the message body. */
+    if (in + len > q->depth) {
+        /* Handle wraparound. */
+        size_t len1 = q->depth - in;
+        memcpy(q->data + in, data, len1);
+        q->nbytes += len1;
+        data = (char const *)data + len1;
+        len -= len1;
+        in = 0;
+    }
+    memcpy(q->data + in, data, len);
+    q->nbytes += len;
+
+    /* Signal the condition variable. */
+    pthread_cond_signal(&q->cond);
+    /* Unlock it, we have nothing else to do. */
+    pthread_mutex_unlock(&q->mtx);
+    return 0;
+}
+
+static int
+cond_timed_wait(pthread_cond_t *cond, pthread_mutex_t *mtx, int sec, int nsec)
+{
+    int rv;
+    if (sec == -1) {
+        rv = pthread_cond_wait(cond, mtx);
+    }
+    else {
+        struct timeval now;
+        struct timespec end;
+
+        gettimeofday(&now, NULL);
+        end.tv_sec = now.tv_sec + sec;
+        end.tv_nsec = now.tv_usec * 1000 + nsec;
+        if (end.tv_nsec > (1000*1000*1000)) {
+            sec += end.tv_nsec / (1000*1000*1000);
+            end.tv_nsec = end.tv_nsec % (1000*1000*1000);
+        }
+        rv = pthread_cond_timedwait(cond, mtx, &end);
+    }
+    return rv;
+}
+
+void *
+sbmsgq_wait(sbmsgq_t *q, size_t *out_len, int sec, int nsec)
+{
+    char *outptr;
+    size_t len;
+
+    /* Lock the condition variable while we manipulate nmsg. */
+    pthread_mutex_lock(&q->mtx);
+    if (q->nbytes == 0) {
+        /* Unlock the condition variable and wait for a signal. */
+        if (cond_timed_wait(&q->cond, &q->mtx, sec, nsec) != 0) {
+            /* Timed out or something... */
+            pthread_mutex_unlock(&q->mtx);
+            return NULL;
+        }
+        /* Condition variable is now locked again. */
+    }
+    /* Get the message size. */
+    if (q->out + sizeof(q->msglen) > q->depth) {
+        /* Handle annoying wraparound case. */
+        size_t len1 = q->depth - q->out;
+        memcpy(&q->msglen, q->data + q->out, len1);
+        memcpy(((char *)&q->msglen) + len1, q->data,
+               sizeof(q->msglen) - len1);
+        q->out = sizeof(q->msglen) - len1;
+    }
+    else {
+        memcpy(&q->msglen, q->data + q->out, sizeof(q->msglen));
+        q->out += sizeof(q->msglen);
+    }
+    q->nbytes -= sizeof(q->msglen);
+    /* Get the message body. */
+    outptr = q->msg;
+    len = q->msglen;
+    if (q->out + q->msglen > q->depth) {
+        /* Handle wraparound. */
+        size_t len1 = q->depth - q->out;
+        memcpy(outptr, q->data + q->out, len1);
+        outptr += len1;
+        len -= len1;
+        q->nbytes -= len1;
+        q->out = 0;
+    }
+    memcpy(outptr, q->data + q->out, len);
+    q->nbytes -= len;
+    q->out += len;
+
+    /* Signal the condition variable. */
+    pthread_cond_signal(&q->cond);
+    /* Unlock the condition variable, we are done. */
+    pthread_mutex_unlock(&q->mtx);
+    if (out_len)
+        *out_len = q->msglen;
+    return q->msg;
+}
+
+sbevent_t *
+sbevent_init(void)
+{
+    sbevent_t *evt;
+    int rv;
+
+    evt = ckd_calloc(1, sizeof(*evt));
+    if ((rv = pthread_mutex_init(&evt->mtx, NULL)) != 0) {
+        E_ERROR("Failed to initialize mutex: %d\n", rv);
+        ckd_free(evt);
+        return NULL;
+    }
+    if ((rv = pthread_cond_init(&evt->cond, NULL)) != 0) {
+        E_ERROR_SYSTEM("Failed to initialize mutex: %d\n", rv);
+        pthread_mutex_destroy(&evt->mtx);
+        ckd_free(evt);
+        return NULL;
+    }
+    return evt;
+}
+
+void
+sbevent_free(sbevent_t *evt)
+{
+    pthread_mutex_destroy(&evt->mtx);
+    pthread_cond_destroy(&evt->cond);
+    ckd_free(evt);
+}
+
+int
+sbevent_signal(sbevent_t *evt)
+{
+    int rv;
+
+    pthread_mutex_lock(&evt->mtx);
+    evt->signalled = TRUE;
+    rv = pthread_cond_signal(&evt->cond);
+    pthread_mutex_unlock(&evt->mtx);
+    return rv;
+}
+
+int
+sbevent_wait(sbevent_t *evt, int sec, int nsec)
+{
+    int rv = 0;
+
+    /* Lock the mutex before we check its signalled state. */
+    pthread_mutex_lock(&evt->mtx);
+    /* If it's not signalled, then wait until it is. */
+    if (!evt->signalled)
+        rv = cond_timed_wait(&evt->cond, &evt->mtx, sec, nsec);
+    /* Set its state to unsignalled if we were successful. */
+    if (rv == 0)
+        evt->signalled = FALSE;
+    /* And unlock its mutex. */
+    pthread_mutex_unlock(&evt->mtx);
+
+    return rv;
+}
+
+sbmtx_t *
+sbmtx_init(void)
+{
+    sbmtx_t *mtx;
+
+    mtx = ckd_calloc(1, sizeof(*mtx));
+    if (pthread_mutex_init(&mtx->mtx, NULL) != 0) {
+        ckd_free(mtx);
+        return NULL;
+    }
+    return mtx;
+}
+
+int
+sbmtx_trylock(sbmtx_t *mtx)
+{
+    return pthread_mutex_trylock(&mtx->mtx);
+}
+
+int
+sbmtx_lock(sbmtx_t *mtx)
+{
+    return pthread_mutex_lock(&mtx->mtx);
+}
+
+int
+sbmtx_unlock(sbmtx_t *mtx)
+{
+    return pthread_mutex_unlock(&mtx->mtx);
+}
+
+void
+sbmtx_free(sbmtx_t *mtx)
+{
+    pthread_mutex_destroy(&mtx->mtx);
+    ckd_free(mtx);
+}
+#endif /* not WIN32 */
+
+cmd_ln_t *
+sbthread_config(sbthread_t *th)
+{
+    return th->config;
+}
+
+void *
+sbthread_arg(sbthread_t *th)
+{
+    return th->arg;
+}
+
+sbmsgq_t *
+sbthread_msgq(sbthread_t *th)
+{
+    return th->msgq;
+}
+
+int
+sbthread_send(sbthread_t *th, size_t len, void const *data)
+{
+    return sbmsgq_send(th->msgq, len, data);
+}
+
+void
+sbthread_free(sbthread_t *th)
+{
+    sbthread_wait(th);
+    sbmsgq_free(th->msgq);
+    ckd_free(th);
+}
diff --git a/src/libsphinxbase/util/slamch.c b/src/libsphinxbase/util/slamch.c
new file mode 100644 (file)
index 0000000..2294584
--- /dev/null
@@ -0,0 +1,1029 @@
+/* src/slamch.f -- translated by f2c (version 20050501).
+   You must link the resulting object file with libf2c:
+       on Microsoft Windows system, link with libf2c.lib;
+       on Linux or Unix systems, link with .../path/to/libf2c.a -lm
+       or, if you install libf2c.a in a standard place, with -lf2c -lm
+       -- in that order, at the end of the command line, as in
+               cc *.o -lf2c -lm
+       Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
+
+               http://www.netlib.org/f2c/libf2c.zip
+*/
+
+#include "sphinxbase/f2c.h"
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4244)
+#endif
+
+/* Table of constant values */
+
+static integer c__1 = 1;
+static real c_b32 = 0.f;
+
+doublereal
+slamch_(char *cmach, ftnlen cmach_len)
+{
+    /* Initialized data */
+
+    static logical first = TRUE_;
+
+    /* System generated locals */
+    integer i__1;
+    real ret_val;
+
+    /* Builtin functions */
+    double pow_ri(real *, integer *);
+
+    /* Local variables */
+    static real t;
+    static integer it;
+    static real rnd, eps, base;
+    static integer beta;
+    static real emin, prec, emax;
+    static integer imin, imax;
+    static logical lrnd;
+    static real rmin, rmax, rmach;
+    extern logical lsame_(char *, char *, ftnlen, ftnlen);
+    static real small, sfmin;
+    extern /* Subroutine */ int slamc2_(integer *, integer *, logical *, real
+                                        *, integer *, real *, integer *,
+                                        real *);
+
+
+/*  -- LAPACK auxiliary routine (version 3.0) -- */
+/*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */
+/*     Courant Institute, Argonne National Lab, and Rice University */
+/*     October 31, 1992 */
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*  SLAMCH determines single precision machine parameters. */
+
+/*  Arguments */
+/*  ========= */
+
+/*  CMACH   (input) CHARACTER*1 */
+/*          Specifies the value to be returned by SLAMCH: */
+/*          = 'E' or 'e',   SLAMCH := eps */
+/*          = 'S' or 's ,   SLAMCH := sfmin */
+/*          = 'B' or 'b',   SLAMCH := base */
+/*          = 'P' or 'p',   SLAMCH := eps*base */
+/*          = 'N' or 'n',   SLAMCH := t */
+/*          = 'R' or 'r',   SLAMCH := rnd */
+/*          = 'M' or 'm',   SLAMCH := emin */
+/*          = 'U' or 'u',   SLAMCH := rmin */
+/*          = 'L' or 'l',   SLAMCH := emax */
+/*          = 'O' or 'o',   SLAMCH := rmax */
+
+/*          where */
+
+/*          eps   = relative machine precision */
+/*          sfmin = safe minimum, such that 1/sfmin does not overflow */
+/*          base  = base of the machine */
+/*          prec  = eps*base */
+/*          t     = number of (base) digits in the mantissa */
+/*          rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise */
+/*          emin  = minimum exponent before (gradual) underflow */
+/*          rmin  = underflow threshold - base**(emin-1) */
+/*          emax  = largest exponent before overflow */
+/*          rmax  = overflow threshold  - (base**emax)*(1-eps) */
+
+/* ===================================================================== */
+
+/*     .. Parameters .. */
+/*     .. */
+/*     .. Local Scalars .. */
+/*     .. */
+/*     .. External Functions .. */
+/*     .. */
+/*     .. External Subroutines .. */
+/*     .. */
+/*     .. Save statement .. */
+/*     .. */
+/*     .. Data statements .. */
+/*     .. */
+/*     .. Executable Statements .. */
+
+    if (first) {
+        first = FALSE_;
+        slamc2_(&beta, &it, &lrnd, &eps, &imin, &rmin, &imax, &rmax);
+        base = (real) beta;
+        t = (real) it;
+        if (lrnd) {
+            rnd = 1.f;
+            i__1 = 1 - it;
+            eps = pow_ri(&base, &i__1) / 2;
+        }
+        else {
+            rnd = 0.f;
+            i__1 = 1 - it;
+            eps = pow_ri(&base, &i__1);
+        }
+        prec = eps * base;
+        emin = (real) imin;
+        emax = (real) imax;
+        sfmin = rmin;
+        small = 1.f / rmax;
+        if (small >= sfmin) {
+
+/*           Use SMALL plus a bit, to avoid the possibility of rounding */
+/*           causing overflow when computing  1/sfmin. */
+
+            sfmin = small * (eps + 1.f);
+        }
+    }
+
+    if (lsame_(cmach, "E", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = eps;
+    }
+    else if (lsame_(cmach, "S", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = sfmin;
+    }
+    else if (lsame_(cmach, "B", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = base;
+    }
+    else if (lsame_(cmach, "P", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = prec;
+    }
+    else if (lsame_(cmach, "N", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = t;
+    }
+    else if (lsame_(cmach, "R", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = rnd;
+    }
+    else if (lsame_(cmach, "M", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = emin;
+    }
+    else if (lsame_(cmach, "U", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = rmin;
+    }
+    else if (lsame_(cmach, "L", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = emax;
+    }
+    else if (lsame_(cmach, "O", (ftnlen) 1, (ftnlen) 1)) {
+        rmach = rmax;
+    }
+
+    ret_val = rmach;
+    return ret_val;
+
+/*     End of SLAMCH */
+
+}                               /* slamch_ */
+
+
+/* *********************************************************************** */
+
+/* Subroutine */ int
+slamc1_(integer * beta, integer * t, logical * rnd, logical * ieee1)
+{
+    /* Initialized data */
+
+    static logical first = TRUE_;
+
+    /* System generated locals */
+    real r__1, r__2;
+
+    /* Local variables */
+    static real a, b, c__, f, t1, t2;
+    static integer lt;
+    static real one, qtr;
+    static logical lrnd;
+    static integer lbeta;
+    static real savec;
+    static logical lieee1;
+    extern doublereal slamc3_(real *, real *);
+
+
+/*  -- LAPACK auxiliary routine (version 3.0) -- */
+/*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */
+/*     Courant Institute, Argonne National Lab, and Rice University */
+/*     October 31, 1992 */
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*  SLAMC1 determines the machine parameters given by BETA, T, RND, and */
+/*  IEEE1. */
+
+/*  Arguments */
+/*  ========= */
+
+/*  BETA    (output) INTEGER */
+/*          The base of the machine. */
+
+/*  T       (output) INTEGER */
+/*          The number of ( BETA ) digits in the mantissa. */
+
+/*  RND     (output) LOGICAL */
+/*          Specifies whether proper rounding  ( RND = .TRUE. )  or */
+/*          chopping  ( RND = .FALSE. )  occurs in addition. This may not */
+/*          be a reliable guide to the way in which the machine performs */
+/*          its arithmetic. */
+
+/*  IEEE1   (output) LOGICAL */
+/*          Specifies whether rounding appears to be done in the IEEE */
+/*          'round to nearest' style. */
+
+/*  Further Details */
+/*  =============== */
+
+/*  The routine is based on the routine  ENVRON  by Malcolm and */
+/*  incorporates suggestions by Gentleman and Marovich. See */
+
+/*     Malcolm M. A. (1972) Algorithms to reveal properties of */
+/*        floating-point arithmetic. Comms. of the ACM, 15, 949-951. */
+
+/*     Gentleman W. M. and Marovich S. B. (1974) More on algorithms */
+/*        that reveal properties of floating point arithmetic units. */
+/*        Comms. of the ACM, 17, 276-277. */
+
+/* ===================================================================== */
+
+/*     .. Local Scalars .. */
+/*     .. */
+/*     .. External Functions .. */
+/*     .. */
+/*     .. Save statement .. */
+/*     .. */
+/*     .. Data statements .. */
+/*     .. */
+/*     .. Executable Statements .. */
+
+    if (first) {
+        first = FALSE_;
+        one = 1.f;
+
+/*        LBETA,  LIEEE1,  LT and  LRND  are the  local values  of  BETA, */
+/*        IEEE1, T and RND. */
+
+/*        Throughout this routine  we use the function  SLAMC3  to ensure */
+/*        that relevant values are  stored and not held in registers,  or */
+/*        are not affected by optimizers. */
+
+/*        Compute  a = 2.0**m  with the  smallest positive integer m such */
+/*        that */
+
+/*           fl( a + 1.0 ) = a. */
+
+        a = 1.f;
+        c__ = 1.f;
+
+/* +       WHILE( C.EQ.ONE )LOOP */
+      L10:
+        if (c__ == one) {
+            a *= 2;
+            c__ = slamc3_(&a, &one);
+            r__1 = -a;
+            c__ = slamc3_(&c__, &r__1);
+            goto L10;
+        }
+/* +       END WHILE */
+
+/*        Now compute  b = 2.0**m  with the smallest positive integer m */
+/*        such that */
+
+/*           fl( a + b ) .gt. a. */
+
+        b = 1.f;
+        c__ = slamc3_(&a, &b);
+
+/* +       WHILE( C.EQ.A )LOOP */
+      L20:
+        if (c__ == a) {
+            b *= 2;
+            c__ = slamc3_(&a, &b);
+            goto L20;
+        }
+/* +       END WHILE */
+
+/*        Now compute the base.  a and c  are neighbouring floating point */
+/*        numbers  in the  interval  ( beta**t, beta**( t + 1 ) )  and so */
+/*        their difference is beta. Adding 0.25 to c is to ensure that it */
+/*        is truncated to beta and not ( beta - 1 ). */
+
+        qtr = one / 4;
+        savec = c__;
+        r__1 = -a;
+        c__ = slamc3_(&c__, &r__1);
+        lbeta = c__ + qtr;
+
+/*        Now determine whether rounding or chopping occurs,  by adding a */
+/*        bit  less  than  beta/2  and a  bit  more  than  beta/2  to  a. */
+
+        b = (real) lbeta;
+        r__1 = b / 2;
+        r__2 = -b / 100;
+        f = slamc3_(&r__1, &r__2);
+        c__ = slamc3_(&f, &a);
+        if (c__ == a) {
+            lrnd = TRUE_;
+        }
+        else {
+            lrnd = FALSE_;
+        }
+        r__1 = b / 2;
+        r__2 = b / 100;
+        f = slamc3_(&r__1, &r__2);
+        c__ = slamc3_(&f, &a);
+        if (lrnd && c__ == a) {
+            lrnd = FALSE_;
+        }
+
+/*        Try and decide whether rounding is done in the  IEEE  'round to */
+/*        nearest' style. B/2 is half a unit in the last place of the two */
+/*        numbers A and SAVEC. Furthermore, A is even, i.e. has last  bit */
+/*        zero, and SAVEC is odd. Thus adding B/2 to A should not  change */
+/*        A, but adding B/2 to SAVEC should change SAVEC. */
+
+        r__1 = b / 2;
+        t1 = slamc3_(&r__1, &a);
+        r__1 = b / 2;
+        t2 = slamc3_(&r__1, &savec);
+        lieee1 = t1 == a && t2 > savec && lrnd;
+
+/*        Now find  the  mantissa, t.  It should  be the  integer part of */
+/*        log to the base beta of a,  however it is safer to determine  t */
+/*        by powering.  So we find t as the smallest positive integer for */
+/*        which */
+
+/*           fl( beta**t + 1.0 ) = 1.0. */
+
+        lt = 0;
+        a = 1.f;
+        c__ = 1.f;
+
+/* +       WHILE( C.EQ.ONE )LOOP */
+      L30:
+        if (c__ == one) {
+            ++lt;
+            a *= lbeta;
+            c__ = slamc3_(&a, &one);
+            r__1 = -a;
+            c__ = slamc3_(&c__, &r__1);
+            goto L30;
+        }
+/* +       END WHILE */
+
+    }
+
+    *beta = lbeta;
+    *t = lt;
+    *rnd = lrnd;
+    *ieee1 = lieee1;
+    return 0;
+
+/*     End of SLAMC1 */
+
+}                               /* slamc1_ */
+
+
+/* *********************************************************************** */
+
+/* Subroutine */ int
+slamc2_(integer * beta, integer * t, logical * rnd, real *
+        eps, integer * emin, real * rmin, integer * emax, real * rmax)
+{
+    /* Initialized data */
+
+    static logical first = TRUE_;
+    static logical iwarn = FALSE_;
+
+    /* Format strings */
+    static char fmt_9999[] =
+        "(//\002 WARNING. The value EMIN may be incorre"
+        "ct:-\002,\002  EMIN = \002,i8,/\002 If, after inspection, the va"
+        "lue EMIN looks\002,\002 acceptable please comment out \002,/\002"
+        " the IF block as marked within the code of routine\002,\002 SLAM"
+        "C2,\002,/\002 otherwise supply EMIN explicitly.\002,/)";
+
+    /* System generated locals */
+    integer i__1;
+    real r__1, r__2, r__3, r__4, r__5;
+
+    /* Builtin functions */
+    double pow_ri(real *, integer *);
+    integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen),
+        e_wsfe(void);
+
+    /* Local variables */
+    static real a, b, c__;
+    static integer i__, lt;
+    static real one, two;
+    static logical ieee;
+    static real half;
+    static logical lrnd;
+    static real leps, zero;
+    static integer lbeta;
+    static real rbase;
+    static integer lemin, lemax, gnmin;
+    static real small;
+    static integer gpmin;
+    static real third, lrmin, lrmax, sixth;
+    static logical lieee1;
+    extern /* Subroutine */ int slamc1_(integer *, integer *, logical *,
+                                        logical *);
+    extern doublereal slamc3_(real *, real *);
+    extern /* Subroutine */ int slamc4_(integer *, real *, integer *),
+        slamc5_(integer *, integer *, integer *, logical *, integer *,
+                real *);
+    static integer ngnmin, ngpmin;
+
+    /* Fortran I/O blocks */
+    static cilist io___58 = { 0, 6, 0, fmt_9999, 0 };
+
+
+
+/*  -- LAPACK auxiliary routine (version 3.0) -- */
+/*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */
+/*     Courant Institute, Argonne National Lab, and Rice University */
+/*     October 31, 1992 */
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*  SLAMC2 determines the machine parameters specified in its argument */
+/*  list. */
+
+/*  Arguments */
+/*  ========= */
+
+/*  BETA    (output) INTEGER */
+/*          The base of the machine. */
+
+/*  T       (output) INTEGER */
+/*          The number of ( BETA ) digits in the mantissa. */
+
+/*  RND     (output) LOGICAL */
+/*          Specifies whether proper rounding  ( RND = .TRUE. )  or */
+/*          chopping  ( RND = .FALSE. )  occurs in addition. This may not */
+/*          be a reliable guide to the way in which the machine performs */
+/*          its arithmetic. */
+
+/*  EPS     (output) REAL */
+/*          The smallest positive number such that */
+
+/*             fl( 1.0 - EPS ) .LT. 1.0, */
+
+/*          where fl denotes the computed value. */
+
+/*  EMIN    (output) INTEGER */
+/*          The minimum exponent before (gradual) underflow occurs. */
+
+/*  RMIN    (output) REAL */
+/*          The smallest normalized number for the machine, given by */
+/*          BASE**( EMIN - 1 ), where  BASE  is the floating point value */
+/*          of BETA. */
+
+/*  EMAX    (output) INTEGER */
+/*          The maximum exponent before overflow occurs. */
+
+/*  RMAX    (output) REAL */
+/*          The largest positive number for the machine, given by */
+/*          BASE**EMAX * ( 1 - EPS ), where  BASE  is the floating point */
+/*          value of BETA. */
+
+/*  Further Details */
+/*  =============== */
+
+/*  The computation of  EPS  is based on a routine PARANOIA by */
+/*  W. Kahan of the University of California at Berkeley. */
+
+/* ===================================================================== */
+
+/*     .. Local Scalars .. */
+/*     .. */
+/*     .. External Functions .. */
+/*     .. */
+/*     .. External Subroutines .. */
+/*     .. */
+/*     .. Intrinsic Functions .. */
+/*     .. */
+/*     .. Save statement .. */
+/*     .. */
+/*     .. Data statements .. */
+/*     .. */
+/*     .. Executable Statements .. */
+
+    if (first) {
+        first = FALSE_;
+        zero = 0.f;
+        one = 1.f;
+        two = 2.f;
+
+/*        LBETA, LT, LRND, LEPS, LEMIN and LRMIN  are the local values of */
+/*        BETA, T, RND, EPS, EMIN and RMIN. */
+
+/*        Throughout this routine  we use the function  SLAMC3  to ensure */
+/*        that relevant values are stored  and not held in registers,  or */
+/*        are not affected by optimizers. */
+
+/*        SLAMC1 returns the parameters  LBETA, LT, LRND and LIEEE1. */
+
+        slamc1_(&lbeta, &lt, &lrnd, &lieee1);
+
+/*        Start to find EPS. */
+
+        b = (real) lbeta;
+        i__1 = -lt;
+        a = pow_ri(&b, &i__1);
+        leps = a;
+
+/*        Try some tricks to see whether or not this is the correct  EPS. */
+
+        b = two / 3;
+        half = one / 2;
+        r__1 = -half;
+        sixth = slamc3_(&b, &r__1);
+        third = slamc3_(&sixth, &sixth);
+        r__1 = -half;
+        b = slamc3_(&third, &r__1);
+        b = slamc3_(&b, &sixth);
+        b = dabs(b);
+        if (b < leps) {
+            b = leps;
+        }
+
+        leps = 1.f;
+
+/* +       WHILE( ( LEPS.GT.B ).AND.( B.GT.ZERO ) )LOOP */
+      L10:
+        if (leps > b && b > zero) {
+            leps = b;
+            r__1 = half * leps;
+/* Computing 5th power */
+            r__3 = two, r__4 = r__3, r__3 *= r__3;
+/* Computing 2nd power */
+            r__5 = leps;
+            r__2 = r__4 * (r__3 * r__3) * (r__5 * r__5);
+            c__ = slamc3_(&r__1, &r__2);
+            r__1 = -c__;
+            c__ = slamc3_(&half, &r__1);
+            b = slamc3_(&half, &c__);
+            r__1 = -b;
+            c__ = slamc3_(&half, &r__1);
+            b = slamc3_(&half, &c__);
+            goto L10;
+        }
+/* +       END WHILE */
+
+        if (a < leps) {
+            leps = a;
+        }
+
+/*        Computation of EPS complete. */
+
+/*        Now find  EMIN.  Let A = + or - 1, and + or - (1 + BASE**(-3)). */
+/*        Keep dividing  A by BETA until (gradual) underflow occurs. This */
+/*        is detected when we cannot recover the previous A. */
+
+        rbase = one / lbeta;
+        small = one;
+        for (i__ = 1; i__ <= 3; ++i__) {
+            r__1 = small * rbase;
+            small = slamc3_(&r__1, &zero);
+/* L20: */
+        }
+        a = slamc3_(&one, &small);
+        slamc4_(&ngpmin, &one, &lbeta);
+        r__1 = -one;
+        slamc4_(&ngnmin, &r__1, &lbeta);
+        slamc4_(&gpmin, &a, &lbeta);
+        r__1 = -a;
+        slamc4_(&gnmin, &r__1, &lbeta);
+        ieee = FALSE_;
+
+        if (ngpmin == ngnmin && gpmin == gnmin) {
+            if (ngpmin == gpmin) {
+                lemin = ngpmin;
+/*            ( Non twos-complement machines, no gradual underflow; */
+/*              e.g.,  VAX ) */
+            }
+            else if (gpmin - ngpmin == 3) {
+                lemin = ngpmin - 1 + lt;
+                ieee = TRUE_;
+/*            ( Non twos-complement machines, with gradual underflow; */
+/*              e.g., IEEE standard followers ) */
+            }
+            else {
+                lemin = min(ngpmin, gpmin);
+/*            ( A guess; no known machine ) */
+                iwarn = TRUE_;
+            }
+
+        }
+        else if (ngpmin == gpmin && ngnmin == gnmin) {
+            if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1) {
+                lemin = max(ngpmin, ngnmin);
+/*            ( Twos-complement machines, no gradual underflow; */
+/*              e.g., CYBER 205 ) */
+            }
+            else {
+                lemin = min(ngpmin, ngnmin);
+/*            ( A guess; no known machine ) */
+                iwarn = TRUE_;
+            }
+
+        }
+        else if ((i__1 = ngpmin - ngnmin, abs(i__1)) == 1
+                 && gpmin == gnmin) {
+            if (gpmin - min(ngpmin, ngnmin) == 3) {
+                lemin = max(ngpmin, ngnmin) - 1 + lt;
+/*            ( Twos-complement machines with gradual underflow; */
+/*              no known machine ) */
+            }
+            else {
+                lemin = min(ngpmin, ngnmin);
+/*            ( A guess; no known machine ) */
+                iwarn = TRUE_;
+            }
+
+        }
+        else {
+/* Computing MIN */
+            i__1 = min(ngpmin, ngnmin), i__1 = min(i__1, gpmin);
+            lemin = min(i__1, gnmin);
+/*         ( A guess; no known machine ) */
+            iwarn = TRUE_;
+        }
+/* ** */
+/* Comment out this if block if EMIN is ok */
+        if (iwarn) {
+            first = TRUE_;
+            s_wsfe(&io___58);
+            do_fio(&c__1, (char *) &lemin, (ftnlen) sizeof(integer));
+            e_wsfe();
+        }
+/* ** */
+
+/*        Assume IEEE arithmetic if we found denormalised  numbers above, */
+/*        or if arithmetic seems to round in the  IEEE style,  determined */
+/*        in routine SLAMC1. A true IEEE machine should have both  things */
+/*        true; however, faulty machines may have one or the other. */
+
+        ieee = ieee || lieee1;
+
+/*        Compute  RMIN by successive division by  BETA. We could compute */
+/*        RMIN as BASE**( EMIN - 1 ),  but some machines underflow during */
+/*        this computation. */
+
+        lrmin = 1.f;
+        i__1 = 1 - lemin;
+        for (i__ = 1; i__ <= i__1; ++i__) {
+            r__1 = lrmin * rbase;
+            lrmin = slamc3_(&r__1, &zero);
+/* L30: */
+        }
+
+/*        Finally, call SLAMC5 to compute EMAX and RMAX. */
+
+        slamc5_(&lbeta, &lt, &lemin, &ieee, &lemax, &lrmax);
+    }
+
+    *beta = lbeta;
+    *t = lt;
+    *rnd = lrnd;
+    *eps = leps;
+    *emin = lemin;
+    *rmin = lrmin;
+    *emax = lemax;
+    *rmax = lrmax;
+
+    return 0;
+
+
+/*     End of SLAMC2 */
+
+}                               /* slamc2_ */
+
+
+/* *********************************************************************** */
+
+doublereal
+slamc3_(real * a, real * b)
+{
+    /* System generated locals */
+    real ret_val;
+
+
+/*  -- LAPACK auxiliary routine (version 3.0) -- */
+/*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */
+/*     Courant Institute, Argonne National Lab, and Rice University */
+/*     October 31, 1992 */
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*  SLAMC3  is intended to force  A  and  B  to be stored prior to doing */
+/*  the addition of  A  and  B ,  for use in situations where optimizers */
+/*  might hold one of these in a register. */
+
+/*  Arguments */
+/*  ========= */
+
+/*  A, B    (input) REAL */
+/*          The values A and B. */
+
+/* ===================================================================== */
+
+/*     .. Executable Statements .. */
+
+    ret_val = *a + *b;
+
+    return ret_val;
+
+/*     End of SLAMC3 */
+
+}                               /* slamc3_ */
+
+
+/* *********************************************************************** */
+
+/* Subroutine */ int
+slamc4_(integer * emin, real * start, integer * base)
+{
+    /* System generated locals */
+    integer i__1;
+    real r__1;
+
+    /* Local variables */
+    static real a;
+    static integer i__;
+    static real b1, b2, c1, c2, d1, d2, one, zero, rbase;
+    extern doublereal slamc3_(real *, real *);
+
+
+/*  -- LAPACK auxiliary routine (version 3.0) -- */
+/*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */
+/*     Courant Institute, Argonne National Lab, and Rice University */
+/*     October 31, 1992 */
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*  SLAMC4 is a service routine for SLAMC2. */
+
+/*  Arguments */
+/*  ========= */
+
+/*  EMIN    (output) EMIN */
+/*          The minimum exponent before (gradual) underflow, computed by */
+/*          setting A = START and dividing by BASE until the previous A */
+/*          can not be recovered. */
+
+/*  START   (input) REAL */
+/*          The starting point for determining EMIN. */
+
+/*  BASE    (input) INTEGER */
+/*          The base of the machine. */
+
+/* ===================================================================== */
+
+/*     .. Local Scalars .. */
+/*     .. */
+/*     .. External Functions .. */
+/*     .. */
+/*     .. Executable Statements .. */
+
+    a = *start;
+    one = 1.f;
+    rbase = one / *base;
+    zero = 0.f;
+    *emin = 1;
+    r__1 = a * rbase;
+    b1 = slamc3_(&r__1, &zero);
+    c1 = a;
+    c2 = a;
+    d1 = a;
+    d2 = a;
+/* +    WHILE( ( C1.EQ.A ).AND.( C2.EQ.A ).AND. */
+/*    $       ( D1.EQ.A ).AND.( D2.EQ.A )      )LOOP */
+  L10:
+    if (c1 == a && c2 == a && d1 == a && d2 == a) {
+        --(*emin);
+        a = b1;
+        r__1 = a / *base;
+        b1 = slamc3_(&r__1, &zero);
+        r__1 = b1 * *base;
+        c1 = slamc3_(&r__1, &zero);
+        d1 = zero;
+        i__1 = *base;
+        for (i__ = 1; i__ <= i__1; ++i__) {
+            d1 += b1;
+/* L20: */
+        }
+        r__1 = a * rbase;
+        b2 = slamc3_(&r__1, &zero);
+        r__1 = b2 / rbase;
+        c2 = slamc3_(&r__1, &zero);
+        d2 = zero;
+        i__1 = *base;
+        for (i__ = 1; i__ <= i__1; ++i__) {
+            d2 += b2;
+/* L30: */
+        }
+        goto L10;
+    }
+/* +    END WHILE */
+
+    return 0;
+
+/*     End of SLAMC4 */
+
+}                               /* slamc4_ */
+
+
+/* *********************************************************************** */
+
+/* Subroutine */ int
+slamc5_(integer * beta, integer * p, integer * emin,
+        logical * ieee, integer * emax, real * rmax)
+{
+    /* System generated locals */
+    integer i__1;
+    real r__1;
+
+    /* Local variables */
+    static integer i__;
+    static real y, z__;
+    static integer try__, lexp;
+    static real oldy;
+    static integer uexp, nbits;
+    extern doublereal slamc3_(real *, real *);
+    static real recbas;
+    static integer exbits, expsum;
+
+
+/*  -- LAPACK auxiliary routine (version 3.0) -- */
+/*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */
+/*     Courant Institute, Argonne National Lab, and Rice University */
+/*     October 31, 1992 */
+
+/*     .. Scalar Arguments .. */
+/*     .. */
+
+/*  Purpose */
+/*  ======= */
+
+/*  SLAMC5 attempts to compute RMAX, the largest machine floating-point */
+/*  number, without overflow.  It assumes that EMAX + abs(EMIN) sum */
+/*  approximately to a power of 2.  It will fail on machines where this */
+/*  assumption does not hold, for example, the Cyber 205 (EMIN = -28625, */
+/*  EMAX = 28718).  It will also fail if the value supplied for EMIN is */
+/*  too large (i.e. too close to zero), probably with overflow. */
+
+/*  Arguments */
+/*  ========= */
+
+/*  BETA    (input) INTEGER */
+/*          The base of floating-point arithmetic. */
+
+/*  P       (input) INTEGER */
+/*          The number of base BETA digits in the mantissa of a */
+/*          floating-point value. */
+
+/*  EMIN    (input) INTEGER */
+/*          The minimum exponent before (gradual) underflow. */
+
+/*  IEEE    (input) LOGICAL */
+/*          A logical flag specifying whether or not the arithmetic */
+/*          system is thought to comply with the IEEE standard. */
+
+/*  EMAX    (output) INTEGER */
+/*          The largest exponent before overflow */
+
+/*  RMAX    (output) REAL */
+/*          The largest machine floating-point number. */
+
+/* ===================================================================== */
+
+/*     .. Parameters .. */
+/*     .. */
+/*     .. Local Scalars .. */
+/*     .. */
+/*     .. External Functions .. */
+/*     .. */
+/*     .. Intrinsic Functions .. */
+/*     .. */
+/*     .. Executable Statements .. */
+
+/*     First compute LEXP and UEXP, two powers of 2 that bound */
+/*     abs(EMIN). We then assume that EMAX + abs(EMIN) will sum */
+/*     approximately to the bound that is closest to abs(EMIN). */
+/*     (EMAX is the exponent of the required number RMAX). */
+
+    lexp = 1;
+    exbits = 1;
+  L10:
+    try__ = lexp << 1;
+    if (try__ <= -(*emin)) {
+        lexp = try__;
+        ++exbits;
+        goto L10;
+    }
+    if (lexp == -(*emin)) {
+        uexp = lexp;
+    }
+    else {
+        uexp = try__;
+        ++exbits;
+    }
+
+/*     Now -LEXP is less than or equal to EMIN, and -UEXP is greater */
+/*     than or equal to EMIN. EXBITS is the number of bits needed to */
+/*     store the exponent. */
+
+    if (uexp + *emin > -lexp - *emin) {
+        expsum = lexp << 1;
+    }
+    else {
+        expsum = uexp << 1;
+    }
+
+/*     EXPSUM is the exponent range, approximately equal to */
+/*     EMAX - EMIN + 1 . */
+
+    *emax = expsum + *emin - 1;
+    nbits = exbits + 1 + *p;
+
+/*     NBITS is the total number of bits needed to store a */
+/*     floating-point number. */
+
+    if (nbits % 2 == 1 && *beta == 2) {
+
+/*        Either there are an odd number of bits used to store a */
+/*        floating-point number, which is unlikely, or some bits are */
+/*        not used in the representation of numbers, which is possible, */
+/*        (e.g. Cray machines) or the mantissa has an implicit bit, */
+/*        (e.g. IEEE machines, Dec Vax machines), which is perhaps the */
+/*        most likely. We have to assume the last alternative. */
+/*        If this is true, then we need to reduce EMAX by one because */
+/*        there must be some way of representing zero in an implicit-bit */
+/*        system. On machines like Cray, we are reducing EMAX by one */
+/*        unnecessarily. */
+
+        --(*emax);
+    }
+
+    if (*ieee) {
+
+/*        Assume we are on an IEEE machine which reserves one exponent */
+/*        for infinity and NaN. */
+
+        --(*emax);
+    }
+
+/*     Now create RMAX, the largest machine number, which should */
+/*     be equal to (1.0 - BETA**(-P)) * BETA**EMAX . */
+
+/*     First compute 1.0 - BETA**(-P), being careful that the */
+/*     result is less than 1.0 . */
+
+    recbas = 1.f / *beta;
+    z__ = *beta - 1.f;
+    y = 0.f;
+    i__1 = *p;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+        z__ *= recbas;
+        if (y < 1.f) {
+            oldy = y;
+        }
+        y = slamc3_(&y, &z__);
+/* L20: */
+    }
+    if (y >= 1.f) {
+        y = oldy;
+    }
+
+/*     Now multiply by BETA**EMAX to get RMAX. */
+
+    i__1 = *emax;
+    for (i__ = 1; i__ <= i__1; ++i__) {
+        r__1 = y * *beta;
+        y = slamc3_(&r__1, &c_b32);
+/* L30: */
+    }
+
+    *rmax = y;
+    return 0;
+
+/*     End of SLAMC5 */
+
+}                               /* slamc5_ */
diff --git a/src/libsphinxbase/util/slapack_lite.c b/src/libsphinxbase/util/slapack_lite.c
new file mode 100644 (file)
index 0000000..4d4e1af
--- /dev/null
@@ -0,0 +1,1461 @@
+/*
+NOTE: This is generated code. Look in README.python for information on
+      remaking this file.
+*/
+#include "sphinxbase/f2c.h"
+
+#ifdef HAVE_CONFIG
+#include "config.h"
+#else
+extern doublereal slamch_(char *);
+#define EPSILON slamch_("Epsilon")
+#define SAFEMINIMUM slamch_("Safe minimum")
+#define PRECISION slamch_("Precision")
+#define BASE slamch_("Base")
+#endif
+
+
+extern doublereal slapy2_(real *, real *);
+
+
+
+/* Table of constant values */
+
+static integer c__0 = 0;
+static real c_b163 = 0.f;
+static real c_b164 = 1.f;
+static integer c__1 = 1;
+static real c_b181 = -1.f;
+static integer c_n1 = -1;
+
+integer ieeeck_(integer *ispec, real *zero, real *one)
+{
+    /* System generated locals */
+    integer ret_val;
+
+    /* Local variables */
+    static real nan1, nan2, nan3, nan4, nan5, nan6, neginf, posinf, negzro,
+           newzro;
+
+
+/*
+    -- LAPACK auxiliary routine (version 3.0) --
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+       Courant Institute, Argonne National Lab, and Rice University
+       June 30, 1998
+
+
+    Purpose
+    =======
+
+    IEEECK is called from the ILAENV to verify that Infinity and
+    possibly NaN arithmetic is safe (i.e. will not trap).
+
+    Arguments
+    =========
+
+    ISPEC   (input) INTEGER
+            Specifies whether to test just for inifinity arithmetic
+            or whether to test for infinity and NaN arithmetic.
+            = 0: Verify infinity arithmetic only.
+            = 1: Verify infinity and NaN arithmetic.
+
+    ZERO    (input) REAL
+            Must contain the value 0.0
+            This is passed to prevent the compiler from optimizing
+            away this code.
+
+    ONE     (input) REAL
+            Must contain the value 1.0
+            This is passed to prevent the compiler from optimizing
+            away this code.
+
+    RETURN VALUE:  INTEGER
+            = 0:  Arithmetic failed to produce the correct answers
+            = 1:  Arithmetic produced the correct answers
+*/
+
+    ret_val = 1;
+
+    posinf = *one / *zero;
+    if (posinf <= *one) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    neginf = -(*one) / *zero;
+    if (neginf >= *zero) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    negzro = *one / (neginf + *one);
+    if (negzro != *zero) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    neginf = *one / negzro;
+    if (neginf >= *zero) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    newzro = negzro + *zero;
+    if (newzro != *zero) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    posinf = *one / newzro;
+    if (posinf <= *one) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    neginf *= posinf;
+    if (neginf >= *zero) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    posinf *= posinf;
+    if (posinf <= *one) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+
+/*     Return if we were only asked to check infinity arithmetic */
+
+    if (*ispec == 0) {
+       return ret_val;
+    }
+
+    nan1 = posinf + neginf;
+
+    nan2 = posinf / neginf;
+
+    nan3 = posinf / posinf;
+
+    nan4 = posinf * *zero;
+
+    nan5 = neginf * negzro;
+
+    nan6 = nan5 * 0.f;
+
+    if (nan1 == nan1) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    if (nan2 == nan2) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    if (nan3 == nan3) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    if (nan4 == nan4) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    if (nan5 == nan5) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    if (nan6 == nan6) {
+       ret_val = 0;
+       return ret_val;
+    }
+
+    return ret_val;
+} /* ieeeck_ */
+
+integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
+       integer *n2, integer *n3, integer *n4, ftnlen name_len, ftnlen
+       opts_len)
+{
+    /* System generated locals */
+    integer ret_val;
+
+    /* Builtin functions */
+    /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);
+    integer s_cmp(char *, char *, ftnlen, ftnlen);
+
+    /* Local variables */
+    static integer i__;
+    static char c1[1], c2[2], c3[3], c4[2];
+    static integer ic, nb, iz, nx;
+    static logical cname, sname;
+    static integer nbmin;
+    extern integer ieeeck_(integer *, real *, real *);
+    static char subnam[6];
+
+
+/*
+    -- LAPACK auxiliary routine (version 3.0) --
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+       Courant Institute, Argonne National Lab, and Rice University
+       June 30, 1999
+
+
+    Purpose
+    =======
+
+    ILAENV is called from the LAPACK routines to choose problem-dependent
+    parameters for the local environment.  See ISPEC for a description of
+    the parameters.
+
+    This version provides a set of parameters which should give good,
+    but not optimal, performance on many of the currently available
+    computers.  Users are encouraged to modify this subroutine to set
+    the tuning parameters for their particular machine using the option
+    and problem size information in the arguments.
+
+    This routine will not function correctly if it is converted to all
+    lower case.  Converting it to all upper case is allowed.
+
+    Arguments
+    =========
+
+    ISPEC   (input) INTEGER
+            Specifies the parameter to be returned as the value of
+            ILAENV.
+            = 1: the optimal blocksize; if this value is 1, an unblocked
+                 algorithm will give the best performance.
+            = 2: the minimum block size for which the block routine
+                 should be used; if the usable block size is less than
+                 this value, an unblocked routine should be used.
+            = 3: the crossover point (in a block routine, for N less
+                 than this value, an unblocked routine should be used)
+            = 4: the number of shifts, used in the nonsymmetric
+                 eigenvalue routines
+            = 5: the minimum column dimension for blocking to be used;
+                 rectangular blocks must have dimension at least k by m,
+                 where k is given by ILAENV(2,...) and m by ILAENV(5,...)
+            = 6: the crossover point for the SVD (when reducing an m by n
+                 matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
+                 this value, a QR factorization is used first to reduce
+                 the matrix to a triangular form.)
+            = 7: the number of processors
+            = 8: the crossover point for the multishift QR and QZ methods
+                 for nonsymmetric eigenvalue problems.
+            = 9: maximum size of the subproblems at the bottom of the
+                 computation tree in the divide-and-conquer algorithm
+                 (used by xGELSD and xGESDD)
+            =10: ieee NaN arithmetic can be trusted not to trap
+            =11: infinity arithmetic can be trusted not to trap
+
+    NAME    (input) CHARACTER*(*)
+            The name of the calling subroutine, in either upper case or
+            lower case.
+
+    OPTS    (input) CHARACTER*(*)
+            The character options to the subroutine NAME, concatenated
+            into a single character string.  For example, UPLO = 'U',
+            TRANS = 'T', and DIAG = 'N' for a triangular routine would
+            be specified as OPTS = 'UTN'.
+
+    N1      (input) INTEGER
+    N2      (input) INTEGER
+    N3      (input) INTEGER
+    N4      (input) INTEGER
+            Problem dimensions for the subroutine NAME; these may not all
+            be required.
+
+   (ILAENV) (output) INTEGER
+            >= 0: the value of the parameter specified by ISPEC
+            < 0:  if ILAENV = -k, the k-th argument had an illegal value.
+
+    Further Details
+    ===============
+
+    The following conventions have been used when calling ILAENV from the
+    LAPACK routines:
+    1)  OPTS is a concatenation of all of the character options to
+        subroutine NAME, in the same order that they appear in the
+        argument list for NAME, even if they are not used in determining
+        the value of the parameter specified by ISPEC.
+    2)  The problem dimensions N1, N2, N3, N4 are specified in the order
+        that they appear in the argument list for NAME.  N1 is used
+        first, N2 second, and so on, and unused problem dimensions are
+        passed a value of -1.
+    3)  The parameter value returned by ILAENV is checked for validity in
+        the calling subroutine.  For example, ILAENV is used to retrieve
+        the optimal blocksize for STRTRI as follows:
+
+        NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
+        IF( NB.LE.1 ) NB = MAX( 1, N )
+
+    =====================================================================
+*/
+
+
+    switch (*ispec) {
+       case 1:  goto L100;
+       case 2:  goto L100;
+       case 3:  goto L100;
+       case 4:  goto L400;
+       case 5:  goto L500;
+       case 6:  goto L600;
+       case 7:  goto L700;
+       case 8:  goto L800;
+       case 9:  goto L900;
+       case 10:  goto L1000;
+       case 11:  goto L1100;
+    }
+
+/*     Invalid value for ISPEC */
+
+    ret_val = -1;
+    return ret_val;
+
+L100:
+
+/*     Convert NAME to upper case if the first character is lower case. */
+
+    ret_val = 1;
+    s_copy(subnam, name__, (ftnlen)6, name_len);
+    ic = *(unsigned char *)subnam;
+    iz = 'Z';
+    if (iz == 90 || iz == 122) {
+
+/*        ASCII character set */
+
+       if (ic >= 97 && ic <= 122) {
+           *(unsigned char *)subnam = (char) (ic - 32);
+           for (i__ = 2; i__ <= 6; ++i__) {
+               ic = *(unsigned char *)&subnam[i__ - 1];
+               if (ic >= 97 && ic <= 122) {
+                   *(unsigned char *)&subnam[i__ - 1] = (char) (ic - 32);
+               }
+/* L10: */
+           }
+       }
+
+    } else if (iz == 233 || iz == 169) {
+
+/*        EBCDIC character set */
+
+       if (ic >= 129 && ic <= 137 || ic >= 145 && ic <= 153 || ic >= 162 &&
+               ic <= 169) {
+           *(unsigned char *)subnam = (char) (ic + 64);
+           for (i__ = 2; i__ <= 6; ++i__) {
+               ic = *(unsigned char *)&subnam[i__ - 1];
+               if (ic >= 129 && ic <= 137 || ic >= 145 && ic <= 153 || ic >=
+                       162 && ic <= 169) {
+                   *(unsigned char *)&subnam[i__ - 1] = (char) (ic + 64);
+               }
+/* L20: */
+           }
+       }
+
+    } else if (iz == 218 || iz == 250) {
+
+/*        Prime machines:  ASCII+128 */
+
+       if (ic >= 225 && ic <= 250) {
+           *(unsigned char *)subnam = (char) (ic - 32);
+           for (i__ = 2; i__ <= 6; ++i__) {
+               ic = *(unsigned char *)&subnam[i__ - 1];
+               if (ic >= 225 && ic <= 250) {
+                   *(unsigned char *)&subnam[i__ - 1] = (char) (ic - 32);
+               }
+/* L30: */
+           }
+       }
+    }
+
+    *(unsigned char *)c1 = *(unsigned char *)subnam;
+    sname = *(unsigned char *)c1 == 'S' || *(unsigned char *)c1 == 'D';
+    cname = *(unsigned char *)c1 == 'C' || *(unsigned char *)c1 == 'Z';
+    if (! (cname || sname)) {
+       return ret_val;
+    }
+    s_copy(c2, subnam + 1, (ftnlen)2, (ftnlen)2);
+    s_copy(c3, subnam + 3, (ftnlen)3, (ftnlen)3);
+    s_copy(c4, c3 + 1, (ftnlen)2, (ftnlen)2);
+
+    switch (*ispec) {
+       case 1:  goto L110;
+       case 2:  goto L200;
+       case 3:  goto L300;
+    }
+
+L110:
+
+/*
+       ISPEC = 1:  block size
+
+       In these examples, separate code is provided for setting NB for
+       real and complex.  We assume that NB will take the same value in
+       single or double precision.
+*/
+
+    nb = 1;
+
+    if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nb = 64;
+           } else {
+               nb = 64;
+           }
+       } else if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3,
+               "RQF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)
+               3, (ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3)
+               == 0) {
+           if (sname) {
+               nb = 32;
+           } else {
+               nb = 32;
+           }
+       } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nb = 32;
+           } else {
+               nb = 32;
+           }
+       } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nb = 32;
+           } else {
+               nb = 32;
+           }
+       } else if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nb = 64;
+           } else {
+               nb = 64;
+           }
+       }
+    } else if (s_cmp(c2, "PO", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nb = 64;
+           } else {
+               nb = 64;
+           }
+       }
+    } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nb = 64;
+           } else {
+               nb = 64;
+           }
+       } else if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
+           nb = 32;
+       } else if (sname && s_cmp(c3, "GST", (ftnlen)3, (ftnlen)3) == 0) {
+           nb = 64;
+       }
+    } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
+           nb = 64;
+       } else if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
+           nb = 32;
+       } else if (s_cmp(c3, "GST", (ftnlen)3, (ftnlen)3) == 0) {
+           nb = 64;
+       }
+    } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) {
+       if (*(unsigned char *)c3 == 'G') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nb = 32;
+           }
+       } else if (*(unsigned char *)c3 == 'M') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nb = 32;
+           }
+       }
+    } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) {
+       if (*(unsigned char *)c3 == 'G') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nb = 32;
+           }
+       } else if (*(unsigned char *)c3 == 'M') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nb = 32;
+           }
+       }
+    } else if (s_cmp(c2, "GB", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               if (*n4 <= 64) {
+                   nb = 1;
+               } else {
+                   nb = 32;
+               }
+           } else {
+               if (*n4 <= 64) {
+                   nb = 1;
+               } else {
+                   nb = 32;
+               }
+           }
+       }
+    } else if (s_cmp(c2, "PB", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               if (*n2 <= 64) {
+                   nb = 1;
+               } else {
+                   nb = 32;
+               }
+           } else {
+               if (*n2 <= 64) {
+                   nb = 1;
+               } else {
+                   nb = 32;
+               }
+           }
+       }
+    } else if (s_cmp(c2, "TR", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nb = 64;
+           } else {
+               nb = 64;
+           }
+       }
+    } else if (s_cmp(c2, "LA", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "UUM", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nb = 64;
+           } else {
+               nb = 64;
+           }
+       }
+    } else if (sname && s_cmp(c2, "ST", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "EBZ", (ftnlen)3, (ftnlen)3) == 0) {
+           nb = 1;
+       }
+    }
+    ret_val = nb;
+    return ret_val;
+
+L200:
+
+/*     ISPEC = 2:  minimum block size */
+
+    nbmin = 2;
+    if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "RQF", (
+               ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)3, (
+               ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) == 0)
+                {
+           if (sname) {
+               nbmin = 2;
+           } else {
+               nbmin = 2;
+           }
+       } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nbmin = 2;
+           } else {
+               nbmin = 2;
+           }
+       } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nbmin = 2;
+           } else {
+               nbmin = 2;
+           }
+       } else if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nbmin = 2;
+           } else {
+               nbmin = 2;
+           }
+       }
+    } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nbmin = 8;
+           } else {
+               nbmin = 8;
+           }
+       } else if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
+           nbmin = 2;
+       }
+    } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
+           nbmin = 2;
+       }
+    } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) {
+       if (*(unsigned char *)c3 == 'G') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nbmin = 2;
+           }
+       } else if (*(unsigned char *)c3 == 'M') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nbmin = 2;
+           }
+       }
+    } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) {
+       if (*(unsigned char *)c3 == 'G') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nbmin = 2;
+           }
+       } else if (*(unsigned char *)c3 == 'M') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nbmin = 2;
+           }
+       }
+    }
+    ret_val = nbmin;
+    return ret_val;
+
+L300:
+
+/*     ISPEC = 3:  crossover point */
+
+    nx = 0;
+    if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "RQF", (
+               ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)3, (
+               ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) == 0)
+                {
+           if (sname) {
+               nx = 128;
+           } else {
+               nx = 128;
+           }
+       } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nx = 128;
+           } else {
+               nx = 128;
+           }
+       } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) {
+           if (sname) {
+               nx = 128;
+           } else {
+               nx = 128;
+           }
+       }
+    } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) {
+       if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
+           nx = 32;
+       }
+    } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) {
+       if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
+           nx = 32;
+       }
+    } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) {
+       if (*(unsigned char *)c3 == 'G') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nx = 128;
+           }
+       }
+    } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) {
+       if (*(unsigned char *)c3 == 'G') {
+           if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
+                   (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
+                   ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
+                    0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
+                   c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
+                   ftnlen)2, (ftnlen)2) == 0) {
+               nx = 128;
+           }
+       }
+    }
+    ret_val = nx;
+    return ret_val;
+
+L400:
+
+/*     ISPEC = 4:  number of shifts (used by xHSEQR) */
+
+    ret_val = 6;
+    return ret_val;
+
+L500:
+
+/*     ISPEC = 5:  minimum column dimension (not used) */
+
+    ret_val = 2;
+    return ret_val;
+
+L600:
+
+/*     ISPEC = 6:  crossover point for SVD (used by xGELSS and xGESVD) */
+
+    ret_val = (integer) ((real) min(*n1,*n2) * 1.6f);
+    return ret_val;
+
+L700:
+
+/*     ISPEC = 7:  number of processors (not used) */
+
+    ret_val = 1;
+    return ret_val;
+
+L800:
+
+/*     ISPEC = 8:  crossover point for multishift (used by xHSEQR) */
+
+    ret_val = 50;
+    return ret_val;
+
+L900:
+
+/*
+       ISPEC = 9:  maximum size of the subproblems at the bottom of the
+                   computation tree in the divide-and-conquer algorithm
+                   (used by xGELSD and xGESDD)
+*/
+
+    ret_val = 25;
+    return ret_val;
+
+L1000:
+
+/*
+       ISPEC = 10: ieee NaN arithmetic can be trusted not to trap
+
+       ILAENV = 0
+*/
+    ret_val = 1;
+    if (ret_val == 1) {
+       ret_val = ieeeck_(&c__0, &c_b163, &c_b164);
+    }
+    return ret_val;
+
+L1100:
+
+/*
+       ISPEC = 11: infinity arithmetic can be trusted not to trap
+
+       ILAENV = 0
+*/
+    ret_val = 1;
+    if (ret_val == 1) {
+       ret_val = ieeeck_(&c__1, &c_b163, &c_b164);
+    }
+    return ret_val;
+
+/*     End of ILAENV */
+
+} /* ilaenv_ */
+
+/* Subroutine */ int sposv_(char *uplo, integer *n, integer *nrhs, real *a,
+       integer *lda, real *b, integer *ldb, integer *info)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, b_dim1, b_offset, i__1;
+
+    /* Local variables */
+    extern logical lsame_(char *, char *);
+    extern /* Subroutine */ int xerbla_(char *, integer *), spotrf_(
+           char *, integer *, real *, integer *, integer *), spotrs_(
+           char *, integer *, integer *, real *, integer *, real *, integer *
+           , integer *);
+
+
+/*
+    -- LAPACK driver routine (version 3.0) --
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+       Courant Institute, Argonne National Lab, and Rice University
+       March 31, 1993
+
+
+    Purpose
+    =======
+
+    SPOSV computes the solution to a real system of linear equations
+       A * X = B,
+    where A is an N-by-N symmetric positive definite matrix and X and B
+    are N-by-NRHS matrices.
+
+    The Cholesky decomposition is used to factor A as
+       A = U**T* U,  if UPLO = 'U', or
+       A = L * L**T,  if UPLO = 'L',
+    where U is an upper triangular matrix and L is a lower triangular
+    matrix.  The factored form of A is then used to solve the system of
+    equations A * X = B.
+
+    Arguments
+    =========
+
+    UPLO    (input) CHARACTER*1
+            = 'U':  Upper triangle of A is stored;
+            = 'L':  Lower triangle of A is stored.
+
+    N       (input) INTEGER
+            The number of linear equations, i.e., the order of the
+            matrix A.  N >= 0.
+
+    NRHS    (input) INTEGER
+            The number of right hand sides, i.e., the number of columns
+            of the matrix B.  NRHS >= 0.
+
+    A       (input/output) REAL array, dimension (LDA,N)
+            On entry, the symmetric matrix A.  If UPLO = 'U', the leading
+            N-by-N upper triangular part of A contains the upper
+            triangular part of the matrix A, and the strictly lower
+            triangular part of A is not referenced.  If UPLO = 'L', the
+            leading N-by-N lower triangular part of A contains the lower
+            triangular part of the matrix A, and the strictly upper
+            triangular part of A is not referenced.
+
+            On exit, if INFO = 0, the factor U or L from the Cholesky
+            factorization A = U**T*U or A = L*L**T.
+
+    LDA     (input) INTEGER
+            The leading dimension of the array A.  LDA >= max(1,N).
+
+    B       (input/output) REAL array, dimension (LDB,NRHS)
+            On entry, the N-by-NRHS right hand side matrix B.
+            On exit, if INFO = 0, the N-by-NRHS solution matrix X.
+
+    LDB     (input) INTEGER
+            The leading dimension of the array B.  LDB >= max(1,N).
+
+    INFO    (output) INTEGER
+            = 0:  successful exit
+            < 0:  if INFO = -i, the i-th argument had an illegal value
+            > 0:  if INFO = i, the leading minor of order i of A is not
+                  positive definite, so the factorization could not be
+                  completed, and the solution has not been computed.
+
+    =====================================================================
+
+
+       Test the input parameters.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+    b_dim1 = *ldb;
+    b_offset = 1 + b_dim1;
+    b -= b_offset;
+
+    /* Function Body */
+    *info = 0;
+    if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
+       *info = -1;
+    } else if (*n < 0) {
+       *info = -2;
+    } else if (*nrhs < 0) {
+       *info = -3;
+    } else if (*lda < max(1,*n)) {
+       *info = -5;
+    } else if (*ldb < max(1,*n)) {
+       *info = -7;
+    }
+    if (*info != 0) {
+       i__1 = -(*info);
+       xerbla_("SPOSV ", &i__1);
+       return 0;
+    }
+
+/*     Compute the Cholesky factorization A = U'*U or A = L*L'. */
+
+    spotrf_(uplo, n, &a[a_offset], lda, info);
+    if (*info == 0) {
+
+/*        Solve the system A*X = B, overwriting B with X. */
+
+       spotrs_(uplo, n, nrhs, &a[a_offset], lda, &b[b_offset], ldb, info);
+
+    }
+    return 0;
+
+/*     End of SPOSV */
+
+} /* sposv_ */
+
+/* Subroutine */ int spotf2_(char *uplo, integer *n, real *a, integer *lda,
+       integer *info)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, i__1, i__2, i__3;
+    real r__1;
+
+    /* Builtin functions */
+    double sqrt(doublereal);
+
+    /* Local variables */
+    static integer j;
+    static real ajj;
+    extern doublereal sdot_(integer *, real *, integer *, real *, integer *);
+    extern logical lsame_(char *, char *);
+    extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *),
+           sgemv_(char *, integer *, integer *, real *, real *, integer *,
+           real *, integer *, real *, real *, integer *);
+    static logical upper;
+    extern /* Subroutine */ int xerbla_(char *, integer *);
+
+
+/*
+    -- LAPACK routine (version 3.0) --
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+       Courant Institute, Argonne National Lab, and Rice University
+       February 29, 1992
+
+
+    Purpose
+    =======
+
+    SPOTF2 computes the Cholesky factorization of a real symmetric
+    positive definite matrix A.
+
+    The factorization has the form
+       A = U' * U ,  if UPLO = 'U', or
+       A = L  * L',  if UPLO = 'L',
+    where U is an upper triangular matrix and L is lower triangular.
+
+    This is the unblocked version of the algorithm, calling Level 2 BLAS.
+
+    Arguments
+    =========
+
+    UPLO    (input) CHARACTER*1
+            Specifies whether the upper or lower triangular part of the
+            symmetric matrix A is stored.
+            = 'U':  Upper triangular
+            = 'L':  Lower triangular
+
+    N       (input) INTEGER
+            The order of the matrix A.  N >= 0.
+
+    A       (input/output) REAL array, dimension (LDA,N)
+            On entry, the symmetric matrix A.  If UPLO = 'U', the leading
+            n by n upper triangular part of A contains the upper
+            triangular part of the matrix A, and the strictly lower
+            triangular part of A is not referenced.  If UPLO = 'L', the
+            leading n by n lower triangular part of A contains the lower
+            triangular part of the matrix A, and the strictly upper
+            triangular part of A is not referenced.
+
+            On exit, if INFO = 0, the factor U or L from the Cholesky
+            factorization A = U'*U  or A = L*L'.
+
+    LDA     (input) INTEGER
+            The leading dimension of the array A.  LDA >= max(1,N).
+
+    INFO    (output) INTEGER
+            = 0: successful exit
+            < 0: if INFO = -k, the k-th argument had an illegal value
+            > 0: if INFO = k, the leading minor of order k is not
+                 positive definite, and the factorization could not be
+                 completed.
+
+    =====================================================================
+
+
+       Test the input parameters.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+
+    /* Function Body */
+    *info = 0;
+    upper = lsame_(uplo, "U");
+    if (! upper && ! lsame_(uplo, "L")) {
+       *info = -1;
+    } else if (*n < 0) {
+       *info = -2;
+    } else if (*lda < max(1,*n)) {
+       *info = -4;
+    }
+    if (*info != 0) {
+       i__1 = -(*info);
+       xerbla_("SPOTF2", &i__1);
+       return 0;
+    }
+
+/*     Quick return if possible */
+
+    if (*n == 0) {
+       return 0;
+    }
+
+    if (upper) {
+
+/*        Compute the Cholesky factorization A = U'*U. */
+
+       i__1 = *n;
+       for (j = 1; j <= i__1; ++j) {
+
+/*           Compute U(J,J) and test for non-positive-definiteness. */
+
+           i__2 = j - 1;
+           ajj = a[j + j * a_dim1] - sdot_(&i__2, &a[j * a_dim1 + 1], &c__1,
+                   &a[j * a_dim1 + 1], &c__1);
+           if (ajj <= 0.f) {
+               a[j + j * a_dim1] = ajj;
+               goto L30;
+           }
+           ajj = sqrt(ajj);
+           a[j + j * a_dim1] = ajj;
+
+/*           Compute elements J+1:N of row J. */
+
+           if (j < *n) {
+               i__2 = j - 1;
+               i__3 = *n - j;
+               sgemv_("Transpose", &i__2, &i__3, &c_b181, &a[(j + 1) *
+                       a_dim1 + 1], lda, &a[j * a_dim1 + 1], &c__1, &c_b164,
+                       &a[j + (j + 1) * a_dim1], lda);
+               i__2 = *n - j;
+               r__1 = 1.f / ajj;
+               sscal_(&i__2, &r__1, &a[j + (j + 1) * a_dim1], lda);
+           }
+/* L10: */
+       }
+    } else {
+
+/*        Compute the Cholesky factorization A = L*L'. */
+
+       i__1 = *n;
+       for (j = 1; j <= i__1; ++j) {
+
+/*           Compute L(J,J) and test for non-positive-definiteness. */
+
+           i__2 = j - 1;
+           ajj = a[j + j * a_dim1] - sdot_(&i__2, &a[j + a_dim1], lda, &a[j
+                   + a_dim1], lda);
+           if (ajj <= 0.f) {
+               a[j + j * a_dim1] = ajj;
+               goto L30;
+           }
+           ajj = sqrt(ajj);
+           a[j + j * a_dim1] = ajj;
+
+/*           Compute elements J+1:N of column J. */
+
+           if (j < *n) {
+               i__2 = *n - j;
+               i__3 = j - 1;
+               sgemv_("No transpose", &i__2, &i__3, &c_b181, &a[j + 1 +
+                       a_dim1], lda, &a[j + a_dim1], lda, &c_b164, &a[j + 1
+                       + j * a_dim1], &c__1);
+               i__2 = *n - j;
+               r__1 = 1.f / ajj;
+               sscal_(&i__2, &r__1, &a[j + 1 + j * a_dim1], &c__1);
+           }
+/* L20: */
+       }
+    }
+    goto L40;
+
+L30:
+    *info = j;
+
+L40:
+    return 0;
+
+/*     End of SPOTF2 */
+
+} /* spotf2_ */
+
+/* Subroutine */ int spotrf_(char *uplo, integer *n, real *a, integer *lda,
+       integer *info)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, i__1, i__2, i__3, i__4;
+
+    /* Local variables */
+    static integer j, jb, nb;
+    extern logical lsame_(char *, char *);
+    extern /* Subroutine */ int sgemm_(char *, char *, integer *, integer *,
+           integer *, real *, real *, integer *, real *, integer *, real *,
+           real *, integer *);
+    static logical upper;
+    extern /* Subroutine */ int strsm_(char *, char *, char *, char *,
+           integer *, integer *, real *, real *, integer *, real *, integer *
+           ), ssyrk_(char *, char *, integer
+           *, integer *, real *, real *, integer *, real *, real *, integer *
+           ), spotf2_(char *, integer *, real *, integer *,
+           integer *), xerbla_(char *, integer *);
+    extern integer ilaenv_(integer *, char *, char *, integer *, integer *,
+           integer *, integer *, ftnlen, ftnlen);
+
+
+/*
+    -- LAPACK routine (version 3.0) --
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+       Courant Institute, Argonne National Lab, and Rice University
+       March 31, 1993
+
+
+    Purpose
+    =======
+
+    SPOTRF computes the Cholesky factorization of a real symmetric
+    positive definite matrix A.
+
+    The factorization has the form
+       A = U**T * U,  if UPLO = 'U', or
+       A = L  * L**T,  if UPLO = 'L',
+    where U is an upper triangular matrix and L is lower triangular.
+
+    This is the block version of the algorithm, calling Level 3 BLAS.
+
+    Arguments
+    =========
+
+    UPLO    (input) CHARACTER*1
+            = 'U':  Upper triangle of A is stored;
+            = 'L':  Lower triangle of A is stored.
+
+    N       (input) INTEGER
+            The order of the matrix A.  N >= 0.
+
+    A       (input/output) REAL array, dimension (LDA,N)
+            On entry, the symmetric matrix A.  If UPLO = 'U', the leading
+            N-by-N upper triangular part of A contains the upper
+            triangular part of the matrix A, and the strictly lower
+            triangular part of A is not referenced.  If UPLO = 'L', the
+            leading N-by-N lower triangular part of A contains the lower
+            triangular part of the matrix A, and the strictly upper
+            triangular part of A is not referenced.
+
+            On exit, if INFO = 0, the factor U or L from the Cholesky
+            factorization A = U**T*U or A = L*L**T.
+
+    LDA     (input) INTEGER
+            The leading dimension of the array A.  LDA >= max(1,N).
+
+    INFO    (output) INTEGER
+            = 0:  successful exit
+            < 0:  if INFO = -i, the i-th argument had an illegal value
+            > 0:  if INFO = i, the leading minor of order i is not
+                  positive definite, and the factorization could not be
+                  completed.
+
+    =====================================================================
+
+
+       Test the input parameters.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+
+    /* Function Body */
+    *info = 0;
+    upper = lsame_(uplo, "U");
+    if (! upper && ! lsame_(uplo, "L")) {
+       *info = -1;
+    } else if (*n < 0) {
+       *info = -2;
+    } else if (*lda < max(1,*n)) {
+       *info = -4;
+    }
+    if (*info != 0) {
+       i__1 = -(*info);
+       xerbla_("SPOTRF", &i__1);
+       return 0;
+    }
+
+/*     Quick return if possible */
+
+    if (*n == 0) {
+       return 0;
+    }
+
+/*     Determine the block size for this environment. */
+
+    nb = ilaenv_(&c__1, "SPOTRF", uplo, n, &c_n1, &c_n1, &c_n1, (ftnlen)6, (
+           ftnlen)1);
+    if (nb <= 1 || nb >= *n) {
+
+/*        Use unblocked code. */
+
+       spotf2_(uplo, n, &a[a_offset], lda, info);
+    } else {
+
+/*        Use blocked code. */
+
+       if (upper) {
+
+/*           Compute the Cholesky factorization A = U'*U. */
+
+           i__1 = *n;
+           i__2 = nb;
+           for (j = 1; i__2 < 0 ? j >= i__1 : j <= i__1; j += i__2) {
+
+/*
+                Update and factorize the current diagonal block and test
+                for non-positive-definiteness.
+
+   Computing MIN
+*/
+               i__3 = nb, i__4 = *n - j + 1;
+               jb = min(i__3,i__4);
+               i__3 = j - 1;
+               ssyrk_("Upper", "Transpose", &jb, &i__3, &c_b181, &a[j *
+                       a_dim1 + 1], lda, &c_b164, &a[j + j * a_dim1], lda);
+               spotf2_("Upper", &jb, &a[j + j * a_dim1], lda, info);
+               if (*info != 0) {
+                   goto L30;
+               }
+               if (j + jb <= *n) {
+
+/*                 Compute the current block row. */
+
+                   i__3 = *n - j - jb + 1;
+                   i__4 = j - 1;
+                   sgemm_("Transpose", "No transpose", &jb, &i__3, &i__4, &
+                           c_b181, &a[j * a_dim1 + 1], lda, &a[(j + jb) *
+                           a_dim1 + 1], lda, &c_b164, &a[j + (j + jb) *
+                           a_dim1], lda);
+                   i__3 = *n - j - jb + 1;
+                   strsm_("Left", "Upper", "Transpose", "Non-unit", &jb, &
+                           i__3, &c_b164, &a[j + j * a_dim1], lda, &a[j + (j
+                           + jb) * a_dim1], lda);
+               }
+/* L10: */
+           }
+
+       } else {
+
+/*           Compute the Cholesky factorization A = L*L'. */
+
+           i__2 = *n;
+           i__1 = nb;
+           for (j = 1; i__1 < 0 ? j >= i__2 : j <= i__2; j += i__1) {
+
+/*
+                Update and factorize the current diagonal block and test
+                for non-positive-definiteness.
+
+   Computing MIN
+*/
+               i__3 = nb, i__4 = *n - j + 1;
+               jb = min(i__3,i__4);
+               i__3 = j - 1;
+               ssyrk_("Lower", "No transpose", &jb, &i__3, &c_b181, &a[j +
+                       a_dim1], lda, &c_b164, &a[j + j * a_dim1], lda);
+               spotf2_("Lower", &jb, &a[j + j * a_dim1], lda, info);
+               if (*info != 0) {
+                   goto L30;
+               }
+               if (j + jb <= *n) {
+
+/*                 Compute the current block column. */
+
+                   i__3 = *n - j - jb + 1;
+                   i__4 = j - 1;
+                   sgemm_("No transpose", "Transpose", &i__3, &jb, &i__4, &
+                           c_b181, &a[j + jb + a_dim1], lda, &a[j + a_dim1],
+                           lda, &c_b164, &a[j + jb + j * a_dim1], lda);
+                   i__3 = *n - j - jb + 1;
+                   strsm_("Right", "Lower", "Transpose", "Non-unit", &i__3, &
+                           jb, &c_b164, &a[j + j * a_dim1], lda, &a[j + jb +
+                           j * a_dim1], lda);
+               }
+/* L20: */
+           }
+       }
+    }
+    goto L40;
+
+L30:
+    *info = *info + j - 1;
+
+L40:
+    return 0;
+
+/*     End of SPOTRF */
+
+} /* spotrf_ */
+
+/* Subroutine */ int spotrs_(char *uplo, integer *n, integer *nrhs, real *a,
+       integer *lda, real *b, integer *ldb, integer *info)
+{
+    /* System generated locals */
+    integer a_dim1, a_offset, b_dim1, b_offset, i__1;
+
+    /* Local variables */
+    extern logical lsame_(char *, char *);
+    static logical upper;
+    extern /* Subroutine */ int strsm_(char *, char *, char *, char *,
+           integer *, integer *, real *, real *, integer *, real *, integer *
+           ), xerbla_(char *, integer *);
+
+
+/*
+    -- LAPACK routine (version 3.0) --
+       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
+       Courant Institute, Argonne National Lab, and Rice University
+       March 31, 1993
+
+
+    Purpose
+    =======
+
+    SPOTRS solves a system of linear equations A*X = B with a symmetric
+    positive definite matrix A using the Cholesky factorization
+    A = U**T*U or A = L*L**T computed by SPOTRF.
+
+    Arguments
+    =========
+
+    UPLO    (input) CHARACTER*1
+            = 'U':  Upper triangle of A is stored;
+            = 'L':  Lower triangle of A is stored.
+
+    N       (input) INTEGER
+            The order of the matrix A.  N >= 0.
+
+    NRHS    (input) INTEGER
+            The number of right hand sides, i.e., the number of columns
+            of the matrix B.  NRHS >= 0.
+
+    A       (input) REAL array, dimension (LDA,N)
+            The triangular factor U or L from the Cholesky factorization
+            A = U**T*U or A = L*L**T, as computed by SPOTRF.
+
+    LDA     (input) INTEGER
+            The leading dimension of the array A.  LDA >= max(1,N).
+
+    B       (input/output) REAL array, dimension (LDB,NRHS)
+            On entry, the right hand side matrix B.
+            On exit, the solution matrix X.
+
+    LDB     (input) INTEGER
+            The leading dimension of the array B.  LDB >= max(1,N).
+
+    INFO    (output) INTEGER
+            = 0:  successful exit
+            < 0:  if INFO = -i, the i-th argument had an illegal value
+
+    =====================================================================
+
+
+       Test the input parameters.
+*/
+
+    /* Parameter adjustments */
+    a_dim1 = *lda;
+    a_offset = 1 + a_dim1;
+    a -= a_offset;
+    b_dim1 = *ldb;
+    b_offset = 1 + b_dim1;
+    b -= b_offset;
+
+    /* Function Body */
+    *info = 0;
+    upper = lsame_(uplo, "U");
+    if (! upper && ! lsame_(uplo, "L")) {
+       *info = -1;
+    } else if (*n < 0) {
+       *info = -2;
+    } else if (*nrhs < 0) {
+       *info = -3;
+    } else if (*lda < max(1,*n)) {
+       *info = -5;
+    } else if (*ldb < max(1,*n)) {
+       *info = -7;
+    }
+    if (*info != 0) {
+       i__1 = -(*info);
+       xerbla_("SPOTRS", &i__1);
+       return 0;
+    }
+
+/*     Quick return if possible */
+
+    if (*n == 0 || *nrhs == 0) {
+       return 0;
+    }
+
+    if (upper) {
+
+/*
+          Solve A*X = B where A = U'*U.
+
+          Solve U'*X = B, overwriting B with X.
+*/
+
+       strsm_("Left", "Upper", "Transpose", "Non-unit", n, nrhs, &c_b164, &a[
+               a_offset], lda, &b[b_offset], ldb);
+
+/*        Solve U*X = B, overwriting B with X. */
+
+       strsm_("Left", "Upper", "No transpose", "Non-unit", n, nrhs, &c_b164,
+               &a[a_offset], lda, &b[b_offset], ldb);
+    } else {
+
+/*
+          Solve A*X = B where A = L*L'.
+
+          Solve L*X = B, overwriting B with X.
+*/
+
+       strsm_("Left", "Lower", "No transpose", "Non-unit", n, nrhs, &c_b164,
+               &a[a_offset], lda, &b[b_offset], ldb);
+
+/*        Solve L'*X = B, overwriting B with X. */
+
+       strsm_("Left", "Lower", "Transpose", "Non-unit", n, nrhs, &c_b164, &a[
+               a_offset], lda, &b[b_offset], ldb);
+    }
+
+    return 0;
+
+/*     End of SPOTRS */
+
+} /* spotrs_ */
+
diff --git a/src/libsphinxbase/util/strfuncs.c b/src/libsphinxbase/util/strfuncs.c
new file mode 100644 (file)
index 0000000..a2bbaba
--- /dev/null
@@ -0,0 +1,186 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2006 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * strfuncs.c -- String functions
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <stdarg.h>
+
+#include "sphinxbase/ckd_alloc.h"
+#include "sphinxbase/strfuncs.h"
+
+/* Defined in dtoa.c */
+double sb_strtod(const char *s00, char **se);
+
+double
+atof_c(char const *str)
+{
+    return sb_strtod(str, NULL);
+}
+
+char *
+string_join(const char *base, ...)
+{
+    va_list args;
+    size_t len;
+    const char *c;
+    char *out;
+
+    va_start(args, base);
+    len = strlen(base);
+    while ((c = va_arg(args, const char *)) != NULL) {
+        len += strlen(c);
+    }
+    len++;
+    va_end(args);
+
+    out = ckd_calloc(len, 1);
+    va_start(args, base);
+    strcpy(out, base);
+    while ((c = va_arg(args, const char *)) != NULL) {
+        strcat(out, c);
+    }
+    va_end(args);
+
+    return out;
+}
+
+char *
+string_trim(char *string, enum string_edge_e which)
+{
+    size_t len;
+
+    len = strlen(string);
+    if (which == STRING_START || which == STRING_BOTH) {
+        size_t sub = strspn(string, " \t\n\r\f");
+        if (sub > 0) {
+            memmove(string, string + sub, len + 1 - sub);
+            len -= sub;
+        }
+    }
+    if (which == STRING_END || which == STRING_BOTH) {
+        long sub = len;
+        while (--sub >= 0)
+            if (strchr(" \t\n\r\f", string[sub]) == NULL)
+                break;
+        if (sub == -1)
+            string[0] = '\0';
+        else
+            string[sub+1] = '\0';
+    }
+    return string;
+}
+
+int32
+str2words(char *line, char **ptr, int32 max_ptr)
+{
+    int32 i, n;
+
+    n = 0;                      /* #words found so far */
+    i = 0;                      /* For scanning through the input string */
+    while (1) {
+        /* Skip whitespace before next word */
+        while (line[i] && isspace((unsigned char)line[i]))
+            ++i;
+        if (!line[i])
+            break;
+
+        if (ptr != NULL && n >= max_ptr) {
+            /*
+             * Pointer array size insufficient.  Restore NULL chars inserted so far
+             * to space chars.  Not a perfect restoration, but better than nothing.
+             */
+            for (; i >= 0; --i)
+                if (line[i] == '\0')
+                    line[i] = ' ';
+
+            return -1;
+        }
+
+        /* Scan to end of word */
+        if (ptr != NULL)
+            ptr[n] = line + i;
+        ++n;
+        while (line[i] && !isspace((unsigned char)line[i]))
+            ++i;
+        if (!line[i])
+            break;
+        if (ptr != NULL)
+            line[i] = '\0';
+        ++i;
+    }
+
+    return n;
+}
+
+
+int32
+nextword(char *line, const char *delim, char **word, char *delimfound)
+{
+    const char *d;
+    char *w;
+
+    /* Skip past any preceding delimiters */
+    for (w = line; *w; w++) {
+        for (d = delim; *d && (*d != *w); d++);
+        if (!*d)
+            break;
+    }
+    if (!*w)
+        return -1;
+
+    *word = w;                  /* Beginning of word */
+
+    /* Skip until first delimiter char */
+    for (w++; *w; w++) {
+        for (d = delim; *d && (*d != *w); d++);
+        if (*d)
+            break;
+    }
+
+    /* Replace delimiter with NULL char, but return the original first */
+    *delimfound = *w;
+    *w = '\0';
+
+    return (w - *word);
+}
diff --git a/src/libsphinxbase/util/string_wce.c b/src/libsphinxbase/util/string_wce.c
new file mode 100644 (file)
index 0000000..0351792
--- /dev/null
@@ -0,0 +1,56 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+/*********************************************************************
+ *
+ * File: string_wce.c
+ * 
+ * Description: string functions missing from Windows CE standard library
+ * 
+ * Author: Silvio Moioli <silvio@moioli.net>
+ * 
+ *********************************************************************/
+
+#include <string.h>
+#include <stdlib.h>
+
+#if defined(_WIN32_WCE)
+    char *strdup(const char * str)
+    {
+        char *p;
+        p = malloc( strlen(str)+1 );
+        strcpy( p, str );
+        return p;
+    }
+#endif
diff --git a/src/libsphinxbase/util/unlimit.c b/src/libsphinxbase/util/unlimit.c
new file mode 100644 (file)
index 0000000..553b929
--- /dev/null
@@ -0,0 +1,84 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * unlimit.c -- "unlimit" the memory usage of program.
+ * 
+ * **********************************************
+ * CMU ARPA Speech Project
+ *
+ * Copyright (c) 1999 Carnegie Mellon University.
+ * ALL RIGHTS RESERVED.
+ * **********************************************
+ * 
+ * HISTORY
+ * $Log$
+ * Revision 1.5  2005/06/22  03:12:31  arthchan2003
+ * 1, Fixed doxygen documentation, 2, Added  keyword.
+ * 
+ * Revision 1.3  2005/03/30 01:22:48  archan
+ * Fixed mistakes in last updates. Add
+ *
+ * 
+ * 03-Oct-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University.
+ *             Copied from Sphinx-II sources.
+ */
+
+
+#if ((! _WIN32) && (! _HPUX_SOURCE))
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+
+#include "sphinxbase/unlimit.h"
+
+
+/*
+ * The limit is set to the maximum of your system.
+ */
+void
+unlimit(void)
+{
+#if 0
+#if ((! WIN32) && (! _HPUX_SOURCE))
+    struct rlimit rl;
+
+    getrlimit(RLIMIT_DATA, &rl);
+    rl.rlim_cur = rl.rlim_max;
+    setrlimit(RLIMIT_DATA, &rl);
+#endif
+#endif
+}
diff --git a/src/libsphinxbase/util/utf8.c b/src/libsphinxbase/util/utf8.c
new file mode 100644 (file)
index 0000000..ac71e87
--- /dev/null
@@ -0,0 +1,75 @@
+/* Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de> */
+/* See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. */
+
+/* Slightly modified to use Sphinx types and remove explicit inline. */
+
+#include "sphinxbase/prim_type.h"
+
+#define UTF8_ACCEPT 0
+#define UTF8_REJECT 1
+
+static const uint8 utf8d[] = {
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 00..1f
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 20..3f
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 40..5f
+  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 60..7f
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, // 80..9f
+  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, // a0..bf
+  8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // c0..df
+  0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, // e0..ef
+  0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, // f0..ff
+  0x0,0x1,0x2,0x3,0x5,0x8,0x7,0x1,0x1,0x1,0x4,0x6,0x1,0x1,0x1,0x1, // s0..s0
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1, // s1..s2
+  1,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1, // s3..s4
+  1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1, // s5..s6
+  1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // s7..s8
+};
+
+uint32
+utf8_decode(uint32 *state, uint32 *codep, uint32 byte) {
+  uint32 type = utf8d[byte];
+
+  *codep = (*state != UTF8_ACCEPT) ?
+    (byte & 0x3fu) | (*codep << 6) :
+    (0xff >> type) & (byte);
+
+  *state = utf8d[256 + *state*16 + type];
+  return *state;
+}
+
+/* CMU code starts here. */
+/* ====================================================================
+ * Copyright (c) 2009 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
diff --git a/src/sphinx_adtools/Makefile.am b/src/sphinx_adtools/Makefile.am
new file mode 100644 (file)
index 0000000..920f83f
--- /dev/null
@@ -0,0 +1,9 @@
+bin_PROGRAMS = sphinx_cont_adseg sphinx_cont_fileseg sphinx_pitch
+
+sphinx_cont_adseg_SOURCES = cont_adseg.c
+sphinx_cont_fileseg_SOURCES = cont_fileseg.c
+
+LDADD = $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+        $(top_builddir)/src/libsphinxad/libsphinxad.la
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include
diff --git a/src/sphinx_adtools/Makefile.in b/src/sphinx_adtools/Makefile.in
new file mode 100644 (file)
index 0000000..bc4519d
--- /dev/null
@@ -0,0 +1,510 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+bin_PROGRAMS = sphinx_cont_adseg$(EXEEXT) sphinx_cont_fileseg$(EXEEXT) \
+       sphinx_pitch$(EXEEXT)
+subdir = src/sphinx_adtools
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_sphinx_cont_adseg_OBJECTS = cont_adseg.$(OBJEXT)
+sphinx_cont_adseg_OBJECTS = $(am_sphinx_cont_adseg_OBJECTS)
+sphinx_cont_adseg_LDADD = $(LDADD)
+sphinx_cont_adseg_DEPENDENCIES =  \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       $(top_builddir)/src/libsphinxad/libsphinxad.la
+am_sphinx_cont_fileseg_OBJECTS = cont_fileseg.$(OBJEXT)
+sphinx_cont_fileseg_OBJECTS = $(am_sphinx_cont_fileseg_OBJECTS)
+sphinx_cont_fileseg_LDADD = $(LDADD)
+sphinx_cont_fileseg_DEPENDENCIES =  \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       $(top_builddir)/src/libsphinxad/libsphinxad.la
+sphinx_pitch_SOURCES = sphinx_pitch.c
+sphinx_pitch_OBJECTS = sphinx_pitch.$(OBJEXT)
+sphinx_pitch_LDADD = $(LDADD)
+sphinx_pitch_DEPENDENCIES =  \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       $(top_builddir)/src/libsphinxad/libsphinxad.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(sphinx_cont_adseg_SOURCES) $(sphinx_cont_fileseg_SOURCES) \
+       sphinx_pitch.c
+DIST_SOURCES = $(sphinx_cont_adseg_SOURCES) \
+       $(sphinx_cont_fileseg_SOURCES) sphinx_pitch.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+sphinx_cont_adseg_SOURCES = cont_adseg.c
+sphinx_cont_fileseg_SOURCES = cont_fileseg.c
+LDADD = $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+        $(top_builddir)/src/libsphinxad/libsphinxad.la
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/sphinx_adtools/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/sphinx_adtools/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
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+sphinx_cont_adseg$(EXEEXT): $(sphinx_cont_adseg_OBJECTS) $(sphinx_cont_adseg_DEPENDENCIES) 
+       @rm -f sphinx_cont_adseg$(EXEEXT)
+       $(LINK) $(sphinx_cont_adseg_OBJECTS) $(sphinx_cont_adseg_LDADD) $(LIBS)
+sphinx_cont_fileseg$(EXEEXT): $(sphinx_cont_fileseg_OBJECTS) $(sphinx_cont_fileseg_DEPENDENCIES) 
+       @rm -f sphinx_cont_fileseg$(EXEEXT)
+       $(LINK) $(sphinx_cont_fileseg_OBJECTS) $(sphinx_cont_fileseg_LDADD) $(LIBS)
+sphinx_pitch$(EXEEXT): $(sphinx_pitch_OBJECTS) $(sphinx_pitch_DEPENDENCIES) 
+       @rm -f sphinx_pitch$(EXEEXT)
+       $(LINK) $(sphinx_pitch_OBJECTS) $(sphinx_pitch_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cont_adseg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cont_fileseg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinx_pitch.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+
+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: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-binPROGRAMS
+
+# 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/src/sphinx_adtools/cont_adseg.c b/src/sphinx_adtools/cont_adseg.c
new file mode 100644 (file)
index 0000000..10d3617
--- /dev/null
@@ -0,0 +1,150 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * cont_adseg.c -- Continuously listen and segment input speech into utterances.
+ * 
+ * HISTORY
+ * 
+ * 27-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/ad.h>
+#include <sphinxbase/cont_ad.h>
+#include <sphinxbase/err.h>
+
+/*
+ * Segment raw A/D input data into utterances whenever silence region of given
+ * duration is encountered.
+ * Utterances are written to files named 0001.raw, 0002.raw, 0003.raw, etc.
+ */
+int
+main(int32 argc, char **argv)
+{
+    ad_rec_t *ad;
+    cont_ad_t *cont;
+    int32 k, uttno, ts, uttlen, sps, endsilsamples;
+    float endsil;
+    int16 buf[4096];
+    FILE *fp;
+    char file[1024];
+
+    if ((argc != 3) ||
+        (sscanf(argv[1], "%d", &sps) != 1) ||
+        (sscanf(argv[2], "%f", &endsil) != 1) || (endsil <= 0.0)) {
+        E_FATAL("Usage: %s <sampling-rate> <utt-end-sil(sec)>\n", argv[0]);
+    }
+
+    /* Convert desired min. inter-utterance silence duration to #samples */
+    endsilsamples = (int32) (endsil * sps);
+
+    /* Open raw A/D device */
+    if ((ad = ad_open_sps(sps)) == NULL)
+        E_FATAL("ad_open_sps(%d) failed\n", sps);
+
+    /* Associate new continuous listening module with opened raw A/D device */
+    if ((cont = cont_ad_init(ad, ad_read)) == NULL)
+        E_FATAL("cont_ad_init failed\n");
+
+    /* Calibrate continuous listening for background noise/silence level */
+    printf("Calibrating ...");
+    fflush(stdout);
+    ad_start_rec(ad);
+    if (cont_ad_calib(cont) < 0)
+        printf(" failed\n");
+    else
+        printf(" done\n");
+
+    /* Forever listen for utterances */
+    printf("You may speak now\n");
+    fflush(stdout);
+    uttno = 0;
+    for (;;) {
+        /* Wait for beginning of next utterance; for non-silence data */
+        while ((k = cont_ad_read(cont, buf, 4096)) == 0);
+        if (k < 0)
+            E_FATAL("cont_ad_read failed\n");
+
+        /* Non-silence data received; open and write to new logging file */
+        uttno++;
+        sprintf(file, "%04d.raw", uttno);
+        if ((fp = fopen(file, "wb")) == NULL)
+            E_FATAL("Failed to open '%s' for reading: %s\n", file, strerror(errno));
+        fwrite(buf, sizeof(int16), k, fp);
+        uttlen = k;
+        printf("Utterance %04d, logging to %s\n", uttno, file);
+
+        /* Note current timestamp */
+        ts = cont->read_ts;
+
+        /* Read utterance data until a gap of at least 1 sec observed */
+        for (;;) {
+            if ((k = cont_ad_read(cont, buf, 4096)) < 0)
+                E_FATAL("cont_ad_read failed\n");
+            if (k == 0) {
+                /*
+                 * No speech data available; check current timestamp.  End of
+                 * utterance if no non-silence data been read for at least 1 sec.
+                 */
+                if ((cont->read_ts - ts) > endsilsamples)
+                    break;
+            }
+            else {
+                /* Note timestamp at the end of most recently read speech data */
+                ts = cont->read_ts;
+                uttlen += k;
+                fwrite(buf, sizeof(int16), k, fp);
+            }
+        }
+        fclose(fp);
+
+        printf("\tUtterance %04d = %d samples (%.1fsec)\n\n",
+               uttno, uttlen, (double) uttlen / (double) sps);
+    }
+
+    ad_stop_rec(ad);
+    cont_ad_close(cont);
+    ad_close(ad);
+    return 0;
+}
diff --git a/src/sphinx_adtools/cont_fileseg.c b/src/sphinx_adtools/cont_fileseg.c
new file mode 100644 (file)
index 0000000..cbb1333
--- /dev/null
@@ -0,0 +1,542 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1999-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*
+ * cont_fileseg.c -- Read input file, filter silence regions, and segment into utterances.
+ * 
+ * HISTORY
+ * 
+ * $Log: cont_fileseg.c,v $
+ * Revision 1.1.1.1  2006/05/23 18:45:02  dhuggins
+ * re-importation
+ *
+ * Revision 1.13  2005/06/30 00:28:46  rkm
+ * Kept within-utterance silences in rawmode
+ *
+ * 
+ * 28-Jun-2005 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Modified to use new state variables in cont_ad_t.
+ * 
+ * Revision 1.12  2005/05/31 15:54:38  rkm
+ * *** empty log message ***
+ *
+ * Revision 1.11  2005/05/24 20:56:58  rkm
+ * Added min/max-noise parameters to cont_fileseg
+ *
+ * Revision 1.10  2005/05/13 23:28:43  egouvea
+ * Changed null device to system dependent one: NUL for windows, /dev/null for everything else
+ * 
+ * $Log: cont_fileseg.c,v $
+ * Revision 1.1.1.1  2006/05/23 18:45:02  dhuggins
+ * re-importation
+ *
+ * Revision 1.13  2005/06/30 00:28:46  rkm
+ * Kept within-utterance silences in rawmode
+ *
+ * Revision 1.12  2005/05/31 15:54:38  rkm
+ * *** empty log message ***
+ *
+ * Revision 1.11  2005/05/24 20:56:58  rkm
+ * Added min/max-noise parameters to cont_fileseg
+ *
+ * Revision 1.9  2005/02/13 01:29:48  rkm
+ * Fixed cont_ad_read to never cross sil/speech boundary, and rawmode
+ *
+ * Revision 1.8  2005/02/01 22:21:13  rkm
+ * Added raw data logging, and raw data pass-through mode to cont_ad
+ *
+ * Revision 1.7  2004/07/16 00:57:11  egouvea
+ * Added Ravi's implementation of FSG support.
+ *
+ * Revision 1.3  2004/06/25 14:58:05  rkm
+ * *** empty log message ***
+ *
+ * Revision 1.2  2004/06/23 20:32:08  rkm
+ * Exposed several cont_ad config parameters
+ *
+ * 
+ * 27-Jun-96   M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University
+ *             Created.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <math.h>
+
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/ad.h>
+#include <sphinxbase/cont_ad.h>
+#include <sphinxbase/err.h>
+
+static FILE *infp;              /* File being segmented */
+static int32 swap;
+
+/* Max size read by file_ad_read function on each invocation, for debugging */
+static int32 max_ad_read_size;
+
+#if defined(WIN32) && !defined(GNUWINCE)
+#define NULL_DEVICE "NUL"
+#else
+#define NULL_DEVICE "/dev/null"
+#endif
+
+
+/*
+ * Need to provide cont_ad_init with a read function to read the input file.
+ * This is it.  The ad_rec_t *r argument is ignored since there is no A/D
+ * device involved.
+ */
+static int32
+file_ad_read(ad_rec_t * r, int16 * buf, int32 max)
+{
+    int32 i, k;
+
+    if (max > max_ad_read_size)
+        max = max_ad_read_size;
+
+    k = fread(buf, sizeof(int16), max, infp);
+    if (swap) {
+        for (i = 0; i < k; i++) {
+            buf[i] = ((buf[i] >> 8) & 0x00ff) | ((buf[i] << 8) & 0xff00);
+        }
+    }
+
+    return ((k > 0) ? k : -1);
+}
+
+
+static void
+usagemsg(char *pgm)
+{
+    E_INFO("Usage: %s \\\n", pgm);
+    E_INFOCONT("\t[-? | -h] \\\n");
+    E_INFOCONT("\t[-d | -debug] \\\n");
+    E_INFOCONT("\t[-sps <sampling-rate> (16000)] \\\n");
+    E_INFOCONT("\t[-b | -byteswap] \\\n");
+    E_INFOCONT
+        ("\t[{-s | -silsep} <length-silence-separator(sec) (0.5)]> \\\n");
+    E_INFOCONT("\t[-w | -writeseg] \\\n");
+    E_INFOCONT("\t[-min-noise <min-noise>] \\\n");
+    E_INFOCONT("\t[-max-noise <max-noise>] \\\n");
+    E_INFOCONT("\t[-delta-sil <delta-sil>] \\\n");
+    E_INFOCONT("\t[-delta-speech <delta-speech>] \\\n");
+    E_INFOCONT("\t[-sil-onset <sil-onset>] \\\n");
+    E_INFOCONT("\t[-speech-onset <speech-onset>] \\\n");
+    E_INFOCONT("\t[-adapt-rate <adapt-rate>] \\\n");
+    E_INFOCONT("\t[-max-adreadsize <ad_read_blksize>] \\\n");
+    E_INFOCONT("\t[-c <copy-input-file>] \\\n");
+    E_INFOCONT("\t[-r | -rawmode] \\\n");
+    E_INFOCONT("\t-i <input-file>\n");
+
+    exit(0);
+}
+
+/*
+ * Read specified input file, segment it into utterances wherever a silence segment of
+ * a given minimum duration is encountered.  Filter out long silences.
+ * Utterances are written to files named 00000000.raw, 00000001.raw, 00000002.raw, etc.
+ */
+int
+main(int32 argc, char **argv)
+{
+    cont_ad_t *cont;
+    int32 uttid, uttlen, starttime, siltime, sps, debug, writeseg, rawmode;
+    int16 buf[4096];
+    char *infile, *copyfile, segfile[1024];
+    FILE *fp;
+    float endsil;
+    ad_rec_t ad;
+    int32 i, k;
+    int32 winsize, leader, trailer;
+    int32 orig_min_noise, orig_max_noise;
+    int32 orig_delta_sil, orig_delta_speech;
+    int32 orig_speech_onset, orig_sil_onset;
+    int32 min_noise, max_noise;
+    int32 delta_sil, delta_speech;
+    int32 sil_onset, speech_onset;
+    float32 orig_adapt_rate;
+    float32 adapt_rate;
+    int32 total_speech_samples;
+    float32 total_speech_sec;
+    FILE *rawfp;
+
+    /* Set argument defaults */
+    cont = NULL;
+    sps = 16000;
+    swap = 0;
+    endsil = 0.5;
+    writeseg = 0;
+    min_noise = max_noise = -1;
+    delta_sil = delta_speech = -1;
+    sil_onset = speech_onset = -1;
+    adapt_rate = -1.0;
+    max_ad_read_size = (int32) 0x7ffffff0;
+    debug = 0;
+    infile = NULL;
+    copyfile = NULL;
+    rawfp = NULL;
+    rawmode = 0;
+
+    /* Parse arguments */
+    for (i = 1; i < argc; i++) {
+        if ((strcmp(argv[i], "-help") == 0)
+            || (strcmp(argv[i], "-h") == 0)
+            || (strcmp(argv[i], "-?") == 0)) {
+            usagemsg(argv[0]);
+        }
+        else if ((strcmp(argv[i], "-debug") == 0)
+                 || (strcmp(argv[i], "-d") == 0)) {
+            debug = 1;
+        }
+        else if (strcmp(argv[i], "-sps") == 0) {
+            i++;
+            if ((i == argc)
+                || (sscanf(argv[i], "%d", &sps) != 1)
+                || (sps <= 0)) {
+                E_ERROR("Invalid -sps argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if ((strcmp(argv[i], "-byteswap") == 0)
+                 || (strcmp(argv[i], "-b") == 0)) {
+            swap = 1;
+        }
+        else if ((strcmp(argv[i], "-silsep") == 0)
+                 || (strcmp(argv[i], "-s") == 0)) {
+            i++;
+            if ((i == argc)
+                || (sscanf(argv[i], "%f", &endsil) != 1)
+                || (endsil <= 0.0)) {
+                E_ERROR("Invalid -silsep argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if ((strcmp(argv[i], "-writeseg") == 0)
+                 || (strcmp(argv[i], "-w") == 0)) {
+            writeseg = 1;
+        }
+        else if (strcmp(argv[i], "-min-noise") == 0) {
+            i++;
+            if ((i == argc) ||
+                (sscanf(argv[i], "%d", &min_noise) != 1) ||
+                (min_noise < 0)) {
+                E_ERROR("Invalid -min-noise argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if (strcmp(argv[i], "-max-noise") == 0) {
+            i++;
+            if ((i == argc) ||
+                (sscanf(argv[i], "%d", &max_noise) != 1) ||
+                (max_noise < 0)) {
+                E_ERROR("Invalid -max-noise argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if (strcmp(argv[i], "-delta-sil") == 0) {
+            i++;
+            if ((i == argc) ||
+                (sscanf(argv[i], "%d", &delta_sil) != 1) ||
+                (delta_sil < 0)) {
+                E_ERROR("Invalid -delta-sil argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if (strcmp(argv[i], "-delta-speech") == 0) {
+            i++;
+            if ((i == argc) ||
+                (sscanf(argv[i], "%d", &delta_speech) != 1) ||
+                (delta_speech < 0)) {
+                E_ERROR("Invalid -delta-speech argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if (strcmp(argv[i], "-sil-onset") == 0) {
+            i++;
+            if ((i == argc) ||
+                (sscanf(argv[i], "%d", &sil_onset) != 1) ||
+                (sil_onset < 1)) {
+                E_ERROR("Invalid -sil-onset argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if (strcmp(argv[i], "-speech-onset") == 0) {
+            i++;
+            if ((i == argc) ||
+                (sscanf(argv[i], "%d", &speech_onset) != 1) ||
+                (speech_onset < 1)) {
+                E_ERROR("Invalid -speech-onset argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if (strcmp(argv[i], "-adapt-rate") == 0) {
+            i++;
+            if ((i == argc) ||
+                (sscanf(argv[i], "%f", &adapt_rate) != 1) ||
+                (adapt_rate < 0.0) || (adapt_rate > 1.0)) {
+                E_ERROR("Invalid -adapt-rate argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if (strcmp(argv[i], "-max-adreadsize") == 0) {
+            i++;
+            if ((i == argc) ||
+                (sscanf(argv[i], "%d", &max_ad_read_size) != 1) ||
+                (max_ad_read_size < 1)) {
+                E_ERROR("Invalid -max-adreadsize argument\n");
+                usagemsg(argv[0]);
+            }
+        }
+        else if (strcmp(argv[i], "-c") == 0) {
+            i++;
+            if (i == argc) {
+                E_ERROR("Invalid -c argument\n");
+                usagemsg(argv[0]);
+            }
+            copyfile = argv[i];
+        }
+        else if ((strcmp(argv[i], "-rawmode") == 0)
+                 || (strcmp(argv[i], "-r") == 0)) {
+            rawmode = 1;
+        }
+        else if (strcmp(argv[i], "-i") == 0) {
+            i++;
+            if (i == argc) {
+                E_ERROR("Invalid -i argument\n");
+                usagemsg(argv[0]);
+            }
+            infile = argv[i];
+        }
+        else {
+            usagemsg(argv[0]);
+        }
+    }
+
+    if (infile == NULL) {
+        E_ERROR("No input file specified\n");
+        usagemsg(argv[0]);
+    }
+
+    if ((infp = fopen(infile, "rb")) == NULL)
+        E_FATAL("Failed to open '%s' for reading: %s\n", infile, strerror(errno));
+
+    /*
+     * Associate continuous listening module with opened input file and read function.
+     * No A/D device is involved, but need to fill in ad->sps.
+     * Calibrate input data using first few seconds of file, but then rewind it!!
+     */
+    ad.sps = sps;
+    ad.bps = sizeof(int16);
+    if (!rawmode)
+        cont = cont_ad_init(&ad, file_ad_read);
+    else
+        cont = cont_ad_init_rawmode(&ad, file_ad_read);
+
+    printf("Calibrating ...");
+    fflush(stdout);
+    if (cont_ad_calib(cont) < 0)
+        printf(" failed; file too short?\n");
+    else
+        printf(" done\n");
+    rewind(infp);
+
+    /* Convert desired min. inter-utterance silence duration to #samples */
+    siltime = (int32) (endsil * sps);
+
+    /* Enable writing raw input to output by the cont module if specified */
+    if (copyfile) {
+        if ((rawfp = fopen(copyfile, "wb")) == NULL)
+            E_ERROR("Failed to open raw output file '%s' for writing: %s\n",
+                    copyfile, strerror(errno));
+        else
+            cont_ad_set_rawfp(cont, rawfp);
+    }
+
+    cont_ad_get_params(cont,
+                       &orig_delta_sil, &orig_delta_speech,
+                       &orig_min_noise, &orig_max_noise,
+                       &winsize,
+                       &orig_speech_onset, &orig_sil_onset,
+                       &leader, &trailer, &orig_adapt_rate);
+
+    E_INFO("Default parameters:\n");
+    E_INFOCONT("\tmin-noise = %d, max-noise = %d\n",
+               orig_min_noise, orig_max_noise);
+    E_INFOCONT("\tdelta-sil = %d, delta-speech = %d\n",
+               orig_delta_sil, orig_delta_speech);
+    E_INFOCONT("\tsil-onset = %d, speech-onset = %d\n",
+               orig_sil_onset, orig_speech_onset);
+    E_INFOCONT("\tadapt_rate = %.3f\n", orig_adapt_rate);
+
+    if (min_noise < 0)
+        min_noise = orig_min_noise;
+    if (max_noise < 0)
+        max_noise = orig_max_noise;
+    if (delta_sil < 0)
+        delta_sil = orig_delta_sil;
+    if (delta_speech < 0)
+        delta_speech = orig_delta_speech;
+    if (sil_onset < 0)
+        sil_onset = orig_sil_onset;
+    if (speech_onset < 0)
+        speech_onset = orig_speech_onset;
+    if (adapt_rate < 0.0)
+        adapt_rate = orig_adapt_rate;
+
+    cont_ad_set_params(cont,
+                       delta_sil, delta_speech,
+                       min_noise, max_noise,
+                       winsize,
+                       speech_onset, sil_onset,
+                       leader, trailer, adapt_rate);
+
+    E_INFO("Current parameters:\n");
+    E_INFOCONT("\tmin-noise = %d, max-noise = %d\n", min_noise, max_noise);
+    E_INFOCONT("\tdelta-sil = %d, delta-speech = %d\n", delta_sil,
+               delta_speech);
+    E_INFOCONT("\tsil-onset = %d, speech-onset = %d\n", sil_onset,
+               speech_onset);
+    E_INFOCONT("\tadapt_rate = %.3f\n", adapt_rate);
+
+    E_INFO("Sampling rate: %d", sps);
+    E_INFOCONT("; Byteswap: %s", swap ? "Yes" : "No");
+    E_INFOCONT("; Max ad-read size: %d\n", max_ad_read_size);
+
+    if (debug)
+        cont_ad_set_logfp(cont, stdout);
+
+    total_speech_samples = 0;
+    total_speech_sec = 0.0;
+
+    uttid = 0;
+    uttlen = 0;
+    starttime = 0;
+    fp = NULL;
+
+    /* Process data */
+    for (;;) {
+        /* Get audio data from continuous listening module */
+        k = cont_ad_read(cont, buf, 4096);
+
+        if (k < 0) {            /* End of input audio file; close any open output file and exit */
+            if (fp != NULL) {
+                fclose(fp);
+                fp = NULL;
+
+                printf
+                    ("Utt %08d, st= %8.2fs, et= %8.2fs, seg= %7.2fs (#samp= %10d)\n",
+                     uttid, (double) starttime / (double) sps,
+                     (double) (starttime + uttlen) / (double) sps,
+                     (double) uttlen / (double) sps, uttlen);
+                fflush(stdout);
+
+                total_speech_samples += uttlen;
+                total_speech_sec += (double) uttlen / (double) sps;
+
+                uttid++;
+            }
+
+            break;
+        }
+
+        if (cont->state == CONT_AD_STATE_SIL) { /* Silence data got */
+            if (fp != NULL) {   /* Currently in an utterance */
+                if (cont->seglen > siltime) {   /* Long enough silence detected; end the utterance */
+                    fclose(fp);
+                    fp = NULL;
+
+                    printf
+                        ("Utt %08d, st= %8.2fs, et= %8.2fs, seg= %7.2fs (#samp= %10d)\n",
+                         uttid, (double) starttime / (double) sps,
+                         (double) (starttime + uttlen) / (double) sps,
+                         (double) uttlen / (double) sps, uttlen);
+                    fflush(stdout);
+
+                    total_speech_samples += uttlen;
+                    total_speech_sec += (double) uttlen / (double) sps;
+
+                    uttid++;
+                }
+                else {
+                    /*
+                     * Short silence within utt; write it to output.  (Some extra trailing silence
+                     * is included in the utterance, as a result.  Not to worry about it.)
+                     */
+                    if (k > 0) {
+                        fwrite(buf, sizeof(int16), k, fp);
+                        uttlen += k;
+                    }
+                }
+            }
+        }
+        else {
+            assert(cont->state == CONT_AD_STATE_SPEECH);
+
+            if (fp == NULL) {   /* Not in an utt; open a new output file */
+                if (writeseg)
+                    sprintf(segfile, "%08d.raw", uttid);
+                else
+                    strcpy(segfile, NULL_DEVICE);
+                if ((fp = fopen(segfile, "wb")) == NULL)
+                    E_FATAL("Failed to open segmentation file '%s' for writing: %s\n", segfile, strerror(errno));
+
+                starttime = cont->read_ts - k;
+                uttlen = 0;
+            }
+
+            /* Write data obtained to output file */
+            if (k > 0) {
+                fwrite(buf, sizeof(int16), k, fp);
+                uttlen += k;
+            }
+        }
+    }
+
+    if (rawfp)
+        fclose(rawfp);
+
+    E_INFO("Total raw input speech = %d frames, %d samples, %.2f sec\n",
+           cont->tot_frm, cont->tot_frm * cont->spf,
+           (cont->tot_frm * cont->spf) / (float32) cont->sps);
+    E_INFO("Total speech detected = %d samples, %.2f sec\n",
+           total_speech_samples, total_speech_sec);
+
+    cont_ad_close(cont);
+
+    return 0;
+}
diff --git a/src/sphinx_adtools/sphinx_pitch.c b/src/sphinx_adtools/sphinx_pitch.c
new file mode 100644 (file)
index 0000000..ff15977
--- /dev/null
@@ -0,0 +1,579 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2008 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/yin.h>
+#include <sphinxbase/ckd_alloc.h>
+#include <sphinxbase/byteorder.h>
+#include <sphinxbase/strfuncs.h>
+#include <sphinxbase/err.h>
+#include <sphinxbase/pio.h>
+
+#ifndef WORDS_BIGENDIAN
+#define WORDS_BIGENDIAN 0
+#endif
+
+static arg_t defn[] = {
+  { "-i",
+    ARG_STRING,
+    NULL,
+    "Single audio input file" },
+
+  { "-o",
+    ARG_STRING,
+    NULL,
+    "Single text output file (standard output will be used if not given)" },
+  
+  { "-c",
+    ARG_STRING,
+    NULL,
+    "Control file for batch processing" },
+  
+  { "-nskip",
+    ARG_INT32,
+    "0",
+    "If a control file was specified, the number of utterances to skip at the head of the file" },
+  
+  { "-runlen",
+    ARG_INT32,
+    "-1",
+    "If a control file was specified, the number of utterances to process (see -nskip too)" },
+  
+  { "-di",
+    ARG_STRING,
+    NULL,
+    "Input directory, input file names are relative to this, if defined" },
+  
+  { "-ei",
+    ARG_STRING,
+    NULL,
+    "Input extension to be applied to all input files" },
+  
+  { "-do",
+    ARG_STRING,
+    NULL,
+    "Output directory, output files are relative to this" },
+  
+  { "-eo",
+    ARG_STRING,
+    NULL,
+    "Output extension to be applied to all output files" },
+  
+  { "-nist",
+    ARG_BOOLEAN,
+    "no",
+    "Defines input format as NIST sphere" },
+  
+  { "-raw",
+    ARG_BOOLEAN,
+    "no",
+    "Defines input format as raw binary data" },
+  
+  { "-mswav",
+    ARG_BOOLEAN,
+    "no",
+    "Defines input format as Microsoft Wav (RIFF)" },
+
+  { "-samprate",
+    ARG_INT32,
+    "0",
+    "Sampling rate of audio data (will be determined automatically if 0)" },
+
+  { "-input_endian",
+    ARG_STRING,
+    NULL,
+    "Endianness of audio data (will be determined automatically if not given)" },
+
+  { "-fshift",
+    ARG_FLOAT32,
+    "0.01",
+    "Frame shift: number of seconds between each analysis frame." },
+
+  { "-flen",
+    ARG_FLOAT32,
+    "0.025",
+    "Number of seconds in each analysis frame (needs to be greater than twice the longest period you wish to detect - to detect down to 80Hz you need a frame length of 2.0/80 = 0.025)." },
+
+  { "-smooth_window",
+    ARG_INT32,
+    "2",
+    "Number of frames on either side of the current frame to use for smoothing." },
+
+  { "-voice_thresh",
+    ARG_FLOAT32,
+    "0.1",
+    "Threshold of normalized difference under which to search for the fundamental period." },
+
+  { "-search_range",
+    ARG_FLOAT32,
+    "0.2",
+    "Fraction of the best local estimate to use as a search range for smoothing." },
+
+  { NULL, 0, NULL, NULL }
+};
+
+static int extract_pitch(const char *in, const char *out);
+static int run_control_file(const char *ctl);
+
+int
+main(int argc, char *argv[])
+{
+    cmd_ln_parse(defn, argc, argv, TRUE);
+
+    /* Run a control file if requested. */
+    if (cmd_ln_str("-c")) {
+        if (run_control_file(cmd_ln_str("-c")) < 0)
+            return 1;
+    }
+    else {
+        if (extract_pitch(cmd_ln_str("-i"), cmd_ln_str("-o")) < 0)
+            return 1;
+    }
+
+    cmd_ln_free();
+    return 0;
+}
+
+static int
+guess_file_type(char const *file, FILE *infh)
+{
+    char header[4];
+
+    fseek(infh, 0, SEEK_SET);
+    if (fread(header, 1, 4, infh) != 4) {
+        E_ERROR_SYSTEM("Failed to read 4 byte header");
+        return -1;
+    }
+    if (0 == memcmp(header, "RIFF", 4)) {
+        E_INFO("%s appears to be a WAV file\n", file);
+        cmd_ln_set_boolean("-mswav", TRUE);
+        cmd_ln_set_boolean("-nist", FALSE);
+        cmd_ln_set_boolean("-raw", FALSE);
+    }
+    else if (0 == memcmp(header, "NIST", 4)) {
+        E_INFO("%s appears to be a NIST SPHERE file\n", file);
+        cmd_ln_set_boolean("-mswav", FALSE);
+        cmd_ln_set_boolean("-nist", TRUE);
+        cmd_ln_set_boolean("-raw", FALSE);
+    }
+    else {
+        E_INFO("%s appears to be raw data\n", file);
+        cmd_ln_set_boolean("-mswav", FALSE);
+        cmd_ln_set_boolean("-nist", FALSE);
+        cmd_ln_set_boolean("-raw", TRUE);
+    }
+    fseek(infh, 0, SEEK_SET);
+    return 0;
+}
+
+#define TRY_FREAD(ptr, size, nmemb, stream)                             \
+    if (fread(ptr, size, nmemb, stream) != (nmemb)) {                   \
+        E_ERROR_SYSTEM("Failed to read %d bytes", size * nmemb);       \
+        goto error_out;                                                 \
+    }
+
+static int
+read_riff_header(FILE *infh)
+{
+    char id[4];
+    int32 intval, header_len;
+    int16 shortval;
+
+    /* RIFF files are little-endian by definition. */
+    cmd_ln_set_str("-input_endian", "little");
+
+    /* Read in all the header chunks and etcetera. */
+    TRY_FREAD(id, 1, 4, infh);
+    /* Total file length (we don't care) */
+    TRY_FREAD(&intval, 4, 1, infh);
+    /* 'WAVE' */
+    TRY_FREAD(id, 1, 4, infh);
+    if (0 != memcmp(id, "WAVE", 4)) {
+        E_ERROR("This is not a WAVE file\n");
+        goto error_out;
+    }
+    /* 'fmt ' */
+    TRY_FREAD(id, 1, 4, infh);
+    if (0 != memcmp(id, "fmt ", 4)) {
+        E_ERROR("Format chunk missing\n");
+        goto error_out;
+    }
+    /* Length of 'fmt ' chunk */
+    TRY_FREAD(&intval, 4, 1, infh);
+    if (WORDS_BIGENDIAN) SWAP_INT32(&intval);
+    header_len = intval;
+
+    /* Data format. */
+    TRY_FREAD(&shortval, 2, 1, infh);
+    if (WORDS_BIGENDIAN) SWAP_INT16(&shortval);
+    if (shortval != 1) { /* PCM */
+        E_ERROR("WAVE file is not in PCM format\n");
+        goto error_out;
+    }
+
+    /* Number of channels. */
+    TRY_FREAD(&shortval, 2, 1, infh);
+    if (WORDS_BIGENDIAN) SWAP_INT16(&shortval);
+    if (shortval != 1) { /* PCM */
+        E_ERROR("WAVE file is not single channel\n");
+        goto error_out;
+    }
+
+    /* Sampling rate (finally!) */
+    TRY_FREAD(&intval, 4, 1, infh);
+    if (WORDS_BIGENDIAN) SWAP_INT32(&intval);
+    if (cmd_ln_int32("-samprate") == 0)
+        cmd_ln_set_int32("-samprate", intval);
+    else if (cmd_ln_int32("-samprate") != intval) {
+        E_WARN("WAVE file sampling rate %d != -samprate %d\n",
+               intval, cmd_ln_int32("-samprate"));
+    }
+
+    /* Average bytes per second (we don't care) */
+    TRY_FREAD(&intval, 4, 1, infh);
+
+    /* Block alignment (we don't care) */
+    TRY_FREAD(&shortval, 2, 1, infh);
+
+    /* Bits per sample (must be 16) */
+    TRY_FREAD(&shortval, 2, 1, infh);
+    if (WORDS_BIGENDIAN) SWAP_INT16(&shortval);
+    if (shortval != 16) {
+        E_ERROR("WAVE file is not 16-bit\n");
+        goto error_out;
+    }
+
+    /* Any extra parameters. */
+    if (header_len > 16)
+        fseek(infh, header_len - 16, SEEK_CUR);
+
+    /* Now skip to the 'data' chunk. */
+    while (1) {
+        TRY_FREAD(id, 1, 4, infh);
+        if (0 == memcmp(id, "data", 4)) {
+            /* Total number of bytes of data (we don't care). */
+            TRY_FREAD(&intval, 4, 1, infh);
+            break;
+        }
+        else {
+            /* Some other stuff... */
+            /* Number of bytes of ... whatever */
+            TRY_FREAD(&intval, 4, 1, infh);
+            if (WORDS_BIGENDIAN) SWAP_INT32(&intval);
+            fseek(infh, intval, SEEK_CUR);
+        }
+    }
+
+    /* We are ready to rumble. */
+    return 0;
+error_out:
+    return -1;
+}
+
+static int
+read_nist_header(FILE *infh)
+{
+    char hdr[1024];
+    char *line, *c;
+
+    TRY_FREAD(hdr, 1, 1024, infh);
+    hdr[1023] = '\0';
+
+    /* Roughly parse it to find the sampling rate and byte order
+     * (don't bother with other stuff) */
+    if ((line = strstr(hdr, "sample_rate")) == NULL) {
+        E_ERROR("No sampling rate in NIST header!\n");
+        goto error_out;
+    }
+    c = strchr(line, '\n');
+    if (c) *c = '\0';
+    c = strrchr(line, ' ');
+    if (c == NULL) {
+        E_ERROR("Could not find sampling rate!\n");
+        goto error_out;
+    }
+    ++c;
+    if (cmd_ln_int32("-samprate") == 0)
+        cmd_ln_set_int32("-samprate", atoi(c));
+    else if (cmd_ln_int32("-samprate") != atoi(c)) {
+        E_WARN("NIST file sampling rate %d != -samprate %d\n",
+               atoi(c), cmd_ln_int32("-samprate"));
+    }
+
+    if (line + strlen(line) < hdr + 1023)
+        line[strlen(line)] = ' ';
+    if ((line = strstr(hdr, "sample_byte_format")) == NULL) {
+        E_ERROR("No sample byte format in NIST header!\n");
+        goto error_out;
+    }
+    c = strchr(line, '\n');
+    if (c) *c = '\0';
+    c = strrchr(line, ' ');
+    if (c == NULL) {
+        E_ERROR("Could not find sample byte order!\n");
+        goto error_out;
+    }
+    ++c;
+    if (0 == memcmp(c, "01", 2)) {
+        cmd_ln_set_str("-input_endian", "little");
+    }
+    else if (0 == memcmp(c, "10", 2)) {
+        cmd_ln_set_str("-input_endian", "big");
+    }
+    else {
+        E_ERROR("Unknown byte order %s\n", c);
+        goto error_out;
+    }
+
+    /* We are ready to rumble. */
+    return 0;
+error_out:
+    return -1;
+}
+
+static int
+extract_pitch(const char *in, const char *out)
+{
+    FILE *infh = NULL, *outfh = NULL;
+    size_t flen, fshift, nsamps;
+    int16 *buf = NULL;
+    yin_t *yin = NULL;
+    uint16 period, bestdiff;
+    int32 sps;
+
+    if (out) {
+        if ((outfh = fopen(out, "w")) == NULL) {
+            E_ERROR_SYSTEM("Failed to open %s for writing", out);
+            goto error_out;
+        }
+    }
+    else {
+        outfh = stdout;
+    }
+    if ((infh = fopen(in, "rb")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open %s for reading", in);
+        goto error_out;
+    }
+
+    /* If we weren't told what the file type is, weakly try to
+     * determine it (actually it's pretty obvious) */
+    if (!(cmd_ln_boolean("-raw")
+          || cmd_ln_boolean("-mswav")
+          || cmd_ln_boolean("-nist"))) {
+        if (guess_file_type(in, infh) < 0)
+            goto error_out;
+    }
+    
+    /* Grab the sampling rate and byte order from the header and also
+     * make sure this is 16-bit linear PCM. */
+    if (cmd_ln_boolean("-mswav")) {
+        if (read_riff_header(infh) < 0)
+            goto error_out;
+    }
+    else if (cmd_ln_boolean("-nist")) {
+        if (read_nist_header(infh) < 0)
+            goto error_out;
+    }
+    else if (cmd_ln_boolean("-raw")) {
+        /* Just use some defaults for sampling rate and endian. */
+        if (cmd_ln_str("-input_endian") == NULL) {
+            if (WORDS_BIGENDIAN)
+                cmd_ln_set_str("-input_endian", "big");
+            else
+                cmd_ln_set_str("-input_endian", "little");
+        }
+        if (cmd_ln_int32("-samprate") == 0)
+            cmd_ln_set_int32("-samprate", 16000);
+    }
+
+    /* Now read frames and write pitch estimates. */
+    sps = cmd_ln_int32("-samprate");
+    flen = (size_t)(0.5 + sps * cmd_ln_float32("-flen"));
+    fshift = (size_t)(0.5 + sps * cmd_ln_float32("-fshift"));
+    yin = yin_init(flen, cmd_ln_float32("-voice_thresh"),
+                   cmd_ln_float32("-search_range"),
+                   cmd_ln_int32("-smooth_window"));
+    if (yin == NULL) {
+        E_ERROR("Failed to initialize YIN\n");
+        goto error_out;
+    }
+    buf = ckd_calloc(flen, sizeof(*buf));
+    /* Read the first full frame of data. */
+    if (fread(buf, sizeof(*buf), flen, infh) != flen) {
+        /* Fail silently, which is probably okay. */
+    }
+    yin_start(yin);
+    nsamps = 0;
+    while (!feof(infh)) {
+        /* Process a frame of data. */
+        yin_write(yin, buf);
+        if (yin_read(yin, &period, &bestdiff)) {
+            fprintf(outfh, "%.3f %.2f %.2f\n",
+                    /* Time point. */
+                    (double)nsamps/sps,
+                    /* "Probability" of voicing. */
+                    bestdiff > 32768 ? 0.0 : 1.0 - (double)bestdiff / 32768,
+                    /* Pitch (possibly bogus) */
+                    period == 0 ? sps : (double)sps / period);
+            nsamps += fshift;
+        }
+        /* Shift it back and get the next frame's overlap. */
+        memmove(buf, buf + fshift, (flen - fshift) * sizeof(*buf));
+        if (fread(buf + flen - fshift, sizeof(*buf), fshift, infh) != fshift) {
+            /* Fail silently (FIXME: really?) */
+        }
+    }
+    yin_end(yin);
+    /* Process trailing frames of data. */
+    while (yin_read(yin, &period, &bestdiff)) {
+            fprintf(outfh, "%.3f %.2f %.2f\n",
+                    /* Time point. */
+                    (double)nsamps/sps,
+                    /* "Probability" of voicing. */
+                    bestdiff > 32768 ? 0.0 : 1.0 - (double)bestdiff / 32768,
+                    /* Pitch (possibly bogus) */
+                    period == 0 ? sps : (double)sps / period);
+    }
+
+    if (yin)
+        yin_free(yin);
+    ckd_free(buf);
+    fclose(infh);
+    if (outfh != stdout)
+        fclose(outfh);
+    return 0;
+
+error_out:
+    yin_free(yin);
+    ckd_free(buf);
+    if (infh) fclose(infh);
+    if (outfh && outfh != stdout) fclose(outfh);
+    return -1;
+}
+
+static int
+run_control_file(const char *ctl)
+{
+    FILE *ctlfh;
+    char *line;
+    char *di, *dout, *ei, *eio;
+    size_t len;
+    int rv, guess_type, guess_sps, guess_endian;
+    int32 skip, runlen;
+
+    skip = cmd_ln_int32("-nskip");
+    runlen = cmd_ln_int32("-runlen");
+
+    /* Whether to guess file types */
+    guess_type = !(cmd_ln_boolean("-raw")
+                   || cmd_ln_boolean("-mswav")
+                   || cmd_ln_boolean("-nist"));
+    /* Whether to guess sampling rate */
+    guess_sps = (cmd_ln_int32("-samprate") == 0);
+    /* Whether to guess endian */
+    guess_endian = (cmd_ln_str("-input_endian") == NULL);
+
+    if ((ctlfh = fopen(ctl, "r")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open control file %s", ctl);
+        return -1;
+    }
+    if (cmd_ln_str("-di"))
+        di = string_join(cmd_ln_str("-di"), "/", NULL);
+    else
+        di = ckd_salloc("");
+    if (cmd_ln_str("-do"))
+        dout = string_join(cmd_ln_str("-do"), "/", NULL);
+    else
+        dout = ckd_salloc("");
+    if (cmd_ln_str("-ei"))
+        ei = string_join(".", cmd_ln_str("-ei"), NULL);
+    else
+        ei = ckd_salloc("");
+    if (cmd_ln_str("-eo"))
+        eio = string_join(".", cmd_ln_str("-eo"), NULL);
+    else
+        eio = ckd_salloc("");
+    rv = 0;
+    while ((line = fread_line(ctlfh, &len)) != NULL) {
+        char *infile, *outfile;
+
+        if (skip-- > 0) {
+            ckd_free(line);
+            continue;
+        }
+        if (runlen == 0) {
+            ckd_free(line);
+            break;
+        }
+        --runlen;
+
+        if (line[len-1] == '\n')
+            line[len-1] = '\0';
+
+        infile = string_join(di, line, ei, NULL);
+        outfile = string_join(dout, line, eio, NULL);
+
+        /* Reset various guessed information */
+        if (guess_type) {
+            cmd_ln_set_boolean("-nist", FALSE);
+            cmd_ln_set_boolean("-mswav", FALSE);
+            cmd_ln_set_boolean("-raw", FALSE);
+        }
+        if (guess_sps)
+            cmd_ln_set_int32("-samprate", 0);
+        if (guess_endian)
+            cmd_ln_set_str("-input_endian", NULL);
+
+        rv = extract_pitch(infile, outfile);
+
+        ckd_free(infile);
+        ckd_free(outfile);
+        ckd_free(line);
+
+        if (rv != 0)
+            break;
+    }
+    ckd_free(di);
+    ckd_free(dout);
+    ckd_free(ei);
+    ckd_free(eio);
+    fclose(ctlfh);
+    return rv;
+}
diff --git a/src/sphinx_cepview/Makefile.am b/src/sphinx_cepview/Makefile.am
new file mode 100644 (file)
index 0000000..fc86f0b
--- /dev/null
@@ -0,0 +1,8 @@
+bin_PROGRAMS = sphinx_cepview
+
+sphinx_cepview_SOURCES = main_cepview.c
+
+sphinx_cepview_LDADD = \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include
diff --git a/src/sphinx_cepview/Makefile.in b/src/sphinx_cepview/Makefile.in
new file mode 100644 (file)
index 0000000..4e1a45b
--- /dev/null
@@ -0,0 +1,484 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+bin_PROGRAMS = sphinx_cepview$(EXEEXT)
+subdir = src/sphinx_cepview
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_sphinx_cepview_OBJECTS = main_cepview.$(OBJEXT)
+sphinx_cepview_OBJECTS = $(am_sphinx_cepview_OBJECTS)
+sphinx_cepview_DEPENDENCIES =  \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(sphinx_cepview_SOURCES)
+DIST_SOURCES = $(sphinx_cepview_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+sphinx_cepview_SOURCES = main_cepview.c
+sphinx_cepview_LDADD = \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/sphinx_cepview/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/sphinx_cepview/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
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+sphinx_cepview$(EXEEXT): $(sphinx_cepview_OBJECTS) $(sphinx_cepview_DEPENDENCIES) 
+       @rm -f sphinx_cepview$(EXEEXT)
+       $(LINK) $(sphinx_cepview_OBJECTS) $(sphinx_cepview_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main_cepview.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+
+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: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-binPROGRAMS
+
+# 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/src/sphinx_cepview/main_cepview.c b/src/sphinx_cepview/main_cepview.c
new file mode 100644 (file)
index 0000000..c479db8
--- /dev/null
@@ -0,0 +1,332 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1994-2001 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced
+ * Research Projects Agency and the National Science Foundation of the
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ * 
+ * HISTORY
+ * 
+ * circa 1994  P J Moreno at Carnegie Mellon
+ *             Created.
+ *
+ * For history information, please use 'cvs log'
+ * $Log$
+ * Revision 1.11  2006/02/24  04:06:43  arthchan2003
+ * Merged from branch SPHINX3_5_2_RCI_IRII_BRANCH: Changed commands to macro.  Used E_INFO instead of printf in displaying no. of friends
+ * 
+ *
+ * Revision 1.10  2005/08/18 21:18:09  egouvea
+ * Added E_INFO displaying information about how many columns are being printed, and how many frames
+ *
+ * Revision 1.9.4.2  2005/09/07 23:51:05  arthchan2003
+ * Fixed keyword expansion problem
+ *
+ * Revision 1.9.4.1  2005/07/18 23:21:23  arthchan2003
+ * Tied command-line arguments with marcos
+ *
+ * Revision 1.10  2005/08/18 21:18:09  egouvea
+ * Added E_INFO displaying information about how many columns are being printed, and how many frames
+ *
+ * Revision 1.9  2005/06/22 05:38:45  arthchan2003
+ * Add
+ *
+ * Revision 1.2  2005/03/30 00:43:41  archan
+ *
+ * Add $Log$
+ * Revision 1.11  2006/02/24  04:06:43  arthchan2003
+ * Merged from branch SPHINX3_5_2_RCI_IRII_BRANCH: Changed commands to macro.  Used E_INFO instead of printf in displaying no. of friends
+ * 
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _WIN32
+#pragma warning (disable: 4996) 
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sphinxbase/strfuncs.h>
+#include <sphinxbase/prim_type.h>
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/ckd_alloc.h>
+#include <sphinxbase/info.h>
+#include <sphinxbase/err.h>
+#include <sphinxbase/bio.h>
+#include <sphinxbase/pio.h>
+
+/** \file main_cepview.c
+    \brief Main driver of cepview
+ */
+#define IO_ERR  (-1)
+#define IO_SUCCESS  (0)
+
+#define SHOW_ALL "-1"
+
+/* Default cepstral vector size */
+#define NUM_COEFF  "13"
+
+/* Default display size, i.e., number of coefficients displayed, less
+ * than the vector size so we display one frame per line.
+ */
+#define DISPLAY_SIZE "10"
+#define STR_MAX_INT "2147483647"
+
+static arg_t arg[] = {
+
+    {"-logfn",
+     ARG_STRING,
+     NULL,
+     "Log file (default stdout/stderr)"},
+    {"-i",
+     ARG_INT32,
+     NUM_COEFF,
+     "Number of coefficients in the feature vector."},
+    {"-d",
+     ARG_INT32,
+     DISPLAY_SIZE,
+     "Number of displayed coefficients."},
+    {"-header",
+     ARG_INT32,
+     "0",
+     "Whether header is shown."},
+    {"-describe",
+     ARG_INT32,
+     "0",
+     "Whether description will be shown."},
+    {"-b",
+     ARG_INT32,
+     "0",
+     "The beginning frame 0-based."},
+    {"-e",
+     ARG_INT32,
+     "2147483647",
+     "The ending frame."},
+    {"-f",
+     ARG_STRING,
+     NULL,
+     "Input feature file."},
+    {NULL, ARG_INT32, NULL, NULL}
+};
+
+int read_cep(char const *file, float ***cep, int *nframes, int numcep);
+
+int
+main(int argc, char *argv[])
+{
+    int i, j, offset;
+    int32 noframe, vsize, dsize, column;
+    int32 frm_begin, frm_end;
+    int is_header, is_describe;
+    float *z, **cep;
+    char const *cepfile;
+
+    print_appl_info(argv[0]);
+    cmd_ln_appl_enter(argc, argv, "default.arg", arg);
+
+    vsize = cmd_ln_int32("-i");
+    dsize = cmd_ln_int32("-d");
+    frm_begin = cmd_ln_int32("-b");
+    frm_end = cmd_ln_int32("-e");
+    is_header = cmd_ln_int32("-header");
+    is_describe = cmd_ln_int32("-describe");
+
+    if (vsize < 0)
+        E_FATAL("-i : Input vector size should be larger than 0.\n");
+    if (dsize < 0)
+        E_FATAL("-d : Column size should be larger than 0\n");
+    if (frm_begin < 0)
+        E_FATAL("-b : Beginning frame should be larger than 0\n");
+    /* The following condition is redundant
+     * if (frm_end < 0) E_FATAL("-e : Ending frame should be larger than 0\n");
+     */
+    if (frm_begin >= frm_end)
+        E_FATAL
+            ("Ending frame (-e) should be larger than beginning frame (-b).\n");
+
+    if ((cepfile = cmd_ln_str("-f")) == NULL) {
+        E_FATAL("Input file was not specified with (-f)\n");
+    }
+    if (read_cep(cepfile, &cep, &noframe, vsize) == IO_ERR)
+        E_FATAL("ERROR opening %s for reading\n", cepfile);
+
+    z = cep[0];
+
+    offset = 0;
+    column = (vsize > dsize) ? dsize : vsize;
+    frm_end = (frm_end > noframe) ? noframe : frm_end;
+
+    E_INFO("Displaying %d out of %d columns per frame\n", column, vsize);
+    E_INFO("Total %d frames\n\n", noframe);
+
+    /* This part should be moved to a special library if this file is
+       longer than 300 lines. */
+
+    if (is_header) {
+        if (is_describe) {
+            printf("\n%6s", "frame#:");
+        }
+
+        for (j = 0; j < column; ++j) {
+            printf("%3s%3d%s ", "c[", j, "]");
+        }
+        printf("\n");
+    }
+
+    offset += frm_begin * vsize;
+    for (i = frm_begin; i < frm_end; ++i) {
+        if (is_describe) {
+            printf("%6d:", i);
+        }
+        for (j = 0; j < column; ++j)
+            printf("%7.3f ", z[offset + j]);
+        printf("\n");
+
+        offset += vsize;
+    }
+    fflush(stdout);
+    cmd_ln_appl_exit();
+    ckd_free_2d(cep);
+
+    return (IO_SUCCESS);
+
+}
+
+int
+read_cep(char const *file, float ***cep, int *numframes, int cepsize)
+{
+    FILE *fp;
+    int n_float;
+    struct stat statbuf;
+    int i, n, byterev, sf, ef;
+    float32 **mfcbuf;
+
+    if (stat_retry(file, &statbuf) < 0) {
+        printf("stat(%s) failed\n", file);
+        return IO_ERR;
+    }
+
+    if ((fp = fopen(file, "rb")) == NULL) {
+        printf("Failed to open '%s' for reading: %s\n", file, strerror(errno));
+        return IO_ERR;
+    }
+
+    /* Read #floats in header */
+    if (fread(&n_float, sizeof(int), 1, fp) != 1) {
+        fclose(fp);
+        return IO_ERR;
+    }
+
+    /* Check if n_float matches file size */
+    byterev = FALSE;
+    if ((int) (n_float * sizeof(float) + 4) != statbuf.st_size) {
+        n = n_float;
+        SWAP_INT32(&n);
+
+        if ((int) (n * sizeof(float) + 4) != statbuf.st_size) {
+            printf
+                ("Header size field: %d(%08x); filesize: %d(%08x)\n",
+                 n_float, n_float, (int) statbuf.st_size,
+                 (int) statbuf.st_size);
+            fclose(fp);
+            return IO_ERR;
+        }
+
+        n_float = n;
+        byterev = TRUE;
+    }
+    if (n_float <= 0) {
+        printf("Header size field: %d\n", n_float);
+        fclose(fp);
+        return IO_ERR;
+    }
+
+    /* n = #frames of input */
+    n = n_float / cepsize;
+    if (n * cepsize != n_float) {
+        printf("Header size field: %d; not multiple of %d\n",
+               n_float, cepsize);
+        fclose(fp);
+        return IO_ERR;
+    }
+    sf = 0;
+    ef = n;
+
+    mfcbuf = (float **) ckd_calloc_2d(n, cepsize, sizeof(float32));
+
+    /* Read mfc data and byteswap if necessary */
+    n_float = n * cepsize;
+    if ((int) fread(mfcbuf[0], sizeof(float), n_float, fp) != n_float) {
+        printf("Error reading mfc data\n");
+        fclose(fp);
+        return IO_ERR;
+    }
+    if (byterev) {
+        for (i = 0; i < n_float; i++)
+            SWAP_FLOAT32(&(mfcbuf[0][i]));
+    }
+    fclose(fp);
+
+    *numframes = n;
+    *cep = mfcbuf;
+    return IO_SUCCESS;
+}
+
+/** Silvio Moioli: Windows CE/Mobile entry point added. */
+#if defined(_WIN32_WCE)
+#pragma comment(linker,"/entry:mainWCRTStartup")
+
+//Windows Mobile has the Unicode main only
+int wmain(int32 argc, wchar_t *wargv[]) {
+    char** argv;
+    size_t wlen;
+    size_t len;
+    int i;
+
+    argv = malloc(argc*sizeof(char*));
+    for (i=0; i<argc; i++){
+        wlen = lstrlenW(wargv[i]);
+        len = wcstombs(NULL, wargv[i], wlen);
+        argv[i] = malloc(len+1);
+        wcstombs(argv[i], wargv[i], wlen);
+    }
+
+    //assuming ASCII parameters
+    return main(argc, argv);
+}
+#endif
diff --git a/src/sphinx_fe/Makefile.am b/src/sphinx_fe/Makefile.am
new file mode 100644 (file)
index 0000000..30b5538
--- /dev/null
@@ -0,0 +1,15 @@
+bin_PROGRAMS = sphinx_fe
+
+sphinx_fe_SOURCES = sphinx_fe.c
+
+noinst_HEADERS = cmd_ln_defn.h                 \
+       sphinx_wave2feat.h
+
+sphinx_fe_LDADD = \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       @SNDFILE_LIBS@
+
+INCLUDES = -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -I$(top_srcdir)/src/libsphinxbase/fe \
+       @SNDFILE_CFLAGS@
diff --git a/src/sphinx_fe/Makefile.in b/src/sphinx_fe/Makefile.in
new file mode 100644 (file)
index 0000000..654534c
--- /dev/null
@@ -0,0 +1,495 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+bin_PROGRAMS = sphinx_fe$(EXEEXT)
+subdir = src/sphinx_fe
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_sphinx_fe_OBJECTS = sphinx_fe.$(OBJEXT)
+sphinx_fe_OBJECTS = $(am_sphinx_fe_OBJECTS)
+sphinx_fe_DEPENDENCIES =  \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(sphinx_fe_SOURCES)
+DIST_SOURCES = $(sphinx_fe_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+sphinx_fe_SOURCES = sphinx_fe.c
+noinst_HEADERS = cmd_ln_defn.h                 \
+       sphinx_wave2feat.h
+
+sphinx_fe_LDADD = \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       @SNDFILE_LIBS@
+
+INCLUDES = -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -I$(top_srcdir)/src/libsphinxbase/fe \
+       @SNDFILE_CFLAGS@
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/sphinx_fe/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/sphinx_fe/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
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+sphinx_fe$(EXEEXT): $(sphinx_fe_OBJECTS) $(sphinx_fe_DEPENDENCIES) 
+       @rm -f sphinx_fe$(EXEEXT)
+       $(LINK) $(sphinx_fe_OBJECTS) $(sphinx_fe_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinx_fe.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(PROGRAMS) $(HEADERS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+
+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: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-binPROGRAMS
+
+# 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/src/sphinx_fe/cmd_ln_defn.h b/src/sphinx_fe/cmd_ln_defn.h
new file mode 100644 (file)
index 0000000..6e59a8c
--- /dev/null
@@ -0,0 +1,303 @@
+/* ====================================================================
+ * Copyright (c) 1998-2000 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/*********************************************************************
+ *
+ * File: cmd_ln_defn.h
+ * 
+ * Description: 
+ *      Command line argument definition
+ *
+ * Author: 
+ *      
+ *********************************************************************/
+
+#ifndef CMD_LN_DEFN_H
+#define CMD_LN_DEFN_H
+
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/fe.h>
+
+const char helpstr[] =
+  "Description: \n\
+Extract acoustic features form from audio file.\n\
+\n\
+The main parameters that affect the final output, with typical values, are:\n\
+\n\
+samprate, typically 8000, 11025, or 16000\n\
+lowerf, 130, 200, 130, for the respective sampling rates above\n\
+upperf, 3700, 5200, 6800, for the respective sampling rates above\n\
+nfilt, 31, 37, 40, for the respective sampling rates above\n\
+nfft, 256 or 512\n\
+format, raw or nist or mswav\n\
+\"";
+
+const char examplestr[] =
+  "Example: \n\
+This example creates a cepstral file named \"output.mfc\" from an input audio file named \"input.raw\", which is a raw audio file (no header information), which was originally sampled at 16kHz. \n\
+\n\
+sphinx_fe -i  input.raw \n\
+        -o   output.mfc \n\
+        -input_endian little \n\
+        -samprate  16000 \n\
+        -lowerf    130 \n\
+        -upperf    6800 \n\
+        -nfilt     40 \n\
+        -nfft      512";
+
+static arg_t defn[] = {
+  { "-help",
+    ARG_BOOLEAN,
+    "no",
+    "Shows the usage of the tool"},
+  
+  { "-example",
+    ARG_BOOLEAN,
+    "no",
+    "Shows example of how to use the tool"},
+
+  waveform_to_cepstral_command_line_macro(),
+
+  { "-argfile",
+    ARG_STRING,
+    NULL,
+    "Argument file (e.g. feat.params from an acoustic model) to read parameters from.  This will override anything set in other command line arguments." },
+  
+  { "-i",
+    ARG_STRING,
+    NULL,
+    "Single audio input file" },
+  
+  { "-o",
+    ARG_STRING,
+    NULL,
+    "Single cepstral output file" },
+  
+  { "-c",
+    ARG_STRING,
+    NULL,
+    "Control file for batch processing" },
+  
+  { "-nskip",
+    ARG_INT32,
+    "0",
+    "If a control file was specified, the number of utterances to skip at the head of the file" },
+  
+  { "-runlen",
+    ARG_INT32,
+    "-1",
+    "If a control file was specified, the number of utterances to process, or -1 for all" },
+
+  { "-part",
+    ARG_INT32,
+    "0",
+    "Index of the part to run (supersedes -nskip and -runlen if non-zero)" },
+  
+  { "-npart",
+    ARG_INT32,
+    "0",
+    "Number of parts to run in (supersedes -nskip and -runlen if non-zero)" },
+  
+  { "-di",
+    ARG_STRING,
+    NULL,
+    "Input directory, input file names are relative to this, if defined" },
+  
+  { "-ei",
+    ARG_STRING,
+    NULL,
+    "Input extension to be applied to all input files" },
+  
+  { "-do",
+    ARG_STRING,
+    NULL,
+    "Output directory, output files are relative to this" },
+  
+  { "-eo",
+    ARG_STRING,
+    NULL,
+    "Output extension to be applied to all output files" },
+  
+  { "-build_outdirs",
+    ARG_BOOLEAN,
+    "yes",
+    "Create missing subdirectories in output directory" },
+
+  { "-sph2pipe",
+    ARG_BOOLEAN,
+    "no",
+    "Input is NIST sphere (possibly with Shorten), use sph2pipe to convert" },
+
+  { "-nist",
+    ARG_BOOLEAN,
+    "no",
+    "Defines input format as NIST sphere" },
+  
+  { "-raw",
+    ARG_BOOLEAN,
+    "no",
+    "Defines input format as raw binary data" },
+  
+  { "-mswav",
+    ARG_BOOLEAN,
+    "no",
+    "Defines input format as Microsoft Wav (RIFF)" },
+  
+#ifdef HAVE_SNDFILE_H
+  { "-sndfile",
+    ARG_BOOLEAN,
+    "no",
+    "Use libsndfile to read input data" },
+#endif
+  
+  { "-nchans",
+    ARG_INT32,
+    "1",
+    "Number of channels of data (interlaced samples assumed)" },
+  
+  { "-whichchan",
+    ARG_INT32,
+    "0",
+    "Channel to process (numbered from 1), or 0 to mix all channels" },
+  
+  { "-ofmt",
+    ARG_STRING,
+    "sphinx",
+    "Format of output files - one of sphinx, htk, text." },
+  
+  { "-mach_endian",
+    ARG_STRING,
+#ifdef WORDS_BIGENDIAN
+    "big",
+#else
+    "little",
+#endif
+    "Endianness of machine, big or little" },
+  
+  { "-blocksize",
+    ARG_INT32,
+    "2048",
+    "Number of samples to read at a time." },
+
+  { "-spec2cep",
+    ARG_BOOLEAN,
+    "no",
+    "Input is log spectral files, output is cepstral files" },
+
+  { "-cep2spec",
+    ARG_BOOLEAN,
+    "no",
+    "Input is cepstral files, output is log spectral files" },
+
+  { NULL, 0, NULL, NULL }
+};
+
+    
+#define CMD_LN_DEFN_H
+
+#endif /* CMD_LN_DEFN_H */ 
+\f
+/*
+ * Log record.  Maintained by RCS.
+ *
+ * $Log: cmd_ln_defn.h,v $
+ * Revision 1.7  2006/02/25 00:53:48  egouvea
+ * Added the flag "-seed". If dither is being used and the seed is less
+ * than zero, the random number generator is initialized with time(). If
+ * it is at least zero, it's initialized with the provided seed. This way
+ * we have the benefit of having dither, and the benefit of being
+ * repeatable.
+ *
+ * This is consistent with what sphinx3 does. Well, almost. The random
+ * number generator is still what the compiler provides.
+ *
+ * Also, moved fe_init_params to fe_interface.c, so one can initialize a
+ * variable of type param_t with meaningful values.
+ *
+ * Revision 1.6  2006/02/17 00:31:34  egouvea
+ * Removed switch -melwarp. Changed the default for window length to
+ * 0.025625 from 0.256 (so that a window at 16kHz sampling rate has
+ * exactly 410 samples). Cleaned up include's. Replaced some E_FATAL()
+ * with E_WARN() and return.
+ *
+ * Revision 1.5  2006/02/16 00:18:26  egouvea
+ * Implemented flexible warping function. The user can specify at run
+ * time which of several shapes they want to use. Currently implemented
+ * are an affine function (y = ax + b), an inverse linear (y = a/x) and a
+ * piecewise linear (y = ax, up to a frequency F, and then it "breaks" so
+ * Nyquist frequency matches in both scales.
+ *
+ * Added two switches, -warp_type and -warp_params. The first specifies
+ * the type, which valid values:
+ *
+ * -inverse or inverse_linear
+ * -linear or affine
+ * -piecewise or piecewise_linear
+ *
+ * The inverse_linear is the same as implemented by EHT. The -mel_warp
+ * switch was kept for compatibility (maybe remove it in the
+ * future?). The code is compatible with EHT's changes: cepstra created
+ * from code after his changes should be the same as now. Scripts that
+ * worked with his changes should work now without changes. Tested a few
+ * cases, same results.
+ *
+ * Revision 1.4  2006/02/14 20:56:54  eht
+ * Implement an argument -melwarp that changes the standard mel-scale
+ * equation from:
+ *      M(f) = 2595 * log10( 1 + f/700 )
+ * to:
+ *      M(f,w) = 2595 * log10( 1 + f/(700*w))
+ *
+ * So, 1.0 means no warp,  w > 1.0 means linear compression w < 1.0 means
+ * linear expansion.
+ *
+ * Implement argument -nskip and -runlen arguments so that a subset of the
+ * utterances in the control file can be executed.  Allows a simple
+ * distribution of wave2feat processing over N processors.
+ *
+ * Revision 1.3  2005/05/19 21:21:55  egouvea
+ * Bug #1176394: example bug
+ *
+ * Revision 1.2  2004/11/23 04:14:06  egouvea
+ * Fixed bug in cmd_ln.c in which a wrong boolean argument led into an
+ * infinite loop, and fixed the help and example strings, getting rid of
+ * spaces, so that the appearance is better.
+ *
+ * Revision 1.1  2004/09/09 17:59:30  egouvea
+ * Adding missing files to wave2feat
+ *
+ *
+ *
+ */
diff --git a/src/sphinx_fe/sphinx_fe.c b/src/sphinx_fe/sphinx_fe.c
new file mode 100644 (file)
index 0000000..becfa1e
--- /dev/null
@@ -0,0 +1,1090 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1996-2004 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <assert.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_SNDFILE_H
+#include <sndfile.h>
+#endif
+
+#include <sphinxbase/fe.h>
+#include <sphinxbase/strfuncs.h>
+#include <sphinxbase/pio.h>
+#include <sphinxbase/filename.h>
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/err.h>
+#include <sphinxbase/ckd_alloc.h>
+#include <sphinxbase/byteorder.h>
+#include <sphinxbase/hash_table.h>
+
+#include "sphinx_wave2feat.h"
+#include "cmd_ln_defn.h"
+
+typedef struct audio_type_s {
+    char const *name;
+    int (*detect)(sphinx_wave2feat_t *wtf, char const *infile);
+    int (*decode)(sphinx_wave2feat_t *wtf);
+} audio_type_t;
+
+typedef struct output_type_s {
+    char const *name;
+    int (*output_header)(sphinx_wave2feat_t *wtf, int nfloat);
+    int (*output_frames)(sphinx_wave2feat_t *wtf, mfcc_t **frames, int nfr);
+} output_type_t;
+
+struct sphinx_wave2feat_s {
+    int refcount;     /**< Reference count. */
+    cmd_ln_t *config; /**< Configuration parameters. */
+    fe_t *fe;         /**< Front end object. */
+    char *infile;     /**< Path to input file. */
+    char *outfile;    /**< Path to output file. */
+    FILE *infh;       /**< Input file handle. */
+    FILE *outfh;      /**< Output file handle. */
+    short *audio;     /**< Audio buffer. */
+    mfcc_t **feat;    /**< Feature buffer. */
+    int blocksize;    /**< Size of audio buffer. */
+    int featsize;     /**< Size of feature buffer. */
+    int veclen;       /**< Length of each output vector. */
+    int in_veclen;    /**< Length of each input vector (for cep<->spec). */
+    int byteswap;     /**< Whether byteswapping is necessary. */
+#ifdef HAVE_SNDFILE_H
+    SNDFILE *insfh;   /**< Input sndfile handle. */
+#endif
+    output_type_t const *ot;/**< Output type object. */
+};
+
+/** RIFF 44-byte header structure for MS wav files. */
+typedef struct RIFFHeader{
+    char rifftag[4];      /* "RIFF" string */
+    int32 TotalLength;      /* Total length */
+    char wavefmttag[8];   /* "WAVEfmt " string (note space after 't') */
+    int32 RemainingLength;  /* Remaining length */
+    int16 data_format;    /* data format tag, 1 = PCM */
+    int16 numchannels;    /* Number of channels in file */
+    int32 SamplingFreq;     /* Sampling frequency */
+    int32 BytesPerSec;      /* Average bytes/sec */
+    int16 BlockAlign;     /* Block align */
+    int16 BitsPerSample;  /* 8 or 16 bit */
+    char datatag[4];      /* "data" string */
+    int32 datalength;       /* Raw data length */
+} MSWAV_hdr;
+
+/**
+ * Detect RIFF file and parse its header if detected.
+ *
+ * @return TRUE if it's a RIFF file, FALSE if not, -1 if an error occurred.
+ */
+static int
+detect_riff(sphinx_wave2feat_t *wtf, char const *infile)
+{
+    FILE *fh;
+    MSWAV_hdr hdr;
+
+    if ((fh = fopen(infile, "rb")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open %s", infile);
+        return -1;
+    }
+    if (fread(&hdr, sizeof(hdr), 1, fh) != 1) {
+        E_ERROR_SYSTEM("Failed to read RIFF header");
+        fclose(fh);
+        return -1;
+    }
+    /* Make sure it is actually a RIFF file. */
+    if (0 != memcmp(hdr.rifftag, "RIFF", 4)) {
+        fclose(fh);
+        return FALSE;
+    }
+
+    /* Get relevant information. */
+    cmd_ln_set_int32_r(wtf->config, "-nchans", hdr.numchannels);
+    cmd_ln_set_float32_r(wtf->config, "-samprate", hdr.SamplingFreq);
+    if (wtf->infile)
+        ckd_free(wtf->infile);
+    wtf->infile = ckd_salloc(infile);
+    wtf->infh = fh;
+
+    return TRUE;
+}
+
+static int
+open_nist_file(sphinx_wave2feat_t *wtf, char const *infile, FILE **out_fh)
+{
+    char nist[7];
+    lineiter_t *li;
+    FILE *fh;
+
+    if ((fh = fopen(infile, "rb")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open %s", infile);
+        return -1;
+    }
+    if (fread(&nist, 1, 7, fh) != 7) {
+        E_ERROR_SYSTEM("Failed to read NIST header");
+        fclose(fh);
+        return -1;
+    }
+    /* Is this actually a NIST file? */
+    if (0 != strncmp(nist, "NIST_1A", 7)) {
+        fclose(fh);
+        return FALSE;
+    }
+    /* Rewind, parse lines. */
+    fseek(fh, 0, SEEK_SET);
+    for (li = lineiter_start(fh); li; li = lineiter_next(li)) {
+        char **words;
+        int nword;
+
+        string_trim(li->buf, STRING_BOTH);
+        if (strlen(li->buf) == 0) {
+            lineiter_free(li);
+            break;
+        }
+        nword = str2words(li->buf, NULL, 0);
+        if (nword != 3)
+            continue;
+        words = ckd_calloc(nword, sizeof(*words));
+        str2words(li->buf, words, nword);
+        if (0 == strcmp(words[0], "sample_rate")) {
+            cmd_ln_set_float32_r(wtf->config, "-samprate", atof_c(words[2]));
+        }
+        if (0 == strcmp(words[0], "channel_count")) {
+            cmd_ln_set_int32_r(wtf->config, "-nchans", atoi(words[2]));
+        }
+        if (0 == strcmp(words[0], "sample_byte_format")) {
+            cmd_ln_set_str_r(wtf->config, "-input_endian",
+                             (0 == strcmp(words[2], "10")) ? "big" : "little");
+        }
+        ckd_free(words);
+    }
+
+    fseek(fh, 1024, SEEK_SET);
+    if (out_fh)
+        *out_fh = fh;
+    else
+        fclose(fh);
+    return TRUE;
+}
+
+#ifdef HAVE_POPEN
+static int
+detect_sph2pipe(sphinx_wave2feat_t *wtf, char const *infile)
+{
+    FILE *fh;
+    char *cmdline;
+    int rv;
+
+    /* Determine if it's NIST file and get parameters. */
+    if ((rv = open_nist_file(wtf, infile, NULL)) != TRUE)
+        return rv;
+
+    /* Now popen it with sph2pipe. */
+    cmdline = string_join("sph2pipe -f raw '", infile, "'", NULL);
+    if ((fh = popen(cmdline, "r")) == NULL) {
+        E_ERROR_SYSTEM("Failed to popen(\"sph2pipe -f raw '%s'\")", infile);
+        ckd_free(cmdline);
+        return -1;
+    }
+
+    if (wtf->infile)
+        ckd_free(wtf->infile);
+    wtf->infile = ckd_salloc(infile);
+    wtf->infh = fh;
+    return TRUE;
+}
+#else /* !HAVE_POPEN */
+static int
+detect_sph2pipe(sphinx_wave2feat_t *wtf, char const *infile)
+{
+    E_ERROR("popen() not available, cannot run sph2pipe\n");
+    return -1;
+}
+#endif /* !HAVE_POPEN */
+
+/**
+ * Detect NIST file and parse its header if detected.
+ *
+ * @return TRUE if it's a NIST file, FALSE if not, -1 if an error occurred.
+ */
+static int
+detect_nist(sphinx_wave2feat_t *wtf, char const *infile)
+{
+    FILE *fh;
+    int rv;
+
+    if ((rv = open_nist_file(wtf, infile, &fh)) != TRUE)
+        return rv;
+    if (wtf->infile)
+        ckd_free(wtf->infile);
+    wtf->infile = ckd_salloc(infile);
+    wtf->infh = fh;
+    return TRUE;
+}
+
+
+/**
+ * Default "detection" function, just opens the file and keeps the
+ * default configuration parameters.
+ *
+ * @return TRUE, or -1 on error.
+ */
+static int
+detect_raw(sphinx_wave2feat_t *wtf, char const *infile)
+{
+    FILE *fh;
+
+    if ((fh = fopen(infile, "rb")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open %s", infile);
+        return -1;
+    }
+    if (wtf->infile)
+        ckd_free(wtf->infile);
+    wtf->infile = ckd_salloc(infile);
+    wtf->infh = fh;
+    return TRUE;
+}
+
+/**
+ * "Detect" Sphinx MFCC files, meaning verify their lousy headers, and
+ * set up some parameters from the config object.
+ *
+ * @return TRUE, or -1 on error.
+ */
+static int
+detect_sphinx_mfc(sphinx_wave2feat_t *wtf, char const *infile)
+{
+    FILE *fh;
+    int32 len;
+    long flen;
+
+    if ((fh = fopen(infile, "rb")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open %s", infile);
+        return -1;
+    }
+    if (fread(&len, 4, 1, fh) != 1) {
+        E_ERROR_SYSTEM("Failed to read header from %s\n", infile);
+        return -1;
+    }
+    fseek(fh, 0, SEEK_END);
+    flen = ftell(fh);
+
+    /* figure out whether to byteswap */
+    flen = (flen / 4) - 1;
+    if (flen != len) {
+        /* First make sure this is an endianness problem, otherwise fail. */
+        SWAP_INT32(&len);
+        if (flen != len) {
+            SWAP_INT32(&len);
+            E_ERROR("Mismatch in header/file lengths: 0x%08x vs 0x%08x\n",
+                    len, flen);
+            return -1;
+        }
+        /* Set the input endianness to the opposite of the machine endianness... */
+        cmd_ln_set_str_r(wtf->config, "-input_endian",
+                         (0 == strcmp("big", cmd_ln_str_r(wtf->config, "-mach_endian"))
+                          ? "little" : "big"));
+    }
+    
+    fseek(fh, 4, SEEK_SET);
+    if (wtf->infile)
+        ckd_free(wtf->infile);
+    wtf->infile = ckd_salloc(infile);
+    wtf->infh = fh;
+    if (cmd_ln_boolean_r(wtf->config, "-spec2cep")) {
+        wtf->in_veclen = cmd_ln_int32_r(wtf->config, "-nfilt");
+    }
+    else if (cmd_ln_boolean_r(wtf->config, "-cep2spec")) {
+        wtf->in_veclen = cmd_ln_int32_r(wtf->config, "-ncep");
+        wtf->veclen = cmd_ln_int32_r(wtf->config, "-nfilt");
+    }
+    else {
+        /* Should not happen. */
+        E_ERROR("Sphinx MFCC file reading requested but -spec2cep/-cep2spec not given\n");
+        assert(FALSE);
+    }
+            
+    return TRUE;
+}
+
+int
+mixnpick_channels(int16 *buf, int32 nsamp, int32 nchans, int32 whichchan)
+{
+    int i, j;
+
+    if (whichchan > 0) {
+        for (i = whichchan - 1; i < nsamp; i += nchans)
+            buf[i/nchans] = buf[i];
+    }
+    else {
+        for (i = 0; i < nsamp; i += nchans) {
+            float64 tmp = 0.0;
+            for (j = 0; j < nchans && i + j < nsamp; ++j) {
+                tmp += buf[i + j];
+            }
+            buf[i/nchans] = (int16)(tmp / nchans);
+        }
+    }
+    return i/nchans;
+}
+
+#ifdef HAVE_SNDFILE_H
+/**
+ * Detect a file supported by libsndfile and parse its header if detected.
+ *
+ * @return TRUE if it's a supported file, FALSE if not, -1 if an error occurred.
+ */
+static int
+detect_sndfile(sphinx_wave2feat_t *wtf, char const *infile)
+{
+    SNDFILE *sf;
+    SF_INFO sfinfo;
+
+    memset(&sfinfo, 0, sizeof(sfinfo));
+    /* We let other detectors catch I/O errors, since there is
+       no way to tell them from format errors when opening :( */
+    if ((sf = sf_open(infile, SFM_READ, &sfinfo)) == NULL) {
+        return FALSE;
+    }
+    /* Get relevant information. */
+    cmd_ln_set_int32_r(wtf->config, "-nchans", sfinfo.channels);
+    cmd_ln_set_float32_r(wtf->config, "-samprate", sfinfo.samplerate);
+    if (wtf->infile)
+        ckd_free(wtf->infile);
+    wtf->infile = ckd_salloc(infile);
+    wtf->insfh = sf;
+    wtf->infh = NULL;
+
+    return TRUE;
+}
+
+/**
+ * Process PCM audio from a libsndfile file.  FIXME: looks a lot like
+ * decode_pcm!  Also needs stereo support (as does decode_pcm).
+ */
+static int
+decode_sndfile(sphinx_wave2feat_t *wtf)
+{
+    size_t nsamp;
+    int32 nfr, nchans, whichchan;
+    int nfloat, n;
+
+    nchans = cmd_ln_int32_r(wtf->config, "-nchans");
+    whichchan = cmd_ln_int32_r(wtf->config, "-whichchan");
+    fe_start_utt(wtf->fe);
+    nfloat = 0;
+    while ((nsamp = sf_read_short(wtf->insfh,
+                                  wtf->audio,
+                                  wtf->blocksize)) != 0) {
+        int16 const *inspeech;
+        size_t nvec;
+
+        /* Mix or pick channels. */
+        if (nchans > 1)
+            nsamp = mixnpick_channels(wtf->audio, nsamp, nchans, whichchan);
+
+        inspeech = wtf->audio;
+        nvec = wtf->featsize;
+        /* Consume all samples. */
+        while (nsamp) {
+            nfr = nvec;
+            fe_process_frames(wtf->fe, &inspeech, &nsamp, wtf->feat, &nfr);
+            if (nfr) {
+                if ((n = (*wtf->ot->output_frames)(wtf, wtf->feat, nfr)) < 0)
+                    return -1;
+                nfloat += n;
+            }
+        }
+        inspeech = wtf->audio;
+    }
+    /* Now process any leftover audio frames. */
+    fe_end_utt(wtf->fe, wtf->feat[0], &nfr);
+    if (nfr) {
+        if ((n = (*wtf->ot->output_frames)(wtf, wtf->feat, nfr)) < 0)
+            return -1;
+        nfloat += n;
+    }
+
+    sf_close(wtf->insfh);
+    wtf->insfh = NULL;
+    return nfloat;
+}
+#endif /* HAVE_SNDFILE_H */
+
+/**
+ * Process PCM audio from a filehandle.  Assume that wtf->infh is
+ * positioned just after the file header.
+ */
+static int
+decode_pcm(sphinx_wave2feat_t *wtf)
+{
+    size_t nsamp;
+    int32 nfr, nchans, whichchan;
+    int nfloat, n;
+
+    nchans = cmd_ln_int32_r(wtf->config, "-nchans");
+    whichchan = cmd_ln_int32_r(wtf->config, "-whichchan");
+    fe_start_utt(wtf->fe);
+    nfloat = 0;
+    while ((nsamp = fread(wtf->audio, 2, wtf->blocksize, wtf->infh)) != 0) {
+        size_t nvec;
+        int16 const *inspeech;
+
+        /* Byteswap stuff here if necessary. */
+        if (wtf->byteswap) {
+            for (n = 0; n < nsamp; ++n)
+                SWAP_INT16(wtf->audio + n);
+        }
+
+        /* Mix or pick channels. */
+        if (nchans > 1)
+            nsamp = mixnpick_channels(wtf->audio, nsamp, nchans, whichchan);
+            
+        inspeech = wtf->audio;
+        nvec = wtf->featsize;
+        /* Consume all samples. */
+        while (nsamp) {
+            nfr = nvec;
+            fe_process_frames(wtf->fe, &inspeech, &nsamp, wtf->feat, &nfr);
+            if (nfr) {
+                if ((n = (*wtf->ot->output_frames)(wtf, wtf->feat, nfr)) < 0)
+                    return -1;
+                nfloat += n;
+            }
+        }
+        inspeech = wtf->audio;
+    }
+    /* Now process any leftover audio frames. */
+    fe_end_utt(wtf->fe, wtf->feat[0], &nfr);
+    if (nfr) {
+        if ((n = (*wtf->ot->output_frames)(wtf, wtf->feat, nfr)) < 0)
+            return -1;
+        nfloat += n;
+    }
+
+    if (fclose(wtf->infh) == EOF)
+        E_ERROR_SYSTEM("Failed to close input file");
+    wtf->infh = NULL;
+    return nfloat;
+}
+
+/**
+ * Process Sphinx MFCCs/logspectra from a filehandle.  Assume that
+ * wtf->infh is positioned just after the file header.
+ */
+static int
+decode_sphinx_mfc(sphinx_wave2feat_t *wtf)
+{
+    int nfloat = 0, n;
+    int featsize = wtf->featsize;
+
+    /* If the input vector length is less than the output length, we
+     * need to do this one frame at a time, because there's empty
+     * space at the end of each vector in wtf->feat. */
+    if (wtf->in_veclen < wtf->veclen)
+        featsize = 1;
+    while ((n = fread(wtf->feat[0], sizeof(**wtf->feat),
+                      featsize * wtf->in_veclen, wtf->infh)) != 0) {
+        int i, nfr = n / wtf->in_veclen;
+        if (n % wtf->in_veclen) {
+            E_ERROR("Size of file %d not a multiple of veclen %d\n",
+                    n, wtf->in_veclen);
+            return -1;
+        }
+        /* Byteswap stuff here if necessary. */
+        if (wtf->byteswap) {
+            for (i = 0; i < n; ++i)
+                SWAP_FLOAT32(wtf->feat[0] + i);
+        }
+        fe_float_to_mfcc(wtf->fe, (float32 **)wtf->feat, wtf->feat, nfr);
+        for (i = 0; i < nfr; ++i) {
+            if (cmd_ln_boolean_r(wtf->config, "-spec2cep")) {
+                if (0 == strcmp(cmd_ln_str_r(wtf->config, "-transform"), "legacy"))
+                    fe_logspec_to_mfcc(wtf->fe, wtf->feat[i], wtf->feat[i]);
+                else
+                    fe_logspec_dct2(wtf->fe, wtf->feat[i], wtf->feat[i]);
+            }
+            else if (cmd_ln_boolean_r(wtf->config, "-cep2spec")) {
+                fe_mfcc_dct3(wtf->fe, wtf->feat[i], wtf->feat[i]);
+            }
+        }
+        if ((n = (*wtf->ot->output_frames)(wtf, wtf->feat, nfr)) < 0)
+            return -1;
+        nfloat += n;
+    }
+
+    if (fclose(wtf->infh) == EOF)
+        E_ERROR_SYSTEM("Failed to close input file");
+    wtf->infh = NULL;
+    return nfloat;
+}
+
+static const audio_type_t types[] = {
+#ifdef HAVE_SNDFILE_H
+    { "-sndfile", &detect_sndfile, &decode_sndfile },
+#endif
+    { "-mswav", &detect_riff, &decode_pcm },
+    { "-nist", &detect_nist, &decode_pcm },
+    { "-raw", &detect_raw, &decode_pcm },
+    { "-sph2pipe", &detect_sph2pipe, &decode_pcm }
+};
+static const int ntypes = sizeof(types)/sizeof(types[0]);
+static const audio_type_t mfcc_type = {
+    "sphinx_mfc", &detect_sphinx_mfc, &decode_sphinx_mfc
+};
+
+/**
+ * Output sphinx format "header"
+ *
+ * @return 0 for success, <0 for error.
+ */
+static int
+output_header_sphinx(sphinx_wave2feat_t *wtf, int32 nfloat)
+{
+    if (fwrite(&nfloat, 4, 1, wtf->outfh) != 1) {
+        E_ERROR_SYSTEM("Failed to write to %s", wtf->outfile);
+        return -1;
+    }
+    return 0;
+}
+
+/**
+ * Output frames in sphinx format.
+ *
+ * @return 0 for success, <0 for error.
+ */
+static int
+output_frames_sphinx(sphinx_wave2feat_t *wtf, mfcc_t **frames, int nfr)
+{
+    int i, nfloat = 0;
+
+    fe_mfcc_to_float(wtf->fe, frames, (float32 **)frames, nfr);
+    for (i = 0; i < nfr; ++i) {
+        if (fwrite(frames[i], sizeof(float32), wtf->veclen, wtf->outfh) != wtf->veclen) {
+            E_ERROR_SYSTEM("Writing %d values to %s failed",
+                           wtf->veclen, wtf->outfile);
+            return -1;
+        }
+        nfloat += wtf->veclen;
+    }
+    return nfloat;
+}
+
+typedef enum htk_feature_kind_e {
+    WAVEFORM = 0,   /* PCM audio (rarely used) */
+    LPC = 1,        /* LPC filter coefficients */
+    LPCREFC = 2,    /* LPC reflection coefficients */
+    LPCEPSTRA = 3,  /* LPC-based cepstral coefficients */
+    LPCDELCEP = 4,  /* LPCC plus deltas */
+    IREFC = 5,      /* 16-bit integer LPC reflection coefficients */
+    MFCC = 6,       /* MFCCs */
+    FBANK = 7,      /* Log mel spectrum */
+    MELSPEC = 8,    /* Linear mel spectrum */
+    USER = 9,       /* User defined */
+    DISCRETE = 10,  /* Vector quantized data */
+    PLP = 11        /* PLP coefficients */
+} htk_feature_kind_t;
+
+typedef enum htk_feature_flag_e {
+    _E = 0000100, /* has energy */
+    _N = 0000200, /* absolute energy supressed */
+    _D = 0000400, /* has delta coefficients */
+    _A = 0001000, /* has acceleration (delta-delta) coefficients */
+    _C = 0002000, /* is compressed */
+    _Z = 0004000, /* has zero mean static coefficients (i.e. CMN) */
+    _K = 0010000, /* has CRC checksum */
+    _O = 0020000, /* has 0th cepstral coefficient */
+    _V = 0040000, /* has VQ data */
+    _T = 0100000  /* has third differential coefficients */
+} htk_feature_flag_t;
+
+/**
+ * Output HTK format header.
+ */
+static int
+output_header_htk(sphinx_wave2feat_t *wtf, int32 nfloat)
+{
+    int32 samp_period;
+    int16 samp_size;
+    int16 param_kind;
+    int swap = FALSE;
+
+    /* HTK files are big-endian. */
+    if (0 == strcmp("little", cmd_ln_str_r(wtf->config, "-mach_endian")))
+        swap = TRUE;
+    /* Same file size thing as in Sphinx files (I think) */
+    if (swap) SWAP_INT32(&nfloat);
+    if (fwrite(&nfloat, 4, 1, wtf->outfh) != 1)
+        return -1;
+    /* Sample period in 100ns units. */
+    samp_period = (int32)(1e+7 / cmd_ln_float32_r(wtf->config, "-frate"));
+    if (swap) SWAP_INT32(&samp_period);
+    if (fwrite(&samp_period, 4, 1, wtf->outfh) != 1)
+        return -1;
+    /* Sample size - veclen * sizeof each sample. */
+    samp_size = wtf->veclen * 4;
+    if (swap) SWAP_INT16(&samp_size);
+    if (fwrite(&samp_size, 2, 1, wtf->outfh) != 1)
+        return -1;
+    /* Format and flags. */
+    if (cmd_ln_boolean_r(wtf->config, "-logspec")
+        || cmd_ln_boolean_r(wtf->config, "-cep2spec"))
+        param_kind = FBANK; /* log mel-filter bank outputs */
+    else
+        param_kind = MFCC | _O; /* MFCC + CEP0 (note reordering...) */
+    if (swap) SWAP_INT16(&param_kind);
+    if (fwrite(&param_kind, 2, 1, wtf->outfh) != 1)
+        return -1;
+
+    return 0;
+}
+
+/**
+ * Output frames in HTK format.
+ */
+static int
+output_frames_htk(sphinx_wave2feat_t *wtf, mfcc_t **frames, int nfr)
+{
+    int i, j, swap, htk_reorder, nfloat = 0;
+
+    fe_mfcc_to_float(wtf->fe, frames, (float32 **)frames, nfr);
+    /* This is possibly inefficient, but probably not a big deal. */
+    swap = (0 == strcmp("little", cmd_ln_str_r(wtf->config, "-mach_endian")));
+    htk_reorder = (0 == strcmp("htk", wtf->ot->name)
+                   && !(cmd_ln_boolean_r(wtf->config, "-logspec")
+                        || cmd_ln_boolean_r(wtf->config, "-cep2spec")));
+    for (i = 0; i < nfr; ++i) {
+        if (htk_reorder) {
+            mfcc_t c0 = frames[i][0];
+            memmove(frames[i] + 1, frames[i], (wtf->veclen - 1) * 4);
+            frames[i][wtf->veclen - 1] = c0;
+        }
+        if (swap)
+            for (j = 0; j < wtf->veclen; ++j)
+                SWAP_FLOAT32(frames[i] + j);
+        if (fwrite(frames[i], sizeof(float32), wtf->veclen, wtf->outfh) != wtf->veclen) {
+            E_ERROR_SYSTEM("Writing %d values to %s failed",
+                           wtf->veclen, wtf->outfile);
+            return -1;
+        }
+        nfloat += wtf->veclen;
+    }
+    return nfloat;
+}
+
+/**
+ * Output frames in text format.
+ */
+static int
+output_frames_text(sphinx_wave2feat_t *wtf, mfcc_t **frames, int nfr)
+{
+    int i, j, nfloat = 0;
+
+    fe_mfcc_to_float(wtf->fe, frames, (float32 **)frames, nfr);
+    for (i = 0; i < nfr; ++i) {
+        for (j = 0; j < wtf->veclen; ++j) {
+            fprintf(wtf->outfh, "%.5g", frames[i][j]);
+            if (j == wtf->veclen - 1)
+                fprintf(wtf->outfh, "\n");
+            else
+                fprintf(wtf->outfh, " ");
+        }
+        nfloat += wtf->veclen;
+    }
+    return nfloat;
+}
+
+static const output_type_t outtypes[] = {
+    { "sphinx", &output_header_sphinx, &output_frames_sphinx },
+    { "htk", &output_header_htk, &output_frames_htk },
+    { "text", NULL, &output_frames_text }
+};
+static const int nouttypes = sizeof(outtypes)/sizeof(outtypes[0]);
+
+sphinx_wave2feat_t *
+sphinx_wave2feat_init(cmd_ln_t *config)
+{
+    sphinx_wave2feat_t *wtf;
+    int i;
+
+    wtf = ckd_calloc(1, sizeof(*wtf));
+    wtf->refcount = 1;
+    wtf->config = cmd_ln_retain(config);
+    wtf->fe = fe_init_auto_r(wtf->config);
+    wtf->ot = outtypes; /* Default (sphinx) type. */
+    for (i = 0; i < nouttypes; ++i) {
+        output_type_t const *otype = &outtypes[i];
+        if (0 == strcmp(cmd_ln_str_r(config, "-ofmt"), otype->name)) {
+            wtf->ot = otype;
+            break;
+        }
+    }
+    if (i == nouttypes) {
+        E_ERROR("Unknown output type: '%s'\n",
+                cmd_ln_str_r(config, "-ofmt"));
+        sphinx_wave2feat_free(wtf);
+        return NULL;
+    }
+
+    return wtf;
+}
+
+int
+sphinx_wave2feat_free(sphinx_wave2feat_t *wtf)
+{
+    if (wtf == NULL)
+        return 0;
+    if (--wtf->refcount > 0)
+        return wtf->refcount;
+
+    ckd_free(wtf->audio);
+    ckd_free_2d(wtf->feat);
+    ckd_free(wtf->infile);
+    ckd_free(wtf->outfile);
+    if (wtf->infh) {
+        if (fclose(wtf->infh) == EOF)
+            E_ERROR_SYSTEM("Failed to close input file");
+    }
+    if (wtf->outfh) {
+        if (fclose(wtf->outfh) == EOF)
+            E_ERROR_SYSTEM("Failed to close output file");
+    }
+    cmd_ln_free_r(wtf->config);
+    fe_free(wtf->fe);
+    ckd_free(wtf);
+
+    return 0;
+}
+
+sphinx_wave2feat_t *
+sphinx_wave2feat_retain(sphinx_wave2feat_t *wtf)
+{
+    ++wtf->refcount;
+    return wtf;
+}
+
+static audio_type_t const *
+detect_audio_type(sphinx_wave2feat_t *wtf, char const *infile)
+{
+    audio_type_t const *atype;
+    int i;
+
+    /* Special case audio type for Sphinx MFCC inputs. */
+    if (cmd_ln_boolean_r(wtf->config, "-spec2cep")
+        || cmd_ln_boolean_r(wtf->config, "-cep2spec")) {
+        int rv = mfcc_type.detect(wtf, infile);
+        if (rv == -1)
+            goto error_out;
+        return &mfcc_type;
+    }
+
+    /* Try to use the type of infile given on the command line. */
+    for (i = 0; i < ntypes; ++i) {
+        int rv;
+        atype = &types[i];
+        if (cmd_ln_boolean_r(wtf->config, atype->name)) {
+            rv = (*atype->detect)(wtf, infile);
+            if (rv == -1)
+                goto error_out;
+            else if (rv == TRUE)
+                break;
+        }
+    }
+    if (i == ntypes) {
+        /* Detect file type of infile and get parameters. */
+        for (i = 0; i < ntypes; ++i) {
+            int rv;
+            atype = &types[i];
+            rv = (*atype->detect)(wtf, infile);
+            if (rv == -1)
+                goto error_out;
+            else if (rv == TRUE)
+                break;
+        }
+        if (i == ntypes)
+            goto error_out;
+    }
+    return atype;
+ error_out:
+    if (wtf->infh)
+        fclose(wtf->infh);
+    wtf->infh = NULL;
+    return NULL;
+}
+
+int
+sphinx_wave2feat_convert_file(sphinx_wave2feat_t *wtf,
+                              char const *infile, char const *outfile)
+{
+    int nchans, minfft, nfft, nfloat, veclen;
+    audio_type_t const *atype;
+    int fshift, fsize;
+
+    if (cmd_ln_boolean_r(wtf->config, "-verbose"))
+        E_INFO("Converting %s to %s\n", infile, outfile);
+
+    /* Detect input file type. */
+    if ((atype = detect_audio_type(wtf, infile)) == NULL)
+        return -1;
+
+    /* Determine whether to byteswap input. */
+    wtf->byteswap = strcmp(cmd_ln_str_r(wtf->config, "-mach_endian"),
+                           cmd_ln_str_r(wtf->config, "-input_endian"));
+
+    /* Make sure the FFT size is sufficiently large. */
+    minfft = (int)(cmd_ln_float32_r(wtf->config, "-samprate")
+                   * cmd_ln_float32_r(wtf->config, "-wlen") + 0.5);
+    for (nfft = 1; nfft < minfft; nfft <<= 1)
+        ;
+    if (nfft > cmd_ln_int32_r(wtf->config, "-nfft")) {
+        E_WARN("Value of -nfft = %d is too small, increasing to %d\n",
+               cmd_ln_int32_r(wtf->config, "-nfft"), nfft);
+        cmd_ln_set_int32_r(wtf->config, "-nfft", nfft);
+        fe_free(wtf->fe);
+        wtf->fe = fe_init_auto_r(wtf->config);
+    }
+
+    /* Get the output frame size (if not already set). */
+    if (wtf->veclen == 0)
+        wtf->veclen = fe_get_output_size(wtf->fe);
+
+    /* Set up the input and output buffers. */
+    fe_get_input_size(wtf->fe, &fshift, &fsize);
+    /* Want to get at least a whole frame plus shift in here.  Also we
+       will either pick or mix multiple channels so we need to read
+       them all at once. */
+    nchans = cmd_ln_int32_r(wtf->config, "-nchans");
+    wtf->blocksize = cmd_ln_int32_r(wtf->config, "-blocksize") * nchans;
+    if (wtf->blocksize < (fsize + fshift) * nchans) {
+        E_INFO("Block size of %d too small, increasing to %d\n",
+               wtf->blocksize,
+               (fsize + fshift) * nchans);
+        wtf->blocksize = (fsize + fshift) * nchans;
+    }
+    wtf->audio = ckd_calloc(wtf->blocksize, sizeof(*wtf->audio));
+    wtf->featsize = (wtf->blocksize / nchans - fsize) / fshift;
+
+    /* Use the maximum of the input and output frame sizes to allocate this. */
+    veclen = wtf->veclen;
+    if (wtf->in_veclen > veclen) veclen = wtf->in_veclen;
+    wtf->feat = ckd_calloc_2d(wtf->featsize, veclen, sizeof(**wtf->feat));
+
+    /* Let's go! */
+    if ((wtf->outfh = fopen(outfile, "wb")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open %s for writing", outfile);
+        return -1;
+    }
+    /* Write an empty header, which we'll fill in later. */
+    if (wtf->ot->output_header &&
+        (*wtf->ot->output_header)(wtf, 0) < 0) {
+        E_ERROR_SYSTEM("Failed to write empty header to %s\n", outfile);
+        goto error_out;
+    }
+    wtf->outfile = ckd_salloc(outfile);
+
+    if ((nfloat = (*atype->decode)(wtf)) < 0)
+        return -1;
+
+    if (wtf->ot->output_header) {
+        if (fseek(wtf->outfh, 0, SEEK_SET) < 0) {
+            E_ERROR_SYSTEM("Failed to seek to beginning of %s\n", outfile);
+            goto error_out;
+        }
+        if ((*wtf->ot->output_header)(wtf, nfloat) < 0) {
+            E_ERROR_SYSTEM("Failed to write header to %s\n", outfile);
+            goto error_out;
+        }
+    }
+    if (fclose(wtf->outfh) == EOF)
+        E_ERROR_SYSTEM("Failed to close output file");
+    wtf->outfh = NULL;
+
+    return 0;
+error_out:
+    if (wtf->outfh) {
+        fclose(wtf->outfh);
+        wtf->outfh = NULL;
+    }
+    return -1;
+}
+
+void
+build_filenames(cmd_ln_t *config, char const *basename,
+                char **out_infile, char **out_outfile)
+{
+    char const *di, *do_, *ei, *eo;
+
+    di = cmd_ln_str_r(config, "-di");
+    do_ = cmd_ln_str_r(config, "-do");
+    ei = cmd_ln_str_r(config, "-ei");
+    eo = cmd_ln_str_r(config, "-eo");
+
+    *out_infile = string_join(di ? di : "",
+                              di ? "/" : "",
+                              basename,
+                              ei ? "." : "",
+                              ei ? ei : "",
+                              NULL);
+    *out_outfile = string_join(do_ ? do_ : "",
+                               do_ ? "/" : "",
+                               basename,
+                               eo ? "." : "",
+                               eo ? eo : "",
+                              NULL);
+    /* Build output directory structure if possible/requested (it is
+     * by default). */
+    if (cmd_ln_boolean_r(config, "-build_outdirs")) {
+        char *dirname = ckd_salloc(*out_outfile);
+        path2dirname(*out_outfile, dirname);
+        build_directory(dirname);
+        ckd_free(dirname);
+    }
+}
+
+static int
+run_control_file(sphinx_wave2feat_t *wtf, char const *ctlfile)
+{
+    hash_table_t *files;
+    hash_iter_t *itor;
+    lineiter_t *li;
+    FILE *ctlfh;
+    int nskip, runlen, npart, rv = 0;
+
+    if ((ctlfh = fopen(ctlfile, "r")) == NULL) {
+        E_ERROR_SYSTEM("Failed to open control file %s", ctlfile);
+        return -1;
+    }
+    nskip = cmd_ln_int32_r(wtf->config, "-nskip");
+    runlen = cmd_ln_int32_r(wtf->config, "-runlen");
+    if ((npart = cmd_ln_int32_r(wtf->config, "-npart"))) {
+        /* Count lines in the file. */
+        int partlen, part, nlines = 0;
+        part = cmd_ln_int32_r(wtf->config, "-part");
+        for (li = lineiter_start(ctlfh); li; li = lineiter_next(li))
+            ++nlines;
+        fseek(ctlfh, 0, SEEK_SET);
+        partlen = nlines / npart;
+        nskip = partlen * (part - 1);
+        if (part == npart)
+            runlen = -1;
+        else
+            runlen = partlen;
+    }
+    if (runlen != -1){
+        E_INFO("Processing %d utterances at position %d\n", runlen, nskip);
+        files = hash_table_new(runlen, HASH_CASE_YES);
+    }
+    else {
+        E_INFO("Processing all remaining utterances at position %d\n", nskip);
+        files = hash_table_new(1000, HASH_CASE_YES);
+    }
+    for (li = lineiter_start(ctlfh); li; li = lineiter_next(li)) {
+        char *c, *infile, *outfile;
+
+        if (nskip-- > 0)
+            continue;
+        if (runlen == 0) {
+            lineiter_free(li);
+            break;
+        }
+        --runlen;
+
+        string_trim(li->buf, STRING_BOTH);
+        /* Extract the file ID from the control line. */
+        if ((c = strchr(li->buf, ' ')) != NULL)
+            *c = '\0';
+        build_filenames(wtf->config, li->buf, &infile, &outfile);
+        if (hash_table_lookup(files, infile, NULL) == 0)
+            continue;
+        rv = sphinx_wave2feat_convert_file(wtf, infile, outfile);
+        hash_table_enter(files, infile, outfile);
+        if (rv != 0) {
+            lineiter_free(li);
+            if (fclose(ctlfh) == EOF)
+                E_ERROR_SYSTEM("Failed to close control file");
+            break;
+        }
+    }
+    for (itor = hash_table_iter(files); itor;
+         itor = hash_table_iter_next(itor)) {
+        ckd_free((void *)hash_entry_key(itor->ent));
+        ckd_free(hash_entry_val(itor->ent));
+    }
+    hash_table_free(files);
+    return rv;
+}
+
+int
+main(int argc, char *argv[])
+{
+    sphinx_wave2feat_t *wtf;
+    cmd_ln_t *config;
+    int rv;
+
+    /* Initialize config. */
+    if ((config = cmd_ln_parse_r(NULL, defn, argc, argv, TRUE)) == NULL)
+        return 2;
+
+    /* Parse an argument file if there's one in there. */
+    if (cmd_ln_str_r(config, "-argfile"))
+        config = cmd_ln_parse_file_r(config, defn,
+                                     cmd_ln_str_r(config, "-argfile"), FALSE);
+    if (config == NULL) {
+        E_ERROR("Command line parsing failed\n");
+        return 1;
+    }
+    if ((wtf = sphinx_wave2feat_init(config)) == NULL) {
+        E_ERROR("Failed to initialize wave2feat object\n");
+        return 1;
+    }
+
+    /* If there's a control file run through it, otherwise we will do
+     * a single file (which is what run_control_file will do
+     * internally too) */
+    if (cmd_ln_str_r(config, "-c"))
+        rv = run_control_file(wtf, cmd_ln_str_r(config, "-c"));
+    else
+        rv = sphinx_wave2feat_convert_file(wtf, cmd_ln_str_r(config, "-i"),
+                                           cmd_ln_str_r(config, "-o"));
+
+    sphinx_wave2feat_free(wtf);
+    return rv;
+}
diff --git a/src/sphinx_fe/sphinx_wave2feat.h b/src/sphinx_fe/sphinx_wave2feat.h
new file mode 100644 (file)
index 0000000..89d9241
--- /dev/null
@@ -0,0 +1,66 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 1996-2004 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+#ifndef __SPHINX_FE_H__
+#define __SPHINX_FE_H__
+
+/**
+ * Waveform to feature converter object.
+ */
+typedef struct sphinx_wave2feat_s sphinx_wave2feat_t;
+
+/**
+ * Initialize waveform to feature converter.
+ */
+sphinx_wave2feat_t *sphinx_wave2feat_init(cmd_ln_t *config);
+
+/**
+ * Release a waveform to feature converter.
+ */
+int sphinx_wave2feat_free(sphinx_wave2feat_t *w2f);
+
+/**
+ * Retain a waveform to feature converter.
+ */
+sphinx_wave2feat_t *sphinx_wave2feat_retain(sphinx_wave2feat_t *w2f);
+
+/**
+ * Convert one file.
+ */
+int sphinx_wave2feat_convert_file(sphinx_wave2feat_t *w2f,
+                                 char const *infile, char const *outfile);
+
+#endif /* __SPHINX_FE_H__ */
diff --git a/src/sphinx_jsgf2fsg/Makefile.am b/src/sphinx_jsgf2fsg/Makefile.am
new file mode 100644 (file)
index 0000000..e0ca3d5
--- /dev/null
@@ -0,0 +1,10 @@
+bin_PROGRAMS = sphinx_jsgf2fsg
+
+sphinx_jsgf2fsg_SOURCES = main.c
+
+sphinx_jsgf2fsg_LDADD = \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include
+
+EXTRA_DIST = fsg2dot.pl
diff --git a/src/sphinx_jsgf2fsg/Makefile.in b/src/sphinx_jsgf2fsg/Makefile.in
new file mode 100644 (file)
index 0000000..d650d71
--- /dev/null
@@ -0,0 +1,485 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+bin_PROGRAMS = sphinx_jsgf2fsg$(EXEEXT)
+subdir = src/sphinx_jsgf2fsg
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_sphinx_jsgf2fsg_OBJECTS = main.$(OBJEXT)
+sphinx_jsgf2fsg_OBJECTS = $(am_sphinx_jsgf2fsg_OBJECTS)
+sphinx_jsgf2fsg_DEPENDENCIES =  \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(sphinx_jsgf2fsg_SOURCES)
+DIST_SOURCES = $(sphinx_jsgf2fsg_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+sphinx_jsgf2fsg_SOURCES = main.c
+sphinx_jsgf2fsg_LDADD = \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include
+EXTRA_DIST = fsg2dot.pl
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/sphinx_jsgf2fsg/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/sphinx_jsgf2fsg/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
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+sphinx_jsgf2fsg$(EXEEXT): $(sphinx_jsgf2fsg_OBJECTS) $(sphinx_jsgf2fsg_DEPENDENCIES) 
+       @rm -f sphinx_jsgf2fsg$(EXEEXT)
+       $(LINK) $(sphinx_jsgf2fsg_OBJECTS) $(sphinx_jsgf2fsg_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+
+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: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-binPROGRAMS
+
+# 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/src/sphinx_jsgf2fsg/fsg2dot.pl b/src/sphinx_jsgf2fsg/fsg2dot.pl
new file mode 100755 (executable)
index 0000000..784ff3a
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+
+use strict;
+
+my $nstates;
+while (<>) {
+    chomp;
+    s/#.*$//;
+    next if /^$/;
+
+    if (/FSG_BEGIN (\S+)/) {
+       print "digraph $1 {\n\trankdir=LR;\n\t";
+    }
+    elsif (/NUM_STATES (\d+)/) {
+       $nstates = $1;
+    }
+    elsif (/START_STATE (\d+)/) {
+    }
+    elsif (/FINAL_STATE (\d+)/) {
+       my $end = $1;
+
+       print "\tnode [shape=circle];";
+       for (my $i = 0; $i < $nstates; ++$i) {
+           print " $i" unless $i == $end;
+       }
+       print ";\n\tnode [shape=doublecircle]; $end;\n\n";
+    }
+    elsif (/TRANSITION/) {
+       my (undef, $from, $to, $weight, $word) = split;
+
+       my $label;
+       if ($weight != 1.0 and defined($word)) {
+           $label = sprintf "%s/%.2f", $word, $weight;
+       }
+       elsif ($weight != 1.0) {
+           $label = sprintf "%.2f", $weight;
+       }
+       elsif ($word) {
+           $label = $word;
+       }
+       print "\t$from -> $to [label=\"$label\"];\n";
+    }
+}
+print "}\n";
diff --git a/src/sphinx_jsgf2fsg/main.c b/src/sphinx_jsgf2fsg/main.c
new file mode 100644 (file)
index 0000000..c600d14
--- /dev/null
@@ -0,0 +1,140 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2007 Carnegie Mellon University.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+
+#include <string.h>
+
+#include <sphinxbase/hash_table.h>
+#include <sphinxbase/fsg_model.h>
+#include <sphinxbase/jsgf.h>
+#include <sphinxbase/err.h>
+#include <sphinxbase/strfuncs.h>
+
+static fsg_model_t *
+get_fsg(jsgf_t *grammar, const char *name)
+{
+    jsgf_rule_iter_t *itor;
+    logmath_t *lmath = logmath_init(1.0001, 0, 0);
+    fsg_model_t *fsg = NULL;
+
+    for (itor = jsgf_rule_iter(grammar); itor;
+         itor = jsgf_rule_iter_next(itor)) {
+        jsgf_rule_t *rule = jsgf_rule_iter_rule(itor);
+        char const *rule_name = jsgf_rule_name(rule);
+
+        if ((name == NULL && jsgf_rule_public(rule))
+            || (name && strlen(rule_name)-2 == strlen(name) &&
+                0 == strncmp(rule_name + 1, name, strlen(rule_name) - 2))) {
+            fsg = jsgf_build_fsg_raw(grammar, rule, logmath_retain(lmath), 1.0);
+            jsgf_rule_iter_free(itor);
+            break;
+        }
+    }
+
+    logmath_free(lmath);
+    return fsg;
+}
+
+int
+main(int argc, char *argv[])
+{
+    jsgf_t *jsgf;
+    fsg_model_t *fsg;
+    int fsm = 0;
+    char *outfile = NULL;
+    char *symfile = NULL;
+
+    if (argc > 1 && 0 == strcmp(argv[1], "-fsm")) {
+        fsm = 1;
+        ++argv;
+    }
+
+    jsgf = jsgf_parse_file(argc > 1 ? argv[1] : NULL, NULL);
+    if (jsgf == NULL) {
+        return 1;
+    }
+    fsg = get_fsg(jsgf, argc > 2 ? argv[2] : NULL);
+
+    if (argc > 3)
+        outfile = argv[3];
+    if (argc > 4)
+        symfile = argv[4];
+
+    if (fsm) {
+        if (outfile)
+            fsg_model_writefile_fsm(fsg, outfile);
+        else
+            fsg_model_write_fsm(fsg, stdout);
+        if (symfile)
+            fsg_model_writefile_symtab(fsg, symfile);
+    }
+    else {
+        if (outfile)
+            fsg_model_writefile(fsg, outfile);
+        else
+            fsg_model_write(fsg, stdout);
+    }
+    fsg_model_free(fsg);
+    jsgf_grammar_free(jsgf);
+
+    return 0;
+}
+
+
+/** Silvio Moioli: Windows CE/Mobile entry point added. */
+#if defined(_WIN32_WCE)
+#pragma comment(linker,"/entry:mainWCRTStartup")
+#include <windows.h>
+
+//Windows Mobile has the Unicode main only
+int wmain(int32 argc, wchar_t *wargv[]) {
+    char** argv;
+    size_t wlen;
+    size_t len;
+    int i;
+
+    argv = malloc(argc*sizeof(char*));
+    for (i=0; i<argc; i++){
+        wlen = lstrlenW(wargv[i]);
+        len = wcstombs(NULL, wargv[i], wlen);
+        argv[i] = malloc(len+1);
+        wcstombs(argv[i], wargv[i], wlen);
+    }
+
+    //assuming ASCII parameters
+    return main(argc, argv);
+}
+#endif
diff --git a/src/sphinx_lmtools/Makefile.am b/src/sphinx_lmtools/Makefile.am
new file mode 100644 (file)
index 0000000..e415b5f
--- /dev/null
@@ -0,0 +1,12 @@
+bin_PROGRAMS = sphinx_lm_eval sphinx_lm_convert
+
+bin_SCRIPTS = sphinx_lm_sort
+EXTRA_DIST = sphinx_lm_sort
+
+LDADD = \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       $(top_builddir)/src/libsphinxbase/lm/libsphinxlm.la
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include \
+       -I$(top_srcdir)/src/libsphinxlm
+
diff --git a/src/sphinx_lmtools/Makefile.in b/src/sphinx_lmtools/Makefile.in
new file mode 100644 (file)
index 0000000..f914e23
--- /dev/null
@@ -0,0 +1,523 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+bin_PROGRAMS = sphinx_lm_eval$(EXEEXT) sphinx_lm_convert$(EXEEXT)
+subdir = src/sphinx_lmtools
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+sphinx_lm_convert_SOURCES = sphinx_lm_convert.c
+sphinx_lm_convert_OBJECTS = sphinx_lm_convert.$(OBJEXT)
+sphinx_lm_convert_LDADD = $(LDADD)
+sphinx_lm_convert_DEPENDENCIES =  \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       $(top_builddir)/src/libsphinxbase/lm/libsphinxlm.la
+sphinx_lm_eval_SOURCES = sphinx_lm_eval.c
+sphinx_lm_eval_OBJECTS = sphinx_lm_eval.$(OBJEXT)
+sphinx_lm_eval_LDADD = $(LDADD)
+sphinx_lm_eval_DEPENDENCIES =  \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       $(top_builddir)/src/libsphinxbase/lm/libsphinxlm.la
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = sphinx_lm_convert.c sphinx_lm_eval.c
+DIST_SOURCES = sphinx_lm_convert.c sphinx_lm_eval.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+bin_SCRIPTS = sphinx_lm_sort
+EXTRA_DIST = sphinx_lm_sort
+LDADD = \
+       $(top_builddir)/src/libsphinxbase/libsphinxbase.la \
+       $(top_builddir)/src/libsphinxbase/lm/libsphinxlm.la
+
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include \
+       -I$(top_srcdir)/src/libsphinxlm
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/sphinx_lmtools/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/sphinx_lmtools/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
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+sphinx_lm_convert$(EXEEXT): $(sphinx_lm_convert_OBJECTS) $(sphinx_lm_convert_DEPENDENCIES) 
+       @rm -f sphinx_lm_convert$(EXEEXT)
+       $(LINK) $(sphinx_lm_convert_OBJECTS) $(sphinx_lm_convert_LDADD) $(LIBS)
+sphinx_lm_eval$(EXEEXT): $(sphinx_lm_eval_OBJECTS) $(sphinx_lm_eval_DEPENDENCIES) 
+       @rm -f sphinx_lm_eval$(EXEEXT)
+       $(LINK) $(sphinx_lm_eval_OBJECTS) $(sphinx_lm_eval_LDADD) $(LIBS)
+install-binSCRIPTS: $(bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+           $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinx_lm_convert.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinx_lm_eval.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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 $(PROGRAMS) $(SCRIPTS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+
+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: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-binSCRIPTS install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-binPROGRAMS \
+       uninstall-binSCRIPTS
+
+# 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/src/sphinx_lmtools/sphinx_lm_convert.c b/src/sphinx_lmtools/sphinx_lm_convert.c
new file mode 100644 (file)
index 0000000..aad609b
--- /dev/null
@@ -0,0 +1,220 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2009 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * \file sphinx_lm_convert.c
+ * Language model conversion tool.
+ */
+#include <sphinxbase/logmath.h>
+#include <sphinxbase/ngram_model.h>
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/ckd_alloc.h>
+#include <sphinxbase/err.h>
+#include <sphinxbase/pio.h>
+#include <sphinxbase/strfuncs.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+static const arg_t defn[] = {
+  { "-help",
+    ARG_BOOLEAN,
+    "no",
+    "Shows the usage of the tool"},
+
+  { "-logbase",
+    ARG_FLOAT64,
+    "1.0001",
+    "Base in which all log-likelihoods calculated" },
+
+  { "-i",
+    REQARG_STRING,
+    NULL,
+    "Input language model file (required)"},
+
+  { "-o",
+    REQARG_STRING,
+    NULL,
+    "Output language model file (required)"},
+
+  { "-ifmt",
+    ARG_STRING,
+    NULL,
+    "Input language model format (will guess if not specified)"},
+
+  { "-ofmt",
+    ARG_STRING,
+    NULL,
+    "Output language model file (will guess if not specified)"},
+
+  { "-ienc",
+    ARG_STRING,
+    NULL,
+    "Input language model text encoding (no conversion done if not specified)"},
+
+  { "-oenc",
+    ARG_STRING,
+    "utf8",
+    "Output language model text encoding"},
+
+  { "-case",
+    ARG_STRING,
+    NULL,
+    "Ether 'lower' or 'upper' - case fold to lower/upper case (NOT UNICODE AWARE)" },
+
+  { "-mmap",
+    ARG_BOOLEAN,
+    "no",
+    "Use memory-mapped I/O for reading binary LM files"},
+
+  { "-debug",
+    ARG_INT32,
+    NULL,
+    "Verbosity level for debugging messages"
+  },
+
+  { NULL, 0, NULL, NULL }
+};
+
+static void
+usagemsg(char *pgm)
+{
+    E_INFO("Usage: %s -i <input.lm> \\\n", pgm);
+    E_INFOCONT("\t[-ifmt txt] [-ofmt dmp]\n");
+    E_INFOCONT("\t-o <output.lm.DMP>\n");
+
+    exit(0);
+}
+
+
+int
+main(int argc, char *argv[])
+{
+       cmd_ln_t *config;
+       ngram_model_t *lm = NULL;
+       logmath_t *lmath;
+        int itype, otype;
+        char const *kase;
+
+       if ((config = cmd_ln_parse_r(NULL, defn, argc, argv, TRUE)) == NULL)
+               return 1;
+               
+       if (cmd_ln_boolean_r(config, "-help")) {
+           usagemsg(argv[0]);
+       }
+
+        err_set_debug_level(cmd_ln_int32_r(config, "-debug"));
+
+       /* Create log math object. */
+       if ((lmath = logmath_init
+            (cmd_ln_float64_r(config, "-logbase"), 0, 0)) == NULL) {
+               E_FATAL("Failed to initialize log math\n");
+       }
+       
+       if (cmd_ln_str_r(config, "-i") == NULL || cmd_ln_str_r(config, "-i") == NULL) {
+            E_ERROR("Please specify both input and output models\n");
+            goto error_out;
+        }
+           
+       
+       /* Load the input language model. */
+        if (cmd_ln_str_r(config, "-ifmt")) {
+            if ((itype = ngram_str_to_type(cmd_ln_str_r(config, "-ifmt")))
+                == NGRAM_INVALID) {
+                E_ERROR("Invalid input type %s\n", cmd_ln_str_r(config, "-ifmt"));
+                goto error_out;
+            }
+            lm = ngram_model_read(config, cmd_ln_str_r(config, "-i"),
+                                  itype, lmath);
+        }
+        else {
+            lm = ngram_model_read(config, cmd_ln_str_r(config, "-i"),
+                                  NGRAM_AUTO, lmath);
+       }
+
+        /* Guess or set the output language model type. */
+        if (cmd_ln_str_r(config, "-ofmt")) {
+            if ((otype = ngram_str_to_type(cmd_ln_str_r(config, "-ofmt")))
+                == NGRAM_INVALID) {
+                E_ERROR("Invalid output type %s\n", cmd_ln_str_r(config, "-ofmt"));
+                goto error_out;
+            }
+        }
+        else {
+            otype = ngram_file_name_to_type(cmd_ln_str_r(config, "-o"));
+        }
+
+        /* Recode the language model if desired. */
+        if (cmd_ln_str_r(config, "-ienc")) {
+            if (ngram_model_recode(lm, cmd_ln_str_r(config, "-ienc"),
+                                   cmd_ln_str_r(config, "-oenc")) != 0) {
+                E_ERROR("Failed to recode language model from %s to %s\n",
+                        cmd_ln_str_r(config, "-ienc"),
+                        cmd_ln_str_r(config, "-oenc"));
+                goto error_out;
+            }
+        }
+
+        /* Case fold if requested. */
+        if ((kase = cmd_ln_str_r(config, "-case"))) {
+            if (0 == strcmp(kase, "lower")) {
+                ngram_model_casefold(lm, NGRAM_LOWER);
+            }
+            else if (0 == strcmp(kase, "upper")) {
+                ngram_model_casefold(lm, NGRAM_UPPER);
+            }
+            else {
+                E_ERROR("Unknown value for -case: %s\n", kase);
+                goto error_out;
+            }
+        }
+
+        /* Write the output language model. */
+        if (ngram_model_write(lm, cmd_ln_str_r(config, "-o"), otype) != 0) {
+            E_ERROR("Failed to write language model in format %s to %s\n",
+                    ngram_type_to_str(otype), cmd_ln_str_r(config, "-o"));
+            goto error_out;
+        }
+
+        /* That's all folks! */
+        ngram_model_free(lm);
+       return 0;
+
+error_out:
+        ngram_model_free(lm);
+       return 1;
+}
diff --git a/src/sphinx_lmtools/sphinx_lm_eval.c b/src/sphinx_lmtools/sphinx_lm_eval.c
new file mode 100644 (file)
index 0000000..87153ca
--- /dev/null
@@ -0,0 +1,330 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/* ====================================================================
+ * Copyright (c) 2008 Carnegie Mellon University.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * This work was supported in part by funding from the Defense Advanced 
+ * Research Projects Agency and the National Science Foundation of the 
+ * United States of America, and the CMU Sphinx Speech Consortium.
+ *
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+ * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
+/**
+ * \file sphinx_lm_eval.c
+ * Language model evaluation tool.
+ */
+#include <sphinxbase/logmath.h>
+#include <sphinxbase/ngram_model.h>
+#include <sphinxbase/cmd_ln.h>
+#include <sphinxbase/ckd_alloc.h>
+#include <sphinxbase/err.h>
+#include <sphinxbase/pio.h>
+#include <sphinxbase/strfuncs.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+static const arg_t defn[] = {
+  { "-help",
+    ARG_BOOLEAN,
+    "no",
+    "Shows the usage of the tool"},
+
+  { "-logbase",
+    ARG_FLOAT64,
+    "1.0001",
+    "Base in which all log-likelihoods calculated" },
+
+  { "-lm",
+    ARG_STRING,
+    NULL,
+    "Language model file"},
+
+  { "-probdef",
+    ARG_STRING,
+    NULL,
+    "Probability definition file for classes in LM"},
+
+  { "-lmctlfn",
+    ARG_STRING,
+    NULL,
+    "Control file listing a set of language models"},
+
+  { "-lmname",
+    ARG_STRING,
+    NULL,
+    "Name of language model in -lmctlfn to use for all utterances" },
+
+  { "-lsn",
+    ARG_STRING,
+    NULL,
+    "Transcription file to evaluate"},
+
+  { "-text",
+    ARG_STRING,
+    "Text string to evaluate"},
+
+  { "-mmap",
+    ARG_BOOLEAN,
+    "no",
+    "Use memory-mapped I/O for reading binary LM files"},
+
+  { "-lw",
+    ARG_FLOAT32,
+    "1.0",
+    "Language model weight" },
+
+  { "-wip",
+    ARG_FLOAT32,
+    "1.0",
+    "Word insertion probability" },
+
+  { "-uw",
+    ARG_FLOAT32,
+    "1.0",
+    "Unigram probability weight (interpolated with uniform distribution)"},
+
+  { "-verbose",
+    ARG_BOOLEAN,
+    "no",
+    "Print details of perplexity calculation" },
+
+  /* FIXME: Support -lmstartsym, -lmendsym, -lmctlfn, -ctl_lm */
+  { NULL, 0, NULL, NULL }
+};
+
+static int verbose;
+
+static int
+calc_entropy(ngram_model_t *lm, char **words, int32 n,
+            int32 *out_n_ccs, int32 *out_n_oovs, int32 *out_lm_score)
+{
+       int32 *wids;
+       int32 startwid;
+       int32 i, ch, nccs, noovs, unk;
+
+        if (n == 0)
+            return 0;
+
+        unk = ngram_unknown_wid(lm);
+
+       /* Reverse this array into an array of word IDs. */
+       wids = ckd_calloc(n, sizeof(*wids));
+       for (i = 0; i < n; ++i)
+               wids[n-i-1] = ngram_wid(lm, words[i]);
+       /* Skip <s> as it's a context cue (HACK, this should be configurable). */
+       startwid = ngram_wid(lm, "<s>");
+
+       /* Now evaluate the list of words in reverse using the
+        * remainder of the array as the history. */
+       ch = noovs = nccs = 0;
+       for (i = 0; i < n; ++i) {
+               int32 n_used;
+               int32 prob;
+
+               /* Skip <s> as it's a context cue (HACK, this should be configurable). */
+               if (wids[i] == startwid) {
+                       ++nccs;
+                       continue;
+               }
+               /* Skip and count OOVs. */
+               if (wids[i] == NGRAM_INVALID_WID || wids[i] == unk) {
+                       ++noovs;
+                       continue;
+               }
+               /* Sum up information for each N-gram */
+               prob = ngram_ng_score(lm,
+                                     wids[i], wids + i + 1,
+                                     n - i - 1, &n_used);
+                if (verbose) {
+                    int m;
+                    printf("log P(%s|", ngram_word(lm, wids[i]));
+                    m = i + ngram_model_get_size(lm) - 1;
+                    if (m >= n)
+                        m = n - 1;
+                    while (m > i) {
+                        printf("%s ", ngram_word(lm, wids[m--]));
+                    }
+                    printf(") = %d\n", prob);
+                }
+               ch -= prob;
+       }
+
+       if (out_n_ccs) *out_n_ccs = nccs;
+       if (out_n_oovs) *out_n_oovs = noovs;
+
+       /* Calculate cross-entropy CH = - 1/N sum log P(W|H) */
+        n -= (nccs + noovs);
+        if (n <= 0)
+            return 0;
+        if (out_lm_score)
+            *out_lm_score = -ch;
+       return ch / n;
+}
+
+static void
+evaluate_file(ngram_model_t *lm, logmath_t *lmath, const char *lsnfn)
+{
+       FILE *fh;
+        lineiter_t *litor;
+       int32 nccs, noovs, nwords, lscr;
+       float64 ch, log_to_log2;;
+
+       if ((fh = fopen(lsnfn, "r")) == NULL)
+               E_FATAL_SYSTEM("failed to open transcript file %s", lsnfn);
+
+       /* We have to keep ch in floating-point to avoid overflows, so
+        * we might as well use log2. */
+       log_to_log2 = log(logmath_get_base(lmath)) / log(2);
+       nccs = noovs = nwords = 0;
+       ch = 0.0;
+        for (litor = lineiter_start(fh); litor; litor = lineiter_next(litor)) {
+               char **words;
+               int32 n, tmp_ch, tmp_noovs, tmp_nccs, tmp_lscr;
+
+               n = str2words(litor->buf, NULL, 0);
+               if (n < 0)
+                       E_FATAL("str2words(line, NULL, 0) = %d, should not happen\n", n);
+               if (n == 0) /* Do nothing! */
+                       continue;
+               words = ckd_calloc(n, sizeof(*words));
+               str2words(litor->buf, words, n);
+
+               /* Remove any utterance ID (FIXME: has to be a single "word") */
+               if (words[n-1][0] == '('
+                   && words[n-1][strlen(words[n-1])-1] == ')')
+                       n = n - 1;
+
+               tmp_ch = calc_entropy(lm, words, n, &tmp_nccs,
+                                      &tmp_noovs, &tmp_lscr);
+
+               ch += (float64) tmp_ch * (n - tmp_nccs - tmp_noovs) * log_to_log2;
+               nccs += tmp_nccs;
+               noovs += tmp_noovs;
+                lscr += tmp_lscr;
+               nwords += n;
+               
+               ckd_free(words);
+       }
+
+       ch /= (nwords - nccs - noovs);
+       printf("cross-entropy: %f bits\n", ch);
+
+       /* Calculate perplexity pplx = exp CH */
+       printf("perplexity: %f\n", pow(2.0, ch));
+        printf("lm score: %d\n", lscr);
+
+       /* Report OOVs and CCs */
+       printf("%d words evaluated\n", nwords);
+       printf("%d OOVs (%.2f%%), %d context cues removed\n",
+              noovs, (double)noovs / nwords * 100, nccs);
+}
+
+static void
+evaluate_string(ngram_model_t *lm, logmath_t *lmath, const char *text)
+{
+       char *textfoo;
+       char **words;
+       int32 n, ch, noovs, nccs, lscr;
+
+       /* Split it into an array of strings. */
+       textfoo = ckd_salloc(text);
+       n = str2words(textfoo, NULL, 0);
+       if (n < 0)
+               E_FATAL("str2words(textfoo, NULL, 0) = %d, should not happen\n", n);
+       if (n == 0) /* Do nothing! */
+               return;
+       words = ckd_calloc(n, sizeof(*words));
+       str2words(textfoo, words, n);
+
+       ch = calc_entropy(lm, words, n, &nccs, &noovs, &lscr);
+
+       printf("input: %s\n", text);
+       printf("cross-entropy: %f bits\n",
+              ch * log(logmath_get_base(lmath)) / log(2));
+
+       /* Calculate perplexity pplx = exp CH */
+       printf("perplexity: %f\n", logmath_exp(lmath, ch));
+        printf("lm score: %d\n", lscr);
+
+       /* Report OOVs and CCs */
+       printf("%d words evaluated\n", n);
+       printf("%d OOVs, %d context cues removed\n",
+             noovs, nccs);
+
+       ckd_free(textfoo);
+       ckd_free(words);
+}
+
+int
+main(int argc, char *argv[])
+{
+       cmd_ln_t *config;
+       ngram_model_t *lm = NULL;
+       logmath_t *lmath;
+       const char *lmfn, *probdefn, *lsnfn, *text;
+
+       if ((config = cmd_ln_parse_r(NULL, defn, argc, argv, TRUE)) == NULL)
+               return 1;
+
+        verbose = cmd_ln_boolean_r(config, "-verbose");
+
+       /* Create log math object. */
+       if ((lmath = logmath_init
+            (cmd_ln_float64_r(config, "-logbase"), 0, 0)) == NULL) {
+               E_FATAL("Failed to initialize log math\n");
+       }
+
+       /* Load the language model. */
+       lmfn = cmd_ln_str_r(config, "-lm");
+       if (lmfn == NULL
+           || (lm = ngram_model_read(config, lmfn,
+                                     NGRAM_AUTO, lmath)) == NULL) {
+               E_FATAL("Failed to load language model from %s\n",
+                       cmd_ln_str_r(config, "-lm"));
+       }
+        if ((probdefn = cmd_ln_str_r(config, "-probdef")) != NULL)
+            ngram_model_read_classdef(lm, probdefn);
+        ngram_model_apply_weights(lm,
+                                  cmd_ln_float32_r(config, "-lw"),
+                                  cmd_ln_float32_r(config, "-wip"),
+                                  cmd_ln_float32_r(config, "-uw"));
+
+       /* Now evaluate some text. */
+       lsnfn = cmd_ln_str_r(config, "-lsn");
+       text = cmd_ln_str_r(config, "-text");
+       if (lsnfn) {
+               evaluate_file(lm, lmath, lsnfn);
+       }
+       else if (text) {
+               evaluate_string(lm, lmath, text);
+       }
+
+       return 0;
+}
diff --git a/src/sphinx_lmtools/sphinx_lm_sort b/src/sphinx_lmtools/sphinx_lm_sort
new file mode 100755 (executable)
index 0000000..56da103
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/env perl
+use strict;
+
+if ($ARGV[0] eq '-h' or $ARGV[0] eq '-?' or $ARGV[0] eq '--help') {
+    print "Usage: $0 < INPUT_LM > OUTPUT_LM\n";
+    print "\n\tThis program reads an ARPA-format language model and";
+    print "\n\tsorts the N-Grams into the order required by Sphinx.";
+    print "\n\tIt also replaces 'missing' (actually nonexistent)";
+    print "\n\tbackoff weights with dummy values in order to satisfy";
+    print "\n\tall versions of Sphinx.\n";
+    exit 0;
+}
+
+sub print_sorted_ngrams {
+    my ($print_bo, $grams) = @_;
+    @$grams = sort {$a->[0] cmp $b->[0]} @$grams;
+    foreach my $g (@$grams) {
+       my ($gram, $prob, $bo) = @$g;
+       if ($print_bo) {
+           printf("%.4f %s %.4f\n", $prob, $gram, $bo);
+       }
+       else {
+           printf("%.4f %s\n", $prob, $gram);
+       }
+    }
+    print "\n";
+}
+
+my $in_data;
+my ($n, @ngrams);
+while (<>) {
+    if (/^\\data\\/) {
+       print;
+       $in_data = 1;
+       next;
+    }
+    unless ($in_data) {
+       print;
+       next;
+    }
+    if (/ngram (\d+)=(\d+)/) {
+       print;
+       next;
+    }
+    if (/\\(\d+)-grams:/) {
+       print_sorted_ngrams(1,\@ngrams);
+       $n = $1;
+       @ngrams = ();
+       print;
+       next;
+    }
+    unless (defined($n)) {
+       print;
+       next;
+    }
+    if (/^\\end\\/) {
+       print_sorted_ngrams(0,\@ngrams);
+       undef $n;
+       print;
+       next;
+    }
+    my (@parts) = split;
+    unless (@parts) {
+       next;
+    }
+    my $prob = shift @parts;
+    my $bo = 0;
+    if (@parts == $n + 1) {
+       $bo = pop @parts;
+    }
+    push @ngrams, ["@parts", $prob, $bo];
+}
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644 (file)
index 0000000..3ffd0bc
--- /dev/null
@@ -0,0 +1,2 @@
+SUBDIRS=unit regression
+EXTRA_DIST=compare_table.pl
diff --git a/test/Makefile.in b/test/Makefile.in
new file mode 100644 (file)
index 0000000..7c3dcdb
--- /dev/null
@@ -0,0 +1,504 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = test
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = unit regression
+EXTRA_DIST = compare_table.pl
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             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
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+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: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am
+
+# 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/compare_table.pl b/test/compare_table.pl
new file mode 100755 (executable)
index 0000000..17630a3
--- /dev/null
@@ -0,0 +1,94 @@
+#!/usr/bin/perl
+# ====================================================================
+# Copyright (c) 2000 Carnegie Mellon University.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer. 
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+#
+# This work was supported in part by funding from the Defense Advanced 
+# Research Projects Agency and the National Science Foundation of the 
+# United States of America, and the CMU Sphinx Speech Consortium.
+#
+# THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND 
+# ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
+# NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+use strict;
+
+die "$0 <file1> <file2> (tolerance) (fields)\n" unless @ARGV >= 2;
+
+my ($fn1, $fn2, $tolerance, $fields) = @ARGV;
+$tolerance = 0.002 unless defined($tolerance);
+my @fields;
+@fields = split /,/, $fields if defined($fields);
+
+my $comparison = 0;
+
+my $line1 = "";
+my $line2 = "";
+if ((open (FN1, "<$fn1")) and (open (FN2, "<$fn2"))) {
+  $comparison = 1;
+  while (($line1 = <FN1>) . ($line2 = <FN2>)) {
+    chomp($line1);
+    chomp($line2);
+    next if ($line1 eq $line2);
+    my @field1 = split /[,:\s]+/, $line1;
+    my @field2 = split /[,:\s]+/, $line2;
+    # If the number of tokens in each line is different, the lines,
+    # and therefore the files, don't match.
+    if ($#field1 != $#field2) {
+      $comparison = 0;
+      last;
+    }
+    @fields = (0..$#field1) unless @fields;
+    foreach my $i (@fields) {
+      if (($field1[$i] !~ m/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?\)?$/) or
+         ($field2[$i] !~ m/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?\)?$/)) {
+       # Check if any of the tokens in the line is a string rather
+       # than a number, and compare the strings
+       if ($field1[$i] ne $field2[$i]) {
+         $comparison = 0;
+         last;
+       }
+      } else {
+         # If the tokens are both numbers, check if they match within
+         # a tolerance
+         if (abs($field1[$i] - $field2[$i]) > $tolerance) {
+             $comparison = 0;
+             last;
+         }
+      }
+    }
+    # If there was a mismatch, we can skip to the end of the loop
+    last if ($comparison == 0);
+  }
+  # If the files don't have the same number of lines, one of the
+  # lines will be EOF, and the other won't.
+  $comparison = 0 if ($line1 != $line2);
+}
+
+close(FN1);
+close(FN2);
+
+if ($comparison) {
+  print "Comparison: SUCCESS\n";
+} else {
+  print "Comparison: FAIL\n";
+}
diff --git a/test/regression/Makefile.am b/test/regression/Makefile.am
new file mode 100644 (file)
index 0000000..d13d2a7
--- /dev/null
@@ -0,0 +1,41 @@
+EXTRA_DIST =                                   \
+       testfuncs_cygwin.sh                     \
+       chan3.cepview                           \
+       chan3-dither.cepview                    \
+       chan3.logspec                           \
+       chan3-logspec.cepview                   \
+       chan3-smoothspec.cepview                \
+       chan3.ctl                               \
+       chan3.mfc                               \
+       chan3.raw                               \
+       chan3.2chan.wav                         \
+       chan3.wav                               \
+       chan3.sph                               \
+       chan3.f0                                \
+       tutorial-check.sh                       \
+       crontab                                 \
+       polite.gram                             \
+       test.gram                               \
+       test.command.fsg                        \
+       test.kleene.fsg                         \
+       test.nestedRightRecursion.fsg           \
+       test.nulltest.fsg                       \
+       test.rightRecursion.fsg
+
+CLEANFILES = test*.err test*.out               \
+       test-sphinx_fe.mfc                      \
+       test-sphinx_fe.cepview                  \
+       test-sphinx_pitch.f0                    \
+       chan3.sph.mfc                           \
+       chan3.2chan.wav.mfc                     \
+       chan3.wav.mfc                           \
+       chan3.raw.mfc
+
+# Disable sphinx_fe tests for now if fixed-point due to imprecision
+if FIXED_POINT
+TESTS = $(srcdir)/test-cepview.sh $(srcdir)/test-sphinx_pitch.sh
+else
+TESTS = $(srcdir)/test-*.sh
+endif
+
+EXTRA_DIST += $(TESTS)
diff --git a/test/regression/Makefile.in b/test/regression/Makefile.in
new file mode 100644 (file)
index 0000000..dde2c0e
--- /dev/null
@@ -0,0 +1,456 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = test/regression
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/testfuncs.sh.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES = testfuncs.sh
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = testfuncs_cygwin.sh chan3.cepview chan3-dither.cepview \
+       chan3.logspec chan3-logspec.cepview chan3-smoothspec.cepview \
+       chan3.ctl chan3.mfc chan3.raw chan3.2chan.wav chan3.wav \
+       chan3.sph chan3.f0 tutorial-check.sh crontab polite.gram \
+       test.gram test.command.fsg test.kleene.fsg \
+       test.nestedRightRecursion.fsg test.nulltest.fsg \
+       test.rightRecursion.fsg $(TESTS)
+CLEANFILES = test*.err test*.out               \
+       test-sphinx_fe.mfc                      \
+       test-sphinx_fe.cepview                  \
+       test-sphinx_pitch.f0                    \
+       chan3.sph.mfc                           \
+       chan3.2chan.wav.mfc                     \
+       chan3.wav.mfc                           \
+       chan3.raw.mfc
+
+@FIXED_POINT_FALSE@TESTS = $(srcdir)/test-*.sh
+
+# Disable sphinx_fe tests for now if fixed-point due to imprecision
+@FIXED_POINT_TRUE@TESTS = $(srcdir)/test-cepview.sh $(srcdir)/test-sphinx_pitch.sh
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/regression/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/regression/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
+testfuncs.sh: $(top_builddir)/config.status $(srcdir)/testfuncs.sh.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+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: clean-am
+
+clean-am: clean-generic clean-libtool 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-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+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 mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       clean-libtool distclean distclean-generic distclean-libtool \
+       distdir dvi dvi-am html html-am info info-am install \
+       install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am
+
+# 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/regression/chan3-dither.cepview b/test/regression/chan3-dither.cepview
new file mode 100644 (file)
index 0000000..8baa4cf
--- /dev/null
@@ -0,0 +1,2190 @@
+  6.513  -1.581   0.213   0.167  -0.125   0.161   0.064   0.054  -0.173  -0.099  -0.090  -0.040   0.030 
+  6.586  -1.617   0.269   0.104  -0.230   0.093  -0.188  -0.056  -0.242  -0.200  -0.063  -0.004  -0.118 
+  6.789  -1.365   0.281   0.034  -0.347  -0.016  -0.210   0.056  -0.194  -0.110  -0.100  -0.034  -0.194 
+  6.848  -1.391   0.085   0.094  -0.397   0.165  -0.165  -0.187  -0.147  -0.010  -0.143  -0.060   0.013 
+  6.613  -1.366   0.043   0.170  -0.322  -0.037  -0.121  -0.113  -0.092   0.102  -0.210  -0.068   0.057 
+  6.754  -1.442   0.065   0.261  -0.230  -0.186  -0.080  -0.108  -0.203   0.070  -0.250  -0.205  -0.025 
+  6.551  -1.398   0.038   0.176  -0.230  -0.130   0.071   0.000  -0.292   0.025  -0.271  -0.012  -0.029 
+  6.280  -1.329   0.094   0.296   0.020  -0.066  -0.125  -0.166  -0.177  -0.010  -0.185  -0.158  -0.102 
+  6.376  -1.176   0.011   0.228  -0.130  -0.064  -0.320  -0.118  -0.124   0.096  -0.094  -0.170  -0.078 
+  6.329  -1.272  -0.194   0.096   0.076  -0.066  -0.251  -0.125  -0.069   0.140  -0.072  -0.044   0.013 
+  6.127  -1.232  -0.071  -0.043  -0.090  -0.023  -0.119  -0.215  -0.277  -0.104  -0.136  -0.125  -0.043 
+  5.945  -0.986   0.102   0.032  -0.097  -0.143  -0.162   0.011  -0.004   0.097   0.019  -0.085  -0.039 
+  6.259  -0.572   0.503   0.354  -0.003   0.101   0.090  -0.153  -0.101  -0.080  -0.052  -0.007  -0.158 
+  5.613  -0.328   0.280   0.201  -0.026   0.020   0.020   0.023   0.022   0.028   0.002  -0.114  -0.229 
+  5.518  -0.451   0.211   0.031  -0.068   0.023  -0.044  -0.027   0.059   0.115  -0.085  -0.027  -0.196 
+  5.194  -0.555   0.104   0.064  -0.031  -0.038  -0.019  -0.146  -0.161  -0.040  -0.162   0.020   0.056 
+  4.913  -0.148   0.053   0.111   0.114  -0.035  -0.023  -0.084  -0.163   0.204  -0.031  -0.172  -0.111 
+  4.429  -0.040   0.057   0.158   0.025  -0.167  -0.330  -0.079  -0.150   0.102  -0.044  -0.174  -0.076 
+  3.963   0.078  -0.231  -0.003   0.011  -0.036  -0.226  -0.115  -0.101   0.127   0.113  -0.043   0.005 
+  3.843   0.108  -0.282   0.049  -0.085  -0.007  -0.266  -0.246  -0.227  -0.099   0.079   0.033   0.051 
+  4.186   0.230  -0.086  -0.038  -0.204  -0.009  -0.152  -0.190  -0.131  -0.042  -0.068  -0.159  -0.078 
+  4.257   0.255   0.045  -0.018   0.040  -0.072   0.010  -0.124  -0.071  -0.154  -0.149  -0.200  -0.233 
+  4.027   0.394   0.067   0.222   0.016  -0.070  -0.266  -0.303  -0.164  -0.033  -0.105  -0.215   0.016 
+  4.171   0.352   0.159   0.095   0.098  -0.130  -0.164  -0.415  -0.207  -0.025   0.031   0.018   0.061 
+  7.069  -0.517   0.568   0.065  -0.481   0.104  -0.074  -0.274  -0.029  -0.070  -0.132   0.026  -0.175 
+  9.456  -0.227   0.591   0.302  -0.426  -0.153  -0.259  -0.208  -0.062  -0.300  -0.196   0.076  -0.287 
+ 10.595   0.196   0.329   0.570  -0.236  -0.480  -0.531  -0.002  -0.256  -0.320  -0.224  -0.047  -0.306 
+ 12.190  -0.192   0.303   0.566  -0.309  -0.556  -0.613  -0.056  -0.362  -0.316  -0.271   0.043  -0.256 
+ 13.377  -0.265   0.159   0.461  -0.378  -0.571  -0.597   0.003  -0.469  -0.268  -0.343   0.133  -0.288 
+ 13.760   0.015  -0.072   0.453  -0.386  -0.609  -0.711   0.037  -0.530  -0.191  -0.385   0.157  -0.249 
+ 14.184   0.091  -0.206   0.450  -0.436  -0.700  -0.730   0.009  -0.565  -0.070  -0.395   0.210  -0.213 
+ 14.378   0.113  -0.290   0.420  -0.432  -0.819  -0.712   0.045  -0.584   0.018  -0.387   0.235  -0.179 
+ 14.016   0.469  -0.549   0.433  -0.415  -0.789  -0.774   0.163  -0.604   0.025  -0.276   0.066  -0.039 
+ 14.133   0.576  -0.705   0.340  -0.336  -0.785  -0.780   0.063  -0.441   0.006  -0.198  -0.055   0.032 
+ 14.320   0.636  -0.725   0.196  -0.351  -0.569  -0.961   0.036  -0.491   0.173  -0.233  -0.132   0.008 
+ 14.130   0.726  -0.589  -0.049  -0.334  -0.392  -0.814  -0.154  -0.672   0.294  -0.139  -0.296  -0.057 
+ 13.575   0.980  -0.518  -0.146  -0.464  -0.244  -0.520  -0.263  -0.968   0.211  -0.036  -0.226  -0.128 
+ 13.009   1.092  -0.339  -0.249  -0.467  -0.304  -0.327  -0.239  -1.013   0.053  -0.044  -0.151  -0.061 
+ 12.815   1.203  -0.442  -0.216  -0.482  -0.216  -0.384  -0.133  -1.118   0.073  -0.137  -0.053  -0.183 
+ 12.959   1.094  -0.399  -0.173  -0.407  -0.230  -0.421  -0.185  -1.106   0.143  -0.152  -0.092  -0.283 
+ 13.231   0.901  -0.400  -0.142  -0.222  -0.253  -0.484  -0.273  -0.983   0.208  -0.132  -0.223  -0.291 
+ 13.508   0.776  -0.563   0.027  -0.061  -0.373  -0.664  -0.239  -0.787   0.213  -0.228  -0.339  -0.197 
+ 13.813   0.426  -0.513   0.194   0.094  -0.614  -0.737  -0.084  -0.640   0.116  -0.383  -0.233  -0.100 
+ 13.999   0.195  -0.499   0.446  -0.012  -0.827  -0.669   0.099  -0.700  -0.013  -0.330  -0.113  -0.087 
+ 14.293  -0.074  -0.376   0.566  -0.210  -0.917  -0.531   0.125  -0.771  -0.008  -0.288  -0.059  -0.109 
+ 14.128  -0.095  -0.313   0.610  -0.374  -0.869  -0.490   0.066  -0.729  -0.006  -0.291   0.021  -0.119 
+ 14.074  -0.146  -0.189   0.514  -0.457  -0.826  -0.436  -0.063  -0.559  -0.064  -0.263   0.085  -0.159 
+ 14.085   0.032  -0.328   0.440  -0.499  -0.804  -0.465  -0.041  -0.460  -0.121  -0.215   0.134  -0.152 
+ 13.946   0.157  -0.383   0.321  -0.547  -0.699  -0.607   0.081  -0.419  -0.121  -0.193   0.198  -0.241 
+ 13.903   0.221  -0.456   0.218  -0.548  -0.653  -0.653   0.142  -0.381  -0.057  -0.268   0.253  -0.264 
+ 13.927   0.312  -0.595   0.181  -0.554  -0.547  -0.717   0.092  -0.251  -0.114  -0.233   0.165  -0.181 
+ 13.848   0.440  -0.698   0.088  -0.473  -0.528  -0.766   0.022  -0.203  -0.061  -0.289   0.142  -0.122 
+ 13.670   0.429  -0.568  -0.131  -0.274  -0.573  -0.757  -0.110  -0.176   0.027  -0.369   0.108  -0.050 
+ 13.321   0.282  -0.355  -0.267  -0.203  -0.553  -0.555  -0.489  -0.047   0.124  -0.464   0.029   0.028 
+ 13.222   0.088  -0.128  -0.297  -0.402  -0.135  -0.604  -0.629  -0.048   0.139  -0.307  -0.062  -0.114 
+ 13.318   0.361  -0.024  -0.384  -0.632   0.261  -0.864  -0.493  -0.175   0.136  -0.269   0.128  -0.393 
+ 13.510   0.505   0.012  -0.534  -0.810   0.289  -0.813  -0.361  -0.419   0.291  -0.285   0.285  -0.434 
+ 13.474   0.481   0.188  -0.728  -0.879   0.223  -0.753  -0.204  -0.557   0.239  -0.276   0.466  -0.456 
+ 13.061   0.688   0.281  -0.865  -0.917   0.140  -0.650  -0.041  -0.660   0.044  -0.249   0.498  -0.407 
+ 12.805   0.671   0.472  -0.901  -0.967   0.105  -0.598   0.054  -0.700   0.017  -0.359   0.399  -0.262 
+ 12.434   0.810   0.451  -0.699  -1.164   0.066  -0.429  -0.085  -0.523  -0.033  -0.482   0.410  -0.308 
+ 11.784   0.871   0.645  -0.625  -1.194   0.001  -0.429  -0.080  -0.377  -0.071  -0.657   0.328  -0.277 
+ 11.268   0.871   0.796  -0.585  -1.177  -0.012  -0.446  -0.016  -0.357  -0.086  -0.759   0.249  -0.302 
+ 11.070   0.823   0.922  -0.594  -1.103  -0.082  -0.430   0.002  -0.359  -0.156  -0.756   0.169  -0.364 
+ 10.990   0.794   1.014  -0.583  -1.093  -0.126  -0.451  -0.003  -0.354  -0.129  -0.706   0.126  -0.461 
+ 11.032   0.714   1.037  -0.599  -1.115  -0.133  -0.500  -0.068  -0.271  -0.062  -0.624   0.002  -0.476 
+ 11.418   0.620   0.933  -0.583  -1.119  -0.178  -0.523  -0.059  -0.202  -0.063  -0.639   0.007  -0.342 
+ 12.429   0.378   0.816  -0.769  -1.204  -0.132  -0.444  -0.020  -0.353   0.019  -0.493   0.014  -0.141 
+ 13.176   0.323   0.413  -0.931  -1.227  -0.046  -0.403   0.066  -0.340  -0.106  -0.356   0.201  -0.073 
+ 13.232   0.294   0.339  -0.990  -1.243   0.102  -0.468   0.050  -0.309  -0.025  -0.295   0.256  -0.094 
+ 13.323   0.252   0.255  -1.041  -1.248   0.199  -0.500   0.147  -0.300   0.020  -0.225   0.222  -0.174 
+ 13.447   0.272   0.133  -1.091  -1.193   0.273  -0.551   0.232  -0.347   0.077  -0.184   0.211  -0.269 
+ 13.566   0.337  -0.012  -1.098  -1.119   0.281  -0.477   0.190  -0.344   0.104  -0.152   0.165  -0.316 
+ 13.716   0.251  -0.063  -1.068  -1.043   0.278  -0.430   0.134  -0.304   0.097  -0.067   0.047  -0.370 
+ 13.444   0.470  -0.236  -0.990  -0.952   0.251  -0.411   0.038  -0.254   0.057   0.048  -0.010  -0.372 
+ 13.269   0.537  -0.384  -0.848  -0.834   0.209  -0.394  -0.012  -0.228   0.027   0.125  -0.066  -0.381 
+ 12.757   0.534  -0.347  -0.719  -0.776   0.156  -0.404  -0.024  -0.244   0.046   0.148   0.003  -0.445 
+ 12.691   0.456  -0.357  -0.611  -0.704   0.085  -0.305  -0.253  -0.111   0.073   0.040   0.107  -0.552 
+ 12.649   0.409  -0.478  -0.284  -0.693   0.024  -0.385  -0.336  -0.072   0.228  -0.096   0.085  -0.575 
+ 12.396   0.421  -0.636   0.075  -0.516  -0.284  -0.509  -0.191   0.030   0.175  -0.255   0.122  -0.461 
+ 11.789   0.451  -0.606   0.363  -0.431  -0.416  -0.624  -0.004   0.056   0.024  -0.357   0.284  -0.520 
+ 11.193   0.315  -0.267   0.538  -0.456  -0.497  -0.550   0.101   0.147  -0.267  -0.282   0.350  -0.570 
+ 10.704   0.175   0.115   0.198  -0.131  -0.506  -0.415   0.131   0.039  -0.343  -0.106  -0.078  -0.405 
+  9.874   0.421   0.326   0.085   0.021  -0.445  -0.419   0.261  -0.356  -0.262   0.101  -0.355  -0.294 
+  8.932   0.719   0.234   0.172   0.104  -0.369  -0.464   0.323  -0.446  -0.099  -0.137  -0.344  -0.256 
+  7.720   0.826   0.623   0.209  -0.015  -0.383  -0.323   0.084  -0.205  -0.146  -0.368  -0.160  -0.171 
+  7.406   0.623   0.747  -0.122   0.164  -0.473   0.068  -0.169  -0.008  -0.118  -0.430  -0.194  -0.090 
+  8.610  -0.125   0.534  -0.142   0.169  -0.265   0.129  -0.086  -0.024  -0.271  -0.223  -0.066  -0.183 
+  9.818  -0.292   0.133   0.080  -0.077  -0.182  -0.054  -0.035  -0.072  -0.160  -0.265   0.063  -0.187 
+  9.896  -0.311   0.267   0.211   0.078  -0.419  -0.238  -0.207   0.077  -0.168  -0.365   0.009  -0.105 
+ 10.842  -0.050   0.223   0.126  -0.033  -0.447  -0.443  -0.329  -0.055  -0.053  -0.448   0.015  -0.114 
+ 11.381  -0.048   0.068   0.072   0.097  -0.445  -0.636  -0.468  -0.105  -0.080  -0.497  -0.024  -0.020 
+ 11.138   0.120   0.125  -0.069  -0.031  -0.302  -0.566  -0.495  -0.108  -0.049  -0.449  -0.090  -0.054 
+ 10.764  -0.162   0.387  -0.013  -0.000  -0.294  -0.556  -0.511  -0.034  -0.173  -0.298  -0.214   0.000 
+ 10.827  -0.994   0.580  -0.041   0.172  -0.133  -0.162  -0.060   0.031  -0.139  -0.305  -0.179  -0.040 
+ 10.620  -1.211   0.665  -0.024   0.125  -0.254  -0.036  -0.040  -0.021  -0.083  -0.338  -0.228  -0.174 
+ 10.766  -1.314   0.644  -0.032   0.365  -0.076   0.040  -0.018  -0.060  -0.091  -0.291  -0.052  -0.265 
+ 10.855  -1.277   0.577  -0.097   0.494  -0.249  -0.262  -0.102  -0.079  -0.255  -0.200  -0.045  -0.164 
+ 11.206  -1.251   0.537  -0.160   0.397  -0.324  -0.129   0.003  -0.104  -0.221  -0.203  -0.111  -0.142 
+ 11.529  -1.056   0.596  -0.082   0.384  -0.330  -0.026  -0.062  -0.019  -0.283  -0.220   0.061  -0.106 
+ 11.263  -1.528   0.452  -0.137   0.325  -0.268  -0.004  -0.054  -0.120  -0.394  -0.233  -0.040  -0.127 
+ 11.469  -1.644   0.386   0.003   0.358  -0.190  -0.078  -0.090  -0.156  -0.108  -0.169  -0.029  -0.046 
+ 10.859  -1.522   0.104   0.203   0.295  -0.591   0.033   0.027  -0.182  -0.279   0.051  -0.024  -0.071 
+  7.401  -1.040  -0.014   0.330   0.623  -0.540  -0.016   0.134  -0.108  -0.348   0.100   0.060  -0.235 
+  4.884  -0.541   0.092  -0.171   0.374  -0.229   0.130  -0.011  -0.120  -0.011   0.003  -0.054  -0.193 
+  4.784  -0.450   0.154  -0.281   0.195  -0.494  -0.024  -0.139  -0.216  -0.178  -0.057   0.055   0.010 
+  9.005  -0.451  -0.045   0.372  -0.653  -0.571  -0.146  -0.138  -0.101  -0.004  -0.163  -0.100  -0.079 
+ 12.108  -0.745  -0.282  -0.041  -0.724  -0.550  -0.057  -0.245  -0.220  -0.025  -0.189   0.008  -0.036 
+ 12.612  -0.523  -0.082   0.401  -0.351  -0.707  -0.301  -0.237  -0.254  -0.218  -0.095  -0.005  -0.160 
+ 13.774  -0.172  -0.485   0.317  -0.451  -0.712  -0.651  -0.094  -0.198  -0.093  -0.236   0.244  -0.321 
+ 14.097  -0.142  -0.631   0.094  -0.515  -0.672  -0.732   0.010  -0.165   0.104  -0.321   0.276  -0.315 
+ 14.145  -0.083  -0.704  -0.105  -0.601  -0.639  -0.699   0.072  -0.047   0.196  -0.273   0.043  -0.223 
+ 14.273  -0.159  -0.688  -0.189  -0.566  -0.508  -0.761   0.126  -0.053   0.246  -0.315  -0.038  -0.240 
+ 14.437  -0.040  -0.761  -0.223  -0.603  -0.398  -0.765   0.205  -0.130   0.265  -0.346  -0.165  -0.223 
+ 14.378  -0.092  -0.719  -0.181  -0.670  -0.290  -0.869   0.188  -0.187   0.328  -0.405  -0.042  -0.302 
+ 14.160   0.013  -0.725  -0.177  -0.680  -0.315  -0.913   0.184  -0.126   0.295  -0.424   0.018  -0.291 
+ 13.666   0.079  -0.683  -0.203  -0.648  -0.444  -0.951   0.142  -0.018   0.262  -0.385   0.094  -0.236 
+ 12.462   0.396  -0.529  -0.100  -0.493  -0.569  -0.812  -0.034   0.164  -0.068  -0.176   0.221  -0.128 
+ 11.096  -0.243  -0.057   0.182  -0.541  -0.396  -0.367   0.047   0.141  -0.147  -0.353   0.002   0.063 
+ 11.625  -1.083   0.450   0.685  -0.330  -0.111  -0.313  -0.200   0.133  -0.119  -0.238  -0.015  -0.075 
+ 12.125  -1.375   0.615   0.762  -0.320  -0.038   0.035  -0.178   0.005  -0.094  -0.394  -0.066  -0.156 
+ 12.332  -1.614   0.649   0.659  -0.412  -0.027   0.023  -0.144  -0.093  -0.032  -0.275  -0.108  -0.179 
+ 12.348  -2.053   0.287   0.509  -0.533  -0.159   0.051  -0.061   0.079   0.043  -0.315  -0.140  -0.183 
+ 12.364  -2.283   0.302   0.798  -0.438  -0.208  -0.168  -0.019   0.061  -0.086  -0.196  -0.049  -0.101 
+ 12.124  -2.227   0.166   0.564  -0.558  -0.210  -0.098   0.069   0.141   0.035  -0.054  -0.166  -0.026 
+ 12.496  -1.767   0.330   0.878  -0.144  -0.097  -0.048  -0.132  -0.024  -0.048  -0.231  -0.183   0.054 
+ 11.892  -1.214   0.346   0.812  -0.147  -0.355  -0.004   0.009   0.019  -0.013  -0.310  -0.114   0.056 
+ 11.102  -1.048   0.308   0.695   0.018  -0.158  -0.083   0.003   0.045  -0.135  -0.209  -0.040  -0.012 
+ 11.999   0.326  -0.408   0.208  -0.422  -0.334  -0.274  -0.069   0.039   0.095  -0.179  -0.069  -0.030 
+ 12.208   0.708  -0.540   0.018  -0.360  -0.333  -0.431  -0.111   0.021   0.091  -0.443   0.182  -0.278 
+ 12.093   0.490  -0.499   0.098  -0.446  -0.303  -0.464  -0.220   0.088   0.190  -0.399   0.136  -0.224 
+ 11.442   0.457  -0.432   0.205  -0.383  -0.307  -0.309  -0.422   0.086   0.254  -0.396   0.036  -0.264 
+ 11.005   0.014   0.112   0.295  -0.333  -0.340  -0.139  -0.310  -0.084   0.215  -0.474  -0.009  -0.195 
+ 11.170  -0.158   0.157   0.241  -0.169  -0.404  -0.140  -0.217  -0.174   0.324  -0.536   0.029  -0.326 
+ 11.280   0.089  -0.387   0.061   0.049  -0.145  -0.564  -0.270  -0.150   0.375  -0.256   0.032  -0.222 
+ 12.183   0.236  -0.538  -0.086  -0.100  -0.334  -0.645  -0.121  -0.122   0.300  -0.206  -0.048  -0.252 
+ 12.222   0.260  -0.570  -0.091  -0.272  -0.345  -0.735  -0.086  -0.074   0.418  -0.283   0.015  -0.344 
+ 12.564   0.263  -0.712  -0.056  -0.457  -0.328  -0.708  -0.126   0.025   0.384  -0.216  -0.005  -0.286 
+ 12.558   0.443  -0.703  -0.121  -0.344  -0.459  -0.471  -0.318  -0.120   0.343  -0.268   0.008  -0.232 
+ 11.133   0.722  -0.475  -0.305  -0.183  -0.410  -0.361  -0.509  -0.286   0.234  -0.117  -0.207  -0.269 
+  9.970   0.905  -0.463  -0.159  -0.164  -0.351  -0.317  -0.529  -0.449   0.210   0.006  -0.219  -0.284 
+  6.519   0.758  -0.017  -0.011  -0.013  -0.061  -0.216  -0.155  -0.103   0.220  -0.043  -0.288  -0.245 
+  6.006   0.766  -0.032   0.055  -0.173   0.023  -0.172  -0.228   0.065   0.187  -0.006  -0.278  -0.257 
+  5.669   0.875   0.266   0.158  -0.211  -0.301  -0.354  -0.342  -0.001   0.094  -0.075  -0.198  -0.078 
+  5.588   0.564   0.382   0.181  -0.203  -0.343  -0.306  -0.198  -0.063   0.215  -0.191  -0.155  -0.133 
+  8.199  -0.001   0.323  -0.179  -0.131  -0.366  -0.358  -0.105  -0.187  -0.043  -0.354  -0.146  -0.188 
+  8.768   0.109  -0.147  -0.094  -0.028  -0.262  -0.166  -0.088   0.080   0.164  -0.070  -0.203  -0.038 
+ 12.075   0.000  -0.660  -0.013  -0.393  -0.401  -0.436  -0.172  -0.042   0.119  -0.165  -0.143  -0.007 
+ 13.145  -0.034  -0.662  -0.099  -0.571  -0.558  -0.579  -0.128  -0.003   0.310  -0.222  -0.100   0.001 
+ 13.351  -0.007  -0.782  -0.020  -0.602  -0.581  -0.502  -0.104   0.073   0.217  -0.311  -0.081  -0.008 
+ 13.622  -0.133  -0.854  -0.005  -0.648  -0.526  -0.533  -0.046   0.073   0.204  -0.347  -0.046  -0.098 
+ 13.417  -0.098  -0.892  -0.048  -0.711  -0.421  -0.639   0.111  -0.064   0.336  -0.493   0.046  -0.131 
+ 13.653  -0.206  -0.872  -0.129  -0.708  -0.401  -0.680   0.207  -0.105   0.435  -0.636   0.003  -0.190 
+ 13.786  -0.050  -0.940  -0.169  -0.612  -0.421  -0.582   0.182  -0.142   0.424  -0.602  -0.117  -0.147 
+ 13.769   0.004  -0.991  -0.288  -0.576  -0.350  -0.522   0.192  -0.247   0.419  -0.570  -0.189  -0.122 
+ 13.393   0.037  -1.071  -0.435  -0.580  -0.333  -0.466   0.212  -0.222   0.462  -0.651  -0.233  -0.122 
+ 13.445  -0.002  -0.976  -0.430  -0.662  -0.277  -0.529   0.238  -0.253   0.557  -0.629  -0.251  -0.143 
+ 13.744   0.038  -0.976  -0.422  -0.681  -0.183  -0.553   0.220  -0.294   0.537  -0.580  -0.305  -0.135 
+ 13.751  -0.083  -0.888  -0.530  -0.651  -0.197  -0.483   0.218  -0.333   0.484  -0.505  -0.347  -0.123 
+ 13.300  -0.004  -0.819  -0.603  -0.755  -0.120  -0.534   0.231  -0.350   0.615  -0.507  -0.424  -0.136 
+ 13.696  -0.039  -0.734  -0.595  -0.741  -0.083  -0.541   0.167  -0.408   0.611  -0.449  -0.379  -0.143 
+ 13.688   0.045  -0.610  -0.685  -0.681  -0.078  -0.590   0.083  -0.466   0.563  -0.327  -0.312  -0.205 
+ 13.030   0.163  -0.422  -0.807  -0.678  -0.117  -0.593  -0.020  -0.362   0.516  -0.242  -0.320  -0.208 
+ 12.805   0.193  -0.398  -0.867  -0.696  -0.164  -0.565  -0.085  -0.360   0.550  -0.215  -0.221  -0.223 
+ 12.574   0.526  -0.421  -0.803  -0.736  -0.223  -0.481  -0.360  -0.351   0.544  -0.276   0.014  -0.192 
+ 12.488   0.278  -0.194  -0.749  -0.608  -0.209  -0.482  -0.507  -0.429   0.501  -0.394   0.170  -0.218 
+ 11.090   0.251   0.011  -0.808  -0.512  -0.249  -0.442  -0.698  -0.409   0.663  -0.304   0.251  -0.126 
+ 11.251   0.371   0.060  -0.655  -0.326  -0.214  -0.343  -0.758  -0.491   0.280  -0.391   0.128  -0.209 
+  7.815   0.616   0.263  -0.567  -0.388  -0.227  -0.383  -0.707  -0.372   0.487  -0.543   0.139  -0.254 
+  6.427   0.800   0.153  -0.175  -0.387  -0.223  -0.261  -0.061   0.100   0.339  -0.133  -0.126  -0.147 
+  6.250   0.881   0.199  -0.079  -0.398  -0.193  -0.333  -0.037   0.003   0.388  -0.117  -0.122  -0.014 
+  5.645   0.680  -0.112  -0.341  -0.568  -0.268  -0.322  -0.088  -0.009   0.441  -0.037  -0.123  -0.085 
+  5.246   0.605  -0.119  -0.274  -0.437  -0.196  -0.367   0.039  -0.007   0.206  -0.050  -0.284  -0.142 
+  4.945   0.489   0.006  -0.210  -0.538  -0.190  -0.068   0.029   0.072   0.383   0.062  -0.083  -0.068 
+  6.617   0.050  -0.291   0.120  -0.569  -0.466   0.011  -0.014  -0.097  -0.090  -0.207   0.078  -0.031 
+  6.002   0.135  -0.287  -0.062  -0.637  -0.357   0.049  -0.170  -0.137  -0.098  -0.218   0.063  -0.048 
+  4.493   0.332  -0.055  -0.072  -0.504  -0.241  -0.108  -0.126  -0.082   0.183   0.090   0.132  -0.091 
+  4.316   0.299  -0.340   0.016  -0.290  -0.169  -0.108  -0.120   0.066   0.284   0.033   0.005   0.044 
+  4.381   0.329  -0.192  -0.143  -0.322  -0.178  -0.110  -0.266  -0.005   0.096   0.156   0.193  -0.074 
+  4.041   0.085  -0.266  -0.209  -0.276  -0.134  -0.001  -0.177  -0.171   0.149   0.127   0.039   0.056 
+  4.020   0.282  -0.328  -0.135  -0.182  -0.056  -0.119  -0.010  -0.073   0.101   0.064   0.095  -0.025 
+  3.944   0.221  -0.205   0.178  -0.126  -0.094  -0.247  -0.192  -0.109   0.236   0.162   0.093  -0.041 
+  3.772   0.170  -0.227  -0.040  -0.200  -0.100  -0.220  -0.263  -0.171   0.188   0.100   0.006  -0.003 
+  3.800   0.233  -0.288   0.028  -0.293  -0.110  -0.087  -0.163  -0.189  -0.084  -0.121   0.158   0.034 
+  3.810   0.291  -0.183   0.018  -0.077   0.096  -0.223  -0.275  -0.088   0.056  -0.045   0.076  -0.182 
+  3.853   0.382  -0.132   0.040  -0.159  -0.067  -0.190  -0.126  -0.153   0.112   0.033   0.060  -0.107 
+  3.730   0.310  -0.106   0.186  -0.102  -0.109  -0.223  -0.239  -0.086   0.111   0.031  -0.129  -0.031 
+  3.960   0.464   0.116   0.143  -0.114  -0.031  -0.033  -0.129  -0.111   0.009  -0.030   0.114   0.040 
+  3.903   0.571   0.056  -0.090  -0.133   0.152  -0.087  -0.238  -0.162  -0.106   0.133   0.028  -0.128 
+  4.522   0.371   0.125  -0.155  -0.067  -0.183   0.024  -0.263  -0.117  -0.065  -0.229  -0.179   0.023 
+  6.277   0.501   0.424  -0.126  -0.014  -0.315   0.139  -0.308   0.018  -0.091  -0.497  -0.346   0.022 
+  5.459   0.156   0.264   0.235  -0.033  -0.205   0.078   0.101  -0.148  -0.066  -0.239  -0.157  -0.279 
+  5.420   0.058   0.179   0.143  -0.105  -0.223   0.034  -0.056  -0.132  -0.128  -0.202  -0.048  -0.325 
+  4.937  -0.040  -0.144  -0.313  -0.371  -0.265   0.125  -0.169  -0.132   0.130  -0.212  -0.104  -0.115 
+  5.178   0.309  -0.261  -0.128  -0.334  -0.235   0.146  -0.024  -0.179   0.000  -0.393  -0.069  -0.007 
+  5.305   0.207  -0.351  -0.159  -0.383  -0.248   0.128   0.018  -0.153  -0.165  -0.342  -0.212   0.014 
+  5.605   0.156  -0.492  -0.100  -0.234  -0.253  -0.056  -0.105  -0.156  -0.157  -0.531  -0.130   0.105 
+  5.574  -0.281  -0.521   0.056  -0.201  -0.166  -0.084  -0.191  -0.106  -0.098  -0.283   0.023   0.075 
+  5.842  -0.803  -0.145   0.375  -0.075  -0.065  -0.072  -0.330  -0.210  -0.052  -0.167   0.049   0.134 
+  5.796  -0.501  -0.466   0.234  -0.234  -0.265  -0.073  -0.201  -0.213  -0.209  -0.487  -0.055   0.102 
+  5.176   0.429  -0.224   0.019  -0.424  -0.373  -0.037   0.113   0.065  -0.013  -0.449  -0.285  -0.034 
+  4.859   0.300  -0.083  -0.212  -0.541  -0.284   0.143   0.006   0.096   0.060  -0.454  -0.155  -0.174 
+  4.342   0.018  -0.027  -0.161  -0.339  -0.193   0.241   0.102   0.001   0.019  -0.301  -0.090  -0.277 
+  4.327  -0.123   0.061   0.044   0.062  -0.209  -0.014  -0.114  -0.089   0.021  -0.129  -0.053  -0.287 
+  4.519  -0.184   0.209   0.091  -0.186  -0.224   0.068  -0.225  -0.179  -0.012  -0.062   0.116  -0.088 
+  4.590  -0.186   0.267   0.033  -0.090  -0.202   0.024  -0.276  -0.142  -0.095  -0.127   0.014  -0.097 
+  4.437  -0.095   0.138   0.071  -0.020  -0.216   0.135  -0.120  -0.139   0.013  -0.108   0.012  -0.120 
+  4.349  -0.098   0.045  -0.043  -0.184  -0.354  -0.016  -0.165  -0.085   0.085  -0.036   0.043  -0.122 
+  4.262   0.072   0.147  -0.014  -0.092  -0.183   0.036  -0.195  -0.106   0.083  -0.059   0.054  -0.071 
+  4.321   0.027   0.168   0.009  -0.136  -0.278  -0.070  -0.088  -0.088   0.222  -0.011  -0.075  -0.182 
+  4.166   0.182  -0.079  -0.091  -0.242  -0.395  -0.023  -0.102  -0.069   0.168   0.013   0.011   0.003 
+  4.529   0.436   0.040   0.072  -0.393  -0.273   0.139   0.010   0.015   0.023  -0.048  -0.016  -0.118 
+  4.369   0.654   0.017  -0.085  -0.485  -0.089   0.198   0.114  -0.043  -0.062  -0.239  -0.141  -0.153 
+  4.514   0.528  -0.223  -0.140  -0.505  -0.250   0.111   0.139   0.149   0.128  -0.199  -0.240   0.006 
+  4.211   0.341  -0.333  -0.052  -0.430  -0.237   0.040   0.201   0.222   0.256  -0.298  -0.207   0.012 
+  3.631   0.395  -0.146   0.070  -0.296  -0.002   0.046   0.028  -0.097  -0.084  -0.196  -0.094   0.046 
+  4.310   0.454  -0.290   0.171   0.056  -0.249  -0.072  -0.254  -0.133   0.147  -0.107   0.033  -0.009 
+  4.044   0.136  -0.327   0.212  -0.258  -0.269  -0.062  -0.098  -0.031   0.240  -0.069   0.080  -0.011 
+  3.609   0.267  -0.170   0.195  -0.073  -0.181  -0.060   0.012  -0.339   0.085   0.017   0.062  -0.027 
+  5.175   0.768  -0.812  -0.184  -0.006  -0.309  -0.238  -0.050  -0.191  -0.062  -0.010  -0.092  -0.101 
+  4.432   0.440  -0.529  -0.004  -0.037  -0.183  -0.173  -0.088  -0.152   0.060  -0.043   0.005  -0.048 
+  3.651   0.291  -0.076   0.193   0.138   0.014  -0.149  -0.146  -0.124  -0.051  -0.069   0.006  -0.206 
+  3.939   0.508  -0.127  -0.005  -0.075  -0.104  -0.074  -0.064  -0.309  -0.052  -0.120   0.015  -0.067 
+  5.376   0.838  -0.390  -0.237  -0.356  -0.210  -0.052   0.048  -0.636  -0.127   0.003   0.033  -0.045 
+  4.135   0.289  -0.178  -0.021  -0.222  -0.033   0.047  -0.106  -0.207   0.004   0.140   0.082   0.039 
+  3.715   0.408   0.119   0.180  -0.111  -0.058  -0.287  -0.138  -0.031   0.076   0.055  -0.001  -0.109 
+  3.609   0.175  -0.170  -0.018  -0.220   0.010  -0.125  -0.131  -0.133   0.128  -0.025  -0.021  -0.016 
+  3.573   0.350  -0.104  -0.050  -0.080  -0.009  -0.011  -0.098  -0.212   0.169   0.088  -0.018   0.102 
+  3.534   0.176  -0.090   0.263  -0.137  -0.078  -0.002  -0.074  -0.176   0.142   0.126   0.071  -0.027 
+  3.330   0.207   0.112   0.313  -0.122  -0.095  -0.237  -0.204  -0.098   0.099   0.028  -0.099  -0.106 
+  3.709   0.310   0.048   0.240  -0.063  -0.072  -0.118  -0.266  -0.185   0.045   0.104  -0.051  -0.115 
+  3.589   0.296  -0.095   0.053  -0.031  -0.205  -0.216  -0.347  -0.118   0.143   0.229  -0.001  -0.149 
+  3.267   0.197  -0.045   0.121  -0.066   0.028  -0.106  -0.305  -0.054   0.085   0.049  -0.006  -0.052 
+  3.348   0.309  -0.064   0.035   0.012  -0.012  -0.063  -0.142  -0.180   0.148  -0.091  -0.154  -0.028 
+  3.452   0.291  -0.246  -0.046  -0.074  -0.150  -0.123  -0.103  -0.240   0.028  -0.039  -0.001   0.019 
+  3.326   0.126  -0.123   0.152  -0.198  -0.192  -0.149  -0.039   0.004   0.088   0.024  -0.014   0.004 
+  3.291   0.262  -0.103   0.179   0.049  -0.012  -0.005  -0.084  -0.046   0.000   0.049   0.032   0.094 
+  3.885   0.532   0.028   0.239   0.016  -0.146  -0.132  -0.305  -0.262  -0.041   0.067   0.194   0.147 
+  6.236   1.190   0.325  -0.011  -0.127  -0.234  -0.293  -0.183  -0.249  -0.059  -0.115  -0.097  -0.162 
+  7.489   1.237   0.364   0.100  -0.115  -0.281  -0.351  -0.209  -0.324  -0.053  -0.099  -0.102  -0.228 
+  6.787   1.414  -0.071   0.500  -0.186  -0.633  -0.153  -0.194  -0.438   0.132  -0.108  -0.175  -0.170 
+  5.817   1.110   0.321   0.423  -0.179  -0.428  -0.195  -0.235  -0.341   0.058   0.043  -0.148  -0.127 
+  4.906   0.462   0.574   0.371  -0.266  -0.043  -0.315  -0.309  -0.340  -0.011   0.043  -0.035  -0.148 
+  3.741   0.380   0.277   0.000  -0.312  -0.118  -0.224  -0.338  -0.157  -0.011  -0.020  -0.021   0.040 
+  5.408   0.267  -0.089   0.066  -0.417  -0.320  -0.068  -0.158  -0.160  -0.058  -0.146  -0.106  -0.063 
+  8.242   0.143  -0.283   0.069  -0.525  -0.284   0.084   0.036  -0.029   0.073  -0.249  -0.226  -0.212 
+  5.655   0.072   0.069   0.020  -0.341  -0.231   0.293   0.034   0.147   0.028  -0.265  -0.265  -0.200 
+  4.881  -0.748   0.078   0.067  -0.149  -0.275   0.145  -0.132  -0.036  -0.144  -0.190  -0.046  -0.148 
+  5.562  -0.729   0.007   0.006  -0.088  -0.306  -0.176  -0.054   0.099   0.004  -0.143  -0.024  -0.042 
+  5.818  -0.805  -0.289  -0.155  -0.210  -0.470  -0.230   0.059   0.357   0.025  -0.191   0.070  -0.044 
+  6.105  -0.559  -0.242  -0.141  -0.196  -0.472  -0.116   0.204   0.316  -0.057  -0.351  -0.092  -0.117 
+  5.274  -0.339  -0.275  -0.086  -0.213  -0.428  -0.038  -0.044   0.145   0.064  -0.256  -0.082  -0.252 
+  4.727  -0.040  -0.054  -0.185  -0.344  -0.160   0.132   0.171  -0.058  -0.057  -0.035   0.038  -0.051 
+  4.518   0.315   0.154   0.124  -0.124  -0.052  -0.089  -0.049  -0.183  -0.030  -0.110  -0.185  -0.108 
+  4.152   0.345  -0.029   0.088  -0.011  -0.060  -0.097  -0.016  -0.141  -0.107   0.004  -0.119  -0.138 
+  3.729   0.274  -0.036  -0.113  -0.069  -0.054  -0.079   0.118  -0.194  -0.056  -0.013  -0.052  -0.114 
+  3.920   0.268  -0.103   0.124  -0.058  -0.084  -0.039  -0.212  -0.229  -0.003  -0.072  -0.154  -0.092 
+  3.913   0.336  -0.110   0.123  -0.253  -0.059   0.015  -0.037  -0.234  -0.165  -0.065  -0.076  -0.016 
+  4.080  -0.039   0.171   0.122  -0.244  -0.079   0.002   0.062  -0.012  -0.041  -0.051   0.020  -0.060 
+  6.231  -0.423   0.126   0.146  -0.261  -0.225   0.097  -0.273   0.217  -0.214  -0.043  -0.101  -0.179 
+  5.081  -0.319   0.255   0.024  -0.273  -0.110   0.094  -0.300   0.060  -0.269  -0.015   0.036  -0.149 
+  5.516   0.411   0.096   0.128  -0.364  -0.141  -0.055  -0.057   0.088  -0.189  -0.179  -0.162  -0.119 
+  4.676   0.191   0.058   0.114  -0.101  -0.074   0.042  -0.061   0.091  -0.255  -0.081  -0.188  -0.020 
+  4.625   0.161  -0.014   0.114  -0.228  -0.119   0.001  -0.185  -0.027  -0.310  -0.148  -0.207  -0.075 
+  5.446   0.593   0.038  -0.015  -0.309  -0.089  -0.090   0.096   0.109  -0.232  -0.248  -0.222  -0.073 
+  5.172   0.251   0.130   0.114  -0.115  -0.016  -0.049   0.036   0.020  -0.186  -0.303  -0.245  -0.188 
+  5.469   0.021   0.018  -0.064  -0.263  -0.179  -0.028   0.180  -0.092   0.163  -0.046  -0.020  -0.188 
+  5.606  -0.256   0.082  -0.161  -0.213  -0.159   0.073   0.018  -0.160  -0.067  -0.230  -0.102  -0.085 
+  5.953  -0.227   0.012  -0.111  -0.095  -0.035   0.023  -0.051  -0.016  -0.043  -0.282  -0.025   0.038 
+  6.047  -0.281  -0.114  -0.217  -0.182  -0.094   0.172  -0.042  -0.086  -0.033  -0.147  -0.148  -0.096 
+  5.708  -0.567  -0.338  -0.419  -0.343  -0.334   0.065   0.026   0.105   0.198  -0.037  -0.067   0.060 
+  5.094  -0.639  -0.206  -0.139  -0.199  -0.188   0.046  -0.116  -0.028   0.110  -0.090  -0.089   0.028 
+  4.948  -0.379  -0.139  -0.149  -0.213  -0.203  -0.030  -0.238  -0.085  -0.037  -0.241  -0.086   0.143 
+  4.533  -0.066  -0.111  -0.244  -0.235  -0.182   0.015   0.056  -0.056  -0.106  -0.163   0.039   0.118 
+  4.281   0.332  -0.047  -0.281  -0.167  -0.082  -0.153  -0.122  -0.101   0.013  -0.152  -0.214  -0.138 
+  3.424   0.027  -0.250   0.167   0.049   0.038  -0.115  -0.079  -0.072   0.114  -0.014  -0.005   0.014 
+  3.416   0.018  -0.016   0.141  -0.072  -0.146  -0.181  -0.002  -0.131  -0.026   0.029  -0.021  -0.073 
+  3.644   0.110  -0.060   0.028  -0.015  -0.052   0.083  -0.134  -0.101   0.006  -0.090  -0.040  -0.158 
+  4.380  -0.477   0.193  -0.133   0.112   0.079  -0.106  -0.112  -0.136  -0.144  -0.047  -0.057  -0.118 
+  4.398  -0.396   0.082  -0.100  -0.012  -0.205  -0.164  -0.005  -0.022   0.049   0.091   0.017   0.045 
+  3.474  -0.014  -0.501  -0.010   0.028   0.005  -0.165  -0.022  -0.212  -0.004   0.038  -0.089  -0.067 
+  3.575   0.063  -0.355  -0.039   0.028   0.142  -0.098  -0.094  -0.152  -0.042   0.041  -0.127  -0.026 
+  3.497   0.165  -0.229   0.217   0.075   0.168  -0.077  -0.216  -0.167   0.001   0.082   0.118  -0.033 
+  3.661   0.161  -0.166   0.046  -0.189  -0.082  -0.160  -0.108   0.002  -0.084  -0.067  -0.044   0.026 
+  3.740   0.211   0.027   0.113  -0.069   0.109  -0.145  -0.197  -0.082   0.041   0.122   0.018   0.040 
+  3.734   0.286  -0.080   0.157   0.031   0.055  -0.169  -0.093  -0.145   0.034   0.049   0.045  -0.022 
+  3.835   0.239  -0.130   0.037   0.035   0.033  -0.137  -0.155  -0.275  -0.003   0.084   0.101  -0.041 
+  3.805   0.303  -0.196  -0.118  -0.224  -0.124  -0.100  -0.090  -0.112   0.057   0.156   0.136  -0.025 
+  3.389   0.054  -0.226  -0.167   0.042  -0.072  -0.211  -0.218   0.086   0.180  -0.004   0.113  -0.040 
+  3.666   0.274  -0.022   0.061  -0.124  -0.040  -0.276  -0.168  -0.094  -0.047   0.097   0.030  -0.107 
+  3.651   0.191  -0.115   0.117   0.002  -0.183  -0.278  -0.272  -0.276   0.018   0.108  -0.030  -0.091 
+  3.634   0.199  -0.308   0.030  -0.078  -0.083  -0.209  -0.349  -0.028   0.003  -0.062   0.012  -0.164 
+  3.457   0.082  -0.197   0.184   0.044   0.142  -0.128  -0.140   0.092   0.082  -0.040  -0.069  -0.228 
+  3.953   0.283   0.033   0.210   0.048  -0.088  -0.192  -0.110  -0.067  -0.041   0.131   0.013  -0.078 
+  3.856   0.399   0.037   0.090   0.109  -0.081  -0.342  -0.327  -0.101   0.002   0.076  -0.019  -0.150 
+  5.463  -0.264  -0.198   0.046   0.111  -0.030  -0.401   0.136  -0.046  -0.189  -0.051  -0.054  -0.053 
+  7.238  -0.514  -0.291   0.042  -0.030  -0.211  -0.542   0.285   0.059  -0.332  -0.112  -0.022   0.006 
+  4.713  -0.396  -0.464   0.190   0.092   0.035  -0.510   0.135  -0.049  -0.338   0.093   0.033   0.010 
+  3.409  -0.342  -0.387   0.056   0.102  -0.080  -0.189  -0.009  -0.220  -0.203   0.102   0.174  -0.139 
+  3.915  -0.235  -0.281  -0.054   0.064   0.097  -0.018   0.014  -0.221   0.009   0.011  -0.047  -0.068 
+  6.008  -0.548  -0.478  -0.066  -0.203  -0.083  -0.036   0.112  -0.171  -0.100   0.189   0.160  -0.170 
+  7.276  -0.705  -1.123  -0.046  -0.275  -0.272  -0.220   0.293  -0.049  -0.221   0.015   0.175  -0.294 
+  8.924  -0.732  -1.064  -0.145  -0.057  -0.244  -0.146   0.052  -0.159  -0.100   0.068   0.182  -0.312 
+ 10.360  -0.536  -1.073  -0.240   0.042  -0.313   0.118   0.085  -0.091  -0.145  -0.169   0.012  -0.231 
+ 12.029   0.356  -0.981  -0.446  -0.103  -0.497   0.013  -0.106  -0.251  -0.027  -0.386   0.071  -0.240 
+ 13.178   0.834  -1.360  -0.356  -0.237  -0.376  -0.255   0.111  -0.162   0.006  -0.366  -0.075  -0.166 
+ 14.185   0.460  -1.718  -0.170  -0.351  -0.286  -0.186   0.265  -0.087   0.028  -0.376  -0.255  -0.064 
+ 14.021   0.480  -1.810  -0.254  -0.343  -0.275  -0.171   0.239  -0.040  -0.028  -0.322  -0.308   0.005 
+ 14.368   0.380  -1.740  -0.179  -0.457  -0.149  -0.255   0.284  -0.093   0.035  -0.344  -0.329   0.023 
+ 14.574   0.389  -1.616  -0.257  -0.570  -0.027  -0.329   0.246  -0.191   0.161  -0.360  -0.344  -0.062 
+ 14.539   0.658  -1.503  -0.355  -0.682   0.079  -0.306   0.177  -0.351   0.318  -0.308  -0.315  -0.244 
+ 13.865   1.163  -1.241  -0.394  -0.727  -0.102  -0.209   0.023  -0.487   0.278  -0.143  -0.232  -0.255 
+ 12.653   1.027  -0.917  -0.067  -0.637  -0.305   0.097  -0.063  -0.436   0.227  -0.282   0.113  -0.074 
+ 11.561   0.590  -0.685   0.237  -0.157  -0.137   0.431  -0.048  -0.548   0.101  -0.781   0.085  -0.116 
+ 11.483   0.600  -0.650   0.227  -0.197  -0.192   0.433  -0.074  -0.446   0.064  -0.725   0.044  -0.037 
+ 11.486   0.423  -0.560   0.220  -0.148  -0.072   0.371   0.004  -0.546  -0.009  -0.781  -0.017   0.057 
+ 11.154   0.492  -0.541   0.293  -0.114  -0.079   0.404   0.054  -0.693  -0.018  -0.816   0.004   0.087 
+ 10.859   0.732  -0.574   0.327  -0.250  -0.094   0.289   0.225  -0.694   0.019  -0.699  -0.137   0.054 
+ 12.014   0.999  -0.491  -0.180  -0.440  -0.259  -0.163  -0.008  -0.663   0.059  -0.097   0.002   0.127 
+ 13.444   0.993  -1.041  -0.416  -0.622  -0.137  -0.361  -0.102  -0.577   0.355  -0.002  -0.101  -0.110 
+ 13.934   0.853  -1.316  -0.322  -0.685  -0.152  -0.533  -0.124  -0.389   0.473  -0.098  -0.318  -0.255 
+ 14.013   0.714  -1.278  -0.248  -0.462  -0.370  -0.500  -0.264  -0.080   0.466  -0.161  -0.369  -0.124 
+ 13.561   0.695  -0.999  -0.307  -0.141  -0.690  -0.403  -0.365   0.040   0.480  -0.408  -0.042  -0.033 
+ 12.310   0.282  -0.436   0.310  -0.259  -0.719  -0.481  -0.118   0.099  -0.036  -0.350  -0.026  -0.048 
+  9.902   0.009  -0.148   0.204  -0.340  -0.181  -0.514  -0.079   0.160   0.181  -0.163   0.034  -0.081 
+  8.475   0.424  -0.584  -0.054  -0.364  -0.408  -0.076  -0.231   0.204   0.215  -0.246  -0.329  -0.134 
+  8.832  -0.277  -0.559  -0.155  -0.449  -0.305  -0.019  -0.084   0.377   0.299  -0.216  -0.347  -0.254 
+  7.766   0.044  -0.366  -0.268  -0.398  -0.355  -0.033  -0.131   0.295   0.317  -0.242  -0.192  -0.068 
+ 11.029  -1.260  -0.351   0.088  -0.833   0.086  -0.238  -0.148   0.056  -0.214  -0.122  -0.153  -0.162 
+ 11.286  -1.691  -0.145   0.108  -0.878  -0.082  -0.129  -0.224  -0.086  -0.202  -0.096  -0.147  -0.126 
+ 11.208  -2.469  -0.016   0.466  -0.308  -0.278  -0.052  -0.091  -0.044   0.024  -0.180  -0.185  -0.010 
+ 12.503  -1.752  -0.431   0.012  -0.258  -0.420  -0.304  -0.148  -0.167  -0.143  -0.161  -0.014   0.044 
+ 12.091  -1.207  -0.266   0.584   0.183  -0.174  -0.405  -0.100  -0.222  -0.209  -0.199  -0.187  -0.025 
+ 11.913  -0.280  -0.135   0.334   0.647   0.097  -0.245  -0.297  -0.185  -0.375  -0.376  -0.286  -0.278 
+ 11.921   0.288  -0.181   0.053   0.328  -0.191  -0.386  -0.285  -0.150  -0.042  -0.050  -0.181  -0.382 
+ 11.788   0.831  -0.058   0.248   0.257  -0.090  -0.206  -0.245  -0.203  -0.022  -0.107  -0.306  -0.275 
+ 11.453   0.959  -0.046   0.381   0.122   0.045  -0.262  -0.310  -0.192  -0.048  -0.223  -0.102  -0.278 
+ 11.435   1.127   0.005   0.283  -0.074   0.020  -0.308  -0.178  -0.072  -0.118  -0.273  -0.133  -0.142 
+ 10.548   1.152   0.099   0.247  -0.052   0.092  -0.220  -0.184  -0.340  -0.205  -0.245  -0.160  -0.321 
+  9.962   0.659  -0.180   0.179   0.090   0.213   0.031  -0.069  -0.376  -0.451  -0.142  -0.007  -0.160 
+ 10.065   0.590  -0.460   0.101   0.147   0.240   0.120  -0.109  -0.461  -0.399  -0.014   0.049  -0.116 
+  9.165   0.347  -0.681  -0.103   0.091   0.486   0.074  -0.403  -0.593  -0.271   0.035  -0.066  -0.006 
+  8.346   0.692  -0.265   0.150  -0.034   0.098  -0.196  -0.542  -0.409  -0.177  -0.050   0.030  -0.124 
+  6.418   0.389  -0.173  -0.032   0.124   0.038  -0.274  -0.512  -0.357   0.022   0.103  -0.104  -0.145 
+  5.705   0.134  -0.243   0.057   0.221  -0.085  -0.067  -0.252  -0.341   0.006   0.045  -0.279  -0.068 
+  5.649  -0.259  -0.601   0.414  -0.020   0.007  -0.230  -0.267  -0.127  -0.108  -0.101  -0.174   0.053 
+  6.381  -0.325  -0.686   0.476  -0.095  -0.215  -0.374  -0.172   0.057  -0.130   0.153  -0.100   0.202 
+  7.238  -0.608  -0.722   0.315  -0.373  -0.207  -0.230  -0.105   0.118  -0.066   0.262  -0.067   0.139 
+  8.271  -0.554  -1.007   0.079  -0.201  -0.188  -0.147   0.134   0.215  -0.251   0.068  -0.066   0.101 
+  9.813  -0.115  -0.780   0.010  -0.112  -0.279  -0.464   0.175   0.020  -0.066  -0.136  -0.008  -0.054 
+ 10.414  -0.671  -1.048  -0.248  -0.153  -0.124  -0.177   0.295  -0.071  -0.238  -0.233   0.040  -0.113 
+ 11.263  -0.644  -1.312  -0.392  -0.055  -0.315   0.023   0.359   0.076  -0.379  -0.187   0.176  -0.148 
+ 11.826  -0.640  -1.307  -0.274  -0.023  -0.475   0.011   0.073  -0.068  -0.315  -0.059   0.280  -0.138 
+ 12.104  -0.669  -1.319  -0.213   0.015  -0.304   0.055   0.096  -0.182  -0.238  -0.292  -0.040  -0.214 
+ 12.256  -0.617  -1.185  -0.324   0.060  -0.096  -0.013   0.057  -0.162  -0.267  -0.418   0.090  -0.168 
+ 13.066   0.108  -1.003  -0.386  -0.112  -0.298  -0.271   0.117  -0.183  -0.086  -0.474   0.023  -0.144 
+ 14.045   0.485  -1.377  -0.575  -0.164  -0.388  -0.241   0.211  -0.169  -0.082  -0.371  -0.003  -0.229 
+ 14.692   0.318  -1.641  -0.428  -0.251  -0.288  -0.366   0.359  -0.162  -0.003  -0.358  -0.161  -0.242 
+ 14.664   0.382  -1.599  -0.445  -0.329  -0.336  -0.354   0.322  -0.129  -0.007  -0.381  -0.286  -0.083 
+ 14.916   0.300  -1.398  -0.406  -0.356  -0.333  -0.475   0.394  -0.252   0.155  -0.431  -0.294  -0.157 
+ 14.957   0.425  -1.296  -0.585  -0.284  -0.355  -0.477   0.250  -0.285   0.314  -0.350  -0.341  -0.302 
+ 14.663   0.785  -1.246  -0.603  -0.296  -0.420  -0.452   0.045  -0.381   0.529  -0.322  -0.292  -0.468 
+ 14.671   0.893  -0.861  -0.818  -0.441  -0.410  -0.301  -0.001  -0.610   0.501  -0.309  -0.185  -0.357 
+ 14.328   0.991  -0.464  -0.841  -0.542  -0.355  -0.199  -0.264  -0.764   0.285  -0.237   0.122  -0.239 
+ 13.830   0.921  -0.034  -0.748  -0.614  -0.242  -0.330  -0.289  -0.785   0.113  -0.445   0.338  -0.233 
+ 13.318   0.903   0.312  -0.795  -0.549  -0.244  -0.184  -0.344  -0.833  -0.075  -0.603   0.266  -0.167 
+ 12.811   1.012   0.378  -0.817  -0.461  -0.315  -0.128  -0.328  -0.758   0.004  -0.681   0.152  -0.204 
+ 12.162   1.176   0.334  -0.790  -0.307  -0.302  -0.028  -0.334  -0.751   0.026  -0.661   0.020  -0.268 
+ 11.359   1.468   0.030  -0.762   0.089  -0.362   0.165  -0.464  -0.867   0.037  -0.538  -0.094  -0.376 
+ 11.299   1.238  -0.292  -0.317   0.424  -0.507   0.001  -0.595  -0.688   0.072  -0.409  -0.432  -0.270 
+ 11.534   0.856  -0.437   0.278   0.364  -0.727  -0.309  -0.326  -0.486   0.126  -0.526  -0.481  -0.187 
+ 11.609   0.313  -0.283   0.608   0.134  -0.846  -0.040  -0.167  -0.616  -0.044  -0.328  -0.325  -0.222 
+ 11.526  -0.381   0.265   0.800  -0.158  -0.392   0.055  -0.350  -0.514  -0.041  -0.473  -0.307  -0.374 
+ 11.096  -0.425   0.660   0.554  -0.207  -0.344  -0.093  -0.176  -0.495  -0.018  -0.395  -0.355  -0.302 
+ 11.135  -0.547   0.842   0.500  -0.029  -0.281  -0.142  -0.113  -0.526  -0.031  -0.321  -0.422  -0.368 
+ 11.877  -0.778   0.960   0.514  -0.252  -0.144  -0.271   0.051  -0.577   0.035  -0.364  -0.325  -0.308 
+ 12.479  -1.113   0.942   0.633  -0.142  -0.214  -0.427   0.046  -0.531   0.141  -0.316  -0.248  -0.278 
+ 12.528  -1.186   1.072   0.609  -0.235  -0.167  -0.296   0.113  -0.705   0.115  -0.286  -0.299  -0.270 
+ 12.590  -1.104   1.014   0.635  -0.267  -0.078  -0.299   0.144  -0.767   0.112  -0.314  -0.292  -0.219 
+ 12.554  -0.968   0.947   0.633  -0.335  -0.087  -0.367   0.179  -0.666   0.088  -0.356  -0.280  -0.185 
+ 12.386  -0.783   0.816   0.743  -0.363  -0.134  -0.419   0.100  -0.639   0.110  -0.291  -0.335  -0.184 
+ 12.480  -0.757   0.754   0.763  -0.368  -0.083  -0.444   0.010  -0.774   0.148  -0.302  -0.269  -0.183 
+ 12.317  -0.669   0.668   0.807  -0.301  -0.156  -0.381  -0.099  -0.785   0.066  -0.357  -0.146  -0.256 
+ 12.350  -0.764   0.661   0.916  -0.232  -0.296  -0.271  -0.304  -0.668  -0.063  -0.344  -0.141  -0.245 
+ 12.608  -0.836   0.636   0.695  -0.293  -0.125  -0.124  -0.280  -0.771  -0.290  -0.261  -0.036  -0.401 
+ 12.735  -0.788   0.537   0.519  -0.068  -0.411  -0.163  -0.290  -0.551  -0.216  -0.254  -0.179  -0.443 
+ 12.546  -0.792   0.332   0.527  -0.070  -0.591  -0.163  -0.318  -0.236  -0.401  -0.272   0.033  -0.463 
+ 12.520  -0.746   0.412   0.296   0.064  -0.616  -0.170  -0.275  -0.339  -0.435  -0.230  -0.075  -0.459 
+ 12.665  -0.924   0.554   0.161   0.068  -0.502  -0.219  -0.204  -0.449  -0.492  -0.317  -0.077  -0.303 
+ 12.901  -0.761   0.506   0.164   0.056  -0.630  -0.133  -0.216  -0.291  -0.513  -0.225  -0.112  -0.384 
+ 13.037  -0.693   0.407   0.223   0.062  -0.480  -0.296  -0.165  -0.478  -0.411  -0.256  -0.120  -0.436 
+ 13.197  -0.830   0.439   0.490  -0.052  -0.450  -0.168  -0.174  -0.479  -0.361  -0.200  -0.161  -0.435 
+ 13.201  -0.601   0.346   0.510  -0.113  -0.380  -0.299  -0.070  -0.546  -0.370  -0.186  -0.320  -0.368 
+ 13.156  -0.677   0.515   0.709  -0.271  -0.447  -0.213  -0.018  -0.621  -0.169  -0.247  -0.391  -0.311 
+ 13.049  -0.669   0.382   0.952  -0.430  -0.233  -0.284   0.070  -0.707  -0.038  -0.414  -0.249  -0.325 
+ 12.951  -0.771   0.407   0.917  -0.259  -0.264  -0.275   0.026  -0.708   0.027  -0.421  -0.239  -0.285 
+ 12.753  -0.662   0.348   0.793  -0.106  -0.399  -0.223   0.067  -0.691   0.094  -0.404  -0.217  -0.243 
+ 12.530  -0.519   0.227   0.720   0.057  -0.470  -0.266   0.160  -0.662   0.094  -0.406  -0.159  -0.241 
+ 12.255  -0.404   0.170   0.554   0.275  -0.468  -0.381   0.191  -0.631   0.113  -0.400  -0.176  -0.149 
+ 11.709  -0.184   0.144   0.374   0.423  -0.355  -0.420   0.116  -0.672   0.175  -0.455  -0.183  -0.011 
+ 11.290  -0.038   0.129   0.262   0.421  -0.224  -0.329  -0.045  -0.696   0.276  -0.545  -0.212   0.091 
+ 11.048   0.063   0.124   0.177   0.420  -0.113  -0.358  -0.124  -0.666   0.363  -0.543  -0.287   0.025 
+ 11.025   0.062   0.208   0.073   0.444  -0.090  -0.417  -0.128  -0.655   0.369  -0.476  -0.298  -0.065 
+ 11.275   0.049   0.119   0.128   0.441  -0.125  -0.458  -0.046  -0.736   0.417  -0.568  -0.267  -0.090 
+ 11.412   0.104   0.087   0.195   0.415  -0.224  -0.491  -0.016  -0.665   0.383  -0.653  -0.196  -0.107 
+ 11.607   0.168  -0.079   0.401   0.302  -0.311  -0.489   0.018  -0.596   0.300  -0.676  -0.170  -0.085 
+ 11.492   0.297  -0.213   0.517   0.316  -0.452  -0.404   0.020  -0.479   0.082  -0.620  -0.128  -0.151 
+ 11.511   0.125  -0.142   0.555   0.380  -0.570  -0.354   0.081  -0.521   0.104  -0.575  -0.141  -0.134 
+ 11.405   0.095  -0.077   0.527   0.283  -0.550  -0.318   0.238  -0.693   0.143  -0.501  -0.184  -0.088 
+ 10.979   0.165  -0.043   0.498   0.306  -0.614  -0.243   0.262  -0.772   0.261  -0.551  -0.070  -0.282 
+ 10.723   0.096  -0.075   0.511   0.294  -0.543  -0.198   0.237  -0.656   0.035  -0.450  -0.181  -0.175 
+ 10.817  -0.010   0.070   0.417   0.275  -0.432  -0.260   0.137  -0.472  -0.018  -0.501  -0.387   0.012 
+ 10.937   0.336   0.067   0.247   0.372  -0.257  -0.381   0.002  -0.388   0.134  -0.525  -0.582  -0.082 
+ 10.749   0.514   0.059   0.007   0.478  -0.289  -0.256  -0.114  -0.440   0.313  -0.334  -0.579  -0.013 
+ 10.715   0.652   0.326  -0.342   0.309  -0.184  -0.247  -0.138  -0.534   0.316  -0.069  -0.337  -0.007 
+ 10.794   0.996   0.347  -0.581   0.245  -0.240  -0.223  -0.232  -0.714   0.032  -0.071  -0.473  -0.008 
+ 10.900   1.273  -0.005  -0.532   0.016  -0.223   0.003  -0.306  -0.563  -0.022   0.043  -0.283   0.041 
+ 11.220   1.250   0.063  -0.537  -0.148  -0.487   0.170  -0.469  -0.271  -0.200   0.055  -0.268   0.110 
+ 11.583   1.233   0.050  -0.601  -0.471  -0.357   0.054  -0.378  -0.213  -0.209   0.011  -0.211   0.207 
+ 11.842   1.114   0.009  -0.421  -0.861  -0.237   0.032  -0.266  -0.089  -0.250  -0.102  -0.078   0.143 
+ 11.846   0.912   0.086  -0.466  -0.911  -0.346   0.092  -0.255   0.153  -0.331  -0.021  -0.121   0.073 
+ 11.399   1.177  -0.082  -0.425  -0.953  -0.319   0.042  -0.251   0.305  -0.408   0.059  -0.134  -0.117 
+ 11.768   1.185  -0.199  -0.587  -1.056  -0.034  -0.054  -0.116   0.058  -0.269  -0.012  -0.035  -0.150 
+ 12.176   1.080  -0.378  -0.678  -0.994   0.112   0.006  -0.198  -0.056  -0.122   0.024   0.030  -0.258 
+ 12.152   1.202  -0.519  -0.763  -0.806   0.097  -0.056  -0.175  -0.059  -0.027  -0.039   0.065  -0.414 
+ 12.494   0.952  -0.637  -0.594  -0.727   0.053   0.022  -0.398   0.019   0.137  -0.104   0.097  -0.575 
+ 12.236   1.091  -0.871  -0.391  -0.664   0.082  -0.110  -0.436   0.054   0.197  -0.138   0.070  -0.614 
+ 12.078   1.063  -0.807  -0.415  -0.552   0.093  -0.361  -0.368   0.070   0.235  -0.151   0.113  -0.585 
+ 10.638   0.779  -0.355  -0.057  -0.347   0.186  -0.329  -0.384   0.064   0.093  -0.346   0.125  -0.329 
+ 10.524   0.823  -0.118   0.206  -0.401  -0.041  -0.287  -0.370  -0.034   0.107  -0.439   0.097  -0.275 
+ 10.798   0.690  -0.248   0.312  -0.346  -0.169  -0.210  -0.367  -0.100   0.107  -0.398   0.041  -0.192 
+ 13.090   0.407  -0.932  -0.000  -0.119  -0.397  -0.581   0.059  -0.282   0.503  -0.322   0.089  -0.358 
+ 13.011   0.654  -0.937  -0.110  -0.353  -0.261  -0.628   0.024  -0.206   0.459  -0.350   0.026  -0.355 
+ 12.772   0.729  -0.834  -0.084  -0.605  -0.182  -0.616   0.021  -0.008   0.344  -0.362   0.007  -0.285 
+ 12.693   0.804  -0.906   0.004  -0.629  -0.196  -0.677   0.038   0.097   0.205  -0.341   0.071  -0.233 
+ 12.281   0.889  -0.717   0.089  -0.635  -0.193  -0.703  -0.141   0.095   0.198  -0.228   0.028  -0.150 
+ 11.849   1.018  -0.601   0.102  -0.429  -0.258  -0.656  -0.210  -0.148   0.260  -0.257  -0.091  -0.169 
+  9.767   0.976   0.003   0.134   0.069  -0.178  -0.408  -0.153  -0.234   0.140  -0.176  -0.386  -0.341 
+  9.686   0.846  -0.049   0.254   0.106  -0.123  -0.397  -0.026  -0.255   0.006  -0.262  -0.577  -0.070 
+  9.760   0.722   0.040   0.216   0.184  -0.365  -0.369   0.088  -0.395   0.168  -0.252  -0.589   0.034 
+  9.761   0.633   0.053   0.237   0.170  -0.365  -0.336   0.071  -0.391   0.216  -0.299  -0.536   0.018 
+  9.705   0.542   0.165   0.203   0.197  -0.409  -0.229  -0.029  -0.355   0.257  -0.335  -0.607   0.158 
+  9.862   0.504   0.089   0.171   0.239  -0.313  -0.179  -0.064  -0.454   0.300  -0.352  -0.465   0.082 
+ 12.095   0.315  -0.347   0.149  -0.028  -0.357  -0.574   0.041  -0.176   0.151  -0.264  -0.124   0.063 
+ 12.757   0.091  -0.211   0.214  -0.459  -0.589  -0.577   0.081  -0.339   0.155  -0.038  -0.021   0.019 
+ 13.027  -0.015  -0.130   0.316  -0.785  -0.515  -0.470   0.049  -0.403   0.344  -0.163   0.027  -0.099 
+ 13.285  -0.104  -0.122   0.318  -0.793  -0.581  -0.488   0.081  -0.457   0.369  -0.153   0.022  -0.193 
+ 13.479  -0.230   0.009   0.241  -0.831  -0.422  -0.654   0.145  -0.526   0.446  -0.303   0.140  -0.266 
+ 13.294  -0.243   0.191   0.185  -0.869  -0.386  -0.579   0.023  -0.551   0.396  -0.243   0.087  -0.202 
+ 13.237  -0.363   0.321   0.253  -0.857  -0.368  -0.603  -0.011  -0.544   0.338  -0.228   0.083  -0.196 
+ 13.109  -0.436   0.495   0.290  -0.868  -0.348  -0.516  -0.130  -0.514   0.275  -0.274   0.030  -0.158 
+ 12.559  -0.370   0.581   0.353  -0.752  -0.260  -0.495  -0.215  -0.547   0.213  -0.345   0.008  -0.121 
+ 11.826  -0.393   0.684   0.474  -0.769  -0.314  -0.348  -0.216  -0.617   0.192  -0.405  -0.122  -0.169 
+  9.919  -0.600   0.708   0.525  -0.594  -0.260  -0.278  -0.110  -0.377   0.166  -0.320  -0.091   0.021 
+  7.760  -0.254   0.698   0.265  -0.248  -0.199   0.090  -0.176   0.076  -0.021  -0.215  -0.253  -0.267 
+  6.626  -0.143   0.948   0.258  -0.031  -0.168  -0.148  -0.500  -0.027  -0.161  -0.001  -0.009  -0.292 
+  5.585   0.404   0.494   0.096  -0.275  -0.239  -0.524  -0.246  -0.319   0.241  -0.169  -0.101  -0.099 
+  5.454   0.368   0.389   0.144  -0.256  -0.236  -0.497  -0.164  -0.397   0.135  -0.040   0.085  -0.221 
+  6.475  -0.094   0.070   0.185  -0.511  -0.098  -0.323  -0.238  -0.146  -0.100  -0.105   0.108  -0.145 
+ 10.795  -1.213  -0.458   0.038  -0.484   0.026  -0.147  -0.173   0.136   0.036  -0.073  -0.107  -0.285 
+ 12.237  -1.468  -0.485  -0.037  -0.680  -0.081  -0.282  -0.267  -0.058  -0.159  -0.221  -0.216  -0.164 
+ 11.932  -0.789   0.718   0.011  -0.520   0.011  -0.392  -0.247  -0.460  -0.085  -0.190  -0.202  -0.106 
+ 11.852  -0.128   0.794   0.177  -0.448  -0.415  -0.628  -0.014  -0.567  -0.170  -0.196  -0.068  -0.090 
+ 12.057   0.233   0.320   0.306  -0.489  -0.557  -0.680   0.067  -0.560  -0.238  -0.085   0.146  -0.291 
+ 12.160   0.217   0.006   0.255  -0.446  -0.506  -0.712  -0.006  -0.414  -0.206  -0.180   0.256  -0.397 
+ 12.161   0.101  -0.098   0.325  -0.521  -0.410  -0.846  -0.053  -0.406  -0.221  -0.233   0.303  -0.323 
+ 11.889   0.016  -0.280   0.448  -0.358  -0.244  -0.754  -0.032  -0.328  -0.184  -0.360   0.255  -0.319 
+  8.346  -0.194   0.160   0.473  -0.166  -0.201  -0.803  -0.059  -0.082  -0.198  -0.133   0.301  -0.072 
+  7.623  -0.067   0.172   0.593  -0.164   0.012  -0.626   0.126  -0.024  -0.031  -0.015   0.096  -0.011 
+  6.753   0.330  -0.439   0.216  -0.031  -0.096  -0.356  -0.062  -0.114   0.045  -0.041   0.128  -0.118 
+  8.967   0.214  -1.324  -0.274  -0.166  -0.150  -0.373  -0.230  -0.247  -0.231  -0.171  -0.138  -0.042 
+  8.960  -0.682  -0.484  -0.221  -0.082  -0.103  -0.381  -0.103  -0.141  -0.209  -0.075  -0.298  -0.022 
+  8.718  -0.550  -0.054  -0.260  -0.303  -0.164  -0.269   0.025  -0.178  -0.005  -0.145  -0.099  -0.015 
+  9.853  -0.831  -0.372  -0.017  -0.221  -0.115  -0.170   0.062  -0.047  -0.107  -0.170   0.044  -0.098 
+ 11.528  -0.776  -0.600  -0.008  -0.193  -0.126  -0.180   0.096  -0.007  -0.125  -0.309  -0.162  -0.126 
+ 11.804  -0.438  -0.424   0.015  -0.055  -0.026  -0.189  -0.034  -0.036  -0.008  -0.229  -0.260  -0.122 
+ 12.331   0.080  -0.136   0.163   0.104  -0.173  -0.363  -0.247  -0.040  -0.159  -0.332  -0.309  -0.106 
+ 13.202   0.238   0.081   0.428   0.023  -0.121  -0.511  -0.404  -0.113  -0.168  -0.310  -0.440  -0.384 
+ 12.612  -0.042  -0.082   0.367   0.089   0.118  -0.449  -0.213  -0.139  -0.125  -0.331  -0.366  -0.246 
+ 11.889   0.265  -0.273   0.341   0.226   0.023  -0.552  -0.303  -0.266  -0.264  -0.127  -0.474  -0.132 
+ 12.193   1.021  -0.768  -0.405  -0.103  -0.063  -0.726  -0.331  -0.234  -0.177  -0.072  -0.180  -0.159 
+ 11.508   1.690  -0.758  -0.282  -0.078   0.118  -0.667  -0.502  -0.159  -0.112  -0.154  -0.045  -0.114 
+ 10.321   1.907  -0.353  -0.339   0.084   0.229  -0.501  -0.365  -0.111  -0.239  -0.089  -0.190  -0.156 
+  7.913   1.710   0.143  -0.183   0.011   0.021  -0.280  -0.084  -0.048  -0.048  -0.059  -0.025  -0.187 
+  5.789   1.019   0.070   0.048   0.136   0.254  -0.216  -0.261  -0.149   0.034   0.015   0.024  -0.098 
+  5.316   0.814  -0.063  -0.025  -0.026   0.110  -0.158  -0.248  -0.075  -0.007   0.051   0.043  -0.116 
+  5.111   0.523  -0.143  -0.064  -0.110  -0.118  -0.371  -0.287  -0.105   0.172   0.114   0.033   0.085 
+  4.814   0.376  -0.035  -0.109   0.076  -0.050  -0.354  -0.235  -0.077  -0.009   0.047  -0.069  -0.019 
+  4.987   0.454  -0.059  -0.066   0.030  -0.023  -0.185  -0.297  -0.238   0.151  -0.150  -0.019  -0.082 
+  7.530  -0.797   0.057   0.220   0.044  -0.105  -0.380  -0.044  -0.152  -0.181   0.050  -0.148   0.107 
+ 12.366   0.466   0.284   0.087  -0.414  -0.260  -0.169  -0.107  -0.336  -0.364  -0.144  -0.286  -0.046 
+ 13.529   1.183   0.077   0.443  -0.464  -0.391   0.159  -0.259  -0.389  -0.315  -0.225  -0.184  -0.120 
+ 11.662   0.850   0.385   0.524  -0.552  -0.466   0.047  -0.214  -0.226  -0.116  -0.283  -0.162  -0.086 
+ 10.371  -0.200   0.555   0.623  -0.198  -0.428   0.169  -0.333  -0.501  -0.190  -0.300  -0.148  -0.162 
+ 11.224  -0.094   0.316   0.440  -0.498  -0.292  -0.193  -0.340  -0.375  -0.263  -0.263  -0.210  -0.150 
+ 11.925  -0.146   0.255   0.730  -0.265  -0.454  -0.287  -0.071  -0.643  -0.133  -0.237  -0.236  -0.110 
+ 12.178  -0.337   0.338   0.720  -0.300  -0.287  -0.211  -0.162  -0.762  -0.012  -0.387  -0.166  -0.168 
+ 11.918  -0.383   0.362   0.780  -0.227  -0.470  -0.016  -0.092  -0.881  -0.005  -0.326  -0.276  -0.124 
+ 11.271  -0.191   0.001   0.691   0.176  -0.552  -0.207   0.163  -0.980  -0.110  -0.395  -0.232  -0.101 
+  9.960   0.374   0.086   0.541   0.469  -0.479  -0.338   0.414  -0.792   0.058  -0.231  -0.234  -0.149 
+  7.602   0.411   0.389   0.076   0.222  -0.058  -0.083   0.095  -0.333   0.113  -0.069  -0.193  -0.069 
+  9.279  -0.976   0.382   0.285   0.436  -0.408  -0.020   0.037   0.093  -0.203  -0.497   0.023  -0.062 
+  9.441  -1.265   0.132   0.390   0.235  -0.277   0.076  -0.072   0.099  -0.325  -0.450   0.103  -0.083 
+  8.478  -0.980  -0.099   0.242   0.093  -0.083   0.071  -0.059   0.057  -0.325  -0.353   0.010   0.000 
+ 11.797  -0.537   0.068   0.160  -0.081  -0.028  -0.105  -0.127  -0.190  -0.155  -0.149  -0.027  -0.068 
+ 12.674   1.023   0.173  -0.237  -0.396  -0.219  -0.186  -0.051  -0.189  -0.273  -0.188  -0.014   0.086 
+ 12.600   1.014   0.359  -0.035  -0.403  -0.080  -0.310  -0.199  -0.252  -0.322  -0.226  -0.169   0.005 
+ 12.120   1.093   0.523  -0.126  -0.532   0.118  -0.155  -0.151  -0.088  -0.377  -0.167  -0.208  -0.039 
+ 11.901   0.941   0.710  -0.355  -0.899   0.009  -0.016  -0.318  -0.140  -0.517  -0.091  -0.226   0.040 
+ 11.242   1.003   0.838  -0.724  -0.711   0.000  -0.078  -0.328  -0.088  -0.421  -0.078  -0.061   0.117 
+ 10.906   0.448   0.860  -0.711  -0.568  -0.034  -0.147  -0.171  -0.270  -0.325  -0.238   0.130  -0.210 
+  8.473   0.405   0.782  -0.207  -0.413   0.052   0.005   0.062  -0.237  -0.132  -0.356   0.059  -0.100 
+  6.599   0.317   0.716   0.232  -0.201  -0.147  -0.091  -0.187  -0.043   0.011  -0.225  -0.034  -0.109 
+  6.069   0.277   0.495   0.144  -0.060  -0.045  -0.004  -0.295  -0.029  -0.185  -0.085   0.135  -0.090 
+  9.419  -0.965   0.036   0.220  -0.368   0.040  -0.377   0.027   0.125   0.059  -0.098  -0.206  -0.139 
+ 11.342  -1.155   0.053   0.004  -0.386   0.019  -0.389   0.001   0.101   0.103  -0.111  -0.222  -0.207 
+ 10.524  -0.572   0.732  -0.097  -0.400  -0.035  -0.465  -0.298  -0.408  -0.136  -0.192  -0.061  -0.303 
+ 11.266   0.213   0.412  -0.025  -0.294   0.283  -0.122  -0.459  -0.564  -0.186  -0.025   0.105  -0.278 
+  9.157   0.726   0.627  -0.295  -0.121   0.447  -0.233  -0.524  -0.392  -0.191   0.156   0.105  -0.231 
+  6.434   0.720   0.336   0.106  -0.006   0.238   0.135  -0.260  -0.386  -0.152  -0.017  -0.309  -0.144 
+  6.051   0.785   0.664  -0.136   0.037   0.237   0.254  -0.086  -0.301  -0.266  -0.192  -0.056  -0.064 
+  6.050   0.887   0.462  -0.062   0.040   0.175   0.093  -0.152  -0.243  -0.123  -0.114  -0.188  -0.022 
+  6.164   0.823   0.379   0.182  -0.145   0.078   0.187  -0.068  -0.285  -0.208  -0.038   0.029  -0.043 
+  5.469   0.534   0.401   0.226   0.051  -0.046   0.162  -0.006  -0.075  -0.052  -0.028  -0.033  -0.238 
+  5.074   0.556   0.376   0.046   0.158   0.047  -0.004  -0.027   0.017   0.032  -0.190  -0.022  -0.100 
+  4.539   0.494   0.180   0.202   0.401   0.214   0.162   0.032  -0.202   0.071  -0.093  -0.197  -0.121 
+ 10.276   0.467   0.554   0.124   0.064  -0.047  -0.368  -0.210  -0.319  -0.292  -0.068  -0.199  -0.120 
+ 12.053   1.118   0.729  -0.031  -0.135  -0.132  -0.425  -0.125  -0.280  -0.445  -0.165  -0.324  -0.133 
+ 10.755   0.964   0.814   0.002  -0.114   0.038  -0.452  -0.183  -0.157  -0.180  -0.036  -0.247  -0.166 
+  9.269   0.534   0.794   0.051  -0.157  -0.070  -0.297  -0.075  -0.193   0.035  -0.075  -0.267  -0.163 
+  9.027   0.718   1.088  -0.635  -0.600  -0.327  -0.417  -0.149  -0.290  -0.044  -0.455  -0.119  -0.294 
+  9.908   0.498   1.127  -0.482  -0.764  -0.179  -0.511  -0.154  -0.162  -0.009  -0.539  -0.081  -0.290 
+ 10.238   0.366   1.118  -0.596  -0.993  -0.166  -0.173  -0.090  -0.190  -0.336  -0.318  -0.226  -0.255 
+ 11.283   0.273   0.361  -0.246  -0.890   0.013  -0.252  -0.312  -0.016  -0.527  -0.438  -0.235  -0.210 
+ 11.694   0.505  -0.099  -0.062  -0.513   0.253  -0.164  -0.805  -0.065  -0.300  -0.373  -0.108  -0.152 
+ 12.162   0.508  -0.559   0.618  -0.262  -0.063  -0.458  -0.621  -0.122  -0.209  -0.283  -0.175  -0.131 
+ 12.322   0.110  -0.323   0.986  -0.300  -0.401  -0.506  -0.253  -0.359  -0.183  -0.378  -0.150  -0.093 
+ 11.821  -0.130   0.066   0.948  -0.215  -0.585  -0.191  -0.215  -0.641   0.089  -0.545  -0.045  -0.343 
+ 11.531  -0.433   0.411   0.730  -0.096  -0.308  -0.314  -0.184  -0.572   0.110  -0.434  -0.153  -0.307 
+ 11.045  -0.317   0.268   1.031  -0.379  -0.165  -0.225  -0.181  -0.524  -0.013  -0.268  -0.205  -0.285 
+ 10.828  -0.354   0.408   0.862  -0.192  -0.231  -0.093  -0.199  -0.678   0.039  -0.292  -0.150  -0.137 
+ 11.216  -0.641   0.436   0.851  -0.187  -0.331  -0.204   0.011  -0.647   0.124  -0.370  -0.149  -0.149 
+ 10.826  -0.469  -0.028   1.059  -0.052  -0.453  -0.203   0.095  -0.812   0.265  -0.286  -0.164  -0.239 
+  8.784   0.009  -0.034   0.785   0.058  -0.380  -0.058   0.471  -0.757   0.076  -0.422  -0.244  -0.286 
+  5.963   0.733   0.300   0.372  -0.092   0.007   0.270   0.178  -0.362  -0.028  -0.261  -0.158  -0.061 
+  5.738   0.665   0.154   0.548  -0.165  -0.282   0.264   0.051  -0.351   0.150  -0.075  -0.241  -0.115 
+  5.155   0.515   0.149   0.513   0.119  -0.169   0.127   0.015  -0.427   0.147  -0.155  -0.032  -0.036 
+  4.762   0.333  -0.044   0.370   0.032  -0.134  -0.022  -0.104  -0.431   0.006  -0.156  -0.016  -0.075 
+  4.047   0.280  -0.224   0.198   0.079  -0.080   0.045  -0.129  -0.389   0.111   0.018   0.139  -0.100 
+  7.081  -0.576   0.020   0.162   0.043   0.016  -0.075  -0.043  -0.125  -0.155  -0.077  -0.020  -0.109 
+ 12.746   0.859   0.178  -0.052  -0.231  -0.334  -0.342  -0.081   0.029  -0.159  -0.244  -0.188  -0.359 
+ 13.084   1.135   0.200   0.131  -0.217  -0.278  -0.353  -0.145   0.036  -0.219  -0.278  -0.134  -0.308 
+ 11.496   0.753   0.743   0.216  -0.239  -0.196  -0.200  -0.010  -0.037  -0.221  -0.308  -0.064  -0.323 
+ 10.008   0.035   0.665   0.417   0.013  -0.056   0.005  -0.009  -0.016  -0.181  -0.120   0.008  -0.247 
+  8.808  -0.439   0.498   0.176  -0.089   0.082  -0.025   0.078  -0.085  -0.172  -0.152  -0.061  -0.176 
+  8.428  -0.821   0.418   0.260   0.136  -0.243  -0.241  -0.082   0.072  -0.106  -0.243  -0.081  -0.039 
+  9.209  -0.506   0.249   0.198   0.016  -0.129  -0.124   0.018  -0.017  -0.205  -0.270  -0.063  -0.027 
+ 10.400  -0.288   0.190   0.116  -0.021  -0.178  -0.101   0.026   0.105  -0.391  -0.311  -0.017  -0.093 
+  9.484  -0.437   0.323   0.080  -0.048  -0.216  -0.275  -0.126   0.042  -0.040  -0.339   0.066  -0.216 
+ 10.448  -0.062  -0.144   0.318  -0.426  -0.468  -0.456  -0.206  -0.103   0.135  -0.323   0.044  -0.161 
+ 12.103   0.316  -0.467   0.010  -0.456  -0.376  -0.722   0.168  -0.055   0.183  -0.457   0.244  -0.227 
+ 12.302   0.345  -0.354  -0.060  -0.546  -0.333  -0.993   0.365   0.052   0.110  -0.248   0.305  -0.346 
+ 12.171   0.213  -0.224   0.245  -0.843  -0.152  -0.769   0.293  -0.012   0.029  -0.123   0.239  -0.443 
+ 12.463   0.153  -0.114   0.031  -0.638  -0.180  -0.826   0.486  -0.263   0.093  -0.098   0.175  -0.507 
+ 12.624  -0.091  -0.024   0.251  -0.690  -0.265  -0.590   0.355  -0.360   0.178  -0.012  -0.043  -0.395 
+ 12.333  -0.227   0.226   0.267  -0.818  -0.187  -0.408   0.130  -0.272   0.179   0.001  -0.148  -0.298 
+ 11.705  -0.261   0.303   0.292  -0.833  -0.188  -0.204  -0.086  -0.154   0.248  -0.138  -0.160  -0.078 
+ 11.118  -0.111   0.371  -0.039  -0.293  -0.367  -0.218  -0.003  -0.074   0.009  -0.148  -0.212   0.006 
+ 10.722   0.217   0.325  -0.165   0.074  -0.558  -0.220   0.149  -0.223   0.021  -0.144  -0.284   0.063 
+ 10.647   0.373   0.283  -0.221   0.109  -0.580  -0.249   0.255  -0.404   0.151  -0.197  -0.301   0.048 
+ 10.433   0.377   0.316  -0.224   0.199  -0.615  -0.175   0.251  -0.488   0.159  -0.278  -0.298   0.085 
+  9.859   0.383   0.414  -0.086  -0.059  -0.736   0.149   0.112  -0.425   0.122  -0.242  -0.379   0.124 
+  9.427   0.273   0.409   0.131   0.013  -0.902   0.083   0.125  -0.332  -0.018  -0.245  -0.341   0.142 
+  9.540   0.341  -0.050   0.413  -0.085  -0.704  -0.223   0.135  -0.145   0.121  -0.141  -0.366   0.116 
+ 10.135   0.278  -0.321   0.186   0.259  -0.530  -0.453  -0.233  -0.131   0.123  -0.229  -0.292   0.062 
+ 10.324  -0.096  -0.075  -0.035   0.194  -0.613  -0.414  -0.152   0.116  -0.027  -0.291  -0.150   0.023 
+  9.649  -0.747   0.310  -0.057   0.057  -0.520  -0.214  -0.035   0.078  -0.173  -0.209  -0.117   0.068 
+  9.240  -1.212   0.326  -0.012   0.140  -0.281  -0.289  -0.217  -0.069  -0.152  -0.163  -0.010   0.095 
+  9.496  -1.172   0.139  -0.444   0.186  -0.249  -0.159  -0.078  -0.082  -0.135  -0.162  -0.025  -0.117 
+  9.556  -1.478   0.157  -0.400   0.146  -0.205  -0.130  -0.058  -0.048  -0.009  -0.119  -0.106  -0.163 
+  9.990  -1.557  -0.026  -0.462   0.158  -0.261  -0.072  -0.059   0.008  -0.022  -0.088  -0.075  -0.048 
+ 10.594  -1.248   0.211  -0.078   0.219  -0.278  -0.309  -0.172   0.069  -0.087  -0.174  -0.040  -0.102 
+ 11.538  -0.551   0.297  -0.116  -0.043  -0.543  -0.367  -0.375  -0.166   0.095  -0.256  -0.073  -0.184 
+ 11.986   0.391  -0.068  -0.142  -0.464  -0.604  -0.355  -0.441   0.042   0.014  -0.411   0.207  -0.073 
+ 12.330   0.761  -0.569  -0.187  -0.397  -0.570  -0.402  -0.366   0.120   0.141  -0.384   0.225  -0.093 
+ 13.091   0.407  -0.744  -0.191  -0.431  -0.481  -0.474  -0.060   0.120   0.032  -0.275   0.038  -0.074 
+ 13.413   0.176  -0.763  -0.132  -0.446  -0.616  -0.523   0.141   0.105   0.017  -0.335   0.142  -0.126 
+ 13.039   0.157  -0.556  -0.202  -0.576  -0.568  -0.547   0.293  -0.001   0.162  -0.467   0.192  -0.248 
+ 13.351   0.295  -0.704  -0.402  -0.540  -0.307  -0.770   0.230   0.172   0.049  -0.410   0.078  -0.239 
+ 13.396   0.339  -0.838  -0.447  -0.428  -0.435  -0.661   0.326   0.040  -0.003  -0.263  -0.078  -0.150 
+ 13.724   0.042  -0.914  -0.267  -0.546  -0.465  -0.467   0.256   0.034   0.123  -0.404  -0.082  -0.126 
+ 13.189   0.325  -0.897  -0.444  -0.534  -0.302  -0.677   0.315  -0.066   0.282  -0.455  -0.090  -0.144 
+ 13.655   0.112  -1.024  -0.300  -0.543  -0.496  -0.469   0.269   0.022   0.197  -0.441  -0.135  -0.149 
+ 13.423   0.236  -0.982  -0.324  -0.603  -0.398  -0.494   0.285  -0.081   0.258  -0.400  -0.208  -0.139 
+ 13.768   0.203  -0.996  -0.362  -0.539  -0.373  -0.511   0.312  -0.198   0.320  -0.419  -0.250  -0.091 
+ 13.621   0.176  -1.005  -0.352  -0.591  -0.266  -0.589   0.321  -0.135   0.230  -0.370  -0.255  -0.018 
+ 13.281   0.376  -1.096  -0.449  -0.485  -0.294  -0.563   0.361  -0.139   0.232  -0.427  -0.221  -0.039 
+ 13.165   0.340  -0.983  -0.650  -0.425  -0.347  -0.428   0.283  -0.140   0.310  -0.414  -0.397  -0.021 
+ 13.358   0.425  -1.169  -0.586  -0.385  -0.272  -0.559   0.310  -0.170   0.383  -0.438  -0.456   0.007 
+ 13.367   0.559  -1.216  -0.662  -0.340  -0.111  -0.589   0.176  -0.202   0.449  -0.418  -0.447  -0.027 
+ 13.318   0.666  -1.374  -0.534  -0.411  -0.252  -0.380  -0.004  -0.099   0.347  -0.300  -0.384  -0.152 
+ 12.813   0.700  -1.052  -0.815  -0.430  -0.132  -0.439   0.045  -0.198   0.412  -0.236  -0.459  -0.115 
+ 12.625   0.686  -0.900  -0.919  -0.477  -0.067  -0.477   0.032  -0.279   0.526  -0.203  -0.417  -0.182 
+ 12.847   0.711  -0.804  -0.822  -0.597  -0.044  -0.482  -0.009  -0.378   0.497  -0.083  -0.340  -0.228 
+ 12.497   0.903  -0.705  -0.969  -0.413  -0.076  -0.555   0.042  -0.385   0.323   0.051  -0.299  -0.216 
+ 12.039   0.854  -0.524  -0.958  -0.479  -0.116  -0.374  -0.124  -0.400   0.295   0.110  -0.209  -0.283 
+ 11.924   0.804  -0.554  -0.804  -0.570  -0.161  -0.393  -0.189  -0.455   0.345   0.177  -0.199  -0.289 
+ 12.189   0.725  -0.612  -0.558  -0.653  -0.119  -0.448  -0.213  -0.508   0.341   0.141  -0.198  -0.213 
+ 12.057   0.712  -0.525  -0.732  -0.444  -0.352  -0.404  -0.503  -0.306   0.176   0.059  -0.151  -0.173 
+ 10.171   0.700  -0.297  -0.767  -0.296  -0.363  -0.389  -0.673  -0.178   0.233   0.220  -0.073  -0.086 
+  9.988   0.782  -0.153  -0.887   0.001  -0.299  -0.486  -0.721  -0.130   0.015   0.031  -0.075  -0.110 
+  6.992   0.461  -0.113  -0.510  -0.129  -0.539  -0.448  -0.699   0.005   0.504   0.169  -0.077  -0.116 
+  6.315   0.546  -0.368  -0.298  -0.150  -0.403  -0.409  -0.252   0.012   0.386  -0.013  -0.124  -0.180 
+  5.776   0.807  -0.357  -0.338  -0.318  -0.325  -0.289  -0.138   0.030   0.370   0.056  -0.073  -0.100 
+  5.222   0.621  -0.340  -0.414  -0.371  -0.346  -0.387  -0.097   0.132   0.280   0.053  -0.032  -0.090 
+  4.791   0.630  -0.185  -0.443  -0.267  -0.272  -0.447   0.051   0.175   0.327   0.013  -0.013  -0.162 
+  4.421   0.552  -0.095  -0.177  -0.390  -0.494  -0.508  -0.113  -0.012   0.300   0.034  -0.063  -0.164 
+  4.441   0.655  -0.277  -0.326  -0.165  -0.205  -0.264   0.022   0.183   0.212  -0.036   0.051  -0.095 
+  4.638   0.737  -0.133  -0.261  -0.173  -0.166  -0.313  -0.223  -0.007   0.290   0.049   0.017  -0.267 
+  4.348   0.400  -0.367  -0.215  -0.119  -0.078  -0.028  -0.239   0.054   0.264  -0.001   0.114  -0.334 
+  8.495  -0.408  -0.232  -0.463  -0.183  -0.266  -0.367  -0.173  -0.056  -0.043   0.007  -0.063  -0.169 
+  8.792  -0.352  -0.020  -0.406  -0.044  -0.277  -0.399  -0.203   0.011  -0.039   0.027  -0.079  -0.227 
+  7.791  -1.155   0.153  -0.323   0.111  -0.212  -0.204  -0.187  -0.104   0.004   0.054  -0.220  -0.049 
+  8.919  -1.668  -0.173  -0.371   0.294  -0.135   0.058  -0.057  -0.065  -0.152  -0.085  -0.060   0.024 
+  9.737  -1.548  -0.259  -0.314   0.134  -0.217  -0.097  -0.043   0.050   0.052  -0.010  -0.010   0.045 
+  9.999  -1.381  -0.077  -0.300   0.105  -0.239  -0.239  -0.249  -0.081  -0.157  -0.082  -0.013   0.001 
+ 10.140  -1.330  -0.040  -0.276   0.215  -0.187   0.005  -0.121  -0.051  -0.158  -0.205  -0.123  -0.107 
+ 10.196  -1.112   0.101  -0.461   0.097  -0.296  -0.179   0.055  -0.092  -0.099  -0.151   0.010  -0.148 
+ 10.168  -1.238  -0.022  -0.379   0.018  -0.289  -0.240  -0.017   0.136   0.052  -0.185  -0.005   0.035 
+ 10.146  -1.245  -0.081  -0.444  -0.043  -0.333  -0.193  -0.072   0.071   0.135  -0.335   0.073  -0.119 
+ 10.340  -0.274   0.432  -0.255  -0.172  -0.511  -0.522  -0.462   0.008   0.096  -0.384  -0.085  -0.072 
+ 10.970   0.451   0.198  -0.406  -0.322  -0.201  -0.567  -0.776   0.116  -0.015  -0.211   0.076  -0.042 
+ 11.531   0.470   0.143  -0.499  -0.522   0.078  -0.762  -0.785   0.044   0.269  -0.403   0.188  -0.140 
+ 12.201   0.332   0.089  -0.435  -0.484  -0.186  -0.664  -0.623   0.031   0.353  -0.494   0.127  -0.114 
+ 12.476   0.161  -0.103  -0.415  -0.413  -0.304  -0.631  -0.561   0.161   0.241  -0.415   0.073  -0.144 
+ 12.607  -0.020  -0.215  -0.374  -0.466  -0.459  -0.580  -0.463   0.233   0.218  -0.353   0.064  -0.073 
+ 12.561   0.043  -0.230  -0.323  -0.526  -0.422  -0.610  -0.383   0.184   0.291  -0.365   0.034  -0.069 
+ 12.728   0.073  -0.272  -0.280  -0.616  -0.315  -0.568  -0.354   0.165   0.273  -0.336  -0.145  -0.025 
+ 12.856   0.065  -0.552  -0.298  -0.539  -0.266  -0.536  -0.380   0.211   0.222  -0.323  -0.150  -0.032 
+ 11.921   0.387  -0.450  -0.515  -0.578  -0.097  -0.704  -0.318   0.234   0.291  -0.278  -0.107  -0.026 
+ 12.792   0.151  -0.622  -0.419  -0.545  -0.272  -0.557  -0.306   0.196   0.253  -0.239  -0.210  -0.008 
+ 12.716   0.317  -0.532  -0.466  -0.541  -0.253  -0.487  -0.370   0.188   0.258  -0.288  -0.289   0.034 
+ 12.149   0.668  -0.648  -0.473  -0.536  -0.135  -0.586  -0.268   0.106   0.227  -0.242  -0.256  -0.079 
+ 11.866   0.728  -0.683  -0.548  -0.503  -0.107  -0.589  -0.396   0.189   0.293  -0.250  -0.261  -0.015 
+ 12.407   0.554  -0.817  -0.422  -0.481  -0.230  -0.510  -0.441   0.218   0.252  -0.179  -0.274  -0.018 
+ 12.632   0.489  -0.752  -0.401  -0.521  -0.179  -0.514  -0.343   0.138   0.145  -0.134  -0.276  -0.032 
+ 12.511   0.487  -0.815  -0.281  -0.606  -0.208  -0.307  -0.384   0.113   0.160  -0.211  -0.211  -0.092 
+ 12.283   0.408  -0.962  -0.280  -0.614  -0.201  -0.183  -0.423   0.244   0.090  -0.118  -0.252  -0.063 
+ 12.434   0.179  -0.915  -0.287  -0.582  -0.218  -0.095  -0.432   0.306   0.039  -0.111  -0.257  -0.219 
+ 11.978   0.170  -0.742  -0.240  -0.392  -0.230  -0.193  -0.344   0.371   0.065  -0.024  -0.141  -0.283 
+ 11.484   0.325  -0.708  -0.264  -0.293  -0.123  -0.118  -0.552   0.349  -0.101   0.039  -0.145  -0.444 
+ 10.477   0.527  -0.594  -0.406  -0.162  -0.015  -0.099  -0.486   0.314  -0.141   0.054  -0.272  -0.495 
+  9.433   0.516  -0.431  -0.355  -0.171   0.039   0.003  -0.409   0.322  -0.157   0.139  -0.233  -0.464 
+  8.295   0.284  -0.251  -0.217  -0.053   0.057  -0.003  -0.274   0.228  -0.231  -0.096  -0.116  -0.341 
+  7.662  -0.093  -0.424  -0.495  -0.033   0.293   0.080   0.052   0.168  -0.030  -0.126  -0.254  -0.261 
+  6.827  -0.221  -0.097  -0.443  -0.020   0.128  -0.163  -0.042   0.295   0.044  -0.126  -0.156  -0.279 
+  6.110  -0.240  -0.221  -0.551  -0.122  -0.147  -0.134  -0.036  -0.089   0.083  -0.017  -0.101  -0.054 
+  5.627  -0.158   0.062  -0.292  -0.274  -0.248  -0.110  -0.085  -0.070   0.138  -0.142  -0.142   0.001 
+  5.422  -0.011  -0.230  -0.057  -0.034  -0.206  -0.334  -0.201  -0.076   0.134  -0.057   0.021  -0.142 
+  5.816  -0.254  -0.033  -0.125   0.214  -0.338  -0.393  -0.086  -0.003   0.280  -0.092  -0.022  -0.048 
+  5.547  -0.499  -0.255  -0.149   0.317  -0.142  -0.422  -0.142   0.172   0.261  -0.256  -0.041  -0.015 
+  5.212  -0.378  -0.276  -0.181   0.362  -0.120  -0.322   0.034   0.015   0.163  -0.161  -0.016   0.040 
+  4.111  -0.041  -0.299  -0.006   0.053  -0.120  -0.095  -0.053  -0.049   0.212   0.019  -0.117  -0.017 
+  5.810  -0.393  -0.209  -0.020   0.021  -0.083  -0.298  -0.030   0.026  -0.022  -0.111  -0.078   0.066 
+  9.541  -0.630  -0.360  -0.114   0.029  -0.078  -0.456  -0.104   0.000  -0.133  -0.177  -0.118  -0.006 
+  7.334  -0.596  -0.249   0.043   0.155  -0.060  -0.468  -0.052   0.069  -0.164  -0.218  -0.130  -0.024 
+  7.253  -0.650  -0.237   0.217   0.228  -0.023  -0.260  -0.053  -0.122  -0.281  -0.504  -0.177   0.040 
+  7.697  -0.664  -0.393  -0.043   0.051  -0.050  -0.333  -0.063   0.047  -0.123  -0.203   0.047  -0.150 
+  7.961  -0.806  -0.496  -0.049   0.092  -0.167  -0.301  -0.128  -0.185  -0.156  -0.116   0.053  -0.069 
+  8.374  -0.976  -0.516   0.073   0.254  -0.130  -0.248  -0.023  -0.070   0.023  -0.331  -0.177  -0.110 
+  8.590  -1.097  -0.584  -0.036   0.015  -0.079  -0.210   0.103  -0.114  -0.103  -0.169   0.186   0.032 
+  8.835  -1.034  -0.647   0.029  -0.002  -0.219  -0.405  -0.044  -0.263  -0.254  -0.233   0.166  -0.060 
+  8.841  -1.055  -0.471   0.006   0.041  -0.338  -0.321  -0.041  -0.163  -0.176  -0.197   0.158  -0.083 
+  8.683  -1.107  -0.513   0.265   0.128  -0.323  -0.381  -0.077  -0.042  -0.248  -0.316   0.073  -0.160 
+  9.162  -0.951  -0.391  -0.032  -0.036  -0.307  -0.297   0.053  -0.058  -0.304  -0.118   0.112  -0.113 
+  9.295  -1.180  -0.563   0.028   0.015  -0.171  -0.211   0.048   0.004  -0.307  -0.172   0.157   0.051 
+  9.326  -1.116  -0.531  -0.072   0.041  -0.194  -0.256  -0.034  -0.010  -0.158  -0.126   0.243   0.083 
+  9.172  -0.938  -0.468  -0.033   0.040  -0.270  -0.393  -0.098  -0.101   0.074  -0.047   0.205  -0.155 
+  9.072  -0.904  -0.519  -0.102  -0.095  -0.228  -0.230   0.048  -0.069   0.127  -0.173   0.170  -0.186 
+  9.378  -0.827  -0.479  -0.109  -0.282  -0.355  -0.562  -0.026  -0.028   0.029  -0.129   0.169  -0.080 
+  9.535  -0.764  -0.250   0.001  -0.120  -0.466  -0.477  -0.114  -0.018  -0.119  -0.344   0.006  -0.109 
+  9.579  -0.828  -0.473   0.123  -0.232  -0.532  -0.466  -0.041   0.124  -0.065  -0.356  -0.005  -0.099 
+  9.490  -1.082  -0.488  -0.084  -0.379  -0.499  -0.553  -0.027  -0.032  -0.101  -0.253   0.044   0.135 
+  9.561  -0.996  -0.384  -0.242  -0.243  -0.304  -0.410   0.135  -0.043  -0.095  -0.202  -0.058  -0.033 
+  9.453  -0.877  -0.283  -0.283  -0.210  -0.222  -0.450   0.121   0.130   0.110  -0.209  -0.075  -0.048 
+  9.609  -0.975  -0.374  -0.134  -0.127  -0.392  -0.533  -0.019   0.156  -0.177  -0.219   0.065  -0.069 
+  9.723  -0.822  -0.455  -0.270  -0.069  -0.395  -0.483   0.001   0.046  -0.147  -0.186   0.111  -0.221 
+ 10.284  -0.683  -0.321  -0.210  -0.161  -0.222  -0.432   0.232   0.040   0.113  -0.260   0.043  -0.058 
+ 10.203  -0.916  -0.387  -0.091  -0.126  -0.360  -0.407   0.281   0.027   0.058  -0.231  -0.053  -0.114 
+  9.985  -1.038  -0.377  -0.129  -0.033  -0.657  -0.718   0.077  -0.130  -0.128  -0.247   0.107  -0.243 
+  9.770  -1.231  -0.301  -0.128  -0.145  -0.518  -0.582   0.095   0.006  -0.014  -0.210   0.238  -0.061 
+  9.511  -0.979  -0.374  -0.002  -0.115  -0.564  -0.602  -0.005  -0.008   0.043  -0.093   0.263  -0.039 
+  9.593  -0.623  -0.337  -0.031  -0.081  -0.494  -0.626   0.041  -0.238  -0.060  -0.089   0.312  -0.058 
+  9.297  -0.720  -0.487  -0.061   0.037  -0.570  -0.642  -0.113  -0.142  -0.028   0.012   0.484  -0.006 
+  9.218  -0.921  -0.219  -0.020   0.081  -0.624  -0.673  -0.192  -0.084  -0.044  -0.192   0.371   0.047 
+  9.260  -0.802  -0.081   0.128   0.106  -0.709  -0.716  -0.071  -0.163  -0.019  -0.086   0.264   0.044 
+  9.455  -0.713  -0.122  -0.066  -0.043  -0.552  -0.573  -0.052  -0.203  -0.012  -0.232   0.253   0.163 
+  9.139  -0.735  -0.013  -0.021   0.103  -0.577  -0.704   0.042  -0.280  -0.175  -0.208   0.248   0.108 
+  8.994  -0.593  -0.304  -0.018   0.099  -0.317  -0.638   0.011  -0.308  -0.052  -0.284   0.138   0.071 
+  9.133  -0.489  -0.221  -0.095   0.111  -0.185  -0.616  -0.127  -0.079   0.075  -0.046   0.283  -0.033 
+  9.084  -0.515  -0.013   0.009   0.204  -0.121  -0.482  -0.140  -0.059  -0.064  -0.233   0.178  -0.055 
+  8.690  -0.621  -0.099  -0.071   0.277  -0.438  -0.710  -0.101  -0.194  -0.208  -0.107   0.189   0.087 
+  8.248  -0.635  -0.041   0.002   0.282  -0.507  -0.552  -0.187  -0.139  -0.042  -0.229   0.178  -0.044 
+  8.535  -0.543  -0.121   0.037   0.373  -0.423  -0.405  -0.004  -0.077  -0.271  -0.328   0.222  -0.006 
+  8.377  -0.448  -0.289   0.086   0.226  -0.247  -0.382   0.044   0.046  -0.129  -0.300   0.349  -0.035 
+  8.141  -0.339  -0.111   0.207   0.185  -0.123  -0.379   0.064   0.050  -0.025  -0.151   0.186  -0.179 
+  7.833  -0.391  -0.310   0.125   0.192  -0.114  -0.427  -0.157  -0.137  -0.177  -0.229   0.156   0.078 
+  7.304  -0.148  -0.273   0.290   0.280  -0.265  -0.362  -0.071  -0.059  -0.379  -0.241   0.147  -0.011 
+  6.742  -0.395  -0.271   0.034   0.441  -0.314  -0.401   0.128  -0.084  -0.323  -0.113   0.296   0.149 
+  9.175   1.149   0.010  -0.013  -0.204  -0.603  -0.192  -0.115  -0.233  -0.080  -0.227  -0.081  -0.104 
+ 10.261   1.460   0.019   0.099  -0.351  -0.678  -0.155  -0.265  -0.199  -0.102  -0.201  -0.110  -0.150 
+  7.873   1.307   0.317  -0.192  -0.560  -0.777  -0.359  -0.221  -0.126  -0.182  -0.269   0.075   0.089 
+  7.487   0.991   0.516  -0.007  -0.519  -0.459  -0.285   0.090   0.081  -0.086  -0.046  -0.035  -0.173 
+  6.983   0.851   0.583   0.062  -0.403  -0.342  -0.143  -0.001  -0.153  -0.250  -0.046   0.045  -0.146 
+  5.940   0.403   0.401   0.134  -0.177  -0.386  -0.295  -0.091   0.064  -0.007  -0.012   0.021  -0.128 
+  5.425   0.529   0.151   0.013  -0.037  -0.057  -0.191   0.015  -0.176  -0.122  -0.073  -0.056  -0.165 
+  5.198   0.384  -0.058   0.189  -0.023  -0.023  -0.140   0.065   0.016  -0.019  -0.155  -0.179  -0.380 
+  5.444   0.462   0.107   0.210   0.071  -0.120  -0.148  -0.004  -0.249   0.044  -0.095  -0.031  -0.245 
+  5.287   0.234  -0.039   0.038  -0.036  -0.133  -0.110   0.120  -0.171  -0.113  -0.095   0.099  -0.222 
+  5.150   0.165  -0.011   0.144  -0.087  -0.225  -0.213   0.061  -0.179  -0.097  -0.034   0.098  -0.072 
+  5.108   0.282  -0.178  -0.016  -0.078  -0.142  -0.206   0.010  -0.070  -0.231  -0.082   0.052  -0.052 
+  5.607   0.665   0.029   0.033  -0.072  -0.321  -0.293  -0.038  -0.013  -0.085  -0.084  -0.007   0.094 
+  5.666   0.690   0.054   0.141  -0.186  -0.430  -0.359  -0.147  -0.043  -0.011  -0.198  -0.063  -0.121 
+  5.807   0.636  -0.022   0.070  -0.046  -0.282  -0.320  -0.032  -0.117  -0.031  -0.190   0.102  -0.068 
+  8.351   1.152   0.113  -0.340  -0.009  -0.069  -0.434  -0.210  -0.222   0.052  -0.233  -0.004  -0.014 
+  7.499   1.001   0.248   0.046  -0.062  -0.061  -0.195  -0.272  -0.128   0.106  -0.203  -0.137  -0.164 
+  6.323   0.163   0.143  -0.013  -0.303  -0.233  -0.333  -0.249  -0.151   0.007  -0.105  -0.186  -0.190 
+  7.391  -0.089   0.050  -0.026  -0.278  -0.270  -0.377  -0.246  -0.179  -0.088  -0.184  -0.181  -0.105 
+  8.004  -0.160   0.141   0.075  -0.234  -0.143  -0.342  -0.169  -0.137  -0.106  -0.140  -0.174  -0.071 
+  7.606  -0.028  -0.012  -0.021  -0.163  -0.282  -0.336  -0.208  -0.167   0.176  -0.036  -0.001  -0.054 
+  7.703   0.046   0.167  -0.041  -0.223  -0.333  -0.417  -0.426  -0.233  -0.220  -0.059   0.150  -0.086 
+  8.695   0.139   0.476   0.194  -0.258  -0.260  -0.438  -0.300  -0.249  -0.144  -0.123  -0.074  -0.080 
+  8.743  -0.197   0.318   0.069  -0.250   0.044  -0.369  -0.272  -0.050  -0.186  -0.178  -0.073  -0.211 
+  8.899   0.034   0.282   0.046  -0.034  -0.044  -0.388  -0.307   0.023  -0.029  -0.253  -0.238  -0.093 
+  8.409   0.427   0.018   0.004   0.081  -0.011  -0.434  -0.350  -0.024  -0.240  -0.366  -0.107  -0.014 
+  7.241   0.621  -0.077   0.004   0.114  -0.015  -0.285  -0.361  -0.223  -0.010  -0.412  -0.195  -0.069 
+  6.603   0.854   0.112   0.038   0.170   0.074   0.042  -0.129  -0.179  -0.112  -0.341  -0.337  -0.227 
+  5.100   0.059   0.099   0.213   0.235   0.006   0.032  -0.077  -0.029  -0.064  -0.185  -0.111  -0.121 
+  4.695  -0.182  -0.023   0.202   0.121   0.183  -0.170  -0.013  -0.189  -0.202  -0.034  -0.269  -0.094 
+  4.852  -0.044  -0.082   0.149  -0.045   0.055  -0.058   0.027  -0.126  -0.123  -0.096  -0.180  -0.014 
+  4.303  -0.028  -0.114   0.006   0.155  -0.025  -0.097   0.081  -0.197  -0.056  -0.132  -0.106  -0.040 
+  4.682   0.402  -0.027   0.295  -0.063  -0.012  -0.100   0.008  -0.102  -0.060  -0.124  -0.031  -0.046 
+  4.162   0.154  -0.040   0.350  -0.115   0.050  -0.032  -0.040  -0.081  -0.068  -0.299  -0.012  -0.024 
+  4.085   0.123   0.020   0.198   0.079   0.124   0.016  -0.011  -0.094  -0.107  -0.218   0.203   0.001 
+  3.821  -0.014   0.076   0.216   0.109   0.088  -0.050  -0.049   0.133   0.111  -0.073   0.151  -0.008 
+  3.943   0.154   0.038   0.076   0.039   0.046  -0.086   0.058  -0.091   0.068  -0.159  -0.103  -0.065 
+  4.167   0.314  -0.212  -0.128  -0.047   0.121  -0.133  -0.101   0.038   0.036  -0.059   0.034  -0.006 
+  4.210   0.143  -0.263   0.010  -0.058   0.113  -0.086  -0.027  -0.184  -0.042   0.029   0.088  -0.111 
+  4.469   0.328  -0.436  -0.114   0.100  -0.154  -0.252   0.069  -0.091  -0.123  -0.092   0.002  -0.126 
+  5.041   0.388  -0.290  -0.058   0.111  -0.196  -0.278   0.164  -0.019  -0.098  -0.141   0.015   0.036 
+  5.046   0.246  -0.467   0.029   0.251  -0.144  -0.425   0.077  -0.045  -0.020   0.023   0.118  -0.065 
+  5.099   0.134  -0.445  -0.037   0.166  -0.280  -0.314   0.020  -0.023  -0.093  -0.033   0.201   0.080 
+  5.749   0.141  -0.384  -0.027   0.024  -0.376  -0.331   0.246   0.070  -0.127  -0.092   0.085  -0.107 
+  6.032   0.122  -0.407   0.109   0.288  -0.304  -0.314   0.178  -0.029  -0.188  -0.103   0.044  -0.069 
+  6.141   0.009  -0.453   0.132   0.248  -0.326  -0.372   0.176   0.084  -0.168  -0.129   0.168  -0.095 
+  6.159  -0.117  -0.507  -0.032   0.095  -0.246  -0.398   0.218  -0.012  -0.173   0.004  -0.012  -0.010 
+  5.975  -0.116  -0.376   0.097   0.230  -0.468  -0.462   0.155   0.015  -0.284  -0.226   0.071   0.009 
+  6.053  -0.335  -0.604   0.064   0.324  -0.443  -0.484   0.117  -0.026  -0.189   0.164   0.209  -0.087 
+  5.741  -0.546  -0.497   0.152   0.238  -0.366  -0.331   0.038   0.036  -0.096   0.162   0.129  -0.009 
+  5.950  -0.562  -0.415   0.093   0.357  -0.190  -0.316   0.078  -0.041  -0.215   0.096   0.034  -0.080 
+  6.074  -0.476  -0.535   0.041   0.339  -0.278  -0.411   0.247   0.142  -0.327   0.076   0.247  -0.075 
+  6.162  -0.443  -0.647   0.088   0.158  -0.304  -0.295   0.198   0.055  -0.350   0.128   0.155  -0.050 
+  6.134  -0.475  -0.443   0.074   0.444  -0.330  -0.234   0.238  -0.005  -0.227   0.017   0.126  -0.116 
+  6.249  -0.550  -0.627   0.064   0.191  -0.079  -0.317   0.385   0.251  -0.088   0.048  -0.116  -0.143 
+  6.469  -0.362  -0.505  -0.014   0.075  -0.267  -0.354   0.355   0.191  -0.092   0.078  -0.004  -0.110 
+  6.169  -0.488  -0.611   0.072   0.238  -0.040  -0.287   0.019   0.154  -0.186  -0.134   0.017  -0.024 
+  6.466  -0.297  -0.433   0.221   0.322  -0.060  -0.248   0.301  -0.026  -0.255   0.027  -0.049  -0.151 
+  6.460  -0.318  -0.456   0.052   0.295  -0.197  -0.441   0.078   0.080  -0.236  -0.012  -0.012  -0.100 
+  6.250  -0.324  -0.312   0.134   0.166  -0.473  -0.353   0.145   0.175  -0.324  -0.042  -0.009   0.055 
+  6.036  -0.128  -0.318   0.399   0.231  -0.370  -0.332   0.120   0.088  -0.389  -0.148   0.133  -0.119 
+  6.330  -0.219  -0.435   0.322   0.254  -0.264  -0.425   0.147   0.021  -0.414  -0.164   0.109  -0.063 
+  6.285  -0.248  -0.407   0.202   0.183  -0.350  -0.501   0.250   0.239  -0.118  -0.122  -0.006  -0.207 
+  6.453  -0.117  -0.318   0.169   0.085  -0.348  -0.459   0.067   0.091  -0.229   0.012  -0.028   0.037 
+  6.643   0.380   0.059   0.507   0.439  -0.244  -0.678   0.051   0.015  -0.174   0.182   0.002  -0.118 
+  6.429   0.169   0.034   0.490   0.337  -0.084  -0.510   0.023   0.033   0.048   0.038   0.048  -0.048 
+  6.311  -0.106  -0.332   0.371   0.175  -0.428  -0.324   0.226   0.094  -0.352  -0.004   0.081  -0.168 
+  6.294  -0.103  -0.338   0.076   0.100  -0.447  -0.227   0.335   0.025  -0.400  -0.030   0.050  -0.017 
+  6.115  -0.218  -0.339   0.055  -0.022  -0.357  -0.267   0.178  -0.069  -0.344  -0.141  -0.069  -0.060 
+  5.909  -0.231  -0.508   0.064   0.209  -0.373  -0.408   0.241  -0.224  -0.380   0.109  -0.069  -0.031 
+  6.013  -0.145  -0.514  -0.002   0.191  -0.392  -0.496   0.185  -0.054  -0.246  -0.034   0.143  -0.011 
+  5.877  -0.085  -0.449   0.054   0.145  -0.275  -0.430  -0.032   0.038  -0.292  -0.097   0.203  -0.001 
+  5.761  -0.034  -0.385   0.050   0.008  -0.335  -0.455   0.082   0.029  -0.148  -0.017   0.053  -0.098 
+  5.503  -0.018  -0.311   0.135  -0.118  -0.291  -0.430   0.134   0.129  -0.205   0.011   0.075   0.026 
+  5.531  -0.044  -0.246  -0.032  -0.224  -0.153  -0.269   0.028  -0.090  -0.226  -0.221   0.076   0.125 
+  5.953   0.018  -0.278  -0.030  -0.121  -0.164  -0.413   0.108   0.141   0.031  -0.017   0.065  -0.106 
+  5.749   0.026  -0.178   0.095  -0.016  -0.073  -0.302   0.144   0.106  -0.122  -0.165  -0.041  -0.170 
+  5.495   0.016  -0.214   0.184  -0.000  -0.308  -0.578   0.076   0.160  -0.047  -0.036   0.091  -0.182 
+  5.193  -0.192  -0.242   0.338   0.234  -0.021  -0.369   0.071  -0.018  -0.352  -0.158   0.061   0.015 
+  5.064   0.059  -0.260   0.210   0.112  -0.029  -0.253   0.072  -0.085  -0.208  -0.119   0.134  -0.013 
+  4.935   0.344  -0.215   0.118   0.038  -0.053  -0.132   0.228   0.031  -0.045  -0.234   0.015  -0.247 
+  4.612   0.292  -0.229   0.129  -0.173  -0.011  -0.293   0.068   0.149  -0.083  -0.158  -0.017  -0.101 
+  5.049   0.382  -0.055   0.231  -0.022  -0.359  -0.401   0.011   0.122   0.082  -0.145  -0.015  -0.072 
+  4.969  -0.024  -0.167   0.040  -0.030  -0.281  -0.402   0.012  -0.050  -0.045  -0.139   0.115   0.167 
+  5.589   0.015   0.188   0.071  -0.098  -0.004  -0.212  -0.118  -0.179  -0.037  -0.211  -0.144  -0.011 
+  5.755  -0.441   0.071  -0.167  -0.237  -0.284  -0.350  -0.078   0.038  -0.148  -0.066   0.133   0.006 
+  5.719  -0.264   0.194   0.050  -0.273  -0.059  -0.308  -0.142  -0.199  -0.035   0.124   0.076  -0.030 
+  6.680  -0.359   0.050   0.013   0.011  -0.049  -0.257   0.028  -0.152  -0.078   0.018   0.226  -0.180 
+  7.556  -0.089   0.111  -0.167  -0.002  -0.026  -0.210   0.020  -0.106   0.001  -0.129  -0.055  -0.223 
+  6.739  -0.130   0.185  -0.082  -0.025  -0.161  -0.248  -0.147  -0.212   0.021  -0.236   0.150  -0.046 
+  6.005  -0.334   0.380   0.217  -0.127  -0.126  -0.388  -0.083  -0.183  -0.077  -0.036   0.072  -0.123 
+  5.653  -0.324   0.346   0.079  -0.029  -0.130  -0.212   0.049  -0.173  -0.167  -0.119  -0.025  -0.118 
+  6.120  -0.234   0.145  -0.180  -0.201  -0.270  -0.319  -0.099  -0.138  -0.063  -0.197   0.055  -0.033 
+  6.169  -0.192   0.091  -0.123  -0.179  -0.236  -0.275  -0.121  -0.071   0.004  -0.054   0.035  -0.139 
+  6.355  -0.209   0.499  -0.196  -0.009  -0.040  -0.188   0.059  -0.196  -0.148  -0.167   0.073  -0.291 
+  6.658  -0.406   0.140  -0.086   0.047  -0.096   0.016  -0.044  -0.239  -0.060  -0.221  -0.038  -0.147 
+  7.448  -0.124  -0.097  -0.195  -0.151  -0.202  -0.050  -0.273  -0.021  -0.048  -0.093  -0.152  -0.011 
+  6.769   0.362  -0.242  -0.543  -0.512  -0.242  -0.281  -0.189   0.008   0.118  -0.148  -0.061   0.029 
+  7.276   0.475  -0.265  -0.477  -0.312  -0.225  -0.544  -0.203   0.193   0.110  -0.404  -0.163   0.028 
+  7.891   0.329  -0.502  -0.264  -0.506  -0.518  -0.634  -0.417   0.185   0.204  -0.430  -0.129   0.089 
+  8.349   0.078  -0.539  -0.164  -0.505  -0.559  -0.606  -0.473   0.004   0.273   0.049  -0.115   0.000 
+  8.124   0.198  -0.457  -0.049  -0.355  -0.440  -0.539  -0.475  -0.185   0.210  -0.272  -0.054   0.032 
+  7.727   0.214  -0.163   0.004  -0.129  -0.522  -0.612  -0.418  -0.095   0.224  -0.527   0.075   0.179 
+  7.139   0.283  -0.159   0.054  -0.223  -0.558  -0.435  -0.147  -0.063   0.167  -0.413   0.017   0.119 
+  6.604   0.257  -0.015   0.012  -0.116  -0.333  -0.286  -0.011   0.003   0.068  -0.329  -0.122   0.014 
+  6.073  -0.016  -0.215   0.010   0.022  -0.288  -0.222  -0.012   0.158   0.343  -0.153  -0.095   0.023 
+  5.967   0.206  -0.120   0.042  -0.135  -0.316  -0.145  -0.031   0.040   0.240  -0.218  -0.209  -0.083 
+  6.074   0.189  -0.033   0.094  -0.308  -0.333  -0.146  -0.124   0.016   0.158  -0.125  -0.163  -0.081 
+  5.995  -0.015  -0.066   0.140  -0.184  -0.253  -0.059  -0.212  -0.066   0.094  -0.258   0.091   0.068 
+  6.008  -0.107  -0.144   0.207  -0.460  -0.421  -0.202  -0.313   0.028  -0.034  -0.441   0.057  -0.085 
+  5.792  -0.389  -0.020   0.186  -0.308  -0.048   0.045  -0.183   0.173   0.110  -0.202  -0.072  -0.100 
+  6.013  -0.296   0.107   0.163  -0.429  -0.465  -0.039  -0.304  -0.101   0.077   0.049   0.176   0.028 
+  6.750  -0.143   0.217   0.383  -0.625  -0.480  -0.139  -0.410  -0.037   0.092  -0.060   0.187   0.013 
+  7.318  -0.196   0.216   0.285  -0.786  -0.595  -0.172  -0.378  -0.190  -0.026  -0.227   0.201   0.018 
+  7.532  -0.614  -0.098   0.322  -0.854  -0.612  -0.312  -0.424  -0.256  -0.020  -0.016   0.288   0.023 
+  7.845  -0.538   0.030   0.587  -0.772  -0.600  -0.242  -0.531  -0.411  -0.086  -0.014   0.253   0.006 
+  7.938  -0.581   0.102   0.805  -0.580  -0.527  -0.229  -0.644  -0.472  -0.082  -0.051   0.279   0.031 
+  8.178  -0.606   0.008   0.655  -0.422  -0.494  -0.400  -0.749  -0.413   0.056  -0.174   0.223  -0.063 
+  7.884  -0.511   0.169   0.587  -0.573  -0.428  -0.454  -0.671  -0.478  -0.079  -0.211   0.257  -0.117 
+  7.474  -0.264   0.234   0.523  -0.716  -0.582  -0.216  -0.580  -0.416  -0.100  -0.039   0.183  -0.140 
+  7.384   0.176   0.553   0.674  -0.365  -0.432  -0.053  -0.437  -0.370  -0.141  -0.189   0.063  -0.206 
+  7.310   0.548   0.643   0.614  -0.160  -0.292  -0.189  -0.318  -0.230  -0.058  -0.262   0.071  -0.290 
+  6.639   0.099   0.666   0.666  -0.131  -0.231  -0.028  -0.173  -0.403  -0.056  -0.170   0.007  -0.235 
+  6.496   0.008   0.389   0.472  -0.220  -0.264   0.030  -0.153  -0.461  -0.307  -0.280   0.045  -0.223 
+  6.371   0.164   0.295   0.353  -0.160  -0.081   0.146  -0.125  -0.215  -0.185  -0.238  -0.068  -0.180 
+  7.152   0.146   0.252   0.137  -0.213  -0.149  -0.153  -0.237  -0.184  -0.118  -0.141  -0.113  -0.132 
+  8.849   1.254   0.516  -0.001  -0.221  -0.196  -0.184  -0.187  -0.353  -0.116  -0.264  -0.215  -0.170 
+  7.631   0.821   0.593   0.202  -0.142  -0.128  -0.062  -0.129  -0.273  -0.261  -0.182  -0.170  -0.309 
+  7.335   0.434   0.470  -0.167  -0.382  -0.196  -0.099  -0.101  -0.069  -0.155  -0.244  -0.050  -0.249 
+  7.159  -0.082   0.120  -0.067  -0.139  -0.080  -0.100  -0.037  -0.043  -0.100  -0.261  -0.079  -0.120 
+  7.358   0.346   0.154   0.294  -0.142  -0.198  -0.354  -0.235  -0.043  -0.160  -0.247   0.260  -0.181 
+  7.786   0.489   0.197   0.373  -0.273  -0.245  -0.413  -0.395  -0.093  -0.269  -0.476   0.239  -0.074 
+  8.124   0.657   0.053   0.182  -0.101  -0.144  -0.604  -0.349  -0.103  -0.087  -0.402   0.179   0.048 
+  8.142   0.557   0.117   0.022  -0.123  -0.108  -0.511  -0.369  -0.149  -0.203  -0.501   0.018   0.055 
+  7.978   0.857   0.174   0.044   0.011  -0.020  -0.426  -0.398  -0.100  -0.219  -0.424   0.022  -0.113 
+  7.123   0.750   0.028   0.164  -0.100  -0.237  -0.425  -0.224  -0.009  -0.243  -0.340   0.042  -0.096 
+  6.849   0.573   0.125   0.174  -0.124  -0.172  -0.340  -0.168  -0.129  -0.008  -0.247   0.019  -0.140 
+  6.589   0.787   0.105   0.064  -0.072  -0.065  -0.191  -0.215  -0.192  -0.045  -0.273  -0.180  -0.183 
+  6.654   0.810  -0.069   0.067   0.003   0.027   0.011  -0.097  -0.136  -0.116  -0.276  -0.090  -0.101 
+  6.637   0.930   0.362   0.251  -0.021  -0.222  -0.156  -0.114  -0.047  -0.278  -0.444  -0.186  -0.225 
+  6.517   1.117   0.420   0.334  -0.039  -0.228   0.013  -0.112  -0.093  -0.200  -0.297  -0.167  -0.158 
+  6.748   0.609  -0.068   0.268  -0.253  -0.227  -0.288  -0.243  -0.081  -0.142  -0.097   0.141  -0.167 
+  7.886   0.416  -0.049   0.299  -0.421  -0.279  -0.372  -0.289  -0.212  -0.214  -0.045   0.437  -0.170 
+  8.335   0.110  -0.182   0.307  -0.742  -0.458  -0.413  -0.034  -0.005  -0.034  -0.125   0.604  -0.167 
+  8.691   0.019  -0.237   0.421  -0.545  -0.650  -0.495  -0.236  -0.155  -0.147  -0.074   0.583  -0.213 
+  8.809  -0.088  -0.275   0.464  -0.468  -0.808  -0.599  -0.067  -0.216  -0.193   0.043   0.622  -0.082 
+  8.895  -0.177  -0.156   0.433  -0.612  -0.690  -0.625  -0.290  -0.141  -0.253   0.040   0.596  -0.233 
+  8.790  -0.136  -0.126   0.228  -0.688  -0.632  -0.453  -0.121  -0.003  -0.157   0.020   0.522  -0.185 
+  8.496  -0.021  -0.104   0.055  -0.457  -0.652  -0.333  -0.065  -0.048  -0.103   0.078   0.351  -0.380 
+  8.077   0.018   0.112   0.222  -0.378  -0.699  -0.379  -0.033   0.005  -0.082   0.061   0.386  -0.154 
+  8.301   0.518   0.008   0.083  -0.343  -0.351  -0.300  -0.178  -0.115  -0.122   0.011   0.257  -0.286 
+  7.805   0.555   0.196   0.107  -0.234  -0.464  -0.424  -0.211  -0.165  -0.261  -0.111   0.304  -0.189 
+  7.555   0.398   0.280   0.134  -0.095  -0.276  -0.140  -0.051  -0.277  -0.286  -0.306   0.089  -0.192 
+  7.289   0.411   0.370   0.300  -0.295  -0.448  -0.279  -0.143  -0.202  -0.199  -0.112   0.001  -0.127 
+  7.170   0.282   0.395   0.134  -0.185  -0.406  -0.393  -0.100  -0.066  -0.291  -0.064   0.344  -0.110 
+  7.347   0.301   0.475   0.106  -0.172  -0.242  -0.168   0.046  -0.061  -0.235  -0.080   0.188  -0.147 
+  8.458   0.515  -0.080   0.241   0.133  -0.166  -0.005  -0.170  -0.177  -0.213  -0.235   0.054  -0.214 
+  8.954   0.578  -0.105   0.068   0.087  -0.097   0.114  -0.136  -0.104  -0.346  -0.346   0.057  -0.244 
+  7.532   0.423   0.510  -0.066  -0.214  -0.351  -0.062  -0.079  -0.299  -0.064  -0.150   0.019   0.020 
+  7.650   0.292   0.586  -0.032  -0.141  -0.209   0.145  -0.043  -0.243  -0.213  -0.239  -0.044  -0.225 
+  7.394   0.072   0.320   0.065  -0.059  -0.237  -0.089  -0.117  -0.142  -0.073  -0.230   0.149  -0.107 
+  7.211   0.007   0.421  -0.185   0.040  -0.116  -0.089  -0.042  -0.138  -0.160  -0.057  -0.093  -0.120 
+  7.280  -0.058   0.374  -0.034   0.203  -0.269  -0.130  -0.306  -0.180  -0.190  -0.184  -0.142  -0.053 
+  7.044  -0.221   0.148   0.160   0.067  -0.437  -0.149   0.069  -0.069  -0.182  -0.204  -0.085  -0.166 
+  9.658   0.142  -0.059   0.371  -0.138  -0.613   0.015  -0.092   0.143  -0.427  -0.111  -0.156  -0.267 
+ 10.260   0.562  -0.217   0.205  -0.012  -0.433   0.128  -0.112   0.148  -0.462  -0.214  -0.209  -0.261 
+  9.912   1.140  -0.297   0.006   0.203  -0.532   0.055   0.168  -0.207  -0.342  -0.314  -0.259  -0.265 
+ 10.243   1.123  -0.285   0.011   0.216  -0.499  -0.136   0.435  -0.297  -0.386  -0.299  -0.289  -0.293 
+ 11.295   1.095  -0.329  -0.075  -0.047  -0.456  -0.277   0.207  -0.187  -0.275  -0.140  -0.144  -0.195 
+ 12.392   1.547  -0.435  -0.372  -0.123  -0.523  -0.442   0.064  -0.165  -0.278  -0.128  -0.099  -0.184 
+ 12.240   2.313  -0.673  -0.755  -0.350  -0.537  -0.523   0.199  -0.252  -0.325  -0.232   0.134   0.104 
+ 12.942   2.393  -0.584  -0.890  -0.280  -0.362  -0.809   0.434  -0.366  -0.350  -0.328   0.087   0.123 
+ 12.878   2.621  -0.688  -0.965  -0.297  -0.257  -0.831   0.354  -0.293  -0.244  -0.343  -0.026   0.208 
+ 13.143   2.457  -0.629  -1.043  -0.288  -0.065  -0.856   0.164  -0.231  -0.185  -0.272  -0.114   0.255 
+ 13.569   2.291  -0.696  -1.029  -0.181  -0.111  -0.779   0.063  -0.332  -0.104  -0.273  -0.003   0.130 
+ 13.306   2.616  -0.982  -1.009  -0.022  -0.081  -0.913   0.069  -0.463   0.039  -0.251   0.019   0.050 
+ 13.401   2.378  -0.857  -0.983   0.058  -0.124  -0.873  -0.107  -0.367   0.047  -0.240   0.082  -0.087 
+ 13.436   2.193  -0.925  -0.812   0.177  -0.083  -0.966  -0.226  -0.275  -0.015  -0.166  -0.020  -0.137 
+ 12.948   2.106  -1.014  -0.533   0.254   0.119  -1.169  -0.290  -0.127  -0.120  -0.185  -0.103  -0.166 
+ 12.421   1.583  -0.838  -0.421   0.509   0.029  -1.179  -0.297   0.014  -0.298  -0.198  -0.167  -0.142 
+ 11.408   1.246  -0.759  -0.207   0.502   0.010  -1.075  -0.139   0.162  -0.256  -0.368  -0.197  -0.171 
+ 10.279   0.833  -0.665   0.295   0.650  -0.089  -0.886   0.034   0.163  -0.451  -0.490   0.025  -0.147 
+ 10.141   0.751  -0.483   0.451   0.613  -0.348  -1.005   0.199   0.019  -0.456  -0.335   0.109  -0.114 
+ 11.903   0.296  -0.534   0.404   0.479  -0.317  -0.841   0.284  -0.434  -0.564  -0.103   0.022  -0.137 
+ 13.489   0.410  -0.452   0.372   0.350  -0.458  -1.208   0.387  -0.511  -0.490  -0.116   0.030  -0.240 
+ 13.889   0.643  -0.658   0.274   0.027  -0.580  -1.195   0.408  -0.281  -0.266  -0.050   0.131  -0.255 
+ 13.320   1.072  -0.832   0.155   0.103  -0.559  -1.191   0.349  -0.120  -0.230  -0.166   0.173  -0.265 
+ 11.718   0.884  -0.610   0.335  -0.002  -0.620  -0.887   0.086   0.094   0.005  -0.390   0.186  -0.015 
+ 10.937   0.857  -0.390   0.304   0.118  -0.348  -0.432  -0.470   0.152   0.208  -0.788   0.103   0.058 
+ 10.858   0.871  -0.376   0.177   0.130  -0.265  -0.358  -0.580   0.125   0.285  -0.737   0.028  -0.049 
+ 10.783   0.960  -0.482   0.140   0.033  -0.297  -0.141  -0.570   0.067   0.215  -0.528   0.094  -0.210 
+ 10.784   0.912  -0.427   0.212  -0.197  -0.265  -0.031  -0.478  -0.127   0.172  -0.404   0.213  -0.240 
+ 11.501   0.728  -0.331  -0.048  -0.129  -0.261  -0.043  -0.405  -0.133   0.118  -0.407   0.233  -0.260 
+ 11.778   1.093  -0.614  -0.178  -0.080  -0.231  -0.187  -0.274  -0.103   0.055  -0.392   0.248  -0.140 
+ 11.811   1.217  -0.606  -0.011  -0.267  -0.426  -0.113  -0.179   0.004  -0.170  -0.223   0.066  -0.114 
+ 11.837   0.635  -0.490   0.275  -0.459  -0.488  -0.044  -0.096  -0.096   0.057  -0.274  -0.020   0.001 
+ 11.645   0.713  -0.484   0.223  -0.380  -0.600  -0.161  -0.076  -0.015   0.037  -0.154  -0.057   0.011 
+ 11.115   1.399  -0.779   0.155  -0.519  -0.762  -0.024  -0.124   0.147   0.029  -0.056  -0.174  -0.068 
+ 10.906   1.913  -1.060  -0.027  -0.481  -0.936   0.123  -0.072   0.069   0.086  -0.200  -0.069  -0.152 
+ 10.866   1.906  -1.109  -0.094  -0.533  -0.983   0.192   0.016   0.087   0.150  -0.288  -0.025  -0.192 
+ 10.895   1.753  -1.185  -0.001  -0.456  -0.857   0.260  -0.001   0.066   0.038  -0.264  -0.064  -0.078 
+ 10.983   1.888  -1.352   0.143  -0.600  -0.741   0.223   0.063   0.034  -0.021  -0.314  -0.040  -0.069 
+ 10.891   1.886  -1.300   0.015  -0.388  -0.781   0.149   0.136  -0.048  -0.100  -0.199  -0.084  -0.078 
+ 12.341   0.862  -0.654  -0.506  -0.560  -0.513   0.076   0.378  -0.412  -0.059   0.159  -0.225   0.055 
+ 12.526   0.844  -0.652  -0.605  -0.539  -0.379  -0.013   0.259  -0.380   0.057   0.173  -0.231  -0.110 
+ 11.892   0.993  -0.463  -0.803  -0.580  -0.233  -0.377  -0.049  -0.453   0.066  -0.038  -0.134   0.026 
+  9.514   0.910  -0.204  -0.365  -0.023  -0.294  -0.233  -0.081  -0.394   0.074  -0.038  -0.018   0.038 
+  9.581   0.169  -0.153  -0.248   0.219  -0.400  -0.115  -0.133  -0.074  -0.037  -0.143  -0.085  -0.134 
+ 10.673  -0.248  -0.537  -0.487   0.143  -0.473  -0.279  -0.151  -0.234  -0.047  -0.114   0.020   0.007 
+  9.454  -1.039   0.227  -0.386  -0.035  -0.315  -0.200  -0.282   0.009  -0.005  -0.102  -0.165   0.024 
+  9.869  -1.677   0.512  -0.253   0.220  -0.243  -0.328  -0.159  -0.067  -0.135  -0.131  -0.127  -0.103 
+ 10.080  -1.594   0.551  -0.453   0.277  -0.272  -0.142  -0.080  -0.031   0.058  -0.061   0.044  -0.107 
+  9.579  -1.740   0.317  -0.459   0.119  -0.283   0.071   0.081   0.059  -0.063  -0.289  -0.009   0.009 
+  8.073  -1.444   0.437  -0.709   0.041  -0.508  -0.264   0.156   0.039  -0.092  -0.230  -0.008  -0.214 
+  6.727  -0.794   0.649  -0.183  -0.044  -0.377   0.016   0.011  -0.029   0.100  -0.061  -0.181  -0.173 
+  6.075  -0.194   0.235  -0.150  -0.033  -0.288  -0.059  -0.111   0.068   0.060   0.063  -0.058  -0.087 
+  6.361  -0.400   0.169  -0.165   0.263  -0.225  -0.180  -0.182  -0.096   0.056  -0.138   0.077  -0.015 
+  9.515  -1.056  -0.076  -0.344   0.072  -0.321  -0.170   0.051  -0.295  -0.128  -0.292   0.087  -0.257 
+ 11.016  -1.130   0.084  -0.400   0.002  -0.416  -0.359  -0.046  -0.310  -0.166  -0.216   0.053  -0.079 
+ 10.720  -1.006   0.167  -0.217  -0.119  -0.320  -0.500  -0.080   0.211  -0.116  -0.098  -0.027   0.185 
+ 12.085   0.611  -0.448  -0.002  -0.175  -0.283  -0.518  -0.241  -0.071  -0.108  -0.186  -0.212   0.123 
+ 11.537   1.213  -0.903   0.218  -0.190  -0.419  -0.337  -0.443  -0.076  -0.008  -0.286   0.005  -0.034 
+ 10.703   1.048  -0.802   0.191  -0.106  -0.409  -0.194  -0.440  -0.130   0.007  -0.124  -0.073  -0.149 
+  9.596   0.654  -0.366   0.473   0.130  -0.364  -0.068  -0.319  -0.221  -0.042  -0.158  -0.111  -0.379 
+  9.643   0.661  -0.412   0.596   0.177  -0.361  -0.237  -0.363  -0.241   0.075  -0.124  -0.002  -0.424 
+  9.555   0.795  -0.539   0.596   0.230  -0.383  -0.263  -0.399  -0.207  -0.054  -0.026  -0.133  -0.347 
+  9.410   0.936  -0.575   0.503   0.246  -0.387  -0.234  -0.301  -0.250  -0.143   0.040  -0.233  -0.360 
+ 11.070   0.978  -0.852   0.034   0.269  -0.465  -0.551  -0.229  -0.122   0.023  -0.041  -0.328   0.008 
+ 11.841   0.999  -1.162   0.414  -0.072  -0.602  -0.691  -0.056  -0.029  -0.030  -0.211  -0.026   0.122 
+ 12.160   0.721  -0.888   0.390  -0.167  -0.821  -0.614   0.052  -0.109  -0.057  -0.140   0.130   0.027 
+ 12.460   0.502  -0.656   0.365  -0.249  -0.895  -0.512   0.093  -0.262  -0.042  -0.066   0.145  -0.114 
+ 12.435   0.546  -0.577   0.372  -0.263  -0.879  -0.414  -0.026  -0.336  -0.046  -0.070   0.136  -0.192 
+ 12.178   0.206  -0.162   0.476  -0.345  -0.690  -0.392  -0.056  -0.403  -0.140  -0.150   0.147  -0.233 
+ 11.061   0.124   0.096   0.446  -0.525  -0.674  -0.391  -0.112  -0.419  -0.205  -0.062   0.125  -0.206 
+ 10.571   0.192  -0.196   0.424  -0.303  -0.456  -0.213  -0.376  -0.327  -0.218  -0.145  -0.087  -0.011 
+  8.451   0.061  -0.412   0.311  -0.216  -0.451  -0.032  -0.264  -0.154  -0.063  -0.140  -0.084  -0.017 
+  6.254   0.001   0.097   0.158  -0.102  -0.514  -0.500  -0.125  -0.077   0.025  -0.088  -0.075  -0.222 
+  7.382  -0.386  -0.131   0.166  -0.102  -0.508  -0.190  -0.150  -0.120   0.120  -0.113   0.077   0.002 
+ 11.056  -0.984  -0.566   0.146  -0.059  -0.384  -0.164  -0.306  -0.212  -0.002  -0.190   0.042  -0.038 
+ 11.367  -0.585  -0.354   0.060  -0.147  -0.341  -0.341  -0.478  -0.269  -0.039  -0.262   0.105  -0.039 
+ 11.203   0.256   0.168   0.547  -0.311  -0.663  -0.477  -0.091  -0.528  -0.118  -0.222  -0.033  -0.164 
+ 12.458   0.528   0.021   0.187  -0.369  -0.512  -0.902   0.215  -0.683   0.018  -0.279   0.126  -0.142 
+ 12.428   0.899  -0.515   0.023  -0.064  -0.788  -0.877   0.233  -0.512   0.006  -0.247   0.194  -0.061 
+ 12.032   0.817  -0.482   0.036  -0.118  -0.845  -0.801   0.091  -0.303  -0.019  -0.263   0.268  -0.093 
+ 11.171   0.697  -0.218  -0.124  -0.093  -0.697  -0.828  -0.135  -0.309   0.119  -0.504   0.202   0.132 
+  8.910   0.779   0.144   0.079   0.069  -0.376  -0.299  -0.167  -0.239  -0.087  -0.224  -0.133  -0.039 
+  8.625   0.111   0.294   0.220  -0.094  -0.321  -0.354   0.122  -0.351  -0.143  -0.031  -0.113  -0.042 
+ 11.084  -0.346  -0.699  -0.096  -0.181  -0.617  -0.360   0.301  -0.397  -0.218   0.038   0.034  -0.088 
+ 11.922  -0.037  -0.479   0.133   0.005  -0.593  -0.473   0.264  -0.328  -0.220  -0.194   0.006  -0.147 
+ 11.583   0.311  -0.677  -0.112   0.317  -0.023  -0.420   0.286  -0.117  -0.143  -0.234  -0.089  -0.041 
+ 12.188  -0.526  -0.728  -0.357   0.125   0.211   0.017   0.105  -0.049  -0.178  -0.110  -0.122  -0.029 
+ 11.546  -0.333  -0.632  -0.382   0.091   0.083   0.057   0.108  -0.416  -0.201   0.098  -0.253   0.137 
+ 11.810   0.446  -0.296  -0.029   0.084   0.077   0.018   0.093  -0.460  -0.283  -0.290  -0.267  -0.009 
+ 12.050  -0.078  -0.456   0.060   0.097   0.303  -0.166   0.212  -0.462  -0.046   0.095  -0.573   0.054 
+ 12.188  -0.532  -0.796  -0.136  -0.351   0.239  -0.171   0.271  -0.446  -0.061   0.350  -0.526   0.158 
+ 11.579  -0.329  -0.529  -0.114  -0.213   0.296  -0.095   0.279  -0.524  -0.020   0.108  -0.537  -0.128 
+ 11.374   0.387  -0.425  -0.335  -0.196   0.256  -0.049   0.334  -0.628  -0.113  -0.256  -0.417  -0.249 
+ 11.384   1.146  -0.299  -0.320  -0.409  -0.098  -0.125   0.124  -0.478   0.088  -0.115  -0.269  -0.230 
+ 11.707   1.848  -0.635  -0.989  -0.648  -0.070  -0.248   0.149  -0.409  -0.114  -0.024  -0.087  -0.100 
+ 11.971   2.063  -1.185  -0.963  -0.288  -0.246  -0.672   0.571  -0.567  -0.217   0.236  -0.096  -0.295 
+ 11.901   2.002  -1.228  -0.965  -0.306  -0.195  -0.663   0.461  -0.579  -0.142   0.291  -0.081  -0.240 
+ 12.045   1.868  -1.176  -1.049  -0.300  -0.140  -0.735   0.350  -0.455  -0.120   0.241  -0.035  -0.179 
+ 12.259   1.885  -1.279  -1.016  -0.189  -0.092  -0.856   0.264  -0.363  -0.113   0.214  -0.146  -0.038 
+ 12.027   2.103  -1.366  -1.114   0.006  -0.081  -0.926   0.179  -0.313   0.027   0.021  -0.134   0.099 
+ 11.516   2.117  -1.314  -1.137   0.004  -0.012  -0.955   0.080  -0.317   0.110  -0.017  -0.029  -0.003 
+ 11.643   1.823  -1.134  -1.277   0.038  -0.042  -0.995  -0.028  -0.172   0.114   0.015  -0.053  -0.016 
+ 11.808   1.911  -1.166  -1.194   0.003   0.061  -1.150  -0.085  -0.117   0.134  -0.038  -0.108   0.104 
+ 11.892   1.867  -1.238  -1.120   0.019   0.083  -1.111  -0.175  -0.085   0.100   0.008  -0.179   0.087 
+ 11.525   1.917  -1.319  -1.048   0.066  -0.007  -1.118  -0.126  -0.118   0.169  -0.025  -0.186   0.092 
+ 11.217   2.022  -1.439  -0.992   0.140  -0.075  -1.170  -0.197  -0.019   0.156  -0.004  -0.177   0.118 
+ 11.747   1.861  -1.472  -0.865   0.188  -0.179  -1.115  -0.298   0.048   0.094  -0.098  -0.141   0.093 
+ 11.909   1.660  -1.347  -0.776   0.175  -0.173  -1.214  -0.203   0.037   0.053  -0.135  -0.192   0.144 
+ 11.616   1.528  -1.301  -0.663   0.165  -0.154  -1.342  -0.070   0.106  -0.130  -0.053  -0.123   0.062 
+ 11.632   1.363  -1.238  -0.564   0.191  -0.191  -1.409  -0.078   0.066  -0.152  -0.096  -0.058   0.085 
+ 12.022   1.306  -1.190  -0.443   0.147  -0.142  -1.435  -0.047   0.045  -0.297  -0.055  -0.143   0.169 
+ 12.105   1.182  -1.171  -0.255   0.077  -0.076  -1.454   0.038   0.039  -0.416  -0.068  -0.139   0.104 
+ 11.884   0.971  -1.105  -0.061   0.174  -0.269  -1.304  -0.018   0.088  -0.508  -0.125  -0.033   0.050 
+ 11.716   0.866  -1.033  -0.024   0.260  -0.408  -1.282  -0.031   0.063  -0.623  -0.066  -0.035  -0.024 
+ 11.504   0.774  -0.896   0.136   0.266  -0.299  -1.209   0.111  -0.074  -0.582  -0.202   0.007  -0.170 
+  9.213   0.423  -0.779   0.375   0.555  -0.277  -0.900   0.364  -0.179  -0.402  -0.167   0.174  -0.251 
+  9.598  -0.446  -0.579   0.456   0.344  -0.252  -0.299   0.193  -0.195  -0.214  -0.210  -0.084  -0.190 
+  8.643  -0.210  -0.204   0.297   0.555  -0.348  -0.248   0.190  -0.134  -0.344  -0.077  -0.012  -0.026 
+  8.177  -0.201   0.136   0.173   0.443  -0.194  -0.502   0.183  -0.121  -0.266   0.054   0.004   0.019 
+ 10.043  -0.458  -0.380   0.273   0.020  -0.223  -0.251   0.000  -0.175  -0.129  -0.141  -0.047  -0.133 
+ 12.117  -0.439  -0.442  -0.271  -0.307  -0.480  -0.120  -0.028  -0.144  -0.257  -0.245  -0.055  -0.147 
+ 11.388  -0.361  -0.106   0.082  -0.270  -0.657  -0.206  -0.117   0.082  -0.374  -0.124  -0.123  -0.089 
+ 11.367  -0.415  -0.559   0.141   0.151  -0.337   0.054   0.138   0.148  -0.601  -0.145  -0.123  -0.142 
+ 11.111  -0.212  -1.014   0.226   0.102  -0.576  -0.016   0.189   0.033  -0.369  -0.085  -0.048  -0.070 
+ 11.275  -0.241  -0.946   0.202  -0.009  -0.355  -0.049   0.144  -0.039  -0.137  -0.049  -0.004  -0.001 
+ 11.298  -0.100  -0.906   0.009   0.001  -0.344  -0.192   0.340   0.122  -0.191   0.084   0.133  -0.257 
+ 11.005  -0.438  -0.733  -0.011  -0.134  -0.252  -0.257   0.038   0.127  -0.300  -0.227   0.322  -0.261 
+ 10.398  -0.531  -0.570   0.284   0.141  -0.223  -0.212   0.123   0.139  -0.315  -0.396  -0.005  -0.205 
+  9.988  -0.196  -0.318   0.350   0.336   0.002  -0.184   0.273   0.122  -0.311  -0.447  -0.260  -0.333 
+  9.925  -0.590  -0.739   0.179   0.056  -0.088  -0.242   0.204  -0.158  -0.157  -0.186   0.035  -0.139 
+  9.983  -0.657  -0.784   0.094   0.236   0.014  -0.181   0.132   0.099  -0.226  -0.230  -0.039  -0.218 
+  9.376  -0.648  -0.427   0.116   0.393  -0.209  -0.252   0.175   0.002  -0.121  -0.255   0.191   0.011 
+  8.851  -0.535  -0.298   0.040   0.128  -0.217  -0.227   0.227  -0.059  -0.141  -0.102   0.277   0.009 
+  8.654  -0.475  -0.441   0.086   0.411  -0.107  -0.051   0.370   0.100  -0.255  -0.458   0.065  -0.036 
+  9.142  -0.265  -0.254   0.142   0.324  -0.424  -0.288   0.051   0.103  -0.137  -0.492   0.055  -0.053 
+  9.235   0.241   0.261   0.229  -0.113  -0.509  -0.469  -0.080   0.163  -0.045  -0.485   0.211  -0.239 
+  6.022   0.295   0.381   0.197  -0.147  -0.325  -0.418  -0.189   0.155   0.041  -0.296   0.207  -0.256 
+  5.847   0.702   0.310   0.112  -0.151  -0.187  -0.222   0.126  -0.117  -0.089  -0.197  -0.045  -0.083 
+  5.586   0.391   0.366  -0.173  -0.234  -0.079  -0.237  -0.015   0.031   0.059  -0.126   0.027   0.117 
+  4.809  -0.006   0.116  -0.046  -0.078   0.096  -0.041   0.036  -0.073   0.094  -0.072  -0.224  -0.024 
+  4.785   0.061  -0.026   0.015  -0.025  -0.130  -0.224  -0.037   0.012   0.074   0.016  -0.097  -0.023 
+  4.537   0.004  -0.008   0.031   0.028   0.040  -0.348  -0.069  -0.080   0.051   0.046   0.012  -0.070 
+  8.889   0.432  -0.992  -0.062  -0.323  -0.397  -0.215  -0.243   0.086  -0.090  -0.112  -0.115  -0.007 
+ 11.861   0.127  -0.903  -0.062  -0.305  -0.492  -0.262  -0.287   0.347  -0.100  -0.110  -0.076   0.011 
+ 12.307  -0.221  -0.720  -0.292   0.067  -0.301  -0.117  -0.166   0.284  -0.170  -0.274   0.063  -0.075 
+ 13.095  -0.401  -0.244  -0.111   0.107  -0.283  -0.129  -0.023  -0.203  -0.365  -0.305  -0.081  -0.106 
+ 13.774  -0.071  -0.170  -0.108   0.188  -0.504  -0.192   0.074  -0.205  -0.252  -0.279  -0.153  -0.318 
+ 12.787  -0.298  -0.222  -0.029   0.375  -0.198  -0.041  -0.104  -0.290  -0.016  -0.255   0.069  -0.215 
+ 12.376  -0.470  -0.665   0.009   0.383  -0.022  -0.046  -0.250  -0.257   0.052  -0.091   0.074  -0.215 
+ 12.305  -0.595  -1.029  -0.138   0.410  -0.158  -0.178  -0.096  -0.108   0.228  -0.026   0.012  -0.141 
+ 11.930  -0.903  -1.163  -0.268   0.053  -0.477  -0.340  -0.085   0.239   0.297   0.106   0.020  -0.170 
+ 11.874  -0.928  -1.055  -0.244   0.148  -0.506  -0.365   0.007   0.423   0.076   0.135   0.046  -0.192 
+ 11.561  -1.216  -1.025  -0.258   0.163  -0.446  -0.375  -0.120   0.416   0.136   0.131   0.205  -0.072 
+ 11.227  -0.970  -0.769  -0.185   0.191  -0.361  -0.462  -0.292   0.327   0.127  -0.054   0.016  -0.203 
+ 11.269  -0.846  -0.615  -0.067   0.311  -0.437  -0.374  -0.245   0.260   0.190   0.027  -0.128  -0.173 
+ 11.200  -0.932  -0.776  -0.172   0.167  -0.335  -0.344  -0.154   0.200   0.305   0.134  -0.228  -0.092 
+ 11.061  -1.188  -0.882  -0.259   0.118  -0.627  -0.309  -0.115   0.246   0.247   0.121  -0.060  -0.209 
+ 10.891  -1.062  -0.856  -0.107   0.177  -0.471  -0.164  -0.089   0.144   0.172   0.281  -0.138  -0.075 
+ 10.753  -1.335  -1.037  -0.417   0.206  -0.555  -0.198   0.016   0.152   0.208   0.227  -0.055   0.032 
+ 10.665  -1.154  -0.945  -0.348   0.261  -0.514  -0.236  -0.012   0.123   0.253   0.175  -0.051  -0.045 
+ 10.538  -1.232  -0.980  -0.456   0.086  -0.409  -0.175   0.003   0.013   0.338   0.256  -0.154  -0.029 
+ 10.694  -1.223  -0.901  -0.330   0.158  -0.617  -0.394  -0.258  -0.109   0.136   0.301  -0.127  -0.156 
+ 10.818  -1.178  -1.118  -0.253   0.252  -0.635  -0.392  -0.016  -0.072  -0.038   0.243   0.026  -0.364 
+ 10.680  -1.237  -1.100  -0.304   0.277  -0.716  -0.501  -0.033   0.041  -0.003   0.006  -0.006  -0.192 
+ 10.580  -1.011  -1.044  -0.382   0.230  -0.522  -0.320  -0.025   0.165  -0.062  -0.124  -0.009  -0.134 
+ 10.707  -0.916  -1.117  -0.261   0.188  -0.672  -0.194   0.095   0.168  -0.134  -0.214  -0.149  -0.054 
+ 10.442  -1.137  -1.081  -0.357  -0.137  -0.592  -0.185  -0.091   0.085  -0.072   0.012  -0.088  -0.064 
+ 10.394  -1.093  -0.990  -0.350   0.102  -0.446  -0.218  -0.131   0.176   0.094  -0.241  -0.176  -0.210 
+ 10.314  -0.968  -0.911  -0.290  -0.068  -0.505  -0.257  -0.034  -0.060  -0.179  -0.199  -0.136  -0.162 
+ 10.354  -0.932  -0.901  -0.173   0.090  -0.669  -0.288  -0.122  -0.059  -0.226  -0.152  -0.063  -0.120 
+ 10.250  -0.825  -0.892  -0.178   0.047  -0.593  -0.425  -0.121  -0.035  -0.209  -0.200  -0.013  -0.073 
+ 10.116  -0.744  -0.994  -0.260  -0.006  -0.504  -0.341  -0.218  -0.014  -0.195  -0.236  -0.074  -0.073 
+ 10.090  -0.751  -0.883  -0.203   0.067  -0.559  -0.107  -0.161  -0.116  -0.096  -0.096   0.014  -0.181 
+ 10.103  -0.628  -0.777  -0.250   0.028  -0.577  -0.146  -0.148  -0.024  -0.139  -0.184  -0.022  -0.156 
+ 10.064  -0.666  -0.737  -0.336   0.019  -0.585  -0.169  -0.128  -0.043  -0.274  -0.041  -0.057  -0.049 
+ 10.062  -0.653  -0.804  -0.358  -0.010  -0.633  -0.158  -0.251  -0.039  -0.158  -0.029  -0.073  -0.067 
+ 10.049  -0.589  -0.742  -0.307  -0.014  -0.626  -0.310  -0.116  -0.002  -0.019   0.024  -0.055  -0.087 
+  9.778  -0.881  -0.804  -0.403  -0.183  -0.537  -0.330  -0.025   0.067  -0.140  -0.127   0.126  -0.085 
+  9.798  -0.699  -0.601  -0.286  -0.007  -0.605  -0.279  -0.012   0.206  -0.267  -0.087   0.024  -0.095 
+ 10.304  -0.251  -0.219  -0.163   0.044  -0.392  -0.152  -0.089   0.006  -0.235  -0.168   0.054  -0.172 
+ 10.723   0.088  -0.203  -0.027   0.187  -0.331  -0.204   0.008   0.011  -0.330  -0.302   0.078  -0.090 
+ 10.005  -0.450  -0.653  -0.249   0.021  -0.438  -0.161   0.036   0.192  -0.280  -0.078   0.027  -0.123 
+  9.651  -0.649  -0.722  -0.300  -0.184  -0.549  -0.340  -0.124   0.134  -0.096  -0.039  -0.013  -0.117 
+  9.374  -0.589  -0.600  -0.357  -0.063  -0.552  -0.255   0.002   0.191  -0.077  -0.095   0.060  -0.197 
+  9.335  -0.782  -0.723  -0.454  -0.019  -0.449  -0.243   0.044   0.209   0.123  -0.003  -0.057  -0.106 
+  9.385  -0.644  -0.683  -0.489  -0.372  -0.436  -0.176   0.055   0.322   0.135   0.050  -0.082  -0.094 
+  9.466  -0.493  -0.595  -0.526  -0.354  -0.607  -0.275   0.013   0.388   0.087   0.064   0.051  -0.177 
+  9.237  -0.611  -0.688  -0.387  -0.203  -0.687  -0.398  -0.051   0.326   0.074   0.208   0.062  -0.177 
+  9.259  -0.483  -0.658  -0.526  -0.238  -0.586  -0.356   0.112   0.360   0.079   0.101   0.072  -0.146 
+  9.706  -0.028  -0.359  -0.214  -0.037  -0.297  -0.327   0.068   0.365   0.008   0.035   0.071  -0.268 
+  9.530  -0.137  -0.377  -0.124  -0.007  -0.325  -0.373  -0.038   0.337   0.043   0.081   0.158  -0.149 
+  9.373  -0.400  -0.649  -0.548  -0.180  -0.253  -0.237   0.067   0.289  -0.100  -0.078  -0.077  -0.094 
+  9.148  -0.496  -0.698  -0.460  -0.254  -0.230  -0.178   0.067   0.435  -0.031  -0.178  -0.095  -0.149 
+  9.294  -0.403  -0.587  -0.253  -0.124  -0.360  -0.355   0.039   0.266  -0.088  -0.170  -0.259  -0.125 
+  8.957  -0.604  -0.716  -0.345  -0.033  -0.321  -0.291   0.060   0.132  -0.010  -0.304  -0.351  -0.118 
+  9.116  -0.366  -0.506  -0.194   0.141  -0.147  -0.140   0.106   0.107  -0.039  -0.305  -0.319  -0.325 
+  9.883   0.134   0.014   0.155   0.191  -0.119  -0.226  -0.152  -0.117  -0.098  -0.139  -0.174  -0.091 
+  9.688  -0.058  -0.095  -0.031   0.136  -0.142  -0.203  -0.065   0.032  -0.018  -0.122  -0.185  -0.135 
+  9.781  -0.424  -0.525  -0.149   0.014  -0.125  -0.365  -0.114  -0.047  -0.063  -0.065   0.032  -0.158 
+  9.803  -0.367  -0.423  -0.252  -0.173  -0.277  -0.233  -0.221  -0.058  -0.052  -0.107   0.010  -0.029 
+ 10.207  -0.399  -0.130  -0.190  -0.074  -0.151  -0.169  -0.171  -0.159  -0.137  -0.112  -0.031  -0.095 
+ 10.652  -0.292  -0.181  -0.171  -0.132  -0.086  -0.377  -0.316  -0.174  -0.216  -0.183  -0.136  -0.206 
+ 10.596  -0.378  -0.359  -0.244  -0.129  -0.212  -0.305  -0.266  -0.046  -0.191  -0.229  -0.114  -0.108 
+ 10.270  -0.358  -0.277  -0.271  -0.198  -0.101  -0.255  -0.216   0.163   0.045  -0.310  -0.184  -0.097 
+ 10.179  -0.351  -0.334  -0.402  -0.048  -0.096  -0.244  -0.240   0.094  -0.083  -0.297  -0.139  -0.245 
+ 10.217  -0.444  -0.387  -0.387   0.020  -0.325  -0.370  -0.082  -0.045  -0.220  -0.255   0.030  -0.134 
+ 10.490  -0.455  -0.519  -0.163  -0.021   0.007  -0.173  -0.254   0.013  -0.242  -0.247  -0.098  -0.036 
+ 10.628  -0.510  -0.502  -0.484  -0.266  -0.195  -0.256  -0.226  -0.067  -0.335  -0.334  -0.172  -0.088 
+ 10.250  -0.739  -0.553  -0.545  -0.237  -0.246  -0.188  -0.063   0.134  -0.109  -0.193   0.003  -0.130 
+ 10.011  -0.369  -0.440  -0.329  -0.135  -0.339  -0.336  -0.189   0.134  -0.202  -0.304  -0.019  -0.068 
+ 10.023  -0.473  -0.298  -0.402  -0.131  -0.276  -0.310  -0.246   0.195   0.061  -0.167  -0.001  -0.022 
+ 10.078  -0.359  -0.097  -0.368  -0.276  -0.458  -0.164  -0.168   0.131   0.046  -0.242  -0.198  -0.039 
+ 10.065  -0.149  -0.061  -0.286  -0.091  -0.192  -0.226  -0.264   0.193   0.025  -0.098  -0.171  -0.269 
+  9.606  -0.488  -0.270  -0.428  -0.176  -0.425  -0.376  -0.198   0.368   0.091  -0.172   0.021  -0.211 
+  9.470  -0.573  -0.416  -0.426  -0.195  -0.565  -0.414  -0.229   0.334   0.019  -0.235  -0.007  -0.222 
+  9.628  -0.441  -0.376  -0.371  -0.183  -0.422  -0.326  -0.234   0.295  -0.034  -0.226  -0.036  -0.233 
+  9.744  -0.642  -0.461  -0.350  -0.321  -0.331  -0.317   0.030   0.340  -0.030  -0.248   0.001  -0.190 
+  9.561  -0.486  -0.376  -0.241  -0.276  -0.078  -0.004   0.110   0.482   0.040  -0.277  -0.061  -0.249 
+  9.479  -0.361  -0.411  -0.125  -0.257  -0.312  -0.072   0.047   0.388   0.033  -0.358  -0.069  -0.172 
+  9.510  -0.508  -0.383  -0.055  -0.368  -0.552  -0.107   0.162   0.251  -0.002  -0.164  -0.051  -0.149 
+  8.920  -0.382  -0.290  -0.111  -0.388  -0.291  -0.210   0.113   0.308   0.142  -0.056  -0.035  -0.251 
+ 11.824   0.486  -0.391   0.019  -0.079  -0.294  -0.312   0.121  -0.184  -0.056  -0.353  -0.066  -0.299 
+ 13.083   0.555  -0.334  -0.010  -0.153  -0.382  -0.383   0.199  -0.218   0.022  -0.316   0.122  -0.284 
+ 12.452   0.340  -0.389  -0.024  -0.146  -0.535  -0.505   0.151  -0.169   0.113  -0.206   0.294  -0.166 
+  9.849   0.321  -0.099  -0.155  -0.031  -0.456  -0.607   0.187  -0.001   0.124  -0.268   0.065  -0.131 
+  9.113  -0.129  -0.226  -0.181  -0.259  -0.604  -0.365   0.049   0.241   0.146  -0.260   0.024  -0.161 
+  8.992  -0.299  -0.402  -0.418  -0.171  -0.621  -0.429  -0.069   0.240   0.081  -0.283   0.092  -0.093 
+  9.152  -0.296  -0.322  -0.353  -0.177  -0.490  -0.281   0.013   0.230  -0.095  -0.166   0.101   0.062 
+  9.144  -0.408  -0.335  -0.439  -0.183  -0.641  -0.167   0.141   0.276  -0.294  -0.266   0.209   0.115 
+  9.116  -0.507  -0.273  -0.478  -0.238  -0.539  -0.210   0.225   0.064  -0.258  -0.153   0.124   0.041 
+  8.985  -0.646  -0.281  -0.565  -0.121  -0.449  -0.285   0.128   0.175  -0.278  -0.338   0.044   0.050 
+  8.450  -0.884  -0.371  -0.443  -0.189  -0.603  -0.215   0.112   0.361  -0.269  -0.527   0.042   0.106 
+  8.361  -0.881  -0.446  -0.356  -0.114  -0.223  -0.170   0.208   0.239  -0.397  -0.382  -0.128   0.034 
+  8.428  -0.847  -0.490  -0.229  -0.013  -0.497  -0.054   0.177   0.325  -0.276  -0.426  -0.279   0.042 
+  8.496  -0.957  -0.513  -0.314   0.020  -0.337  -0.058   0.215   0.307  -0.245  -0.309  -0.187   0.067 
+  8.474  -0.825  -0.339  -0.236  -0.099  -0.386  -0.073   0.205   0.280  -0.177  -0.411  -0.249  -0.102 
+  7.977  -0.952  -0.473  -0.352  -0.006  -0.350  -0.111   0.105   0.227  -0.353  -0.444  -0.341  -0.167 
+  7.604  -1.047  -0.566  -0.424  -0.007  -0.439  -0.092   0.025   0.383  -0.187  -0.305  -0.319  -0.145 
+  7.698  -0.994  -0.462  -0.359   0.026  -0.409  -0.225  -0.037   0.544  -0.016  -0.258  -0.225  -0.183 
+  7.530  -1.003  -0.490  -0.321   0.013  -0.531  -0.144   0.129   0.525  -0.166  -0.404  -0.299  -0.201 
+  7.793  -0.686  -0.399  -0.528   0.092  -0.576  -0.297  -0.035   0.549  -0.006  -0.332  -0.182  -0.037 
+  7.529  -0.782  -0.391  -0.440   0.045  -0.516  -0.248   0.070   0.560   0.130  -0.405  -0.181   0.076 
+  7.474  -0.693  -0.500  -0.505   0.103  -0.326  -0.379   0.107   0.459   0.117  -0.159  -0.123  -0.040 
+  6.847  -1.102  -0.696  -0.633   0.103  -0.241  -0.366   0.048   0.514   0.040  -0.003  -0.131  -0.192 
+  6.859  -0.892  -0.481  -0.424   0.264  -0.419  -0.397  -0.093   0.298  -0.072  -0.053  -0.087  -0.179 
+  6.688  -0.926  -0.379  -0.322   0.404  -0.250  -0.185   0.061   0.344  -0.281  -0.062  -0.094  -0.188 
+  7.023  -0.557  -0.155  -0.293   0.302  -0.373  -0.243  -0.197   0.277  -0.036   0.030   0.061  -0.020 
+  7.595  -0.469  -0.112  -0.122   0.173  -0.196  -0.093  -0.277  -0.105  -0.254  -0.102   0.101   0.040 
+  7.673  -0.489  -0.165  -0.137   0.061  -0.055  -0.354  -0.403  -0.075  -0.251   0.008   0.179   0.041 
+  7.512  -0.434  -0.447  -0.095   0.139   0.084  -0.221  -0.462  -0.081  -0.245  -0.011  -0.001  -0.018 
+  6.996  -0.256  -0.271  -0.246   0.149  -0.000  -0.252  -0.152  -0.241  -0.307   0.041   0.095   0.010 
+  6.448  -0.085  -0.021  -0.200   0.274  -0.287  -0.384  -0.010  -0.049  -0.162   0.006   0.232   0.082 
+  6.229  -0.028   0.151  -0.247   0.319  -0.113  -0.238   0.108   0.121  -0.042  -0.269   0.018  -0.077 
+  6.088  -0.212  -0.133  -0.115   0.062   0.055  -0.238  -0.190   0.115   0.088  -0.135   0.132   0.165 
+  6.338   0.084  -0.121   0.033   0.071   0.106  -0.451  -0.217  -0.055  -0.083  -0.101  -0.025  -0.077 
+  6.756   0.093   0.195   0.076   0.022   0.030  -0.269  -0.171   0.013  -0.062  -0.026   0.037  -0.023 
+  6.619   0.285   0.088   0.014   0.076   0.149  -0.332  -0.176  -0.039   0.029  -0.180   0.010  -0.037 
+  6.464   0.383   0.091  -0.082  -0.182   0.118  -0.341  -0.127   0.068  -0.072  -0.099   0.040  -0.023 
+  6.935   0.257   0.336   0.117   0.113   0.362  -0.362  -0.257  -0.266  -0.119  -0.099  -0.094  -0.085 
+  6.710   0.357   0.093  -0.166  -0.079   0.294  -0.338  -0.221  -0.396  -0.116   0.001   0.007  -0.055 
+  6.437   0.115   0.104  -0.172  -0.162   0.196  -0.440  -0.175  -0.378  -0.110  -0.121   0.074   0.090 
+  5.003   0.121   0.039  -0.090  -0.023   0.106  -0.291  -0.087  -0.063   0.167   0.061  -0.127  -0.080 
+  4.737   0.084  -0.230   0.109  -0.080  -0.013  -0.267  -0.126  -0.206  -0.107  -0.020   0.100  -0.098 
+  4.753   0.331  -0.445   0.115  -0.068  -0.258  -0.319  -0.243  -0.191  -0.012  -0.089  -0.038   0.187 
+  4.373   0.103  -0.389   0.166  -0.168  -0.076   0.117  -0.201  -0.209   0.226   0.178  -0.110   0.006 
+  5.206  -0.251  -0.214   0.229  -0.334   0.084  -0.016  -0.318  -0.038   0.063   0.073   0.195  -0.108 
+  5.878  -0.526   0.050   0.235  -0.516  -0.074  -0.260  -0.117   0.102   0.106  -0.008   0.272  -0.086 
+  5.878  -0.634   0.239   0.275  -0.490  -0.163  -0.229  -0.037   0.125   0.041   0.011   0.084  -0.175 
+  5.699  -0.604   0.254   0.276  -0.297  -0.043  -0.034  -0.275   0.121   0.185   0.049   0.048  -0.053 
+  5.925  -0.691   0.015   0.169  -0.403  -0.258   0.008  -0.227   0.014   0.093  -0.012   0.080   0.065 
+  6.615  -0.606  -0.249   0.140  -0.356  -0.198   0.219   0.025  -0.148  -0.143  -0.017   0.065  -0.096 
+  6.728  -0.496  -0.279   0.068  -0.326  -0.199   0.210   0.105  -0.082  -0.274  -0.133  -0.014  -0.071 
+  6.729  -0.318  -0.442   0.228  -0.264  -0.080   0.038   0.149   0.084  -0.166  -0.229   0.091   0.077 
+  7.300  -0.209  -0.692   0.116  -0.300  -0.244  -0.192   0.130   0.157  -0.119  -0.142   0.042  -0.180 
+  7.429  -0.206  -0.989  -0.003  -0.179  -0.051  -0.139   0.135   0.261  -0.223  -0.067   0.159  -0.140 
+  7.494  -0.203  -1.236  -0.125  -0.126   0.063  -0.355   0.002   0.121  -0.110  -0.044   0.344   0.031 
+  7.938  -0.215  -1.232   0.021  -0.169   0.108  -0.456  -0.157   0.344  -0.087  -0.128   0.239  -0.058 
+  8.081  -0.199  -1.278   0.036  -0.223   0.298  -0.544  -0.241   0.299  -0.190  -0.152   0.270   0.037 
+  8.316  -0.162  -1.290  -0.121  -0.176   0.350  -0.463  -0.230   0.366  -0.189  -0.068   0.243  -0.003 
+  8.586  -0.246  -1.097  -0.361  -0.221   0.349  -0.474  -0.271   0.231  -0.236  -0.111   0.120  -0.037 
+  8.672  -0.392  -1.085  -0.492  -0.248   0.386  -0.405  -0.152   0.348  -0.135  -0.005   0.106   0.044 
+  8.581  -0.405  -0.926  -0.459  -0.279   0.526  -0.461  -0.162   0.241  -0.191   0.110   0.046   0.011 
+  8.332  -0.431  -0.827  -0.406  -0.385   0.578  -0.388  -0.181   0.167  -0.188   0.195   0.084  -0.153 
+  8.132  -0.361  -0.679  -0.358  -0.350   0.475  -0.312  -0.143   0.195  -0.149   0.102   0.069  -0.141 
+  7.852  -0.169  -0.411  -0.233  -0.337   0.284  -0.277  -0.185   0.147  -0.058  -0.082   0.093  -0.099 
+  7.836  -0.067  -0.688  -0.043  -0.310  -0.039  -0.124   0.075   0.020   0.014  -0.084  -0.019  -0.011 
+  7.829   0.131  -0.621   0.007  -0.161  -0.185  -0.275  -0.069   0.063   0.019  -0.141  -0.135   0.018 
+  7.531   0.384  -0.562  -0.024  -0.153  -0.158  -0.350  -0.040  -0.007   0.070  -0.156  -0.111  -0.031 
+  6.914   0.370  -0.505  -0.007  -0.137  -0.063   0.020   0.066   0.051  -0.068  -0.165  -0.120  -0.168 
+  7.955   1.153  -0.138   0.101  -0.144  -0.109  -0.294  -0.084  -0.051  -0.039  -0.042  -0.141  -0.122 
+  7.847   0.973   0.005   0.061   0.019  -0.168  -0.366   0.009  -0.039   0.065  -0.033  -0.113  -0.058 
+  6.984   0.115  -0.537   0.524   0.279  -0.087  -0.193   0.107  -0.094  -0.104  -0.272  -0.157  -0.122 
+  7.083   0.263  -0.577   0.584  -0.004  -0.339  -0.210  -0.092  -0.127  -0.176  -0.109   0.080  -0.121 
+  7.225   0.260  -0.480   0.617  -0.062  -0.500  -0.398   0.013  -0.104  -0.079  -0.016   0.234  -0.028 
+  7.480   0.471  -0.511   0.585  -0.062  -0.599  -0.450   0.126  -0.052  -0.225   0.072   0.347   0.098 
+  7.195   0.056  -0.755   0.573   0.122  -0.801  -0.750   0.151  -0.021  -0.256   0.161   0.254   0.162 
+  7.295   0.284  -0.627   0.372   0.075  -0.695  -0.753   0.203  -0.020  -0.109  -0.005   0.103   0.153 
+  7.209   0.404  -0.472   0.009  -0.085  -0.672  -0.866   0.138   0.051  -0.149   0.004   0.159   0.210 
+  6.900   0.421  -0.603  -0.050  -0.253  -0.742  -0.722   0.013  -0.179  -0.354  -0.054   0.048   0.036 
+  6.902   0.371  -0.552   0.078  -0.157  -0.606  -0.625   0.144  -0.219  -0.246   0.051   0.094   0.229 
+  7.420  -0.021  -0.268   0.447   0.039  -0.646  -0.604  -0.072  -0.214  -0.278  -0.022   0.032  -0.037 
+  7.907  -0.131  -0.185   0.548   0.106  -0.470  -0.568  -0.057  -0.191  -0.440  -0.062   0.043  -0.026 
+  7.959   0.102  -0.206   0.526  -0.057  -0.588  -0.520  -0.209  -0.096  -0.298  -0.165   0.052   0.091 
+  7.826  -0.034  -0.359   0.497  -0.207  -0.503  -0.345  -0.234  -0.107  -0.149  -0.026   0.040  -0.022 
+  7.523  -0.067  -0.483   0.494  -0.226  -0.618  -0.445  -0.301  -0.216   0.027   0.100  -0.004   0.065 
+  7.264  -0.150  -0.157   0.493  -0.491  -0.542  -0.217  -0.190   0.033   0.021   0.004   0.005  -0.010 
+  7.395  -0.154  -0.112   0.447  -0.430  -0.484  -0.235  -0.291  -0.010  -0.213   0.136   0.157  -0.248 
+  7.453  -0.370  -0.076   0.341  -0.570  -0.548  -0.210  -0.005  -0.053  -0.174   0.077   0.227  -0.324 
+  7.564  -0.240   0.046   0.177  -0.317  -0.692  -0.511  -0.103  -0.085  -0.063  -0.099   0.256  -0.222 
+  6.963  -0.219   0.120   0.158  -0.230  -0.562  -0.581  -0.091  -0.103  -0.168  -0.043   0.222  -0.187 
+  6.746   0.033   0.125   0.264  -0.156  -0.303  -0.458  -0.006  -0.086  -0.446  -0.147   0.176  -0.260 
+  6.140   0.157   0.212   0.077  -0.294  -0.223  -0.395  -0.126  -0.123  -0.270  -0.047   0.158  -0.188 
+  5.653   0.127   0.074   0.067  -0.165  -0.233  -0.340  -0.106  -0.090  -0.275  -0.190   0.125  -0.078 
+  5.550   0.134   0.154   0.253  -0.060  -0.393  -0.362  -0.310  -0.197  -0.338  -0.186  -0.009  -0.060 
+  5.453  -0.065   0.183   0.248   0.054  -0.277  -0.366  -0.247  -0.194  -0.286  -0.085  -0.003  -0.235 
+  5.629   0.140   0.154   0.121   0.021  -0.231  -0.366  -0.298  -0.228  -0.278  -0.214   0.007  -0.111 
+  6.009   0.065   0.224  -0.001  -0.304  -0.339  -0.523  -0.254  -0.003  -0.132  -0.139  -0.079  -0.210 
+  6.653  -0.139   0.096   0.237  -0.456  -0.282  -0.320  -0.216   0.050   0.013   0.050  -0.089  -0.176 
+  6.886  -0.220   0.139   0.293  -0.337  -0.255  -0.343  -0.371  -0.051  -0.100   0.068   0.023  -0.223 
+  6.816  -0.114   0.144  -0.183  -0.162  -0.038  -0.364  -0.417  -0.028   0.005  -0.051  -0.079  -0.164 
+  6.931  -0.215   0.185  -0.108  -0.276  -0.199  -0.583  -0.413   0.007   0.024  -0.147  -0.073  -0.066 
+  7.016  -0.239   0.003   0.039  -0.223  -0.029  -0.402  -0.482  -0.195  -0.065  -0.129   0.012   0.082 
+  7.108   0.021   0.024  -0.016  -0.300  -0.077  -0.357  -0.521  -0.230  -0.111  -0.062   0.008  -0.022 
+  6.070   0.047   0.017   0.065  -0.181   0.013  -0.271  -0.441  -0.215  -0.181  -0.188  -0.080  -0.089 
+  5.463   0.336  -0.018   0.280  -0.131  -0.237  -0.608  -0.246   0.002  -0.136  -0.164   0.045  -0.085 
+  6.069   0.188  -0.171   0.132  -0.202  -0.267  -0.688  -0.139   0.086  -0.106  -0.345   0.111  -0.129 
+  6.510   0.193  -0.466  -0.056  -0.315  -0.278  -0.762  -0.011   0.262  -0.198  -0.516   0.179  -0.265 
+  6.911   0.012  -0.556  -0.247  -0.374  -0.290  -0.716   0.069   0.311  -0.258  -0.527   0.216  -0.187 
+  6.970  -0.070  -0.798  -0.335  -0.158  -0.117  -0.634   0.089   0.050  -0.319  -0.654   0.059  -0.163 
+  7.206  -0.064  -0.847  -0.406  -0.208  -0.039  -0.630   0.048   0.131  -0.219  -0.647   0.128  -0.237 
+  7.294  -0.048  -0.853  -0.262  -0.177   0.088  -0.616   0.094   0.107  -0.218  -0.627   0.146  -0.137 
+  7.275  -0.059  -0.963  -0.255  -0.321   0.245  -0.502  -0.053   0.201  -0.296  -0.453   0.149  -0.051 
+  7.055  -0.070  -1.059  -0.210  -0.285   0.331  -0.418  -0.005   0.237  -0.427  -0.480   0.175  -0.170 
+  6.999  -0.273  -1.017  -0.404  -0.054   0.378  -0.329   0.135   0.151  -0.393  -0.586   0.332  -0.194 
+  7.285  -0.123  -0.973  -0.395  -0.080   0.272  -0.418   0.099   0.091  -0.230  -0.415   0.346  -0.163 
+  7.240  -0.128  -1.029  -0.438  -0.084   0.231  -0.437  -0.068  -0.052  -0.290  -0.502   0.323  -0.219 
+  7.271  -0.034  -1.132  -0.404  -0.157   0.197  -0.388  -0.106  -0.051  -0.212  -0.324   0.330  -0.227 
+  7.447  -0.055  -1.061  -0.475  -0.367   0.203  -0.496  -0.051  -0.025  -0.178  -0.314   0.229  -0.291 
+  7.320  -0.140  -1.170  -0.421  -0.526  -0.048  -0.532  -0.133  -0.068  -0.083  -0.326   0.313  -0.348 
+  7.087  -0.035  -1.066  -0.253  -0.367  -0.188  -0.526   0.096  -0.131   0.063  -0.223   0.437  -0.368 
+  7.097  -0.038  -1.074  -0.322  -0.227  -0.079  -0.662   0.066  -0.150   0.040  -0.218   0.391  -0.292 
+  7.138   0.021  -1.005  -0.461  -0.258   0.169  -0.438   0.017   0.091   0.013  -0.366   0.326  -0.208 
+  6.940   0.124  -0.805  -0.514  -0.249   0.148  -0.361   0.111   0.217  -0.137  -0.204   0.256  -0.325 
+  6.078   0.178  -0.503  -0.426  -0.092   0.066  -0.366   0.050   0.157  -0.031  -0.240   0.156  -0.155 
+  5.922   0.359  -0.526  -0.455  -0.203  -0.014  -0.288  -0.098   0.182  -0.095  -0.198   0.161  -0.066 
+  5.923   0.215  -0.523  -0.339  -0.301  -0.057  -0.286   0.083   0.205   0.102  -0.212   0.009  -0.273 
+  5.563   0.292  -0.478  -0.352  -0.222   0.020  -0.285   0.043   0.414   0.100  -0.258  -0.024  -0.197 
+  5.126   0.359  -0.356  -0.144  -0.179  -0.045  -0.362   0.031   0.180   0.150   0.043   0.144  -0.161 
+  6.261  -0.311  -0.506  -0.159  -0.122   0.308   0.092  -0.246   0.040  -0.050   0.040  -0.013  -0.089 
+  8.541  -0.639  -0.591  -0.201  -0.249   0.248   0.102  -0.524  -0.039   0.065   0.109   0.016  -0.040 
+  9.150  -0.583  -0.649  -0.031  -0.244   0.056  -0.055  -0.555  -0.032  -0.033  -0.204  -0.069  -0.034 
+  9.317  -0.604  -0.684  -0.100  -0.258   0.078  -0.030  -0.399   0.085   0.077   0.011   0.010   0.040 
+  9.212  -0.427  -0.349  -0.166  -0.190   0.130  -0.022  -0.515  -0.050   0.157   0.006  -0.026  -0.068 
+  9.610  -0.314  -0.360  -0.191  -0.322   0.063  -0.181  -0.477  -0.103  -0.009  -0.151   0.021  -0.103 
+  9.804  -0.438  -0.387  -0.056  -0.132   0.006  -0.337  -0.398   0.018   0.153  -0.115  -0.027   0.010 
+  9.805  -0.446  -0.473  -0.091  -0.138   0.045  -0.083  -0.319   0.201   0.026  -0.032  -0.047   0.001 
+  9.719   0.037  -0.335  -0.156  -0.217  -0.091  -0.185  -0.285   0.134   0.022  -0.064  -0.122  -0.034 
+  8.808   0.107  -0.110  -0.158  -0.075   0.047  -0.189  -0.362  -0.202   0.068  -0.140  -0.090   0.025 
+  8.240  -0.127  -0.328  -0.249  -0.192   0.078  -0.300  -0.219  -0.054   0.154   0.006   0.006  -0.074 
+  7.872  -0.088  -0.091  -0.118  -0.171  -0.116  -0.213  -0.039   0.036   0.138   0.022  -0.029  -0.051 
+  6.936  -0.109  -0.014  -0.082  -0.137   0.031  -0.202   0.093   0.045   0.044  -0.080  -0.222  -0.044 
+  5.648  -0.066   0.120   0.015  -0.185  -0.050  -0.153  -0.185  -0.044   0.038  -0.002   0.001   0.048 
+  5.062  -0.288   0.140  -0.023  -0.260   0.049  -0.449  -0.121   0.032   0.075  -0.182   0.024   0.153 
+  4.909  -0.448  -0.112   0.113  -0.154  -0.036  -0.174   0.070  -0.114   0.061   0.048   0.072   0.053 
+  5.017  -0.125   0.051   0.147  -0.084   0.037  -0.202  -0.063  -0.097  -0.002  -0.126  -0.098  -0.069 
+  5.161  -0.121   0.184   0.055   0.049   0.044  -0.374  -0.188   0.100   0.019  -0.107  -0.062  -0.008 
+  5.354  -0.350  -0.033  -0.071  -0.029   0.250  -0.166   0.031   0.143   0.052  -0.176  -0.088  -0.177 
+  5.213  -0.212   0.158   0.031  -0.071  -0.003  -0.166   0.164  -0.062  -0.035  -0.064  -0.054  -0.087 
+  5.342  -0.169   0.167  -0.040  -0.289  -0.271  -0.390   0.016  -0.068   0.044  -0.085   0.005  -0.023 
+  5.635   0.144   0.261  -0.085  -0.234  -0.018  -0.145  -0.034  -0.123  -0.162  -0.148  -0.083  -0.171 
+  6.795   0.457   0.344  -0.036  -0.116   0.098   0.136   0.135  -0.109  -0.068  -0.178  -0.020  -0.089 
+  6.002   0.273   0.511  -0.003  -0.214   0.004  -0.209   0.077  -0.061   0.035  -0.087  -0.004  -0.317 
+  5.739   0.017   0.203  -0.188  -0.542  -0.267  -0.178   0.149  -0.157   0.002   0.104  -0.069  -0.138 
+  5.932  -0.004   0.247  -0.044  -0.329  -0.151  -0.220   0.051  -0.085   0.075  -0.163  -0.079   0.013 
+  5.669   0.131   0.388  -0.121  -0.234   0.006  -0.120   0.009  -0.088  -0.036  -0.082  -0.046  -0.119 
+  5.939   0.179   0.397   0.109  -0.210  -0.048  -0.189   0.053  -0.053  -0.080  -0.132  -0.091  -0.252 
+  6.112   0.446   0.651   0.252  -0.137  -0.143  -0.375  -0.145   0.090   0.167  -0.146  -0.225  -0.095 
+  5.838   0.465   0.360   0.062  -0.028  -0.032  -0.264  -0.351  -0.302   0.123  -0.124  -0.199  -0.019 
+  7.793   0.312  -0.349  -0.374   0.042  -0.252  -0.217  -0.062  -0.116  -0.113  -0.175  -0.033  -0.101 
+  8.450   0.401  -0.341  -0.328   0.121  -0.223  -0.195  -0.071  -0.070  -0.191  -0.167  -0.031  -0.138 
+  5.569   0.198   0.549   0.158  -0.081  -0.111  -0.199  -0.129  -0.168   0.031  -0.153  -0.217  -0.135 
+  5.452   0.268   0.423   0.019  -0.035   0.056  -0.111  -0.111  -0.208  -0.080  -0.162  -0.031  -0.245 
+  5.538   0.262   0.445  -0.123  -0.031   0.108   0.049   0.044  -0.082   0.002  -0.180  -0.082  -0.237 
+  5.605   0.149   0.278  -0.052  -0.203  -0.188  -0.079  -0.021  -0.109   0.084  -0.062  -0.085  -0.130 
+  6.784  -0.163   0.049  -0.193  -0.022  -0.020  -0.082   0.002  -0.237  -0.090  -0.180  -0.072  -0.067 
+  4.965   0.166   0.089   0.052   0.001  -0.126  -0.141  -0.174  -0.139  -0.052  -0.105   0.048  -0.065 
+  4.640   0.087   0.098   0.145   0.058  -0.002  -0.038   0.089  -0.040  -0.041  -0.078  -0.009  -0.099 
+  4.756   0.338   0.177   0.040  -0.056  -0.098  -0.161  -0.019  -0.091  -0.050  -0.120  -0.093  -0.049 
+  4.688   0.213   0.043   0.069   0.009  -0.038  -0.105   0.052  -0.177  -0.058  -0.135  -0.099  -0.037 
+  5.054   0.200   0.129  -0.100  -0.275  -0.094  -0.155  -0.200  -0.248  -0.046  -0.063   0.029  -0.055 
+  4.617   0.186   0.076   0.020  -0.144  -0.164  -0.293  -0.094  -0.129  -0.032  -0.105  -0.018  -0.195 
+  4.774   0.157   0.049  -0.043  -0.181  -0.032   0.066  -0.123  -0.076  -0.022  -0.023   0.136   0.005 
+  4.773   0.124   0.068   0.061  -0.223  -0.123  -0.028  -0.052  -0.183  -0.121  -0.242   0.053  -0.035 
+  5.128   0.164   0.100  -0.053  -0.337  -0.181  -0.096  -0.063  -0.013   0.007  -0.025  -0.091   0.025 
+  6.683  -0.573   0.036  -0.085  -0.182  -0.176  -0.310  -0.196  -0.164  -0.038  -0.060  -0.036  -0.109 
+  5.895  -0.064   0.252  -0.141  -0.282  -0.166  -0.161  -0.168  -0.173  -0.154  -0.150  -0.077  -0.072 
+  5.085   0.381   0.090   0.161  -0.316  -0.241  -0.156  -0.166  -0.124  -0.233  -0.009   0.003   0.054 
+  4.914   0.383   0.228  -0.018  -0.111  -0.149  -0.078  -0.136  -0.229  -0.175  -0.185  -0.121  -0.077 
+  5.095   0.096  -0.010   0.045  -0.174   0.010   0.022  -0.121  -0.020  -0.085  -0.170  -0.067  -0.049 
+  4.927   0.113   0.150  -0.013  -0.140  -0.096  -0.067  -0.223  -0.243   0.071  -0.074  -0.092  -0.208 
+  4.164   0.156  -0.028   0.079  -0.106  -0.221  -0.056  -0.268  -0.127  -0.123  -0.125  -0.039  -0.190 
+  4.167  -0.010  -0.124   0.057  -0.132  -0.155  -0.056   0.018  -0.106   0.030   0.003  -0.077  -0.202 
+  4.138  -0.034  -0.136   0.105  -0.057  -0.144  -0.084  -0.045  -0.187  -0.034  -0.073   0.068   0.062 
+  4.356   0.185  -0.177   0.135  -0.100  -0.199  -0.072   0.120  -0.175  -0.032  -0.163  -0.141  -0.104 
+  4.042   0.201   0.007   0.282  -0.046  -0.063  -0.046  -0.031  -0.263  -0.131  -0.048  -0.080  -0.126 
+  3.962   0.130  -0.168   0.221   0.039  -0.112   0.044   0.104  -0.019  -0.160  -0.147  -0.132  -0.031 
+  4.028   0.037  -0.219   0.176  -0.007  -0.098   0.271   0.145  -0.029  -0.086  -0.034  -0.074  -0.194 
+  4.180   0.326  -0.181   0.007  -0.209  -0.047  -0.045  -0.018  -0.116  -0.008  -0.004   0.021  -0.105 
+  4.057   0.219  -0.101   0.086  -0.108  -0.016   0.017  -0.103  -0.031  -0.098  -0.122  -0.034  -0.090 
+  4.492  -0.087   0.161  -0.179   0.020  -0.133  -0.063   0.049  -0.155  -0.126  -0.181  -0.047  -0.203 
+  4.609   0.097   0.150  -0.166   0.004  -0.022  -0.103   0.060  -0.163   0.009   0.019  -0.031  -0.200 
+  4.542   0.282  -0.121   0.068  -0.218  -0.056  -0.081  -0.016  -0.002   0.035  -0.012   0.007  -0.087 
+  4.490   0.181  -0.088   0.004  -0.173  -0.000   0.074   0.013  -0.134  -0.158  -0.097  -0.174  -0.191 
+  4.354   0.326   0.029   0.029  -0.279  -0.080   0.001   0.083  -0.032  -0.024   0.055  -0.107  -0.229 
+  4.271   0.100  -0.081   0.072  -0.160  -0.353  -0.234  -0.065   0.059   0.030  -0.101  -0.095  -0.112 
+  4.705   0.171   0.120   0.127  -0.172  -0.233  -0.046   0.027   0.080  -0.021  -0.051  -0.120  -0.359 
+  5.118   0.438  -0.005  -0.006  -0.229  -0.122   0.002  -0.007  -0.177  -0.192  -0.030  -0.149  -0.129 
+  5.052   0.194   0.004  -0.068  -0.436  -0.337  -0.009  -0.041  -0.104  -0.077  -0.105   0.035  -0.103 
+  4.977   0.199   0.068   0.051  -0.428  -0.188   0.114  -0.065  -0.201  -0.046  -0.165  -0.159  -0.177 
+  4.875   0.479  -0.276   0.060  -0.248  -0.122  -0.067  -0.107  -0.181  -0.023  -0.005  -0.012  -0.079 
+  4.455   0.449   0.015   0.131  -0.239  -0.087  -0.102  -0.141  -0.048  -0.042  -0.301  -0.144  -0.046 
+  4.791   0.534  -0.200  -0.009  -0.198  -0.119  -0.009  -0.112  -0.141   0.057  -0.067  -0.049  -0.035 
+  4.672   0.530  -0.033  -0.025  -0.210  -0.044   0.099   0.038  -0.076  -0.162  -0.285  -0.004  -0.025 
+  4.596   0.454  -0.096  -0.008  -0.348  -0.150  -0.073  -0.034  -0.160   0.012  -0.220  -0.057  -0.055 
+  5.022   0.638  -0.171  -0.121  -0.382  -0.135  -0.032  -0.087  -0.018  -0.080  -0.185  -0.178  -0.019 
+  5.068   0.630  -0.097   0.175  -0.236  -0.112   0.123  -0.213  -0.261   0.031  -0.184  -0.068  -0.160 
+  4.793   0.390   0.114   0.236  -0.284  -0.239   0.002  -0.046  -0.238   0.021  -0.206  -0.012  -0.023 
+  4.963   0.623   0.039   0.154  -0.417  -0.112  -0.048  -0.211  -0.099  -0.062  -0.358   0.011   0.055 
+  4.750   0.380  -0.184   0.328  -0.309  -0.324   0.001  -0.019  -0.119  -0.246  -0.142   0.079   0.179 
+  5.222   0.571  -0.072   0.200  -0.030  -0.187  -0.151  -0.205  -0.218  -0.027  -0.059   0.104  -0.138 
+  5.510   0.489   0.128   0.222  -0.094  -0.108  -0.248  -0.432  -0.165  -0.025   0.028   0.107  -0.353 
+  5.843   0.437  -0.014   0.107  -0.223  -0.240  -0.193  -0.312  -0.281   0.079  -0.009   0.143  -0.228 
+  5.700   0.474   0.025   0.110  -0.316  -0.215  -0.183  -0.247  -0.324   0.172  -0.049   0.075  -0.231 
+  5.635   0.651   0.154   0.138  -0.406  -0.147  -0.126  -0.373  -0.356   0.212  -0.089  -0.070  -0.245 
+  5.706   0.570   0.176   0.136  -0.429  -0.099  -0.197  -0.322  -0.389   0.236  -0.119  -0.005  -0.225 
+  5.751   0.600   0.338   0.126  -0.341  -0.145  -0.170  -0.357  -0.493   0.199  -0.030  -0.088  -0.269 
+  6.038   0.584  -0.038   0.066  -0.269  -0.162  -0.125  -0.366  -0.408   0.142  -0.203   0.018  -0.334 
+  6.041   0.562  -0.019   0.063  -0.041   0.005  -0.109  -0.248  -0.488  -0.158  -0.137   0.071  -0.249 
+  5.667   0.545   0.196   0.201  -0.138  -0.053  -0.232  -0.292  -0.530  -0.022   0.048  -0.013  -0.081 
+  6.137   0.788   0.272   0.004  -0.094  -0.064   0.106   0.065  -0.153  -0.129  -0.225  -0.261  -0.290 
+  6.086   0.789   0.573   0.275  -0.108  -0.009  -0.031  -0.094  -0.175  -0.131  -0.309  -0.255  -0.286 
+  5.666   0.541   0.209   0.064  -0.273  -0.135  -0.106  -0.211  -0.160  -0.040  -0.089  -0.042   0.024 
+  5.449   0.221   0.100   0.273  -0.042  -0.138  -0.246  -0.220  -0.320  -0.085  -0.149  -0.009  -0.000 
+  5.837  -0.024  -0.041   0.278  -0.070  -0.293  -0.154  -0.396  -0.320  -0.086  -0.127  -0.020   0.065 
+  7.107   0.105   0.053   0.267  -0.345  -0.275  -0.080  -0.302  -0.211   0.186  -0.104  -0.043  -0.074 
+  8.856   0.411   0.279   0.130  -0.478  -0.087  -0.354  -0.303  -0.095   0.227  -0.063  -0.062  -0.191 
+  7.508   0.161   0.234   0.522  -0.278  -0.230   0.110  -0.325  -0.203   0.128  -0.240  -0.049  -0.191 
+  8.805   0.528   0.124   0.182  -0.259  -0.079   0.055  -0.203  -0.273   0.040  -0.300  -0.051  -0.209 
+  9.235   0.664   0.201   0.170  -0.315   0.096   0.168  -0.305  -0.262  -0.046  -0.296  -0.017  -0.201 
+  6.993   0.052   0.346   0.311  -0.332  -0.167   0.376  -0.215  -0.208   0.150  -0.373   0.067  -0.181 
+  6.780   0.027   0.232   0.215  -0.589  -0.315   0.152  -0.509  -0.208   0.132  -0.268   0.108  -0.009 
+  6.447  -0.074   0.241   0.249  -0.472  -0.397   0.089  -0.630  -0.155   0.112  -0.284   0.262  -0.114 
+  6.583  -0.009   0.399   0.509  -0.532  -0.305  -0.010  -0.627  -0.293   0.061  -0.343   0.041  -0.128 
+  7.054  -0.260   0.300   0.533  -0.466  -0.339  -0.153  -0.752  -0.292   0.135  -0.386  -0.065  -0.179 
+  6.831  -0.191   0.340   0.558  -0.642  -0.450   0.053  -0.791  -0.417  -0.006  -0.433  -0.087  -0.246 
+  7.026  -0.275   0.396   0.498  -0.729  -0.560   0.208  -0.533  -0.290   0.121  -0.437  -0.073  -0.310 
+  6.899  -0.431   0.335   0.442  -0.872  -0.805   0.125  -0.542  -0.209   0.277  -0.230   0.020  -0.227 
+  6.822  -0.374   0.144   0.264  -0.830  -0.661   0.231  -0.527  -0.066   0.251  -0.227   0.044  -0.110 
+  6.765  -0.315   0.058   0.328  -0.831  -0.625   0.150  -0.614  -0.151   0.203  -0.202  -0.007  -0.063 
+  6.570  -0.160   0.250   0.346  -0.575  -0.767   0.024  -0.444  -0.090   0.115  -0.433   0.022  -0.083 
+  5.933  -0.245   0.329   0.301  -0.608  -0.423   0.243  -0.534  -0.218   0.097  -0.380   0.006  -0.119 
+  6.018   0.023   0.267   0.399  -0.444  -0.423   0.061  -0.230  -0.059   0.290  -0.319  -0.056  -0.194 
+  6.048   0.028   0.248   0.318  -0.188  -0.268   0.091  -0.186  -0.063  -0.034  -0.098   0.022  -0.145 
+  5.943  -0.015   0.260   0.255  -0.027  -0.253  -0.003  -0.141  -0.116   0.041  -0.119  -0.081  -0.123 
+  5.452   0.053   0.160   0.170  -0.174  -0.259  -0.154  -0.125  -0.185  -0.085   0.042  -0.035  -0.115 
+  5.680   0.297   0.109   0.336  -0.248  -0.188   0.003  -0.214  -0.116  -0.009  -0.234  -0.030  -0.052 
+  6.000   0.317   0.342   0.286  -0.059  -0.003  -0.175  -0.136  -0.210   0.073  -0.183  -0.036  -0.099 
+  5.914   0.008   0.145   0.032  -0.212   0.040   0.055  -0.231  -0.063   0.083  -0.129  -0.014  -0.020 
+  6.254   0.038   0.180   0.256  -0.351  -0.225   0.116  -0.327  -0.096   0.066  -0.274  -0.061  -0.199 
+  6.258  -0.180   0.274   0.468  -0.346  -0.326   0.081  -0.446  -0.129   0.064  -0.230  -0.030  -0.184 
+  6.383  -0.220   0.398   0.432  -0.572  -0.377  -0.009  -0.530  -0.248   0.191  -0.133   0.031  -0.185 
+  6.871  -0.202   0.311   0.525  -0.625  -0.544  -0.028  -0.357  -0.216   0.117   0.071   0.008  -0.279 
+  6.909  -0.284  -0.046   0.313  -0.424  -0.523   0.051  -0.174  -0.171  -0.091  -0.137   0.105  -0.247 
+  6.564  -0.456  -0.162   0.242  -0.259  -0.393   0.200   0.041  -0.112   0.037  -0.064   0.128  -0.454 
+  6.605  -0.317  -0.056   0.248  -0.147  -0.397   0.003  -0.049  -0.033  -0.027  -0.059   0.091  -0.482 
+  6.781  -0.187  -0.086   0.333  -0.099  -0.496  -0.065  -0.184  -0.099  -0.090  -0.068   0.163  -0.370 
+  6.719  -0.184  -0.217   0.109  -0.151  -0.501  -0.030   0.009   0.014  -0.074  -0.131   0.341  -0.343 
+  6.594  -0.076  -0.526  -0.177  -0.216  -0.549  -0.094   0.177   0.062  -0.163  -0.288   0.320  -0.394 
+  9.164   1.223  -0.147  -0.073  -0.117  -0.260  -0.210  -0.188  -0.139  -0.211  -0.261   0.089  -0.230 
+  9.615   1.225  -0.069   0.079  -0.140  -0.268  -0.174  -0.164  -0.168  -0.148  -0.186   0.082  -0.063 
+  7.476   0.783  -0.044   0.188  -0.097  -0.361  -0.041   0.148   0.040  -0.311  -0.179   0.222  -0.317 
+  6.610   0.085  -0.111  -0.028  -0.183  -0.324  -0.075   0.234   0.328  -0.122  -0.290   0.316  -0.229 
+  6.456  -0.049  -0.297   0.078  -0.180  -0.330  -0.169   0.347   0.169  -0.313  -0.271   0.232  -0.380 
+  6.450   0.090  -0.416  -0.004  -0.278  -0.365  -0.185   0.197  -0.018  -0.208  -0.247   0.255  -0.413 
+  6.580   0.350  -0.338   0.042  -0.146  -0.330  -0.279   0.187   0.237  -0.326  -0.204   0.170  -0.330 
+  8.643   0.351   0.017  -0.341  -0.310  -0.359  -0.131  -0.143  -0.226   0.006  -0.240  -0.002  -0.169 
+  8.804   0.071   0.167  -0.047  -0.412  -0.353  -0.041  -0.076  -0.139   0.172  -0.211   0.008  -0.063 
+  9.703  -0.238   0.376   0.053  -0.283  -0.255  -0.186  -0.020  -0.224   0.162  -0.395  -0.099  -0.066 
+  7.015   0.205   0.382   0.319  -0.074  -0.334  -0.209   0.085  -0.003   0.120  -0.172   0.042  -0.104 
+  6.557   0.372   0.278   0.099  -0.219  -0.324  -0.119   0.131  -0.025  -0.112  -0.090  -0.137  -0.320 
+  6.041   0.253   0.135   0.106  -0.022  -0.244  -0.132   0.013  -0.170  -0.195  -0.206   0.005  -0.188 
+  6.274   0.443   0.080   0.012  -0.208  -0.279   0.034   0.023  -0.069  -0.287  -0.054  -0.094  -0.257 
+  6.291   0.462   0.361   0.206  -0.163  -0.159  -0.050  -0.086  -0.270  -0.192  -0.126   0.013  -0.197 
+  6.061   0.350   0.281   0.114  -0.168  -0.031  -0.127  -0.138  -0.411  -0.189  -0.126  -0.094  -0.351 
+  5.758   0.312   0.120   0.042  -0.179  -0.397  -0.099  -0.166  -0.296  -0.169  -0.121  -0.050  -0.174 
+  5.309   0.145   0.079   0.213  -0.221  -0.349  -0.175  -0.096  -0.154   0.003  -0.133  -0.128  -0.087 
+  5.274   0.229   0.034   0.144  -0.181  -0.387  -0.056   0.035  -0.205  -0.063  -0.172  -0.218  -0.221 
+  5.881   0.427   0.136  -0.103  -0.246  -0.198  -0.136  -0.129  -0.345  -0.100  -0.049   0.067  -0.098 
+  5.556   0.541  -0.122  -0.132  -0.173  -0.120   0.093  -0.002  -0.353  -0.244  -0.192   0.082  -0.197 
+  5.915   0.586  -0.119  -0.092  -0.247  -0.219   0.055  -0.027  -0.182   0.160  -0.052  -0.106  -0.135 
+  6.341   0.885   0.221  -0.033  -0.077  -0.042   0.200  -0.054  -0.140   0.039   0.004  -0.193  -0.229 
+  6.169   0.543   0.070  -0.107  -0.081  -0.074   0.039  -0.050  -0.151   0.005  -0.063   0.047   0.023 
+  5.758   0.281   0.065  -0.127  -0.205  -0.185  -0.052   0.038  -0.137  -0.111  -0.094  -0.061  -0.218 
+  5.483   0.232  -0.045  -0.050  -0.257  -0.174   0.053   0.082  -0.129  -0.219  -0.136  -0.151  -0.125 
+  5.424   0.259  -0.022  -0.017  -0.076  -0.130  -0.042   0.073  -0.035  -0.045  -0.242  -0.253  -0.093 
+  5.656   0.178  -0.103  -0.110  -0.081  -0.089  -0.103  -0.015  -0.232  -0.154  -0.232  -0.084  -0.064 
+  5.751   0.095  -0.012  -0.070  -0.169  -0.165  -0.138  -0.023  -0.039  -0.037  -0.138  -0.127  -0.086 
+  5.988  -0.113  -0.150  -0.451  -0.062  -0.215  -0.081  -0.058  -0.047  -0.065  -0.110   0.034  -0.190 
+  5.610  -0.041   0.156  -0.139  -0.151  -0.189  -0.043  -0.018  -0.097  -0.080  -0.134  -0.004  -0.060 
+  5.338  -0.038   0.108  -0.205  -0.207  -0.144  -0.038   0.070   0.061  -0.028  -0.095  -0.066  -0.039 
+  5.550   0.138  -0.016  -0.179  -0.102   0.045   0.077  -0.041  -0.214  -0.124  -0.195  -0.141  -0.156 
+  5.281  -0.051   0.062  -0.083  -0.127  -0.045   0.010  -0.018  -0.047   0.221   0.006  -0.084  -0.106 
+  4.710   0.054   0.154   0.176  -0.135  -0.099  -0.066   0.022  -0.152  -0.011  -0.099  -0.122  -0.172 
+  5.259   0.156   0.187   0.037  -0.241  -0.078  -0.211  -0.066  -0.044   0.015  -0.137  -0.030   0.037 
+  5.239   0.199  -0.006  -0.073  -0.249  -0.141  -0.058  -0.055  -0.196  -0.021   0.068  -0.025  -0.039 
+  5.092   0.092  -0.238  -0.249  -0.243  -0.083  -0.172  -0.124  -0.224  -0.042  -0.130  -0.151  -0.168 
+  4.837   0.086  -0.259  -0.032  -0.217  -0.176  -0.195  -0.096  -0.137  -0.068  -0.176  -0.217  -0.148 
+  4.971   0.150  -0.270   0.113  -0.084  -0.014   0.022  -0.073  -0.182  -0.044  -0.117  -0.157  -0.099 
+  4.771   0.169  -0.190   0.217  -0.134  -0.060  -0.234  -0.084  -0.219  -0.240  -0.126  -0.104  -0.049 
+  4.185   0.159  -0.160   0.194  -0.073  -0.117  -0.010   0.079   0.071   0.160   0.070  -0.093   0.088 
+  4.256   0.287  -0.215   0.150  -0.131  -0.091   0.101   0.246   0.056  -0.103  -0.076  -0.150  -0.002 
+  4.442   0.158  -0.304   0.189   0.023  -0.103   0.174   0.189  -0.095  -0.129  -0.239  -0.246  -0.126 
+  4.465   0.229  -0.296   0.080  -0.054  -0.102   0.168   0.026  -0.109   0.018  -0.096  -0.154  -0.130 
+  4.267   0.248  -0.190   0.071  -0.216  -0.095   0.040  -0.004  -0.274  -0.176  -0.062   0.008  -0.144 
+  4.446   0.443  -0.128   0.160  -0.058  -0.114   0.099  -0.026  -0.310  -0.231  -0.277  -0.038  -0.076 
+  4.349   0.286  -0.080   0.161  -0.022  -0.038  -0.025  -0.054  -0.208  -0.093  -0.078  -0.081  -0.229 
+  4.079  -0.055  -0.105   0.279   0.067  -0.145   0.090  -0.147  -0.345  -0.160  -0.044  -0.050  -0.142 
+  4.418  -0.101  -0.015   0.141  -0.142  -0.159   0.012   0.065  -0.058   0.045  -0.092  -0.078  -0.017 
+  4.803   0.165  -0.005   0.030  -0.152  -0.142  -0.093   0.086  -0.011   0.128  -0.205  -0.078  -0.179 
+  4.888   0.383   0.010   0.163  -0.281  -0.077  -0.013   0.012  -0.128  -0.044   0.045  -0.011  -0.173 
+  5.880   0.246   0.315   0.317  -0.350  -0.154   0.018  -0.044  -0.207   0.000  -0.112  -0.019  -0.129 
+  5.792   0.083   0.108   0.479  -0.340  -0.208  -0.016  -0.181  -0.108   0.072  -0.034   0.003  -0.107 
+  6.071  -0.081   0.077   0.623  -0.377  -0.120  -0.039  -0.208  -0.175   0.034  -0.010   0.071  -0.054 
+  6.345   0.077   0.107   0.381  -0.403  -0.285  -0.165  -0.165  -0.256   0.042  -0.020  -0.073  -0.228 
+  6.834   0.227   0.284   0.465  -0.363  -0.277   0.114  -0.006   0.038   0.048  -0.093  -0.123  -0.244 
+  7.263   0.837   0.493   0.242  -0.372  -0.110   0.086  -0.278  -0.208  -0.245  -0.102   0.031  -0.083 
+  7.754   0.614   0.294   0.224  -0.362  -0.045  -0.090  -0.181  -0.231  -0.070  -0.233   0.050  -0.121 
+  8.058   0.642   0.058   0.155  -0.100  -0.169  -0.183  -0.300  -0.208  -0.068  -0.367   0.024  -0.007 
+  8.455   0.834   0.207   0.203  -0.001  -0.065  -0.207  -0.332  -0.376  -0.028  -0.387  -0.084  -0.035 
+  7.214   0.081   0.180   0.171  -0.082  -0.310  -0.360  -0.159  -0.098  -0.175  -0.238  -0.025  -0.048 
+  8.148  -0.418   0.028   0.034  -0.085  -0.320  -0.064  -0.164  -0.184   0.084  -0.197  -0.035  -0.081 
+  7.378  -0.235   0.222   0.088  -0.106  -0.275  -0.173  -0.139  -0.090   0.057  -0.171  -0.045  -0.029 
+  6.849  -0.348   0.382   0.256   0.093  -0.024  -0.342  -0.151  -0.279  -0.224  -0.275   0.076   0.066 
+  7.613  -0.379   0.421   0.114   0.000  -0.103  -0.156  -0.019  -0.192  -0.007  -0.050  -0.075   0.039 
+  7.199  -0.114   0.518   0.017  -0.059  -0.055  -0.183   0.070  -0.115  -0.051  -0.169  -0.191  -0.159 
+  6.883  -0.204   0.377   0.067  -0.165  -0.135  -0.280   0.010  -0.310  -0.135  -0.161  -0.089  -0.218 
+  6.231  -0.225   0.349   0.140  -0.060  -0.049  -0.046  -0.056  -0.310  -0.161  -0.251  -0.033  -0.116 
+  5.599  -0.279   0.246   0.040  -0.015  -0.102  -0.264  -0.050  -0.098  -0.122  -0.097  -0.018  -0.080 
+  5.905  -0.048   0.294   0.025   0.244   0.320  -0.027  -0.029  -0.058  -0.229  -0.177  -0.035  -0.114 
+  5.503  -0.143   0.230   0.053   0.109   0.098  -0.078   0.003  -0.125  -0.074  -0.209  -0.114  -0.173 
+  5.241  -0.349   0.079   0.098   0.047   0.036  -0.025  -0.013  -0.033  -0.072  -0.269  -0.315  -0.253 
+  6.270   0.350   0.098  -0.102  -0.077  -0.116  -0.354  -0.199  -0.165  -0.134  -0.167  -0.148  -0.255 
+  6.391   0.946   0.500  -0.044  -0.081  -0.186  -0.348  -0.286  -0.123  -0.066  -0.092  -0.013  -0.149 
+  5.058  -0.009   0.517  -0.042   0.098  -0.028  -0.181  -0.197  -0.090  -0.005   0.038   0.038   0.016 
+  4.809  -0.161   0.063  -0.195  -0.187  -0.131  -0.152  -0.189  -0.115  -0.021   0.125   0.114  -0.083 
+  4.805  -0.082   0.110  -0.079  -0.217  -0.127  -0.097  -0.151   0.041  -0.056   0.044   0.027  -0.037 
+  4.214  -0.170  -0.009  -0.028   0.034  -0.127  -0.145  -0.093  -0.074   0.097   0.164   0.068  -0.024 
+  4.449  -0.145   0.112   0.013  -0.051  -0.179   0.013  -0.059  -0.049  -0.014  -0.034  -0.020   0.001 
+  4.500  -0.248   0.056   0.127   0.047  -0.121  -0.087  -0.154  -0.150  -0.095  -0.041  -0.067  -0.009 
+  4.236   0.318   0.063   0.163  -0.002  -0.135  -0.078  -0.108  -0.232  -0.139  -0.118   0.108   0.005 
+  4.190   0.097  -0.007   0.096  -0.101   0.028  -0.062  -0.132  -0.134  -0.144   0.061   0.015  -0.216 
+  4.131  -0.077  -0.144   0.031  -0.253   0.166   0.112   0.096  -0.014  -0.055   0.016   0.110   0.020 
+  4.507  -0.071  -0.256   0.068  -0.155  -0.134  -0.140  -0.103  -0.075   0.019   0.050   0.089   0.002 
+  4.546   0.178   0.039   0.124  -0.063   0.050  -0.096  -0.190  -0.067   0.017  -0.065   0.035  -0.081 
+  3.803   0.126  -0.057  -0.020  -0.146  -0.114   0.040  -0.032  -0.043  -0.206  -0.002   0.107  -0.032 
+  3.961   0.103   0.001  -0.080  -0.102  -0.108   0.046   0.062  -0.158  -0.151   0.073   0.127  -0.015 
+  3.957  -0.260  -0.019  -0.077  -0.057  -0.097  -0.083   0.169   0.057  -0.108  -0.001   0.119   0.009 
+  4.337   0.001  -0.006   0.005   0.012  -0.041   0.094  -0.045  -0.244   0.007  -0.217  -0.225   0.008 
+  4.414   0.021   0.099  -0.105  -0.160   0.069   0.106  -0.160  -0.337  -0.082  -0.067  -0.043  -0.016 
+  4.728  -0.136   0.322  -0.076  -0.027  -0.032  -0.125   0.049  -0.039  -0.095  -0.153  -0.083  -0.088 
+  4.561  -0.292   0.322   0.021   0.099  -0.097  -0.252  -0.024  -0.058  -0.177  -0.147  -0.029  -0.065 
+  4.488  -0.442   0.177  -0.074   0.163   0.093  -0.187  -0.033  -0.163  -0.044  -0.120  -0.027   0.104 
+  4.767  -0.377   0.251   0.113   0.078   0.082  -0.137  -0.074  -0.269  -0.051  -0.302  -0.148   0.165 
+  4.819  -0.367   0.132   0.060  -0.074   0.013  -0.145  -0.010  -0.179   0.174   0.050   0.114   0.038 
+  5.336  -0.483   0.247   0.028  -0.043  -0.023   0.035  -0.038   0.018   0.096  -0.068  -0.034  -0.103 
+  5.478  -0.602   0.098  -0.073  -0.011  -0.079  -0.097  -0.188  -0.181  -0.089   0.009  -0.032  -0.050 
+  5.138  -0.158   0.140   0.118  -0.146   0.000  -0.073  -0.075  -0.134  -0.072  -0.083  -0.264  -0.171 
+  4.639  -0.370   0.066   0.098  -0.088   0.022  -0.014  -0.064  -0.092  -0.081  -0.203  -0.238  -0.202 
+  4.862  -0.191   0.042   0.065  -0.399  -0.275  -0.232   0.016  -0.016   0.049  -0.033   0.100  -0.149 
+  4.343   0.355   0.247   0.097  -0.223  -0.286  -0.132   0.127  -0.079  -0.132  -0.267  -0.063   0.073 
+  4.457  -0.100   0.257   0.138  -0.131   0.071  -0.070   0.079  -0.109  -0.147  -0.127  -0.107   0.052 
+  4.999   0.308   0.333   0.062  -0.344   0.088  -0.180  -0.059  -0.040  -0.059   0.007   0.063  -0.077 
+  5.270   0.492   0.384  -0.073  -0.284   0.042   0.007   0.018   0.032  -0.077  -0.011   0.042  -0.069 
+  5.596   0.491   0.327   0.060  -0.242  -0.089   0.005   0.054  -0.067  -0.020  -0.165   0.068  -0.013 
+  6.103   0.388   0.256  -0.086  -0.357   0.059   0.009   0.009  -0.093  -0.066  -0.013  -0.066  -0.200 
+  6.751   0.328   0.299   0.133  -0.299  -0.054  -0.022  -0.245  -0.117  -0.063  -0.109  -0.042  -0.137 
+  7.244   0.201   0.077   0.077  -0.214  -0.109  -0.093  -0.250  -0.101  -0.067  -0.073  -0.084  -0.095 
+  6.926   0.107   0.225  -0.098  -0.225   0.019  -0.089  -0.024  -0.058  -0.103  -0.159  -0.014  -0.094 
+  6.716   0.192   0.116  -0.135  -0.287   0.102  -0.102  -0.020   0.061  -0.065  -0.245   0.144  -0.014 
+  6.765   0.321  -0.012   0.011  -0.282   0.047  -0.137  -0.012  -0.094  -0.057  -0.176   0.160  -0.086 
+  6.982   0.277   0.170   0.065  -0.207  -0.009   0.020  -0.191  -0.251  -0.036  -0.237  -0.019  -0.175 
+  6.419  -0.003   0.252   0.320  -0.187  -0.193  -0.329  -0.131  -0.038   0.074  -0.058   0.068  -0.145 
+  7.266  -0.609   0.160  -0.051  -0.353  -0.390  -0.323  -0.123   0.035   0.199   0.024   0.304   0.235 
+  7.863  -0.338   0.295  -0.016  -0.246  -0.097  -0.175   0.005  -0.050   0.081   0.023  -0.065   0.007 
+  7.897  -0.232   0.297   0.124  -0.252  -0.191  -0.235  -0.173  -0.205  -0.099  -0.041  -0.035  -0.069 
+  8.013  -0.494   0.161   0.157  -0.231  -0.090  -0.179  -0.366  -0.161  -0.056   0.049   0.058  -0.119 
+  7.931  -0.530   0.031   0.126  -0.327  -0.069  -0.139  -0.207  -0.048   0.056   0.059   0.113   0.006 
+  7.623  -0.497   0.118  -0.053  -0.464  -0.133  -0.136  -0.308  -0.188   0.071  -0.000  -0.095   0.041 
+  7.939  -0.496   0.015   0.115  -0.362  -0.105  -0.166  -0.356  -0.157  -0.006  -0.127   0.007  -0.108 
+  8.006  -0.515   0.054   0.103  -0.516  -0.350  -0.153  -0.306  -0.106  -0.151  -0.110   0.077  -0.060 
+  7.417  -0.643  -0.109   0.101  -0.571  -0.293  -0.078  -0.331  -0.095  -0.022   0.025   0.075  -0.059 
+  7.254  -0.552   0.055   0.051  -0.266  -0.127   0.117  -0.374  -0.092   0.025   0.019  -0.139  -0.086 
+  7.148  -0.634  -0.105   0.137  -0.270  -0.270   0.090  -0.253  -0.115  -0.071   0.011   0.020  -0.103 
+  7.323  -0.924  -0.192   0.165  -0.407  -0.288   0.079  -0.377  -0.150  -0.138  -0.036   0.018  -0.019 
+  6.852  -1.121  -0.353   0.037  -0.153  -0.253  -0.223  -0.417  -0.125  -0.054   0.074   0.184  -0.087 
+  6.781  -0.753  -0.214   0.125  -0.188  -0.143  -0.283  -0.349  -0.180  -0.029   0.012   0.142  -0.137 
+  6.355  -0.656  -0.183   0.179  -0.067   0.059  -0.181  -0.463  -0.372  -0.024  -0.031   0.123  -0.086 
+  6.158  -0.127  -0.070  -0.049  -0.460  -0.180  -0.103  -0.077   0.036  -0.034  -0.109   0.038  -0.015 
+  5.485   0.093   0.224  -0.137  -0.500  -0.053  -0.036  -0.141  -0.101  -0.012  -0.088  -0.043  -0.014 
+  5.398   0.729   0.138  -0.045  -0.223  -0.119  -0.424  -0.253  -0.219  -0.094  -0.146  -0.011  -0.095 
+  6.905   0.889  -0.294  -0.001  -0.437   0.014  -0.427  -0.400  -0.071  -0.059  -0.171  -0.027   0.023 
+  7.501   0.927  -0.501   0.107  -0.568   0.098  -0.491  -0.506  -0.042   0.006  -0.190  -0.067   0.093 
+  7.752   0.790  -0.378   0.026  -0.529   0.128  -0.473  -0.538  -0.039   0.076  -0.211  -0.075   0.112 
+  7.485   0.932  -0.417   0.121  -0.563   0.147  -0.419  -0.600  -0.003   0.041  -0.197  -0.056   0.090 
+  7.180   1.031  -0.375   0.153  -0.497   0.088  -0.364  -0.661  -0.039   0.035  -0.194  -0.015   0.047 
+  6.928   0.979  -0.261   0.163  -0.369   0.069  -0.316  -0.576  -0.150   0.020  -0.175  -0.058  -0.022 
+  6.685   0.873  -0.229   0.179  -0.236   0.105  -0.243  -0.563  -0.154  -0.037  -0.272  -0.052  -0.015 
+  5.960   0.882  -0.111   0.260  -0.175   0.034  -0.071  -0.402  -0.104  -0.075  -0.370  -0.245   0.041 
+  5.509   0.693  -0.066   0.217  -0.082   0.069  -0.128  -0.310  -0.027  -0.091  -0.205  -0.015   0.011 
+  5.260   0.764   0.118  -0.075  -0.123  -0.092  -0.412  -0.300  -0.036  -0.068  -0.024   0.069   0.074 
+  4.793   0.668   0.195   0.181  -0.045  -0.210  -0.383  -0.320   0.034  -0.044  -0.063   0.010   0.075 
+  4.688   0.616   0.167   0.110  -0.012  -0.216  -0.344  -0.266  -0.170  -0.007   0.057   0.131   0.050 
+  4.612   0.514  -0.063   0.018  -0.041   0.077  -0.251  -0.238  -0.067  -0.001   0.026   0.031   0.040 
+  4.625   0.637   0.109   0.024  -0.214   0.037  -0.347  -0.233  -0.016  -0.015   0.048   0.056   0.042 
+  4.764   0.746   0.001  -0.031  -0.078   0.119  -0.130  -0.221  -0.015  -0.024  -0.029  -0.060  -0.001 
+  5.445   0.776  -0.025  -0.260  -0.138  -0.011  -0.047  -0.118  -0.123   0.139   0.082  -0.031   0.051 
+  5.848   0.938  -0.249  -0.258  -0.074   0.027  -0.010  -0.031  -0.003   0.186  -0.063  -0.067   0.002 
+  5.989   1.053  -0.478  -0.267  -0.092   0.041   0.079  -0.047  -0.079   0.319  -0.034  -0.174  -0.090 
+  6.173   1.112  -0.569  -0.242  -0.076   0.097  -0.084  -0.097  -0.039   0.240  -0.135  -0.134  -0.037 
+  6.096   1.064  -0.425  -0.242  -0.258   0.071  -0.085  -0.121  -0.073   0.245  -0.082  -0.181   0.066 
+  5.821   0.805  -0.332  -0.176  -0.163  -0.073  -0.158  -0.061  -0.048   0.223  -0.046  -0.013   0.039 
+  5.587   0.691  -0.308   0.056  -0.204  -0.116  -0.209  -0.137  -0.040   0.106   0.050   0.024   0.117 
+  5.180   0.608  -0.165   0.225  -0.262   0.002  -0.091  -0.146  -0.057   0.249   0.157   0.003   0.093 
+  4.375   0.531  -0.086   0.093  -0.210  -0.109  -0.049  -0.086  -0.093   0.135  -0.004  -0.073  -0.104 
+  4.530   0.435  -0.174   0.127  -0.134  -0.013   0.099  -0.105  -0.097   0.114   0.001   0.114   0.022 
+  3.909   0.498   0.064   0.309   0.032  -0.042  -0.011  -0.014   0.089   0.040  -0.068   0.087   0.033 
+  3.816   0.365  -0.193   0.123   0.109   0.170  -0.155  -0.078   0.058   0.056  -0.072   0.048  -0.049 
+  3.702   0.367  -0.205   0.025  -0.108   0.005  -0.229  -0.123  -0.123  -0.125  -0.007  -0.075  -0.060 
+  3.463   0.272   0.009   0.257  -0.037  -0.108  -0.245  -0.161  -0.011  -0.108   0.019  -0.022  -0.036 
+  3.626   0.476   0.135   0.323   0.076  -0.025  -0.079  -0.180  -0.236  -0.023   0.101  -0.064  -0.021 
+  3.737   0.463  -0.127   0.054   0.088  -0.087  -0.178  -0.095  -0.055   0.133   0.051  -0.071   0.068 
+  5.465   0.177   0.354   0.321  -0.011   0.120  -0.078  -0.316  -0.084  -0.108  -0.054  -0.222  -0.011 
+  7.529  -0.129  -0.004   0.184   0.065   0.235  -0.263  -0.372  -0.031   0.015  -0.021  -0.394   0.028 
+  5.619  -0.148  -0.217   0.063  -0.045   0.229  -0.189  -0.266   0.169   0.268   0.223  -0.288  -0.082 
+  3.822   0.009  -0.002   0.113  -0.023   0.131  -0.063  -0.033  -0.011   0.072   0.098  -0.017   0.071 
+  4.589  -0.084   0.115  -0.079   0.036   0.058  -0.043  -0.210  -0.272  -0.037  -0.011  -0.009   0.017 
+  4.772  -0.169  -0.120   0.079   0.104  -0.037  -0.060  -0.126  -0.153  -0.141  -0.112   0.006  -0.016 
+  5.807  -0.684  -0.075   0.102  -0.182  -0.046   0.065  -0.313   0.036   0.136   0.021  -0.025  -0.086 
+  6.310  -0.465  -0.027   0.138  -0.429   0.031   0.068  -0.323  -0.140   0.124  -0.024  -0.078  -0.174 
+  6.345  -0.963  -0.161   0.180  -0.284   0.166  -0.057  -0.163  -0.045   0.172   0.070   0.065  -0.126 
+  5.899  -0.294   0.000   0.200  -0.080   0.060  -0.015  -0.134  -0.208   0.095   0.043  -0.161  -0.038 
+  6.192   0.008   0.036   0.085   0.058  -0.105  -0.190  -0.426  -0.257   0.201  -0.051  -0.118  -0.043 
+  5.828  -0.024   0.352   0.089  -0.212  -0.105  -0.132  -0.174   0.043   0.007   0.022   0.013  -0.024 
+  5.543   0.241   0.263   0.148  -0.057  -0.138  -0.198  -0.208  -0.108  -0.095  -0.060  -0.117  -0.011 
+  5.217   0.047  -0.122   0.097  -0.052   0.010  -0.129  -0.218  -0.057  -0.169  -0.134  -0.070   0.005 
+  5.333   0.001   0.016   0.073  -0.127  -0.040  -0.077  -0.146  -0.143  -0.052  -0.123  -0.173  -0.074 
+  5.090   0.180   0.044   0.013  -0.142  -0.095   0.010  -0.186  -0.088  -0.085  -0.097  -0.190  -0.265 
+  5.032   0.037   0.068   0.001  -0.239  -0.131  -0.010  -0.175  -0.190  -0.101  -0.124   0.008  -0.093 
+  4.498   0.306  -0.034   0.068  -0.044   0.039  -0.125  -0.126  -0.091   0.013  -0.006  -0.024   0.040 
+  4.142   0.410   0.084  -0.119  -0.246  -0.045  -0.138  -0.118  -0.206  -0.147  -0.022   0.016  -0.177 
+  4.637  -0.144  -0.140  -0.001  -0.321   0.018  -0.245  -0.182  -0.066  -0.156  -0.132   0.073   0.009 
+  5.147  -0.208  -0.131  -0.034  -0.202   0.026   0.031  -0.165  -0.036   0.024   0.016   0.004  -0.032 
+  5.204   0.007   0.067  -0.120  -0.221   0.125   0.041  -0.156  -0.059  -0.000  -0.107   0.025   0.070 
+  5.809  -0.690   0.078   0.081   0.039   0.090  -0.207  -0.219  -0.158   0.022   0.036  -0.020  -0.043 
+  5.334  -0.363   0.075  -0.007  -0.171  -0.064  -0.166  -0.168  -0.053   0.102   0.028   0.010  -0.049 
+  5.812   0.394   0.389  -0.052  -0.353  -0.244  -0.349  -0.119  -0.294  -0.145  -0.141  -0.040   0.006 
+  5.500  -0.021   0.105   0.174  -0.095  -0.232  -0.206  -0.285  -0.279   0.064  -0.091   0.075  -0.086 
+  7.011  -0.206   0.051   0.128  -0.397  -0.373  -0.180  -0.168  -0.290   0.078  -0.001  -0.100   0.126 
+  7.045  -0.246   0.150   0.189  -0.593  -0.306  -0.169  -0.307  -0.133   0.116  -0.079  -0.153  -0.003 
+  6.476  -0.220   0.103   0.532  -0.758  -0.332  -0.279  -0.324  -0.259   0.054   0.053   0.058  -0.177 
+  6.355  -0.195   0.050   0.418  -0.832  -0.383  -0.264   0.000  -0.278   0.019  -0.039   0.046  -0.119 
+  5.331  -0.173  -0.056   0.280  -0.319  -0.143  -0.249  -0.049  -0.272   0.065  -0.118  -0.001  -0.245 
+  4.885  -0.087   0.192   0.183  -0.375  -0.325  -0.232  -0.105  -0.235   0.058  -0.191  -0.034  -0.079 
+  4.976   0.013   0.376   0.202  -0.277  -0.265  -0.157  -0.217  -0.273  -0.097  -0.013   0.033   0.001 
+  4.867   0.335   0.192   0.275  -0.332  -0.030  -0.108  -0.032  -0.276  -0.215  -0.118  -0.081  -0.070 
+  4.510   0.115   0.139   0.183  -0.131  -0.148  -0.056  -0.095  -0.141  -0.114  -0.384  -0.144  -0.062 
+  5.184   0.117   0.112  -0.012  -0.314  -0.226  -0.099  -0.236  -0.181  -0.110  -0.246   0.004   0.024 
+  5.047  -0.259   0.157   0.080  -0.312  -0.162  -0.184  -0.286  -0.130  -0.263   0.113   0.215   0.004 
+  5.881  -0.098  -0.165   0.361  -0.310  -0.467  -0.457  -0.406  -0.071  -0.300  -0.022   0.350   0.155 
+  6.777  -0.263  -0.468   0.218  -0.526  -0.501  -0.700  -0.474  -0.085  -0.325  -0.164   0.431   0.082 
+  7.446  -0.209  -0.298   0.188  -0.491  -0.333  -0.725  -0.312   0.019  -0.213  -0.348   0.439  -0.101 
+  7.584  -0.224  -0.349   0.069  -0.615  -0.348  -0.827  -0.225   0.133  -0.045  -0.342   0.414  -0.212 
+  7.547  -0.267  -0.335  -0.000  -0.611  -0.259  -0.676  -0.094   0.281   0.085  -0.447   0.290  -0.260 
+  7.652  -0.020  -0.233   0.037  -0.622  -0.325  -0.713  -0.136   0.318   0.181  -0.468   0.201  -0.172 
+  7.464   0.106  -0.330  -0.230  -0.721  -0.335  -0.677  -0.222   0.271   0.070  -0.486   0.204  -0.171 
+  7.383   0.157   0.217  -0.245  -0.529  -0.274  -0.621  -0.125   0.141  -0.045  -0.101   0.254  -0.257 
+  6.969   0.275  -0.113  -0.099  -0.384  -0.234  -0.718  -0.199   0.054   0.039  -0.250   0.345  -0.200 
+  6.475   0.408  -0.152  -0.137  -0.370  -0.160  -0.466  -0.245   0.089   0.052  -0.114   0.078  -0.135 
+  5.874   0.393  -0.208  -0.108  -0.274  -0.156  -0.357  -0.004   0.198   0.056  -0.285   0.012  -0.130 
+  5.836   0.590   0.032  -0.009  -0.394  -0.278  -0.271  -0.197  -0.030   0.198  -0.217   0.067  -0.145 
+  5.575   0.544  -0.114  -0.022  -0.244  -0.146  -0.204  -0.218  -0.286  -0.073  -0.160  -0.065  -0.199 
+  5.387   0.498  -0.307  -0.182  -0.237  -0.363  -0.304  -0.332  -0.198   0.022  -0.145  -0.138  -0.134 
+  5.410   0.352  -0.173  -0.186  -0.400  -0.215  -0.249  -0.286  -0.094   0.057  -0.083  -0.080   0.019 
+  5.595   0.382  -0.302  -0.170  -0.388  -0.206  -0.287  -0.377  -0.233   0.050  -0.116  -0.020   0.004 
+  5.739   0.328  -0.093  -0.125  -0.219  -0.297  -0.283  -0.311  -0.069  -0.014  -0.171   0.025  -0.094 
+  5.891   0.299   0.024  -0.030  -0.133  -0.153  -0.221  -0.098  -0.153  -0.041  -0.273  -0.038  -0.101 
+  5.967   0.266  -0.105  -0.019  -0.137  -0.032  -0.182  -0.284  -0.227  -0.163  -0.253   0.016  -0.032 
+  6.032   0.487   0.069  -0.317  -0.207  -0.170  -0.216  -0.264  -0.196  -0.075  -0.182  -0.060  -0.013 
+  5.788   0.661   0.166  -0.253  -0.371  -0.165  -0.295  -0.265  -0.156  -0.079  -0.196  -0.081   0.045 
+  7.505  -0.224   0.004  -0.151  -0.269  -0.316  -0.228  -0.208  -0.200  -0.053  -0.126   0.065   0.027 
+  6.550  -0.011  -0.055  -0.392  -0.544  -0.409  -0.231  -0.170  -0.216  -0.104  -0.190   0.003   0.022 
+  5.908   0.628  -0.001  -0.412  -0.415   0.142  -0.304  -0.024  -0.143  -0.338  -0.142  -0.206  -0.133 
+  5.913   0.681  -0.013  -0.387  -0.417  -0.059  -0.296  -0.041  -0.095  -0.120  -0.118  -0.124  -0.197 
+  6.065   0.738  -0.285  -0.551  -0.389   0.021  -0.388  -0.104  -0.187   0.069  -0.019  -0.053  -0.164 
+  6.552   0.777  -0.501  -0.509  -0.297   0.180  -0.479  -0.123  -0.080   0.107  -0.105  -0.114  -0.208 
+  6.680   0.351  -0.603  -0.320  -0.340   0.215  -0.404  -0.057   0.033  -0.004  -0.219  -0.199  -0.313 
+  7.177   0.084  -0.718  -0.310  -0.645   0.009  -0.398   0.164   0.191  -0.045  -0.280   0.067  -0.032 
+  7.558   0.092  -0.729  -0.115  -0.608  -0.139  -0.531   0.180   0.207  -0.098  -0.285   0.167  -0.153 
+  7.785  -0.125  -0.719  -0.073  -0.644  -0.226  -0.409   0.356   0.109   0.018  -0.232   0.255  -0.132 
+  7.431  -0.292  -0.635   0.054  -0.737  -0.407  -0.258   0.176  -0.052   0.112  -0.172   0.022  -0.286 
+  7.405  -0.204  -0.453   0.210  -0.659  -0.394  -0.146   0.121  -0.144   0.255  -0.234   0.015  -0.207 
+  7.071  -0.355  -0.345   0.245  -0.773  -0.477  -0.163  -0.011  -0.283   0.037  -0.110   0.136  -0.046 
+  6.554  -0.447  -0.217   0.355  -0.582  -0.431   0.053  -0.021  -0.183   0.008  -0.097   0.130  -0.066 
+  5.879  -0.261  -0.338   0.234  -0.359  -0.138   0.062  -0.202  -0.253   0.022  -0.152   0.027  -0.060 
+  6.251  -0.258   0.013   0.159  -0.200  -0.179  -0.228  -0.137  -0.037  -0.101  -0.205  -0.156   0.025 
+  6.326  -0.206   0.125  -0.029  -0.042  -0.103  -0.275  -0.160  -0.048  -0.114  -0.220  -0.054  -0.021 
+  7.694  -0.429   0.062   0.160  -0.141  -0.131  -0.436  -0.292  -0.172  -0.164  -0.149  -0.181  -0.124 
+  8.127  -0.722  -0.002   0.231  -0.040   0.008  -0.304  -0.259  -0.182  -0.161  -0.049  -0.011  -0.168 
+  7.712  -0.383  -0.126  -0.022  -0.040  -0.102  -0.288  -0.168  -0.052  -0.020   0.072  -0.133  -0.109 
+  7.732  -0.173  -0.173  -0.179  -0.202  -0.094  -0.116  -0.295  -0.110   0.023  -0.076  -0.284  -0.065 
+  6.936  -0.079  -0.298  -0.006  -0.531  -0.022  -0.062  -0.085  -0.133   0.029  -0.087  -0.199  -0.058 
+  7.040  -0.218  -0.308   0.100  -0.431  -0.250  -0.290  -0.346  -0.278  -0.105  -0.002   0.154  -0.104 
+  8.343  -0.307  -0.278   0.171  -0.346  -0.169  -0.315  -0.200  -0.035   0.087   0.003   0.094  -0.128 
+  6.890  -0.371  -0.143   0.117  -0.291  -0.075  -0.197  -0.014  -0.279   0.072   0.066   0.093  -0.089 
+  6.061  -0.098  -0.079   0.167  -0.262  -0.101  -0.109  -0.220  -0.315   0.055   0.086   0.003  -0.077 
+  6.711  -0.414  -0.140   0.352  -0.613  -0.157  -0.134  -0.078  -0.183   0.087   0.130   0.011  -0.046 
+  6.739  -0.284  -0.140   0.325  -0.446  -0.078  -0.307  -0.148  -0.282  -0.021   0.064   0.119  -0.041 
+  6.969  -0.315  -0.315   0.148  -0.426  -0.172  -0.240  -0.266  -0.242   0.212  -0.060  -0.050  -0.192 
+  6.857  -0.292  -0.115   0.294  -0.317  -0.080  -0.131  -0.417  -0.451  -0.005  -0.352  -0.158  -0.149 
+  7.407  -0.386  -0.138   0.250  -0.134  -0.037  -0.229  -0.320  -0.385  -0.140  -0.260  -0.072  -0.180 
+  7.130  -0.438  -0.012   0.312  -0.110  -0.131  -0.121  -0.180  -0.265  -0.207  -0.184  -0.188  -0.380 
+  6.755  -0.269   0.238   0.197  -0.279  -0.056  -0.139  -0.333  -0.330  -0.022  -0.277  -0.098  -0.160 
+  6.358  -0.273   0.403   0.371  -0.384  -0.087  -0.094  -0.353  -0.264   0.170  -0.272  -0.089  -0.155 
+  6.082  -0.359   0.299   0.200  -0.323  -0.052   0.119  -0.324  -0.358   0.045  -0.539  -0.180  -0.114 
+  6.162  -0.203   0.482   0.376  -0.393  -0.130   0.177  -0.186  -0.298   0.050  -0.538  -0.225  -0.171 
+  7.447   0.025   0.136   0.196  -0.486  -0.116  -0.090  -0.269  -0.256   0.069  -0.319   0.008  -0.014 
+  7.664   0.118   0.191  -0.182  -0.503  -0.101  -0.198  -0.356  -0.320  -0.183  -0.202  -0.026  -0.018 
+  7.305   0.155   0.065  -0.058  -0.537  -0.027  -0.219  -0.353  -0.279  -0.055  -0.236   0.037  -0.079 
+  6.074   0.007   0.149   0.022  -0.453  -0.016  -0.210  -0.313  -0.224  -0.107  -0.012  -0.073  -0.098 
+  6.213  -0.059   0.213   0.116  -0.377  -0.122  -0.318  -0.473  -0.278  -0.161  -0.025   0.136  -0.009 
+  6.172  -0.114  -0.175   0.093  -0.503  -0.047  -0.270  -0.282  -0.060   0.089  -0.042   0.194  -0.010 
+  6.210  -0.447  -0.361   0.066  -0.424   0.092  -0.084  -0.238  -0.192   0.130  -0.034   0.012  -0.100 
+  6.258  -0.572  -0.194   0.121  -0.480  -0.104  -0.437  -0.294  -0.175   0.058  -0.103  -0.084   0.023 
+  5.936   0.114  -0.038   0.253  -0.421  -0.392  -0.472  -0.402  -0.122  -0.019  -0.123  -0.094   0.033 
+  4.395   0.091  -0.114   0.240  -0.304  -0.145  -0.208  -0.234  -0.095  -0.068  -0.201  -0.014  -0.032 
+  3.803   0.189  -0.003   0.347  -0.124  -0.100  -0.150  -0.088  -0.118   0.046  -0.240   0.057   0.041 
+  3.778   0.292  -0.026   0.151  -0.133  -0.082  -0.040  -0.058  -0.047  -0.017  -0.123   0.154  -0.128 
+  3.679   0.158  -0.035   0.062   0.077   0.050  -0.134  -0.123  -0.024  -0.106  -0.118  -0.208  -0.252 
+  3.687   0.098  -0.145   0.037   0.089   0.187  -0.040  -0.160  -0.055  -0.001  -0.196  -0.069  -0.340 
+  4.485   0.283  -0.164  -0.109  -0.051   0.026  -0.367  -0.112  -0.097   0.155   0.033   0.018  -0.063 
+  6.566   0.312  -0.466  -0.230  -0.442   0.066  -0.775  -0.137  -0.052   0.308  -0.166   0.016   0.030 
+  7.305   0.195  -0.470  -0.345  -0.537   0.026  -0.866  -0.084   0.015   0.097  -0.373   0.005  -0.023 
+  7.535   0.022  -0.537  -0.268  -0.544   0.117  -0.909  -0.108   0.012   0.022  -0.428  -0.011  -0.111 
+  7.548  -0.038  -0.672  -0.205  -0.522   0.194  -0.948  -0.203  -0.107   0.002  -0.434   0.031  -0.138 
+  7.694   0.134  -0.619  -0.223  -0.632   0.208  -0.832   0.049  -0.115  -0.013  -0.436   0.013  -0.156 
+  7.760   0.199  -0.606  -0.231  -0.544   0.181  -0.848  -0.007  -0.042  -0.072  -0.465   0.161  -0.190 
+  7.784  -0.066  -0.677  -0.330  -0.536  -0.069  -0.942   0.023  -0.093  -0.222  -0.408   0.184  -0.253 
+  8.163  -0.179  -0.572  -0.138  -0.472  -0.106  -0.806   0.161  -0.030   0.023  -0.400   0.128  -0.483 
+  7.914  -0.043  -0.671  -0.162  -0.724  -0.241  -0.532   0.257   0.106  -0.090  -0.352   0.179  -0.527 
+  7.379  -0.026  -0.659  -0.166  -0.695  -0.286  -0.616   0.288   0.207  -0.064  -0.321   0.254  -0.306 
+  6.810  -0.022  -0.536  -0.065  -0.480  -0.307  -0.637   0.250   0.098  -0.012  -0.161   0.314  -0.261 
+  6.459   0.028  -0.370   0.097  -0.588  -0.397  -0.576   0.150   0.005   0.050  -0.043   0.163  -0.637 
+  6.517   0.116  -0.451   0.095  -0.586  -0.454  -0.622   0.168   0.123   0.108   0.164   0.187  -0.234 
+  6.387   0.260  -0.418   0.116  -0.670  -0.353  -0.726   0.121   0.157  -0.065  -0.057   0.121  -0.195 
+  6.313   0.006  -0.520   0.156  -0.652  -0.271  -0.717  -0.050   0.029  -0.142   0.009   0.230  -0.120 
+  6.002   0.274  -0.530   0.210  -0.537  -0.245  -0.639  -0.093  -0.064  -0.139  -0.069   0.154  -0.139 
+  5.677   0.239  -0.289   0.082  -0.396  -0.223  -0.555  -0.110   0.127  -0.092  -0.029   0.325  -0.116 
+  5.358   0.242  -0.151   0.128  -0.277  -0.220  -0.603  -0.205  -0.058  -0.179   0.094   0.170  -0.204 
+  4.952   0.156  -0.148   0.100  -0.290  -0.142  -0.367   0.037   0.077  -0.083  -0.135  -0.009  -0.128 
+  4.709   0.344  -0.122   0.108  -0.229  -0.276  -0.305   0.033  -0.074  -0.030  -0.042   0.087  -0.044 
+  4.373   0.208  -0.235  -0.059  -0.192  -0.213  -0.505   0.025  -0.181   0.048   0.018   0.025  -0.057 
+  4.486   0.159  -0.210   0.172   0.081  -0.033  -0.134   0.018   0.027   0.004  -0.069   0.085  -0.279 
+  4.222   0.292  -0.122   0.194  -0.173   0.022  -0.318  -0.043  -0.000   0.007   0.010   0.022  -0.209 
+  4.296   0.224  -0.166   0.150  -0.103   0.045  -0.333  -0.045  -0.041  -0.109  -0.011   0.134  -0.013 
+  3.928   0.138  -0.222   0.061  -0.159   0.122  -0.130   0.024   0.031  -0.133   0.003   0.122   0.047 
+  3.742   0.035  -0.372   0.129  -0.074   0.012  -0.220  -0.135   0.024   0.001   0.049   0.052  -0.081 
+  3.689   0.055  -0.454   0.151  -0.034  -0.017  -0.125   0.018   0.165   0.079   0.093   0.170   0.021 
+  3.700   0.284  -0.416   0.193   0.045   0.134  -0.163  -0.029  -0.004  -0.101   0.058  -0.001  -0.134 
+  3.753   0.314  -0.188   0.132   0.114  -0.015  -0.172  -0.105   0.048   0.016  -0.116   0.206   0.045 
+  3.495   0.119  -0.342  -0.018   0.017   0.022  -0.039  -0.005   0.157  -0.020  -0.029   0.062   0.065 
+  3.405   0.283  -0.043  -0.011  -0.087   0.104  -0.238  -0.057   0.122   0.023  -0.083   0.098   0.099 
+  3.413   0.274  -0.086  -0.023  -0.211  -0.138  -0.092  -0.045   0.016  -0.081   0.053   0.027  -0.082 
+  3.311  -0.004  -0.386  -0.035   0.021   0.003  -0.095  -0.048   0.039   0.043   0.107   0.056  -0.051 
+  3.593   0.215  -0.416   0.059   0.078   0.024  -0.189  -0.033  -0.034  -0.045  -0.019  -0.049  -0.062 
+  3.423   0.262  -0.199  -0.070   0.117   0.095  -0.095  -0.194  -0.113  -0.094   0.154   0.123  -0.013 
+  3.464   0.285  -0.081   0.001   0.133   0.048  -0.168  -0.164  -0.051   0.015  -0.107   0.204   0.148 
+  3.497   0.361   0.007  -0.028  -0.129   0.010  -0.058  -0.054  -0.055  -0.081  -0.050   0.052  -0.157 
+  3.518   0.192  -0.301   0.139   0.018  -0.120  -0.194  -0.121  -0.041   0.141  -0.037  -0.004  -0.027 
+  3.304   0.077  -0.259   0.000  -0.088  -0.057  -0.067   0.056   0.072   0.127  -0.146  -0.041   0.079 
+  3.392   0.129  -0.166   0.016  -0.041   0.078  -0.192  -0.059  -0.201   0.044  -0.065   0.035  -0.013 
+  3.568   0.113  -0.228   0.087  -0.060  -0.043  -0.069  -0.191  -0.115   0.062   0.061   0.131  -0.028 
+  3.233   0.014  -0.159   0.122   0.037   0.142  -0.105  -0.237  -0.042   0.217   0.110   0.161   0.046 
+  3.529   0.198  -0.172   0.186  -0.008   0.072  -0.191  -0.220  -0.128   0.055   0.081   0.203  -0.019 
+  3.615   0.170  -0.207   0.064  -0.134  -0.023  -0.121  -0.141  -0.018  -0.055   0.105   0.171  -0.046 
+  3.506   0.145  -0.223  -0.048  -0.232  -0.046  -0.053  -0.157  -0.094   0.065   0.116   0.162  -0.017 
+  3.449   0.188   0.001   0.064  -0.007   0.094  -0.257  -0.213  -0.076  -0.030   0.028  -0.042  -0.095 
+  3.202   0.039  -0.160   0.143  -0.116  -0.003  -0.163  -0.126  -0.030   0.031   0.017  -0.080  -0.141 
+  3.183   0.042  -0.445  -0.011   0.099  -0.071  -0.171   0.010   0.099  -0.027  -0.052   0.057  -0.007 
+  3.186   0.212  -0.206   0.108   0.088   0.097  -0.250  -0.194  -0.059   0.001  -0.052  -0.013  -0.021 
+  3.161   0.329  -0.025   0.002  -0.124   0.050  -0.160  -0.235   0.081  -0.000   0.053  -0.005   0.020 
+  3.323   0.302  -0.242  -0.040  -0.035  -0.108  -0.318  -0.195   0.008   0.040   0.141  -0.052  -0.031 
+  3.134  -0.044  -0.169  -0.031  -0.279   0.056  -0.010  -0.025  -0.097   0.025   0.276   0.140   0.064 
+  3.270   0.189  -0.194  -0.202  -0.024   0.098  -0.022  -0.024  -0.183   0.049   0.236   0.221   0.057 
+  3.399   0.235  -0.150  -0.113  -0.276  -0.077  -0.200  -0.167  -0.107  -0.082  -0.128   0.174   0.089 
+  3.491   0.305  -0.093   0.029  -0.051  -0.055  -0.052  -0.159   0.092   0.168  -0.125   0.065  -0.149 
+  3.136   0.216  -0.120  -0.006  -0.080  -0.003  -0.257  -0.252   0.104  -0.007   0.050   0.065   0.052 
+  3.415   0.176  -0.143   0.254   0.109   0.142  -0.229  -0.286  -0.053   0.102   0.065   0.120   0.052 
+  3.204   0.016  -0.258   0.088   0.124   0.042  -0.136  -0.102  -0.068   0.044  -0.020  -0.000  -0.002 
+  3.524   0.302  -0.184   0.107  -0.035  -0.053  -0.085  -0.205  -0.188  -0.121   0.013   0.001   0.031 
+  3.866   0.381  -0.018   0.169  -0.040  -0.050  -0.240  -0.321  -0.122  -0.106   0.042  -0.025  -0.045 
+  3.791   0.036  -0.238   0.061  -0.190  -0.054  -0.178  -0.089   0.020  -0.090  -0.078  -0.039  -0.089 
+  3.573  -0.057  -0.188   0.150  -0.129  -0.117  -0.123  -0.236  -0.041   0.056   0.104   0.130  -0.078 
+  3.445   0.069  -0.196  -0.109  -0.160  -0.032  -0.139  -0.143  -0.183   0.031   0.036   0.058  -0.082 
+  3.504   0.172  -0.111   0.138  -0.020   0.036  -0.057   0.079  -0.096  -0.029  -0.166  -0.028   0.060 
+  3.513   0.122  -0.186   0.107   0.027  -0.020   0.028  -0.011   0.023   0.033  -0.100  -0.056  -0.180 
+  3.380   0.264   0.121   0.178  -0.028   0.098   0.018  -0.300  -0.041   0.077   0.057   0.075   0.029 
+  3.326   0.326  -0.170   0.020   0.044   0.008  -0.009  -0.092   0.019   0.095   0.007   0.089  -0.007 
+  3.732   0.192  -0.350   0.043  -0.065  -0.027  -0.074  -0.214   0.021   0.224   0.146  -0.020   0.018 
+  3.547   0.086  -0.270   0.052   0.031   0.043  -0.114  -0.295  -0.046   0.031   0.198   0.001  -0.087 
+  3.618   0.216  -0.119   0.045  -0.079   0.076  -0.005  -0.138  -0.055  -0.021   0.102  -0.035   0.005 
+  3.551   0.269  -0.351  -0.039   0.051   0.162   0.016  -0.165  -0.094  -0.083  -0.059  -0.102   0.125 
+  3.559   0.082  -0.281   0.068   0.103   0.150  -0.038  -0.113  -0.041   0.061  -0.158   0.007  -0.017 
+  3.804   0.056  -0.264   0.035   0.010  -0.057  -0.042  -0.063  -0.066   0.009   0.046   0.091   0.056 
+  3.776  -0.256  -0.283  -0.080   0.027   0.090   0.131  -0.083  -0.074  -0.017  -0.155  -0.099  -0.083 
+  4.051  -0.431  -0.198  -0.000   0.008   0.097   0.022  -0.142  -0.091   0.180   0.049  -0.005   0.056 
+  4.378  -0.643  -0.064   0.034  -0.241  -0.087   0.086   0.140  -0.149   0.284   0.092  -0.113   0.070 
+  5.034  -0.509   0.017  -0.007  -0.187  -0.005  -0.040   0.089  -0.169   0.106  -0.001  -0.099  -0.035 
+  5.301  -0.612  -0.054  -0.102  -0.131  -0.048  -0.114  -0.141  -0.239   0.112  -0.110  -0.058  -0.042 
+  5.503  -0.875   0.062  -0.076  -0.174  -0.020   0.011  -0.145  -0.065  -0.042  -0.162  -0.038  -0.095 
+  5.806  -0.968  -0.011   0.062   0.055   0.002  -0.214  -0.081  -0.134   0.047  -0.145  -0.002   0.028 
+  5.682  -1.035  -0.152   0.019   0.106   0.042  -0.137   0.067  -0.041   0.150   0.093  -0.026  -0.054 
+  6.077  -1.005  -0.043   0.227   0.056  -0.065  -0.352  -0.171  -0.130   0.110   0.040   0.024   0.158 
+  6.136  -1.108  -0.117  -0.055  -0.113  -0.167   0.082  -0.155  -0.231   0.218  -0.026  -0.022  -0.064 
+  6.120  -0.947  -0.392  -0.012   0.097  -0.061   0.086   0.015  -0.217   0.068  -0.105  -0.179  -0.091 
+  6.070  -1.031  -0.298  -0.041  -0.015   0.009  -0.030  -0.009  -0.159   0.012  -0.119  -0.159  -0.098 
+  5.770  -0.915  -0.193   0.114   0.057  -0.018  -0.028   0.051  -0.214  -0.115  -0.019  -0.077   0.148 
+  5.654  -1.122  -0.070   0.179  -0.006   0.013  -0.006  -0.006  -0.096  -0.011   0.031  -0.101   0.078 
+  5.323  -1.008  -0.130  -0.040  -0.021  -0.217  -0.010   0.071   0.067   0.102  -0.102  -0.000   0.021 
+  5.694  -0.850  -0.109   0.014  -0.078  -0.019  -0.119  -0.048  -0.154   0.054  -0.097  -0.060  -0.025 
+  5.802  -0.846  -0.160   0.043  -0.094  -0.088   0.108  -0.086  -0.343   0.161  -0.019   0.006  -0.071 
+  5.370  -0.663  -0.158   0.065  -0.068  -0.071   0.067  -0.125  -0.258   0.082   0.062  -0.044   0.009 
+  5.144  -0.381   0.011  -0.063   0.039   0.071  -0.022   0.009  -0.255  -0.010  -0.008   0.090   0.016 
+  5.471  -0.524  -0.296   0.264   0.088   0.108  -0.217  -0.232  -0.058  -0.057  -0.030   0.010  -0.030 
+  5.273  -0.549  -0.332   0.189  -0.014   0.032  -0.345  -0.155   0.025   0.088  -0.042   0.081  -0.027 
+  4.137  -0.033  -0.131   0.044   0.053   0.036  -0.133  -0.116   0.006   0.163   0.041   0.044  -0.119 
+  3.730   0.185   0.010   0.120   0.021   0.129  -0.066   0.037  -0.027   0.015  -0.019  -0.114  -0.128 
+  5.652  -0.652   0.268   0.117   0.196  -0.296   0.037  -0.212  -0.320   0.024   0.038  -0.137   0.208 
+  5.250  -0.806   0.251   0.195   0.141  -0.189   0.033  -0.264  -0.190   0.053   0.089  -0.183   0.217 
+  3.599   0.003  -0.047  -0.077   0.016   0.153   0.078  -0.303  -0.113   0.005  -0.088   0.216   0.043 
+  4.150  -0.327   0.089  -0.198   0.046  -0.009  -0.146  -0.319  -0.238  -0.022  -0.091   0.090  -0.002 
+  4.264  -0.428   0.259  -0.057   0.099   0.305  -0.341  -0.202  -0.130   0.100   0.027   0.091   0.008 
+  4.069   0.215   0.099   0.007   0.058  -0.037  -0.170  -0.133  -0.152  -0.012  -0.056   0.115  -0.078 
+  3.906   0.197  -0.032   0.159  -0.146  -0.053  -0.167  -0.183  -0.103  -0.040  -0.023   0.140   0.006 
+  5.341  -0.071   0.109   0.191  -0.242   0.032  -0.224  -0.092  -0.093  -0.004  -0.050   0.153  -0.146 
+  9.892  -0.297   0.554   0.214  -0.051  -0.203  -0.237  -0.166  -0.075  -0.246  -0.081   0.059  -0.246 
+ 12.353  -0.380   0.411   0.441   0.002  -0.284  -0.444  -0.161  -0.317  -0.352  -0.184  -0.104  -0.339 
+ 13.936  -0.458   0.121   0.624  -0.284  -0.205  -0.645   0.010  -0.585  -0.313  -0.282   0.037  -0.346 
+ 14.756  -0.547   0.136   0.641  -0.404  -0.248  -0.724   0.065  -0.641  -0.314  -0.266   0.020  -0.371 
+ 14.922  -0.590   0.153   0.673  -0.436  -0.241  -0.789   0.091  -0.680  -0.325  -0.288   0.064  -0.470 
+ 14.925  -0.665   0.206   0.721  -0.408  -0.286  -0.759   0.053  -0.690  -0.318  -0.297   0.075  -0.497 
+ 14.685  -0.597   0.223   0.708  -0.386  -0.269  -0.744   0.036  -0.694  -0.267  -0.328   0.088  -0.528 
+ 14.022  -0.512   0.215   0.681  -0.286  -0.209  -0.691   0.032  -0.610  -0.254  -0.382   0.121  -0.511 
+ 12.646  -0.285   0.185   0.272  -0.373  -0.311  -0.368   0.124  -0.423  -0.194  -0.397   0.063  -0.361 
+  8.966   0.206   0.540   0.368   0.003  -0.114  -0.163   0.175  -0.281  -0.037  -0.390  -0.000  -0.302 
+  7.414   0.339   0.522   0.596   0.118  -0.055  -0.323   0.359  -0.238  -0.112  -0.377   0.177  -0.443 
+  7.028   0.484   0.626   0.767   0.083  -0.094  -0.334   0.233  -0.171  -0.089  -0.203   0.202  -0.446 
+  6.723   0.595   0.543   0.698   0.054  -0.078  -0.344   0.332  -0.218  -0.102  -0.296   0.237  -0.394 
+  7.924   0.214   0.428   0.404   0.421  -0.013  -0.081  -0.288  -0.260  -0.140  -0.274   0.128  -0.335 
+ 11.598  -0.415   0.278   0.152   0.107  -0.190  -0.195  -0.213  -0.219  -0.312  -0.277  -0.025  -0.446 
+ 12.460  -0.743   0.297   0.231   0.066  -0.349  -0.277  -0.062  -0.258  -0.347  -0.140  -0.027  -0.321 
+ 13.172  -0.444   0.112   0.495  -0.100  -0.378  -0.372  -0.046  -0.450  -0.351  -0.302   0.033  -0.458 
+ 13.709  -0.400   0.119   0.588  -0.135  -0.416  -0.446  -0.140  -0.561  -0.293  -0.165  -0.033  -0.477 
+ 13.711  -0.260   0.067   0.675  -0.267  -0.385  -0.506  -0.104  -0.559  -0.275  -0.186  -0.078  -0.481 
+ 13.801  -0.197   0.011   0.662  -0.385  -0.326  -0.512  -0.116  -0.501  -0.286  -0.232  -0.065  -0.506 
+ 13.362  -0.083  -0.074   0.685  -0.332  -0.286  -0.532  -0.068  -0.491  -0.279  -0.252  -0.062  -0.542 
+ 12.386  -0.076  -0.041   0.593  -0.119  -0.304  -0.383  -0.023  -0.448  -0.322  -0.295   0.008  -0.560 
+  9.900   0.037   0.084   0.539   0.045  -0.320  -0.303   0.077  -0.337  -0.233  -0.304   0.156  -0.424 
+  7.015   0.494   0.524   0.621   0.194  -0.295  -0.017   0.219  -0.093  -0.257  -0.179   0.029  -0.401 
+  6.960   0.372   0.324   0.328   0.025  -0.025   0.181   0.360  -0.138  -0.153  -0.236  -0.213  -0.345 
+  6.766   0.417   0.665   0.231   0.037  -0.167  -0.047   0.207  -0.122  -0.234  -0.215  -0.128  -0.314 
+  6.268   0.285   0.587   0.040   0.121  -0.190  -0.034  -0.183  -0.103  -0.172  -0.121  -0.178  -0.167 
+  6.215   0.051   0.804   0.266   0.251  -0.164   0.088  -0.213  -0.200  -0.307  -0.074  -0.260  -0.226 
+  6.190  -0.091   0.774   0.221   0.122   0.021   0.025   0.106  -0.198  -0.273  -0.085  -0.338  -0.345 
+  8.814  -0.353   0.456  -0.126  -0.098   0.093  -0.072  -0.019  -0.078  -0.022  -0.136  -0.155  -0.312 
+ 10.640  -0.510   0.568  -0.082  -0.124  -0.084  -0.184  -0.116  -0.191  -0.172  -0.169  -0.122  -0.342 
+ 11.844  -0.727   0.553   0.224  -0.098  -0.434  -0.246  -0.017  -0.282  -0.470  -0.075  -0.051  -0.429 
+ 13.032  -0.452   0.216   0.384   0.009  -0.479  -0.346  -0.184  -0.298  -0.428  -0.159  -0.037  -0.432 
+ 13.781  -0.370   0.086   0.489  -0.313  -0.297  -0.461  -0.051  -0.562  -0.332  -0.174  -0.003  -0.381 
+ 14.174  -0.351   0.011   0.668  -0.389  -0.259  -0.599  -0.055  -0.612  -0.274  -0.328   0.060  -0.413 
+ 14.453  -0.329  -0.072   0.669  -0.403  -0.305  -0.585  -0.047  -0.621  -0.299  -0.342   0.061  -0.413 
+ 14.506  -0.302  -0.056   0.617  -0.389  -0.356  -0.531  -0.129  -0.561  -0.350  -0.349   0.058  -0.405 
+ 14.118  -0.212  -0.099   0.627  -0.227  -0.359  -0.578  -0.081  -0.537  -0.365  -0.433   0.147  -0.438 
+ 13.527  -0.300   0.064   0.528  -0.071  -0.387  -0.570  -0.043  -0.408  -0.404  -0.479   0.189  -0.319 
+ 12.658  -0.180   0.153   0.327  -0.229  -0.342  -0.508   0.185  -0.262  -0.294  -0.517   0.007  -0.257 
+ 12.905  -0.254   0.212   0.423  -0.147  -0.272  -0.646  -0.054  -0.374  -0.292  -0.473   0.061  -0.278 
+ 13.154  -0.315   0.096   0.526  -0.021  -0.276  -0.508  -0.174  -0.476  -0.361  -0.440   0.215  -0.110 
+ 13.276  -0.087  -0.067   0.694  -0.218  -0.343  -0.532  -0.142  -0.420  -0.265  -0.456   0.169  -0.162 
+ 13.593  -0.034  -0.157   0.619  -0.325  -0.226  -0.586  -0.066  -0.450  -0.357  -0.360   0.132  -0.243 
+ 13.898  -0.036  -0.235   0.698  -0.420  -0.221  -0.641  -0.047  -0.503  -0.308  -0.349   0.142  -0.370 
+ 13.776   0.039  -0.331   0.768  -0.461  -0.226  -0.686   0.012  -0.479  -0.224  -0.379   0.137  -0.501 
+ 13.348   0.055  -0.312   0.819  -0.426  -0.191  -0.686   0.050  -0.376  -0.090  -0.484   0.070  -0.475 
+ 12.172   0.314  -0.438   0.779  -0.389  -0.118  -0.510   0.061  -0.216  -0.190  -0.544  -0.048  -0.370 
+  8.769   0.819  -0.415   0.430   0.051   0.014  -0.179   0.050  -0.269  -0.086  -0.437  -0.358  -0.391 
+  6.744   0.747  -0.006   0.636   0.350  -0.032  -0.363   0.011  -0.174  -0.114  -0.345  -0.241  -0.420 
+  6.735   0.929   0.002   0.479   0.363   0.006  -0.217  -0.060  -0.179  -0.131  -0.412  -0.083  -0.462 
+  6.106   0.755   0.183   0.548   0.357  -0.066  -0.174   0.011  -0.228  -0.035  -0.273  -0.200  -0.431 
+  6.233   0.511   0.022   0.558   0.267  -0.048  -0.244  -0.065  -0.193  -0.254  -0.285  -0.051  -0.315 
+  6.373   0.382  -0.129   0.302   0.021  -0.026   0.067   0.066  -0.038   0.012  -0.250  -0.124  -0.243 
+  8.892   0.194  -0.534   0.167  -0.220  -0.151   0.021  -0.004  -0.010  -0.028  -0.416  -0.330  -0.247 
+  6.429   0.490  -0.145   0.216  -0.125  -0.054   0.044   0.058  -0.026   0.011  -0.359  -0.296  -0.193 
+  4.771   0.407   0.222   0.353   0.037  -0.086  -0.112  -0.067  -0.164   0.010   0.076   0.201  -0.180 
+  4.579   0.329  -0.069   0.219  -0.070  -0.150  -0.207   0.125  -0.117  -0.072  -0.021  -0.079  -0.086 
+  4.335   0.175  -0.181   0.163   0.016  -0.138  -0.174  -0.081  -0.231  -0.168  -0.065  -0.060  -0.180 
+  4.058   0.158  -0.071   0.233  -0.026  -0.246  -0.118   0.007  -0.220  -0.098  -0.149  -0.085  -0.121 
+  4.201   0.073  -0.258   0.267   0.083  -0.084  -0.029  -0.032  -0.273  -0.050   0.002   0.006  -0.184 
+  4.272   0.171  -0.287   0.239   0.038  -0.124  -0.107   0.020  -0.207  -0.060  -0.103   0.160   0.004 
+  3.880   0.230  -0.036   0.202  -0.130  -0.070  -0.178  -0.077  -0.068  -0.191  -0.038   0.120  -0.103 
+  3.838   0.154  -0.106   0.123  -0.045  -0.020  -0.068   0.107  -0.142  -0.049   0.182   0.181  -0.119 
+  3.774   0.116  -0.105   0.164   0.014  -0.076  -0.085   0.071  -0.052   0.064   0.009   0.075  -0.026 
+  3.905   0.172  -0.312   0.087  -0.020   0.112  -0.061  -0.067  -0.270  -0.263  -0.083   0.023  -0.018 
+  3.774   0.264  -0.274   0.125   0.004  -0.135  -0.112  -0.044  -0.220  -0.085  -0.016   0.091   0.002 
+  3.804   0.307  -0.450   0.056   0.020   0.018  -0.107  -0.147  -0.121   0.032  -0.025   0.047  -0.029 
+  3.968   0.211  -0.164   0.201   0.108   0.027   0.063  -0.083  -0.173  -0.130  -0.014  -0.056  -0.076 
+  3.572   0.154  -0.121   0.089   0.003  -0.099  -0.169  -0.014  -0.129   0.156   0.036   0.071  -0.042 
+  3.581   0.190  -0.051   0.015   0.178   0.059  -0.168  -0.134  -0.145   0.047   0.116   0.125  -0.103 
+  3.817   0.146  -0.117   0.188   0.206   0.114  -0.006  -0.115  -0.238   0.055   0.147   0.146  -0.038 
+  8.201   0.322  -0.431  -0.143  -0.254  -0.189  -0.567  -0.427  -0.205  -0.007  -0.099  -0.163  -0.087 
+  8.107   0.410  -0.318  -0.279  -0.245  -0.273  -0.859  -0.655  -0.077   0.195   0.044  -0.168   0.039 
+  6.774  -0.362  -0.022  -0.223  -0.439  -0.779  -0.465  -0.284   0.287   0.502   0.288  -0.263  -0.007 
+  6.883  -0.072  -0.632  -0.489  -0.199  -0.251  -0.279   0.011   0.139   0.183  -0.003  -0.195  -0.172 
+  9.557   0.152  -1.341  -0.588  -0.321  -0.083  -0.353   0.011  -0.142   0.310  -0.029  -0.159   0.034 
+ 12.328   0.885  -1.161  -0.876  -0.287   0.068  -0.455   0.223  -0.358   0.245  -0.370  -0.290  -0.056 
+ 12.994   0.835  -1.404  -0.633  -0.397   0.042  -0.342   0.221  -0.302   0.277  -0.579  -0.247  -0.058 
+ 13.545   0.540  -1.437  -0.304  -0.514  -0.088  -0.315   0.161  -0.148   0.277  -0.651  -0.190  -0.004 
+ 13.709   0.643  -1.357  -0.277  -0.490  -0.215  -0.278   0.096  -0.134   0.159  -0.504  -0.211  -0.047 
+ 14.430   0.358  -1.271  -0.137  -0.494  -0.437  -0.278   0.170  -0.090   0.091  -0.508  -0.102  -0.143 
+ 14.075   0.525  -1.065  -0.038  -0.477  -0.622  -0.352   0.171  -0.188   0.063  -0.431   0.101  -0.281 
+ 14.105   0.512  -0.921   0.245  -0.505  -0.628  -0.547   0.158  -0.427   0.073  -0.461   0.231  -0.343 
+ 13.406   0.547  -0.798   0.474  -0.458  -0.621  -0.547   0.014  -0.505   0.003  -0.539   0.357  -0.374 
+ 13.003   0.455  -0.681   0.587  -0.374  -0.453  -0.399  -0.113  -0.484  -0.097  -0.685   0.323  -0.398 
+ 13.011   0.558  -0.599   0.604  -0.383  -0.565  -0.443  -0.211  -0.481  -0.063  -0.608   0.363  -0.432 
+ 13.651   0.383  -0.554   0.643  -0.446  -0.555  -0.452  -0.159  -0.525  -0.039  -0.453   0.216  -0.455 
+ 13.951   0.269  -0.582   0.675  -0.547  -0.597  -0.389  -0.093  -0.556  -0.018  -0.410   0.147  -0.464 
+ 13.870   0.196  -0.447   0.697  -0.624  -0.531  -0.389  -0.093  -0.588  -0.047  -0.357   0.013  -0.414 
+ 13.723  -0.017  -0.228   0.780  -0.627  -0.517  -0.427  -0.072  -0.546   0.041  -0.321   0.024  -0.385 
+ 13.144   0.091  -0.164   0.663  -0.691  -0.419  -0.227   0.029  -0.459   0.038  -0.357  -0.078  -0.367 
+ 12.309   0.253  -0.109   0.529  -0.603  -0.415  -0.007   0.051  -0.395   0.045  -0.287  -0.156  -0.287 
+ 11.132   0.496   0.130   0.408  -0.112  -0.309   0.078   0.027  -0.360   0.117  -0.381  -0.178  -0.307 
+ 10.662   0.669   0.171   0.282   0.058  -0.460   0.187  -0.076  -0.258   0.320  -0.606  -0.129  -0.223 
+ 10.956   0.578   0.223   0.224   0.062  -0.506   0.116  -0.005  -0.330   0.280  -0.627  -0.142  -0.160 
+ 11.082   0.426   0.287   0.293  -0.000  -0.517   0.056  -0.035  -0.312   0.229  -0.611  -0.195  -0.117 
+ 11.545   0.016   0.465   0.458  -0.347  -0.328  -0.063  -0.156  -0.299   0.173  -0.472  -0.196  -0.147 
+ 12.038  -0.136   0.511   0.446  -0.743  -0.231  -0.088  -0.237  -0.273   0.328  -0.343  -0.240  -0.184 
+ 12.024  -0.145   0.461   0.469  -0.973  -0.034  -0.230  -0.139  -0.414   0.294  -0.308  -0.326  -0.201 
+ 11.909  -0.239   0.660   0.420  -0.937  -0.000  -0.249  -0.153  -0.412   0.148  -0.330  -0.398  -0.175 
+ 11.700  -0.259   0.750   0.445  -0.868  -0.005  -0.293  -0.127  -0.458   0.096  -0.310  -0.393  -0.167 
+ 11.610  -0.366   0.820   0.455  -0.805  -0.041  -0.292  -0.186  -0.494   0.099  -0.236  -0.349  -0.199 
+ 11.699  -0.341   0.701   0.568  -0.804  -0.228  -0.186  -0.148  -0.532   0.074  -0.264  -0.307  -0.207 
+ 11.710   0.019   0.292   0.631  -0.482  -0.573  -0.090  -0.065  -0.586   0.031  -0.257  -0.348  -0.119 
+ 11.359   0.341   0.138   0.412   0.000  -0.687  -0.277   0.045  -0.634   0.007  -0.246  -0.411  -0.036 
+ 10.841   0.704  -0.044   0.396   0.261  -0.627  -0.357  -0.109  -0.559   0.004  -0.271  -0.364  -0.025 
+ 10.853   0.923  -0.186   0.403   0.098  -0.551  -0.352   0.005  -0.418  -0.088  -0.385  -0.313   0.003 
+ 11.396   0.586   0.080   0.249   0.060  -0.583  -0.349   0.079  -0.394  -0.130  -0.319  -0.411   0.065 
+ 11.617   0.620  -0.109   0.475  -0.075  -0.668  -0.289   0.093  -0.543  -0.009  -0.238  -0.357  -0.041 
+ 12.185   0.344  -0.128   0.708  -0.245  -0.712  -0.221   0.064  -0.513  -0.036  -0.209  -0.214  -0.166 
+ 11.976   0.231   0.079   0.654  -0.388  -0.528  -0.206   0.117  -0.476   0.022  -0.274  -0.132  -0.137 
+ 10.431   0.541   0.366   0.467   0.048  -0.350  -0.167  -0.014  -0.243   0.075  -0.582  -0.075  -0.241 
+ 10.222   0.523   0.480   0.452   0.115  -0.399  -0.137  -0.128  -0.005  -0.200  -0.466   0.025  -0.270 
+ 10.212   0.631   0.485   0.264   0.063  -0.334  -0.022  -0.120  -0.087  -0.250  -0.475  -0.039  -0.169 
+ 10.030   0.483   0.646   0.268  -0.054  -0.346   0.037  -0.087  -0.221  -0.040  -0.455  -0.089  -0.317 
+  9.480   0.587   0.481   0.277  -0.078  -0.528   0.092  -0.001  -0.056  -0.028  -0.397  -0.157  -0.270 
+  8.519   0.596   0.124   0.228  -0.003  -0.240   0.179  -0.113   0.002  -0.033  -0.275  -0.238  -0.308 
+  6.988   0.617   0.248   0.247  -0.046  -0.298   0.104   0.004   0.134   0.037  -0.326  -0.248  -0.244 
+  6.294   0.370  -0.023   0.055  -0.176  -0.306   0.210   0.173   0.246   0.079  -0.467  -0.224  -0.194 
+  5.534   0.348   0.062  -0.055  -0.306  -0.210   0.104   0.107   0.017  -0.032  -0.459  -0.186  -0.189 
+  9.752  -0.718  -0.096   0.068  -0.485   0.100  -0.365  -0.034  -0.106  -0.211  -0.045  -0.151  -0.124 
+ 12.218  -1.272   0.098  -0.134  -0.384  -0.027  -0.389  -0.247  -0.082  -0.148  -0.175  -0.067  -0.247 
+ 12.664  -2.094   0.546  -0.045  -0.350  -0.035  -0.383  -0.183  -0.063  -0.175  -0.066  -0.148  -0.175 
+ 12.786  -2.595   0.650   0.061  -0.563   0.081  -0.106  -0.281   0.006  -0.079   0.005  -0.076  -0.174 
+ 13.152  -2.483   0.546   0.229  -0.549   0.009  -0.003  -0.210  -0.139  -0.263  -0.120  -0.173  -0.124 
+ 13.078  -2.295   0.435   0.337  -0.506  -0.012  -0.043  -0.285  -0.193  -0.184  -0.014  -0.130  -0.318 
+ 12.850  -2.227   0.276   0.416  -0.292  -0.131  -0.010  -0.021  -0.088  -0.223   0.013  -0.047  -0.291 
+ 13.181  -1.968   0.483   0.502  -0.420  -0.222  -0.017  -0.035  -0.113  -0.235  -0.005   0.044  -0.090 
+ 12.628  -1.823   0.277   0.594  -0.612  -0.233  -0.090  -0.084  -0.093  -0.300  -0.190   0.155  -0.092 
+ 11.327  -1.283   0.227   0.793  -0.509  -0.138   0.011  -0.078  -0.091  -0.110  -0.189   0.069  -0.173 
+ 13.131   0.310  -0.354   0.280  -0.444  -0.600  -0.257  -0.221  -0.132  -0.204  -0.199   0.047  -0.238 
+ 14.941   0.236  -0.752   0.212  -0.545  -0.760  -0.342  -0.124  -0.228  -0.066  -0.196   0.193  -0.285 
+ 15.598  -0.116  -0.670   0.066  -0.693  -0.790  -0.472   0.091  -0.225   0.054  -0.202   0.126  -0.359 
+ 15.665  -0.073  -0.809  -0.005  -0.689  -0.722  -0.612   0.234  -0.333   0.063  -0.235   0.141  -0.418 
+ 15.680  -0.227  -0.765  -0.214  -0.612  -0.743  -0.488   0.411  -0.332   0.181  -0.329   0.034  -0.457 
+ 15.359  -0.289  -0.724  -0.198  -0.540  -0.758  -0.489   0.403  -0.300   0.216  -0.278   0.007  -0.418 
+ 15.087  -0.228  -0.707  -0.190  -0.530  -0.797  -0.451   0.374  -0.335   0.187  -0.241  -0.013  -0.384 
+ 14.450  -0.012  -0.546  -0.118  -0.460  -0.912  -0.413   0.226  -0.324   0.183  -0.146   0.016  -0.366 
+ 13.475   0.110  -0.210   0.032  -0.549  -1.020  -0.235   0.030  -0.285   0.160  -0.179   0.059  -0.359 
+ 11.633  -0.091   0.053   0.264  -0.542  -0.990  -0.162  -0.193  -0.342   0.095  -0.101   0.070  -0.175 
+  9.012   0.123  -0.311   0.080  -0.433  -0.701  -0.070   0.228  -0.067   0.272   0.094  -0.033  -0.219 
+  7.817   0.189  -0.085   0.082  -0.674  -0.812  -0.401   0.333  -0.078   0.003   0.117   0.151  -0.366 
+  7.215   0.045  -0.120   0.120  -0.392  -0.816  -0.288   0.356  -0.124   0.070   0.138   0.130  -0.201 
+  8.064  -0.922   0.051   0.407  -0.562  -0.269  -0.610   0.113   0.030  -0.102   0.083  -0.033  -0.210 
+  8.349  -0.990  -0.102   0.185  -0.555  -0.130  -0.595   0.035   0.208   0.049   0.100  -0.159  -0.265 
+  6.279   0.065  -0.189  -0.027  -0.364  -0.633  -0.451   0.161   0.115   0.158  -0.025  -0.038  -0.159 
+  5.992  -0.041  -0.223  -0.248  -0.413  -0.535  -0.327   0.384   0.171   0.250  -0.043  -0.072  -0.127 
+  5.966   0.053  -0.205  -0.103  -0.244  -0.687  -0.515   0.422  -0.028   0.089  -0.058   0.065  -0.238 
+ 10.544  -1.377   0.030  -0.244  -0.124  -0.091  -0.432   0.001  -0.054  -0.238  -0.228   0.019  -0.042 
+ 11.360  -1.529  -0.078  -0.412  -0.260  -0.146  -0.504  -0.043  -0.118  -0.170  -0.142   0.056   0.011 
+  8.343  -1.546   0.326  -0.525  -0.149  -0.033  -0.341   0.114  -0.078  -0.081  -0.092   0.026  -0.038 
+  9.233  -1.185   0.812  -0.626  -0.166   0.010  -0.455   0.045  -0.187  -0.092  -0.148  -0.123  -0.108 
+ 10.594  -0.646   0.971  -0.146  -0.152  -0.173  -0.383  -0.168  -0.324  -0.285  -0.111  -0.181  -0.250 
+ 11.762  -0.322   0.667   0.257  -0.233  -0.478  -0.691   0.183  -0.729  -0.048  -0.239   0.009  -0.380 
+ 12.624  -0.076   0.257   0.189  -0.303  -0.588  -0.656   0.077  -0.585  -0.151  -0.179   0.062  -0.253 
+ 13.172  -0.035   0.093   0.108  -0.524  -0.570  -0.654   0.090  -0.418  -0.112  -0.170   0.083  -0.229 
+ 13.480   0.030  -0.261   0.091  -0.475  -0.560  -0.805   0.200  -0.425  -0.001  -0.194   0.330  -0.376 
+ 13.648   0.026  -0.358  -0.080  -0.445  -0.645  -0.788   0.294  -0.233   0.027  -0.246   0.337  -0.465 
+ 13.587   0.047  -0.373  -0.181  -0.405  -0.625  -0.829   0.252  -0.130   0.064  -0.299   0.340  -0.382 
+ 13.352   0.173  -0.274  -0.282  -0.420  -0.498  -0.803  -0.022   0.040   0.168  -0.485   0.431  -0.342 
+ 12.810  -0.046  -0.175  -0.313  -0.307  -0.444  -0.514  -0.178   0.158   0.218  -0.561   0.207  -0.130 
+ 12.236  -0.159  -0.272  -0.521  -0.302  -0.368  -0.509  -0.037   0.183   0.129  -0.546  -0.037  -0.083 
+ 11.508  -1.263   0.493  -0.550  -0.066  -0.196  -0.354   0.092   0.159   0.002  -0.258  -0.145  -0.028 
+ 11.391  -1.815   0.808  -0.657   0.121  -0.027  -0.139  -0.083  -0.019  -0.179  -0.133  -0.141  -0.040 
+ 10.727  -1.874   1.047  -0.719  -0.061  -0.075  -0.102  -0.043   0.015  -0.161  -0.224   0.039  -0.008 
+ 10.701  -1.847   1.013  -0.697   0.007  -0.222  -0.297  -0.104  -0.218  -0.131  -0.266   0.096  -0.020 
+ 10.396  -1.788   0.956  -0.511  -0.007  -0.387  -0.207   0.020  -0.115  -0.070  -0.170  -0.048  -0.265 
+  9.283  -1.753   0.714  -0.543   0.023  -0.239  -0.251  -0.095  -0.189  -0.027   0.020   0.072  -0.059 
+  8.395  -1.099   0.662  -0.639  -0.208  -0.352  -0.411  -0.246  -0.293  -0.256  -0.152   0.103  -0.082 
+  8.441  -1.075   0.439  -0.410  -0.255   0.009  -0.484  -0.100  -0.358  -0.167  -0.351  -0.185  -0.220 
+  9.457  -1.475   0.606  -0.334  -0.384   0.094  -0.513  -0.091  -0.313  -0.251  -0.254  -0.288  -0.228 
+ 10.439  -2.138   0.809   0.108  -0.561   0.110  -0.308  -0.028  -0.156  -0.103  -0.221  -0.160  -0.089 
+ 12.629  -1.775   0.428  -0.271  -0.676   0.049  -0.242  -0.121  -0.187  -0.167  -0.146  -0.148  -0.196 
+ 13.204  -1.404   0.136  -0.197  -0.724  -0.086  -0.336  -0.218  -0.211  -0.244  -0.192  -0.040  -0.178 
+ 12.532  -0.402   0.240   0.268  -0.356  -0.311  -0.435  -0.299  -0.091  -0.168  -0.363   0.051  -0.091 
+ 12.307   0.500  -0.208   0.280  -0.087  -0.539  -0.683   0.030  -0.531   0.001  -0.501  -0.010  -0.077 
+ 12.206   0.424  -0.222   0.322  -0.113  -0.366  -0.996   0.363  -0.619  -0.057  -0.397   0.032  -0.097 
+ 11.776   0.281  -0.251   0.563  -0.151  -0.264  -0.805  -0.005  -0.400  -0.097  -0.429   0.038   0.024 
+  9.965   0.303  -0.258   0.670   0.095  -0.378  -0.674  -0.065  -0.361  -0.137  -0.385  -0.002   0.107 
+  7.846   0.069   0.089   0.611   0.116  -0.146  -0.259   0.068  -0.026  -0.077  -0.403  -0.124   0.191 
+  7.553  -0.201   0.271   0.801   0.295  -0.076   0.002   0.002  -0.070  -0.180  -0.344  -0.331  -0.103 
+  8.471  -0.056  -0.108   0.613  -0.098   0.009  -0.209  -0.106   0.010  -0.094  -0.314  -0.087  -0.103 
+ 12.650  -0.126  -0.395   0.493  -0.370  -0.268  -0.699   0.006  -0.328  -0.107  -0.365   0.159  -0.154 
+ 13.149   0.064  -0.407   0.157  -0.194  -0.728  -0.648   0.014  -0.309   0.031  -0.278   0.197  -0.065 
+ 13.162   0.165  -0.481   0.111  -0.156  -0.910  -0.619  -0.026  -0.310   0.131  -0.286   0.324  -0.129 
+ 13.422   0.196  -0.525   0.145  -0.293  -0.909  -0.597  -0.007  -0.334   0.124  -0.240   0.265  -0.165 
+ 13.577  -0.002  -0.365   0.231  -0.376  -0.856  -0.556   0.024  -0.361   0.051  -0.127   0.145  -0.113 
+ 13.201   0.020  -0.302   0.372  -0.435  -0.761  -0.635   0.183  -0.502   0.040  -0.054   0.011  -0.053 
+ 13.037  -0.064  -0.245   0.415  -0.380  -0.740  -0.578   0.066  -0.495   0.091  -0.150   0.056  -0.073 
+ 12.731  -0.000  -0.269   0.477  -0.369  -0.735  -0.574   0.128  -0.668   0.153  -0.178   0.026  -0.099 
+ 12.571   0.027  -0.275   0.447  -0.195  -0.811  -0.568   0.211  -0.780   0.106  -0.160  -0.079  -0.118 
+ 12.435   0.128  -0.158   0.255   0.159  -0.822  -0.591   0.192  -0.773   0.048  -0.361  -0.063  -0.210 
+ 11.801   0.628  -0.191   0.052   0.142  -0.446  -0.443  -0.137  -0.747   0.179  -0.416  -0.304  -0.200 
+ 10.910   0.934  -0.023  -0.249  -0.012  -0.294  -0.163  -0.115  -0.814   0.016  -0.400  -0.044  -0.141 
+ 10.367   0.968   0.227  -0.335  -0.239  -0.337  -0.063  -0.048  -0.773  -0.016  -0.440  -0.046  -0.093 
+ 10.352   1.003   0.258  -0.317  -0.286  -0.372  -0.134   0.073  -0.791  -0.031  -0.426  -0.162  -0.101 
+ 10.737   0.991   0.213  -0.327  -0.420  -0.365  -0.209   0.140  -0.847  -0.106  -0.398  -0.186  -0.058 
+ 11.103   1.156   0.069  -0.432  -0.424  -0.358  -0.239   0.094  -1.005  -0.024  -0.264  -0.099  -0.084 
+ 11.917   1.018  -0.100  -0.366  -0.389  -0.332  -0.358  -0.031  -0.864   0.033  -0.122  -0.034  -0.123 
+ 12.248   1.008  -0.371  -0.447  -0.445  -0.332  -0.339  -0.202  -0.717   0.213   0.061  -0.024  -0.119 
+ 12.745   0.865  -0.569  -0.466  -0.466  -0.291  -0.420  -0.314  -0.503   0.245   0.090  -0.150  -0.117 
+ 13.115   0.712  -0.639  -0.439  -0.506  -0.364  -0.412  -0.380  -0.319   0.418   0.155  -0.277  -0.138 
+ 13.409   0.531  -0.728  -0.285  -0.499  -0.370  -0.423  -0.391  -0.206   0.481   0.002  -0.367  -0.123 
+ 13.585   0.468  -0.855  -0.285  -0.594  -0.402  -0.394  -0.224  -0.115   0.428  -0.254  -0.213  -0.073 
+ 13.717   0.301  -0.745  -0.169  -0.698  -0.183  -0.617  -0.141  -0.095   0.435  -0.400  -0.143  -0.052 
+ 13.375   0.319  -0.651  -0.189  -0.610  -0.229  -0.599  -0.186  -0.114   0.446  -0.376  -0.096  -0.020 
+ 12.988   0.334  -0.597  -0.145  -0.639  -0.197  -0.764  -0.223  -0.180   0.617  -0.396  -0.057   0.033 
+ 12.535   0.227  -0.393  -0.002  -0.577  -0.075  -0.849  -0.313  -0.460   0.648  -0.371  -0.104   0.049 
+ 11.477   0.271  -0.213   0.042  -0.350   0.019  -0.613  -0.297  -0.544   0.315  -0.323  -0.235  -0.035 
+ 11.818   0.215  -0.273   0.050  -0.372   0.129  -0.758  -0.247  -0.470   0.286  -0.442  -0.115  -0.042 
+ 12.553   0.160  -0.348   0.058  -0.488   0.044  -0.833  -0.292  -0.349   0.401  -0.461  -0.067   0.034 
+ 12.916   0.098  -0.373   0.034  -0.515  -0.094  -0.921  -0.245  -0.311   0.465  -0.478  -0.004   0.073 
+ 13.169   0.076  -0.397  -0.008  -0.492  -0.238  -0.926  -0.241  -0.225   0.447  -0.432  -0.014   0.118 
+ 13.244   0.175  -0.541   0.124  -0.461  -0.401  -0.839  -0.236  -0.187   0.340  -0.386  -0.111   0.101 
+ 13.062   0.421  -0.653  -0.030  -0.101  -0.501  -0.850  -0.057  -0.321   0.159  -0.202  -0.149  -0.072 
+ 12.504   0.822  -0.752  -0.298   0.146  -0.356  -0.976  -0.066  -0.203  -0.027  -0.219   0.061  -0.258 
+ 11.701   1.095  -0.668  -0.416   0.233  -0.258  -0.963  -0.229  -0.201  -0.015  -0.307   0.140  -0.260 
+ 11.096   1.342  -0.674  -0.529   0.248  -0.236  -0.826  -0.412  -0.214   0.029  -0.338   0.104  -0.163 
+ 10.669   1.685  -0.674  -0.605   0.085  -0.092  -0.725  -0.451  -0.238  -0.096  -0.271   0.131  -0.152 
+ 10.787   1.865  -0.760  -0.643   0.057  -0.193  -0.577  -0.362  -0.294  -0.215  -0.245   0.158  -0.177 
+ 10.750   1.696  -0.623  -0.656   0.090  -0.242  -0.536  -0.249  -0.401  -0.266  -0.185   0.214  -0.187 
+ 10.433   1.430  -0.544  -0.655   0.105  -0.315  -0.535  -0.300  -0.400  -0.396  -0.066   0.296  -0.209 
+ 11.097   1.449  -0.575  -0.814   0.255  -0.539  -0.373  -0.278  -0.527  -0.298  -0.101   0.250  -0.299 
+ 11.185   1.254  -0.438  -0.743   0.236  -0.465  -0.387  -0.209  -0.514  -0.263   0.082   0.056  -0.300 
+ 10.754   1.249  -0.530  -0.658   0.187  -0.501  -0.394  -0.355  -0.510  -0.258   0.199   0.020  -0.380 
+ 11.349   1.368  -0.741  -0.527   0.143  -0.610  -0.415  -0.461  -0.468  -0.141   0.183  -0.022  -0.457 
+ 11.742   1.176  -0.688  -0.214  -0.008  -0.586  -0.436  -0.423  -0.371  -0.027   0.123  -0.199  -0.271 
+ 12.146   0.835  -0.655  -0.071  -0.128  -0.428  -0.501  -0.499  -0.281   0.123  -0.183  -0.142  -0.144 
+ 12.580   0.344  -0.459   0.004  -0.263  -0.295  -0.758  -0.376  -0.359   0.283  -0.306  -0.107   0.035 
+ 12.789   0.202  -0.343  -0.029  -0.327  -0.258  -0.804  -0.304  -0.335   0.310  -0.428  -0.100   0.065 
+ 12.404   0.127  -0.229  -0.019  -0.259  -0.143  -0.625  -0.291  -0.250   0.316  -0.517  -0.164   0.104 
+ 11.887  -0.304   0.303  -0.221  -0.064  -0.116  -0.777  -0.112  -0.150  -0.060  -0.489  -0.114  -0.021 
+ 11.184  -1.205   0.698  -0.239   0.271  -0.184  -0.685  -0.045  -0.259  -0.106  -0.461  -0.006  -0.056 
+ 10.745  -1.534   1.060  -0.256   0.091  -0.157  -0.600  -0.119  -0.265  -0.106  -0.461   0.016  -0.035 
+ 10.797  -1.605   1.126  -0.380   0.031  -0.147  -0.600  -0.112  -0.258  -0.100  -0.259   0.025  -0.113 
+ 11.326  -1.329   0.939  -0.452  -0.076   0.023  -0.627   0.093  -0.026  -0.032  -0.367  -0.088  -0.140 
+ 11.040  -1.319   0.765  -0.164  -0.243   0.176  -0.841   0.030  -0.082  -0.131  -0.277   0.103   0.102 
+ 10.075  -0.726   0.486   0.265  -0.352  -0.021  -0.638  -0.150   0.242  -0.238  -0.193   0.083   0.078 
+  9.310   0.356   0.297  -0.024  -0.244  -0.319  -0.287  -0.103   0.070   0.014  -0.374  -0.084  -0.004 
+  9.182   0.409   0.273   0.171   0.302  -0.306  -0.175  -0.064   0.031  -0.244  -0.316  -0.225  -0.120 
+  9.544   0.593   0.180   0.146   0.238  -0.349  -0.076  -0.138  -0.084  -0.076  -0.254  -0.253  -0.277 
+ 10.022   0.375   0.168   0.182   0.234  -0.296  -0.193  -0.110  -0.083   0.035  -0.126  -0.289  -0.280 
+ 10.456   0.492  -0.153   0.368   0.311  -0.477  -0.126  -0.103  -0.192  -0.040  -0.128  -0.223  -0.244 
+ 10.415   0.132   0.093   0.327   0.375  -0.364  -0.114  -0.027  -0.505   0.172  -0.203  -0.188  -0.284 
+ 10.244   0.283   0.182   0.124   0.322  -0.407  -0.031  -0.020  -0.582   0.104  -0.195  -0.171  -0.143 
+ 10.862   0.643   0.030  -0.197   0.158  -0.413  -0.185  -0.142  -0.473   0.133  -0.008  -0.265  -0.102 
+ 11.350   0.769  -0.134  -0.293   0.079  -0.491  -0.418  -0.117  -0.610   0.274   0.017  -0.237  -0.058 
+ 11.676   0.686  -0.023  -0.389   0.174  -0.414  -0.514  -0.110  -0.633   0.379  -0.079  -0.267  -0.038 
+ 11.773   0.660  -0.127  -0.228   0.208  -0.472  -0.521  -0.109  -0.648   0.404  -0.087  -0.411   0.066 
+ 12.067   0.521  -0.188  -0.169   0.175  -0.433  -0.531  -0.092  -0.613   0.312  -0.119  -0.397  -0.032 
+ 11.773   0.569  -0.155  -0.168   0.190  -0.474  -0.492  -0.149  -0.647   0.337  -0.186  -0.357  -0.056 
+ 11.621   0.673  -0.242  -0.166   0.281  -0.539  -0.488  -0.161  -0.676   0.311  -0.241  -0.363  -0.090 
+ 11.638   0.697  -0.348  -0.029   0.316  -0.515  -0.491  -0.240  -0.681   0.218  -0.216  -0.380  -0.093 
+ 11.801   0.665  -0.398  -0.045   0.181  -0.369  -0.494  -0.286  -0.649   0.147  -0.169  -0.507   0.026 
+ 11.612   0.707  -0.307  -0.007   0.188  -0.283  -0.477  -0.113  -0.658   0.227  -0.306  -0.340  -0.064 
+ 11.407   0.518  -0.194  -0.019   0.174  -0.239  -0.379  -0.188  -0.477   0.150  -0.207  -0.420  -0.094 
+ 10.877   0.506  -0.224  -0.084   0.091  -0.257  -0.399  -0.104  -0.522   0.250  -0.105  -0.316  -0.091 
+ 10.881   0.344  -0.229  -0.099   0.009  -0.330  -0.610  -0.099  -0.607   0.289  -0.108  -0.374  -0.076 
+ 10.839   0.401  -0.430  -0.026   0.053  -0.382  -0.562   0.059  -0.382   0.213  -0.194  -0.405  -0.016 
+ 11.632   0.315  -0.438  -0.049  -0.106  -0.272  -0.616   0.112  -0.489   0.200  -0.198  -0.340  -0.000 
+ 11.981   0.227  -0.603  -0.123  -0.123  -0.479  -0.740   0.189  -0.511   0.218  -0.173  -0.344   0.085 
+ 12.585   0.239  -0.560  -0.002  -0.127  -0.591  -0.762   0.219  -0.395   0.338  -0.108  -0.251   0.197 
+ 12.855   0.230  -0.694   0.077  -0.219  -0.865  -0.623   0.178  -0.222   0.195   0.029  -0.200   0.239 
+ 13.484   0.134  -0.560   0.117  -0.210  -0.851  -0.563   0.305  -0.210   0.101   0.025  -0.323   0.150 
+ 13.206   0.206  -0.730   0.309  -0.393  -0.653  -0.519   0.313  -0.246   0.153   0.040  -0.169   0.051 
+ 12.892   0.171  -0.787   0.486  -0.638  -0.545  -0.386   0.426  -0.341   0.272   0.006  -0.090  -0.056 
+ 12.683   0.092  -0.575   0.418  -0.661  -0.603  -0.270   0.405  -0.421   0.355  -0.032  -0.148  -0.079 
+ 12.343   0.280  -0.552   0.451  -0.690  -0.621  -0.166   0.361  -0.554   0.494  -0.170  -0.089  -0.145 
+ 11.903   0.311  -0.300   0.241  -0.529  -0.512   0.024   0.128  -0.531   0.502  -0.220  -0.195  -0.086 
+ 11.367   0.255   0.002  -0.062  -0.285  -0.436  -0.045   0.087  -0.386   0.372  -0.468  -0.104   0.017 
+ 10.663   0.445  -0.127  -0.229  -0.016  -0.635  -0.111   0.150  -0.336   0.217  -0.306  -0.019  -0.066 
+  9.959   0.312   0.023  -0.110   0.203  -0.631   0.051   0.121  -0.281   0.060  -0.295  -0.016  -0.027 
+  9.032  -0.159   0.431   0.009   0.143  -0.690   0.050   0.002  -0.277   0.007  -0.382  -0.240  -0.103 
+  7.815   0.079   0.217   0.453  -0.371  -0.468  -0.299   0.163  -0.238  -0.070  -0.201  -0.173  -0.021 
+  7.406  -0.022   0.111   0.537  -0.471  -0.316  -0.156   0.188  -0.421  -0.385  -0.228  -0.087  -0.032 
+  7.195  -0.073   0.033   0.588  -0.394  -0.157  -0.163   0.086  -0.362  -0.208  -0.153  -0.101  -0.071 
+  7.153   0.040   0.121   0.675  -0.293  -0.089  -0.349   0.143  -0.420  -0.211  -0.120  -0.143  -0.027 
+  6.931   0.095   0.085   0.702  -0.222  -0.275  -0.503  -0.016  -0.343  -0.310  -0.199  -0.033   0.064 
+  6.609   0.171   0.122   0.649  -0.139  -0.169  -0.300   0.046  -0.427  -0.272  -0.348  -0.235  -0.071 
+  6.116   0.233   0.143   0.581  -0.026  -0.162  -0.340  -0.041  -0.253  -0.262  -0.305  -0.218  -0.076 
+  6.022   0.212   0.098   0.539  -0.159  -0.196  -0.426  -0.075  -0.320  -0.295  -0.167  -0.216   0.028 
+  6.255   0.334  -0.101   0.473  -0.082  -0.152  -0.382   0.045  -0.124  -0.250  -0.260  -0.077   0.060 
+  6.696  -0.094  -0.137   0.409  -0.236   0.055  -0.251   0.002   0.109  -0.189  -0.212   0.023   0.018 
+  6.713   0.065  -0.034   0.406  -0.262  -0.040  -0.365  -0.114   0.101  -0.158  -0.157   0.031   0.001 
+  6.496   0.443   0.137   0.256  -0.231  -0.091  -0.441  -0.091  -0.058  -0.360  -0.213  -0.173   0.075 
+  6.718   0.692  -0.041   0.302  -0.151  -0.134  -0.493  -0.281   0.038  -0.321  -0.350  -0.194   0.015 
+  6.449   0.841  -0.184   0.294  -0.054  -0.064  -0.719  -0.248   0.004  -0.345  -0.419  -0.297  -0.015 
+  6.566   0.659  -0.287   0.285   0.104  -0.098  -0.677  -0.285  -0.292  -0.279  -0.318  -0.208  -0.049 
+  6.563   0.635  -0.342  -0.024  -0.078  -0.074  -0.651  -0.347  -0.331  -0.062  -0.226  -0.128  -0.012 
+  6.460   0.615  -0.212  -0.259  -0.248  -0.066  -0.472  -0.093  -0.465  -0.254  -0.223  -0.133   0.055 
+  6.524   0.359   0.052  -0.020  -0.167   0.049  -0.312   0.009  -0.585  -0.157  -0.335  -0.136  -0.046 
+  6.595   0.446   0.142   0.102  -0.222  -0.143  -0.309   0.249  -0.429  -0.160  -0.253  -0.228  -0.199 
+  6.643   0.537   0.093  -0.051  -0.204  -0.135  -0.183   0.214  -0.433  -0.233  -0.298  -0.155  -0.079 
+  6.762   0.367   0.209  -0.100  -0.268  -0.024  -0.130   0.079  -0.426  -0.087  -0.307  -0.148  -0.189 
+  6.776   0.287   0.163  -0.019  -0.261  -0.054   0.044   0.108  -0.598  -0.325  -0.322  -0.123  -0.104 
+  7.054   0.291   0.146  -0.053  -0.402  -0.088  -0.089   0.046  -0.630  -0.296  -0.160  -0.019   0.017 
+  7.140   0.350   0.060  -0.351  -0.310  -0.042  -0.115   0.035  -0.465  -0.119   0.041   0.106  -0.130 
+  7.415   0.381  -0.041  -0.228  -0.353  -0.079  -0.191  -0.045  -0.329   0.028   0.030  -0.026  -0.277 
+  7.529   0.403  -0.012  -0.326  -0.229  -0.069  -0.199  -0.039  -0.422  -0.008   0.136  -0.075  -0.214 
+  7.598   0.291  -0.197  -0.224  -0.429  -0.171  -0.388  -0.037  -0.216   0.255   0.241   0.079  -0.321 
+  7.324   0.183  -0.081  -0.120  -0.330  -0.278  -0.446   0.013  -0.290   0.114  -0.051  -0.089  -0.240 
+  7.232  -0.057  -0.225  -0.127  -0.197  -0.190  -0.281   0.207  -0.311   0.081   0.020  -0.063  -0.269 
+  6.911  -0.211   0.015  -0.070  -0.106  -0.208  -0.278   0.129  -0.130   0.146   0.011  -0.153  -0.320 
+  7.492  -0.108  -0.031   0.031  -0.424  -0.268  -0.338   0.158  -0.226   0.010   0.098   0.047  -0.255 
+  7.714  -0.141  -0.232  -0.104  -0.335  -0.295  -0.353   0.192  -0.099   0.185   0.090  -0.083  -0.313 
+  7.897  -0.092  -0.251  -0.244  -0.440  -0.173  -0.319   0.142   0.028   0.290   0.048  -0.189  -0.237 
+  7.686  -0.202  -0.360  -0.367  -0.597  -0.196  -0.276   0.223   0.149   0.210   0.049  -0.030  -0.242 
+  7.890  -0.088  -0.342  -0.395  -0.489  -0.243  -0.337   0.204   0.001   0.097   0.020   0.041  -0.345 
+  8.050  -0.134  -0.297  -0.293  -0.389  -0.231  -0.366   0.286   0.048   0.001  -0.216  -0.016  -0.180 
+  7.889  -0.163  -0.268  -0.092  -0.298  -0.223  -0.454   0.239   0.284   0.057  -0.297  -0.015  -0.191 
+  7.800  -0.201  -0.177   0.051  -0.151  -0.223  -0.449   0.348   0.113  -0.038  -0.168   0.009  -0.231 
+  7.708  -0.342  -0.151   0.115  -0.174  -0.215  -0.357   0.424   0.062   0.025  -0.149  -0.011  -0.182 
+  7.794  -0.144  -0.058  -0.052  -0.310  -0.391  -0.409   0.366   0.170   0.025  -0.242   0.163  -0.061 
+  7.531  -0.300  -0.046   0.045  -0.272  -0.452  -0.391   0.319   0.056   0.014  -0.043   0.172  -0.130 
+  7.063  -0.621  -0.193   0.162  -0.219  -0.380  -0.296   0.314  -0.012  -0.032  -0.074  -0.003  -0.176 
+  6.984  -0.512  -0.321   0.165  -0.104  -0.458  -0.435   0.168  -0.118   0.110   0.031  -0.016  -0.165 
+  6.932  -0.660  -0.224   0.159   0.090  -0.367  -0.466   0.086  -0.124   0.073   0.195   0.116  -0.220 
+  6.888  -0.735  -0.212   0.007  -0.068  -0.211  -0.389   0.070  -0.063   0.008   0.178  -0.055  -0.132 
+  6.743  -0.809  -0.213  -0.075  -0.277  -0.385  -0.534   0.113   0.045   0.093   0.184   0.114  -0.114 
+  6.853  -0.796  -0.037   0.060  -0.089  -0.267  -0.210   0.216  -0.101  -0.072   0.191   0.036  -0.167 
+  6.291  -0.938  -0.015   0.121  -0.142  -0.162  -0.195   0.136  -0.141   0.068   0.241   0.116  -0.093 
+  6.490  -0.977  -0.188   0.179  -0.082  -0.331  -0.216   0.248  -0.084   0.005   0.154   0.148  -0.118 
+  6.704  -0.888  -0.105   0.135  -0.017  -0.377  -0.290   0.366   0.094  -0.055   0.205   0.018  -0.143 
+  6.522  -0.768  -0.287   0.025  -0.111  -0.231  -0.293   0.296  -0.187  -0.165   0.037  -0.014  -0.226 
+  6.466  -0.831  -0.327  -0.022  -0.166  -0.179  -0.320   0.250  -0.111  -0.076   0.044   0.199  -0.033 
+  6.375  -0.881  -0.344   0.138  -0.113  -0.289  -0.346   0.118  -0.101  -0.068   0.049   0.057   0.004 
+  6.709  -0.463  -0.258   0.082  -0.162  -0.361  -0.424   0.203  -0.154  -0.117   0.096  -0.019  -0.240 
+  7.387  -0.111  -0.162   0.055  -0.081  -0.274  -0.536  -0.020  -0.186  -0.180  -0.000   0.019   0.076 
+  7.900   0.095  -0.193  -0.272  -0.173  -0.183  -0.542  -0.189  -0.117   0.026  -0.018  -0.065   0.056 
+  8.039   0.231  -0.477  -0.386  -0.229  -0.350  -0.701   0.006   0.011   0.007  -0.017  -0.070  -0.106 
+  8.088   0.254  -0.388  -0.215  -0.380  -0.406  -0.724  -0.217  -0.003   0.096   0.150  -0.184  -0.081 
+  8.225   0.395  -0.336  -0.276  -0.327  -0.258  -0.559  -0.242   0.016   0.093   0.119  -0.085  -0.070 
+  8.426   0.192  -0.447  -0.159  -0.294  -0.273  -0.527  -0.110  -0.070   0.145   0.109  -0.021  -0.129 
+  8.488   0.347  -0.414  -0.194  -0.361  -0.332  -0.585  -0.385  -0.114   0.033  -0.093   0.040  -0.062 
+  8.585   0.391  -0.370  -0.175  -0.282  -0.316  -0.827  -0.362  -0.090  -0.078  -0.107  -0.029  -0.112 
+  8.432   0.313  -0.371   0.067  -0.285  -0.307  -0.717  -0.266  -0.042   0.034  -0.048  -0.043  -0.084 
+  8.407   0.309  -0.386   0.160  -0.169  -0.252  -0.654  -0.304  -0.156   0.049  -0.122  -0.181  -0.103 
+  8.443   0.128  -0.223   0.559  -0.283  -0.371  -0.659  -0.235  -0.037   0.032  -0.113  -0.142  -0.077 
+  8.124   0.058  -0.258   0.309  -0.394  -0.104  -0.598  -0.229   0.028  -0.013   0.051   0.063  -0.067 
+  7.723   0.354  -0.122   0.321  -0.169  -0.450  -0.560  -0.253  -0.063   0.019  -0.111  -0.024  -0.112 
+  7.079   0.052  -0.294   0.210  -0.093  -0.135  -0.518  -0.109   0.064   0.168   0.004  -0.071  -0.070 
+  7.195   0.229  -0.252   0.061  -0.130  -0.364  -0.588  -0.081   0.025   0.159  -0.002  -0.015  -0.108 
+  6.983   0.149  -0.300   0.106  -0.087  -0.202  -0.580  -0.207  -0.127   0.118  -0.242  -0.160   0.051 
+  7.173  -0.188  -0.324   0.076   0.011  -0.348  -0.454  -0.114   0.032  -0.033  -0.156  -0.070  -0.080 
+  7.451  -0.248  -0.127   0.060   0.017  -0.555  -0.546  -0.150  -0.015  -0.389  -0.175   0.013  -0.034 
+  7.419  -0.241  -0.162   0.091  -0.227  -0.370  -0.349  -0.380   0.048  -0.284  -0.376   0.020  -0.013 
+  7.305  -0.444  -0.187   0.505  -0.207  -0.230  -0.516  -0.292  -0.022  -0.257  -0.269   0.101  -0.166 
+  7.997  -0.280  -0.038   0.497  -0.382  -0.234  -0.659  -0.294   0.002  -0.297  -0.190   0.097  -0.263 
+  7.828  -0.466  -0.091   0.545  -0.414  -0.305  -0.566  -0.099   0.111  -0.220  -0.075   0.319  -0.220 
+  7.660  -0.300   0.025   0.643  -0.420  -0.313  -0.668  -0.165  -0.075  -0.131   0.033   0.297  -0.274 
+  7.686  -0.410  -0.066   0.575  -0.457  -0.273  -0.692  -0.179  -0.171  -0.178   0.049   0.289  -0.214 
+  7.851  -0.322  -0.159   0.487  -0.513  -0.226  -0.793  -0.240  -0.174  -0.209  -0.012   0.052  -0.228 
+  7.926  -0.218  -0.152   0.339  -0.650  -0.474  -0.731  -0.087  -0.228  -0.212  -0.109   0.089  -0.348 
+  7.190  -0.258  -0.177   0.328  -0.466  -0.454  -0.699  -0.062  -0.082  -0.084  -0.152   0.165  -0.144 
+  7.210   0.054  -0.136   0.218  -0.253  -0.250  -0.621  -0.009  -0.148  -0.187  -0.320   0.069  -0.233 
+  7.164   0.167  -0.150   0.262  -0.202  -0.242  -0.734  -0.078  -0.249  -0.207  -0.281   0.130  -0.223 
+  6.991   0.065  -0.104   0.425  -0.135  -0.156  -0.610  -0.118  -0.210  -0.350  -0.317   0.050  -0.173 
+  6.397   0.088  -0.158   0.273  -0.272  -0.160  -0.628  -0.160  -0.196  -0.362  -0.201   0.146  -0.259 
+  6.365   0.313  -0.182   0.169  -0.125  -0.166  -0.578  -0.195  -0.067  -0.197  -0.289   0.096  -0.092 
+  6.560   0.082  -0.174   0.275  -0.136  -0.273  -0.705  -0.135  -0.160  -0.237  -0.186   0.098  -0.180 
+  6.315   0.148  -0.115   0.279  -0.210  -0.247  -0.507  -0.140  -0.248  -0.230  -0.338   0.110  -0.179 
+  5.918   0.239  -0.189   0.162  -0.122  -0.343  -0.516   0.013  -0.221  -0.104  -0.185  -0.052  -0.085 
+  5.664   0.187  -0.175   0.168  -0.101  -0.318  -0.451   0.029  -0.199  -0.242  -0.236   0.153  -0.236 
+  5.922   0.089  -0.182   0.192   0.065   0.011  -0.698  -0.122   0.016  -0.044  -0.172   0.012  -0.222 
+  5.996  -0.031  -0.356   0.166   0.052  -0.028  -0.589  -0.139  -0.079  -0.215  -0.244   0.260   0.025 
+  5.731   0.204  -0.273   0.050  -0.164  -0.087  -0.509  -0.005  -0.026  -0.130  -0.273  -0.194  -0.169 
+  5.826   0.241  -0.282   0.046  -0.243   0.044  -0.498  -0.052   0.116  -0.012  -0.248  -0.188  -0.199 
+  6.009   0.390  -0.507   0.067  -0.290  -0.225  -0.493   0.095   0.174   0.102  -0.264  -0.283  -0.110 
+  6.077   0.299  -0.603  -0.133  -0.224   0.052  -0.626  -0.060   0.172   0.146  -0.148  -0.279  -0.199 
+  6.589  -0.009  -0.585  -0.004  -0.290   0.124  -0.684  -0.017   0.289   0.187  -0.316  -0.250  -0.055 
+  6.868  -0.031  -0.570   0.010  -0.278   0.126  -0.728  -0.022   0.300   0.293  -0.236  -0.189   0.126 
+  7.042   0.169  -0.453   0.020  -0.264  -0.044  -0.671  -0.028   0.152   0.379  -0.148  -0.022  -0.078 
+  6.390   0.362  -0.362   0.162  -0.206  -0.196  -0.687  -0.025   0.119   0.313  -0.252  -0.088   0.017 
+  6.002   0.461  -0.189   0.209  -0.065  -0.117  -0.740  -0.033  -0.048   0.082  -0.306  -0.156  -0.078 
+  5.610   0.495  -0.192  -0.036  -0.201  -0.329  -0.655  -0.142  -0.135   0.037  -0.350  -0.187  -0.177 
+  5.168   0.313  -0.417  -0.083  -0.063  -0.389  -0.487  -0.061   0.037   0.196  -0.328  -0.226  -0.096 
+  5.175   0.395  -0.230  -0.127  -0.000  -0.241  -0.238  -0.116   0.010   0.199  -0.245  -0.147   0.036 
+  5.807  -0.203   0.098   0.154  -0.141   0.048  -0.444  -0.170  -0.009  -0.025  -0.086  -0.186  -0.088 
+  5.161   0.030   0.115   0.145  -0.177  -0.085  -0.246  -0.179  -0.094  -0.085  -0.053  -0.131  -0.192 
+  4.697  -0.011  -0.023   0.175  -0.167  -0.087  -0.185  -0.268  -0.236  -0.124  -0.143  -0.125  -0.035 
+  5.004  -0.111  -0.062   0.315  -0.179  -0.039  -0.298  -0.216  -0.106  -0.033  -0.080   0.021  -0.039 
+  5.352  -0.100   0.168   0.491  -0.215  -0.069  -0.354  -0.156  -0.165  -0.184  -0.209  -0.180   0.048 
+  5.235  -0.168  -0.159   0.448  -0.029  -0.068  -0.376  -0.143  -0.244  -0.177  -0.208  -0.236   0.002 
+  5.259  -0.121  -0.253   0.234  -0.255  -0.315  -0.180  -0.115  -0.223  -0.300  -0.246  -0.138  -0.078 
+  5.420  -0.079  -0.358   0.321  -0.221  -0.107  -0.060  -0.125  -0.101  -0.338  -0.236  -0.205  -0.053 
+  5.818  -0.168  -0.418   0.285  -0.294  -0.082  -0.046   0.165  -0.112  -0.277  -0.169  -0.137  -0.144 
+  6.006  -0.159  -0.441   0.402  -0.286  -0.070  -0.079   0.096  -0.163  -0.248  -0.164  -0.334  -0.377 
+  6.363   0.024  -0.236   0.441  -0.499  -0.379  -0.200   0.188  -0.043  -0.054  -0.189  -0.338  -0.374 
+  6.651   0.060  -0.557   0.258  -0.564  -0.236  -0.346   0.113  -0.118   0.042   0.020  -0.131  -0.307 
+  6.061   0.092  -0.480   0.304  -0.532  -0.170  -0.214   0.113  -0.185   0.012  -0.081  -0.171  -0.076 
+  6.362  -0.039  -0.421   0.347  -0.712  -0.196  -0.182   0.183  -0.088  -0.021  -0.187  -0.179  -0.228 
+  6.397  -0.064  -0.406   0.274  -0.691  -0.295   0.018   0.207  -0.106   0.076  -0.182  -0.126  -0.188 
+  6.505   0.027  -0.147   0.267  -0.848  -0.277  -0.068   0.240  -0.172  -0.014  -0.251  -0.105  -0.204 
+  6.138   0.075  -0.008   0.112  -0.822  -0.098  -0.011   0.243  -0.160  -0.127  -0.353  -0.040  -0.224 
+  5.785   0.000   0.040   0.273  -0.642  -0.200  -0.099   0.022  -0.124   0.153  -0.189  -0.057  -0.133 
+  5.528  -0.106  -0.171   0.109  -0.679  -0.251  -0.033  -0.106  -0.078   0.160  -0.274  -0.099  -0.102 
+  5.320   0.101  -0.208   0.069  -0.419  -0.078  -0.048   0.027  -0.163   0.039  -0.115  -0.126  -0.116 
+  5.367   0.082  -0.320   0.335  -0.220  -0.324  -0.149   0.082  -0.036  -0.044  -0.294  -0.160  -0.120 
+  5.978  -0.364  -0.467   0.241   0.045  -0.046   0.019   0.101  -0.073  -0.105  -0.200  -0.002  -0.015 
+  6.574  -0.852  -0.237  -0.024  -0.068  -0.118  -0.151   0.047   0.063  -0.182  -0.183   0.078  -0.031 
+  7.061  -1.199  -0.174   0.109  -0.113  -0.071  -0.171  -0.239  -0.114  -0.132  -0.298  -0.031   0.009 
+  7.522  -1.284  -0.124   0.271  -0.202  -0.227  -0.183  -0.042  -0.144  -0.160  -0.191  -0.023  -0.208 
+  7.824  -1.228  -0.081   0.001  -0.237  -0.161  -0.282   0.025   0.141  -0.183  -0.123  -0.025  -0.052 
+  8.181  -1.266  -0.106   0.237  -0.030  -0.206  -0.183  -0.067   0.035  -0.040  -0.043   0.044  -0.114 
+  8.270  -1.145  -0.242   0.168  -0.092  -0.264  -0.204  -0.013  -0.053  -0.203  -0.403   0.075   0.037 
+  8.271  -0.677  -0.448   0.038  -0.037  -0.001  -0.326   0.112  -0.105  -0.108  -0.327   0.180   0.065 
+  7.692  -0.106  -0.281  -0.021   0.101  -0.055  -0.169   0.009  -0.021   0.002  -0.280   0.100  -0.017 
+  9.490   0.656   0.349   0.040  -0.182  -0.423  -0.560  -0.118  -0.020   0.166  -0.445   0.113  -0.068 
+ 11.381   0.638   0.115  -0.196  -0.271  -0.350  -0.777  -0.154  -0.087   0.291  -0.401   0.139  -0.084 
+ 12.162   0.634  -0.159  -0.374  -0.299  -0.281  -1.048   0.031  -0.161   0.369  -0.405   0.160  -0.191 
+ 10.983   0.905  -0.189  -0.117  -0.265  -0.473  -1.138   0.136   0.177   0.247  -0.272  -0.142  -0.176 
+ 11.104   0.753  -0.241  -0.025  -0.312  -0.418  -0.964   0.148  -0.037   0.330  -0.307  -0.154  -0.082 
+ 11.063   0.714  -0.277  -0.243  -0.228  -0.353  -0.875   0.060   0.016   0.372  -0.210  -0.152  -0.278 
+ 11.284   0.691  -0.354  -0.353  -0.233  -0.306  -0.852   0.102  -0.007   0.403  -0.186  -0.164  -0.256 
+ 11.747   0.694  -0.458  -0.415  -0.320  -0.253  -0.802   0.141  -0.045   0.437  -0.221  -0.206  -0.224 
+ 12.247   0.636  -0.525  -0.441  -0.318  -0.293  -0.690   0.118  -0.156   0.568  -0.341  -0.156  -0.266 
+ 12.476   0.512  -0.535  -0.430  -0.353  -0.242  -0.601  -0.012  -0.077   0.535  -0.299  -0.236  -0.245 
+ 12.448   0.578  -0.633  -0.388  -0.368  -0.297  -0.468  -0.062  -0.132   0.571  -0.299  -0.233  -0.266 
+ 12.147   0.586  -0.573  -0.457  -0.348  -0.321  -0.413  -0.068  -0.153   0.593  -0.262  -0.227  -0.330 
+ 12.035   0.551  -0.505  -0.493  -0.352  -0.325  -0.380  -0.091  -0.163   0.567  -0.206  -0.208  -0.348 
+ 12.110   0.607  -0.532  -0.478  -0.394  -0.295  -0.339  -0.171  -0.137   0.538  -0.147  -0.222  -0.351 
+ 12.044   0.744  -0.619  -0.383  -0.456  -0.199  -0.423  -0.103  -0.221   0.525  -0.133  -0.175  -0.395 
+ 12.060   0.698  -0.518  -0.350  -0.492  -0.215  -0.331  -0.132  -0.259   0.514  -0.140  -0.111  -0.399 
+ 11.845   0.784  -0.557  -0.352  -0.528  -0.260  -0.134  -0.154  -0.313   0.451  -0.116   0.024  -0.414 
+ 11.590   0.739  -0.418  -0.459  -0.568  -0.285   0.029  -0.244  -0.277   0.364  -0.082   0.057  -0.301 
+ 11.363   0.669  -0.336  -0.494  -0.585  -0.411   0.186  -0.191  -0.241   0.139  -0.083   0.129  -0.128 
+ 10.682   0.752  -0.099  -0.424  -0.633  -0.642   0.424  -0.011   0.070  -0.339  -0.156   0.132   0.026 
+  9.739   0.487   0.361  -0.304  -0.461  -0.569   0.353  -0.093   0.154  -0.231  -0.382   0.016  -0.014 
+  8.832  -0.141   0.077   0.003  -0.185  -0.434   0.136  -0.117   0.004   0.086  -0.296   0.009  -0.166 
+  8.116  -0.266   0.054  -0.158  -0.155  -0.087   0.140   0.035   0.090   0.005  -0.328  -0.007  -0.125 
+  8.037  -0.333   0.196  -0.145  -0.148   0.071   0.010   0.172   0.105   0.144  -0.253   0.010  -0.092 
+  8.008  -0.466   0.478   0.096  -0.002  -0.132  -0.161  -0.028  -0.120   0.145  -0.141   0.116   0.071 
+  8.129  -0.640   0.527   0.158  -0.097  -0.284  -0.000  -0.052  -0.138   0.106  -0.067   0.118  -0.154 
+  8.079  -0.757   0.487   0.124   0.079  -0.225   0.207  -0.038  -0.227   0.031  -0.175  -0.147  -0.203 
+  7.901  -0.652   0.416   0.132  -0.038  -0.254   0.105   0.003  -0.162   0.178  -0.212  -0.134  -0.085 
+  7.547  -0.836   0.472   0.322  -0.158  -0.145   0.054  -0.077  -0.145   0.179  -0.182   0.102   0.013 
+  7.882  -0.558   0.605   0.188  -0.172  -0.206   0.035   0.035  -0.140   0.142  -0.252  -0.200  -0.064 
+  8.104  -0.265   0.410  -0.149  -0.310  -0.134   0.141   0.029   0.059   0.225  -0.184  -0.206  -0.096 
+  8.017  -0.124   0.252  -0.318  -0.299  -0.178   0.134  -0.087  -0.007   0.254  -0.012  -0.186  -0.103 
+  8.206   0.120  -0.184  -0.634  -0.492  -0.032  -0.021  -0.121   0.010   0.337  -0.077  -0.158  -0.065 
+  8.531   0.353  -0.262  -0.537  -0.433  -0.179  -0.223  -0.133   0.139   0.417  -0.073  -0.125  -0.147 
+  8.553   0.406  -0.328  -0.673  -0.465  -0.220  -0.239  -0.194   0.158   0.311  -0.192  -0.133  -0.111 
+  8.389   0.462  -0.284  -0.593  -0.537  -0.107  -0.170  -0.067   0.204   0.333  -0.254   0.053  -0.023 
+  8.263   0.472  -0.373  -0.450  -0.564  -0.146  -0.136  -0.136   0.126   0.330  -0.176   0.005  -0.013 
+  8.356   0.494  -0.296  -0.387  -0.511  -0.128  -0.282  -0.216   0.064   0.401  -0.121  -0.011  -0.009 
+  8.339   0.587  -0.300  -0.333  -0.536  -0.295  -0.481  -0.177   0.037   0.459  -0.126  -0.213  -0.063 
+  8.031   0.514  -0.206  -0.367  -0.595  -0.241  -0.363  -0.223   0.155   0.403  -0.157  -0.140  -0.091 
+  7.571   0.263  -0.276  -0.373  -0.516  -0.215  -0.447  -0.307   0.172   0.346  -0.139  -0.308  -0.084 
+  7.140   0.235  -0.255  -0.404  -0.449  -0.079  -0.077  -0.127   0.106   0.301  -0.174  -0.200  -0.099 
+  7.241   0.333  -0.270  -0.410  -0.435  -0.127  -0.211  -0.245   0.090   0.421  -0.060  -0.154   0.028 
+  7.488   0.466  -0.182  -0.434  -0.389  -0.085  -0.165  -0.165   0.026   0.274   0.041  -0.148  -0.096 
+  7.220   0.154  -0.286  -0.415  -0.279  -0.182  -0.189  -0.143   0.003   0.271   0.005   0.077  -0.134 
+  7.313   0.269  -0.136  -0.277  -0.163  -0.060  -0.183  -0.225  -0.117   0.139  -0.116  -0.025  -0.243 
+  7.582   0.255  -0.054  -0.116  -0.314  -0.162  -0.235  -0.194  -0.195   0.205  -0.015  -0.108  -0.178 
+  7.814  -0.010   0.071  -0.051  -0.306  -0.206  -0.331  -0.248  -0.303   0.295  -0.182  -0.037  -0.088 
+  7.978  -0.580   0.257   0.379  -0.365  -0.196  -0.439  -0.408  -0.446   0.368  -0.331   0.089   0.012 
+  8.244  -0.499   0.252   0.259  -0.753  -0.373  -0.498  -0.463  -0.395   0.466  -0.211   0.277   0.130 
+  8.666  -0.447   0.387   0.253  -0.686  -0.254  -0.396  -0.485  -0.598   0.308  -0.227   0.325   0.172 
+  9.145  -0.287   0.284   0.322  -0.802  -0.318  -0.424  -0.442  -0.538   0.331  -0.189   0.217  -0.012 
+  9.601  -0.401   0.272   0.413  -0.813  -0.274  -0.480  -0.421  -0.571   0.415  -0.175   0.224   0.067 
+  9.640  -0.471   0.280   0.208  -0.805  -0.422  -0.517  -0.325  -0.526   0.440  -0.162   0.211   0.079 
+  9.684  -0.282   0.370   0.115  -0.761  -0.433  -0.465  -0.361  -0.577   0.380  -0.249   0.128  -0.029 
diff --git a/test/regression/chan3-logspec.cepview b/test/regression/chan3-logspec.cepview
new file mode 100644 (file)
index 0000000..156b141
--- /dev/null
@@ -0,0 +1,2190 @@
+  5.445   4.866   5.182   4.222   3.622   3.989   3.585   4.087   3.504   2.488   5.713   5.596   4.862   5.476   5.112   4.736   5.000   5.725   6.217   5.842   6.497   7.063   8.006   8.840   8.430   7.825   9.400   9.372   9.797   9.713  10.279   9.907   8.844  10.395  10.035   8.038 
+  4.687   3.182   3.617   5.513   5.547   4.356   4.459   3.852   3.775   3.936   4.128   4.845   5.464   4.963   5.367   4.923   5.403   5.075   6.013   6.028   6.838   7.012   7.997   7.963   7.163   7.912  10.142  10.293   9.802  10.208  10.521  10.089   9.910  10.079  10.061   8.103 
+  4.436   4.279   4.150   5.808   5.801   4.281   6.043   5.211   4.746   4.782   5.875   6.146   4.791   4.644   5.565   5.045   5.596   5.718   5.423   5.788   7.167   7.456   8.387   7.416   6.927   8.003  10.185   9.532   9.443  10.468  10.040   9.926  10.079  10.422   9.709   7.279 
+  4.426   4.031   4.260   4.734   5.192   5.647   5.184   5.047   3.913   4.494   6.095   5.160   5.107   6.133   5.685   5.805   6.515   6.730   5.942   6.395   4.902   6.872   8.456   8.513   7.932   9.979   9.670  10.115  10.308  10.047   9.995   9.712   9.059   9.628   9.393   7.115 
+  4.782   3.675   4.222   4.435   4.793   5.097   5.611   3.973   4.906   5.536   4.398   5.258   4.983   4.811   4.458   5.609   6.298   6.571   6.049   6.502   5.943   6.851   7.820   8.709   9.611  10.163   7.587   9.405   9.727   9.170   9.185   9.230   9.501   9.173   8.745   7.368 
+  2.447   4.772   4.341   5.346   5.312   5.370   4.741   4.286   4.119   5.750   5.062   4.361   4.816   4.397   4.129   6.221   6.021   6.149   6.386   6.510   6.547   8.040   9.006   9.044   9.968  10.444   7.588   8.911   9.383   8.805  10.230   9.487   8.854  10.029   9.792   7.628 
+  3.237   4.369   4.170   5.290   4.843   3.875   4.740   4.541   3.528   5.005   5.160   5.392   5.548   5.149   4.724   5.305   5.317   5.335   5.889   6.716   6.711   8.052   8.931   7.317  10.351  10.326   8.091   7.816   7.747   9.027  10.012   9.402   9.085   9.627   9.758   7.079 
+  2.993   4.690   5.633   5.079   4.809   5.175   3.974   3.345   3.369   4.785   3.864   2.872   3.953   4.373   5.577   5.765   4.773   6.333   7.351   6.408   6.193   6.678   8.569   7.984   9.283   8.048   7.556   8.579   8.536   8.726   8.919   8.208   8.232   9.704   9.981   6.825 
+  3.828   4.192   4.773   5.132   5.035   5.223   5.383   4.251   5.298   4.827   3.755   4.707   2.821   4.834   5.399   6.185   6.088   6.540   6.909   6.752   6.352   6.711   8.005   8.525   8.206   7.619   7.910   8.739   8.520   9.169   9.033   8.873   8.204   8.612   8.422   6.687 
+  4.028   3.918   4.048   3.641   4.530   4.087   4.775   5.036   4.374   3.794   3.783   4.554   3.901   5.344   5.664   6.083   7.194   8.064   7.246   6.929   7.058   6.992   8.306   7.850   8.116   7.649   8.121   7.831   7.821   8.324   9.144   8.481   8.274   8.932   9.055   7.076 
+  2.580   2.100   4.247   5.531   4.936   4.394   4.209   4.616   3.627   3.353   4.697   5.643   4.771   5.342   5.996   6.637   5.246   6.435   5.868   6.186   6.410   6.502   7.074   7.797   8.358   7.519   6.839   7.942   8.731   8.277   8.360   7.900   8.540   8.728   9.271   7.125 
+  5.852   4.477   4.245   3.885   3.799   5.539   5.227   4.717   5.258   5.048   4.368   4.816   4.182   3.540   5.092   5.337   5.532   6.013   6.167   5.907   5.644   6.152   8.026   7.314   6.481   6.107   7.100   8.283   7.266   8.314   7.919   7.091   8.244   8.720   8.622   6.548 
+  8.666   8.620   7.728   7.142   6.015   5.399   5.248   5.307   4.860   4.196   4.058   4.497   4.549   5.901   5.395   4.036   4.623   5.389   5.146   5.134   5.188   6.303   7.120   6.745   6.757   7.870   8.349   8.042   7.063   7.821   7.756   7.073   7.237   8.310   8.967   6.665 
+  7.718   7.702   6.738   6.352   4.159   4.932   4.680   5.582   5.405   4.952   5.299   3.646   4.630   4.951   4.287   5.166   4.857   5.163   4.471   4.841   5.690   6.198   5.370   6.575   5.832   6.016   6.009   7.112   6.893   6.181   6.062   6.803   5.882   7.139   7.002   5.662 
+  6.005   6.614   6.286   4.768   4.121   4.687   4.773   5.463   5.289   5.843   4.878   3.342   4.569   5.123   5.085   4.630   5.498   5.223   4.976   4.928   5.078   5.489   5.334   5.164   6.109   7.097   6.276   5.991   6.569   6.419   6.338   7.063   6.295   7.310   7.496   5.362 
+  5.544   4.915   4.305   4.311   5.537   5.315   5.051   3.357   3.230   4.409   4.173   4.709   4.278   4.828   4.982   4.271   4.756   4.704   5.513   5.206   4.407   5.169   5.901   5.834   6.417   6.453   6.178   5.299   5.957   6.190   5.830   6.570   6.211   6.686   7.462   5.122 
+  5.700   6.386   6.452   4.715   4.360   4.942   4.709   4.289   5.068   4.350   3.846   3.252   4.033   4.937   4.836   5.368   5.730   4.997   4.706   4.480   4.234   5.076   6.440   5.898   5.242   5.086   4.323   4.776   4.332   4.523   5.544   5.667   5.198   5.548   5.921   4.100 
+  3.723   5.358   4.916   5.268   5.408   4.929   5.108   5.600   4.524   3.194   3.551   3.709   2.540   2.777   4.010   5.417   4.688   4.264   4.935   5.053   3.744   4.737   5.871   4.553   5.034   3.649   3.838   4.919   3.756   4.761   5.192   5.248   4.374   4.435   4.301   3.729 
+  4.620   4.556   3.447   2.739   3.785   5.446   5.693   3.332   3.861   4.479   3.109   3.597   3.500   3.667   5.003   5.765   5.423   3.908   4.315   4.455   4.426   3.360   5.231   3.838   3.912   3.808   3.319   3.436   3.627   3.877   4.305   3.443   3.825   2.808   3.572   2.645 
+  3.562   2.868   3.485   4.213   4.251   5.787   5.287   4.403   2.633   2.742   3.246   3.891   4.735   4.300   4.046   5.447   5.330   3.902   3.202   4.238   5.641   3.636   3.630   3.881   4.149   3.699   3.696   3.842   4.234   3.385   4.122   3.486   2.772   2.677   3.326   2.601 
+  4.118   3.532   4.910   6.078   4.566   5.197   4.912   5.128   4.551   4.571   4.374   4.714   4.071   4.925   3.857   5.271   4.607   4.402   3.614   3.030   4.234   3.789   3.983   4.037   4.283   4.537   3.953   3.958   4.197   4.177   3.861   3.164   3.754   3.367   3.280   2.281 
+  5.210   4.980   5.752   6.372   5.541   5.119   3.400   3.906   4.829   5.019   4.794   4.585   3.678   4.344   4.193   5.349   4.549   3.286   3.967   4.194   4.654   3.399   4.201   4.360   3.197   4.257   3.864   3.833   3.946   3.364   3.304   3.520   3.384   4.436   4.679   3.427 
+  5.011   4.933   6.189   6.388   5.553   6.516   5.945   4.100   3.872   2.622   4.079   4.534   1.895   3.600   4.099   4.734   5.071   4.775   3.556   4.040   3.027   3.213   4.141   4.882   3.291   3.449   3.498   3.613   3.934   4.126   3.427   2.799   3.358   2.685   2.884   2.668 
+  5.120   6.108   5.394   5.328   6.461   6.674   6.450   4.972   4.018   2.144   3.921   3.177   3.021   5.161   5.410   3.575   4.465   4.810   3.899   3.362   3.542   3.571   4.432   3.588   4.136   3.712   4.368   2.768   3.105   3.652   3.695   3.246   3.446   3.380   4.222   4.439 
+  8.050   7.389   7.308   7.689   7.281   7.472   7.174   7.355   6.806   6.380   6.416   6.105   6.414   5.724   5.967   5.909   5.360   5.450   4.891   4.289   6.191   5.925   5.502   6.485   8.043   9.436  10.000   9.025   9.015   8.857   8.529   8.611   8.509   8.654   8.559   7.711 
+ 11.927  10.668  10.070  12.057  11.979   9.877  11.003  10.394   8.632   9.732   8.555   7.910   8.091   7.596   7.364   7.486   7.031   7.301   7.741   8.959   9.527   9.396   7.923   8.275   9.659  11.668  12.368  10.725  11.107  10.575  10.244  10.413  10.095  10.374  10.310   9.274 
+ 12.450  12.823  12.642  13.615  14.168  13.714  12.123  11.388  11.122  10.783   9.938   8.705   8.029   8.012   8.212   8.554   8.669   9.210   9.952  11.707  13.165  12.167  10.657   9.800  10.095  11.406  12.026  10.853  10.016  10.108  11.810  11.993  10.617   8.241   9.333   9.518 
+ 12.154  13.533  12.929  14.637  15.020  15.685  13.760  12.581  12.066  11.506  10.927   9.800   9.575   9.439   9.480   9.634  10.123  10.649  11.649  13.561  14.992  13.986  12.440  11.895  12.458  13.770  14.021  12.833  12.054  12.351  14.068  14.481  13.324  10.815  11.103  11.596 
+ 12.724  14.196  13.436  15.054  15.830  16.934  14.894  13.207  13.523  12.861  12.591  11.226  11.389  11.099  11.033  11.050  11.190  11.707  12.760  15.012  16.745  15.169  13.651  13.282  13.910  15.289  15.187  13.646  12.759  13.501  15.585  15.782  15.128  12.957  11.366  12.268 
+ 13.209  14.503  13.841  15.216  16.851  17.853  15.769  14.192  14.547  13.649  12.977  12.233  11.975  11.922  11.828  11.883  12.137  12.661  13.997  16.138  17.127  15.448  14.291  13.858  14.394  15.380  14.340  13.181  12.934  13.561  15.225  15.368  15.238  13.057  10.307  10.881 
+ 13.464  14.609  14.041  15.052  17.353  18.296  16.772  15.676  15.116  14.085  13.197  13.128  12.329  12.452  12.372  12.539  12.801  13.367  14.695  16.649  17.334  16.288  14.809  14.790  15.520  15.937  14.301  13.050  13.211  13.700  14.886  15.489  15.821  13.699   9.910  10.640 
+ 13.620  14.484  14.106  14.745  17.308  18.073  17.673  16.632  15.100  14.477  13.634  13.475  12.519  12.549  12.536  12.739  13.090  13.796  14.842  17.138  17.904  16.497  15.375  15.515  16.324  15.612  13.992  12.851  13.117  13.481  14.584  15.798  16.135  14.027  10.090  10.583 
+ 13.712  14.386  14.118  14.870  16.861  17.286  18.071  17.180  14.774  14.680  13.994  13.663  12.779  12.550  12.731  12.907  13.395  14.082  15.282  17.328  17.496  16.237  15.646  15.951  15.478  13.811  12.379  11.711  12.422  13.456  14.517  13.992  14.147  11.597   9.368   8.579 
+ 13.789  14.324  14.272  14.856  16.602  17.015  18.478  17.439  15.459  14.922  14.229  13.747  13.214  13.033  13.179  13.549  14.285  15.377  16.478  17.696  16.479  16.008  16.312  16.362  14.921  13.201  12.111  12.118  12.583  13.616  13.816  12.632  13.090  11.707   9.599   9.154 
+ 13.974  14.341  14.439  14.964  16.628  17.544  18.873  17.488  15.712  15.545  14.289  13.891  13.444  13.580  13.955  14.851  14.992  17.359  16.892  16.266  15.423  15.488  16.667  16.203  14.105  12.677  12.040  12.266  13.118  14.843  14.188  12.910  13.623  12.627  10.351   6.909 
+ 14.142  14.176  14.568  14.897  16.791  18.019  18.684  16.580  15.384  15.450  14.518  13.999  13.793  14.202  14.592  16.764  16.136  16.002  14.898  13.753  14.058  14.958  16.395  15.801  13.340  12.342  11.155  11.562  12.691  14.752  13.950  12.676  13.871  12.894  10.518   7.463 
+ 13.996  13.962  14.406  15.329  17.078  18.053  18.130  15.480  14.974  14.861  14.467  14.244  14.312  15.741  16.640  16.242  14.125  13.334  12.759  12.466  12.872  13.906  15.940  15.295  12.810  12.003  10.678  10.264  11.519  13.992  13.065  11.702  12.655  12.062   9.801   6.553 
+ 13.718  13.793  14.130  15.579  17.091  17.346  17.396  15.495  14.408  14.281  14.226  14.333  14.820  16.284  15.765  14.241  12.675  11.798  11.676  11.953  12.057  13.069  14.872  14.533  11.955  11.149  10.421   8.929  10.175  12.976  12.666  10.920  11.892  11.478   9.713   7.366 
+ 13.533  13.561  14.141  15.769  17.380  16.877  16.581  15.365  14.628  14.118  13.915  14.272  15.003  16.945  15.805  13.765  12.676  11.772  11.606  12.151  12.085  13.237  14.790  13.855  11.378  10.906  10.705   8.280   9.631  12.530  12.690  10.957  11.850  11.342   9.157   4.818 
+ 13.313  13.829  14.350  16.038  17.494  16.770  16.497  15.308  14.622  14.194  13.567  13.892  14.131  16.580  16.154  14.281  13.032  12.056  11.822  11.997  12.233  13.596  15.089  14.086  11.570  10.863  11.386   8.703   9.575  12.474  13.124  11.363  12.291  12.040   9.843   5.038 
+ 13.817  14.018  14.493  15.789  17.581  16.760  16.350  15.072  14.482  14.030  13.176  13.722  13.670  15.048  15.870  16.321  14.274  12.794  12.365  12.289  12.766  14.088  15.485  14.181  12.012  11.298  11.463   9.482   9.760  12.688  13.792  11.876  12.380  12.352  11.503   6.134 
+ 13.740  14.160  14.540  15.701  17.640  16.812  16.343  15.054  14.495  14.020  13.191  13.348  13.287  13.497  15.126  15.663  16.493  15.183  13.700  13.414  13.766  15.097  16.374  14.449  12.461  11.597  11.845  10.199  10.000  12.597  14.311  12.280  12.367  12.084  10.977   7.340 
+ 14.055  14.163  14.364  15.567  17.565  16.613  16.201  14.851  14.243  13.716  13.085  12.911  12.692  12.799  13.281  14.249  15.702  16.222  16.325  15.036  14.729  15.913  17.296  15.073  13.130  12.127  12.320  11.003  10.603  12.782  14.481  13.594  13.444  13.584  11.803   8.802 
+ 13.903  14.094  14.386  15.195  17.498  16.693  16.160  14.935  14.219  13.662  12.935  12.714  12.498  12.496  12.562  13.164  13.533  15.169  16.329  16.835  16.724  16.800  17.923  16.903  13.957  12.824  12.827  11.747  11.071  13.256  15.090  14.203  13.883  13.313  12.272   9.173 
+ 13.772  14.079  14.303  14.968  17.417  16.786  16.332  15.149  14.454  13.772  12.900  12.983  12.474  12.333  12.382  12.482  13.027  13.671  15.291  16.835  17.866  17.503  18.099  17.988  15.985  13.989  13.502  12.625  11.996  13.986  15.868  15.022  14.540  14.229  12.992   9.851 
+ 13.690  13.878  13.984  14.822  17.104  16.561  16.735  15.175  14.265  13.605  12.955  12.844  12.284  12.209  12.071  12.142  12.389  13.287  14.204  16.022  17.903  17.384  17.027  17.274  16.659  15.006  13.941  12.956  12.087  13.747  15.935  15.040  14.124  13.915  12.434   9.776 
+ 13.626  13.829  13.798  14.521  16.732  16.505  17.082  15.300  14.261  13.677  13.222  12.793  12.327  12.068  11.942  12.200  12.084  13.191  13.622  15.188  17.462  17.126  15.927  16.024  16.484  15.909  14.666  13.728  12.348  13.468  15.655  14.875  13.681  14.389  12.861  10.890 
+ 13.647  13.934  13.739  14.240  16.557  16.516  17.459  15.955  14.800  13.962  13.653  13.412  12.970  12.479  12.143  12.380  12.648  13.274  13.970  15.765  17.679  16.985  15.654  15.400  15.782  16.046  14.807  13.117  12.833  13.357  14.833  14.368  12.846  13.692  12.699  10.281 
+ 13.492  13.766  13.638  13.961  15.999  16.408  17.640  16.116  15.307  14.375  13.985  13.494  13.066  12.817  12.345  12.433  12.847  13.143  14.176  16.069  17.540  16.525  14.919  14.509  14.503  15.333  14.311  13.080  13.369  13.514  14.621  14.012  12.928  13.558  12.842   8.159 
+ 13.330  13.583  13.550  13.875  15.418  16.215  17.435  16.356  15.789  14.577  14.419  13.620  13.238  13.067  12.672  12.563  12.988  13.290  14.827  16.580  17.083  15.919  14.616  13.903  14.719  15.107  13.503  13.150  13.278  13.243  14.241  14.139  13.399  13.772  12.228   7.445 
+ 13.198  13.622  13.351  13.972  15.393  15.961  17.381  16.362  16.164  14.851  14.430  13.892  13.451  13.461  13.017  13.142  13.375  14.163  15.710  17.012  16.630  15.133  14.451  13.836  14.803  14.677  13.071  13.874  13.864  13.562  13.842  13.539  12.623  12.812  11.443   7.894 
+ 13.019  13.508  13.154  13.923  15.472  16.025  17.454  16.474  16.229  14.938  14.369  14.025  13.626  13.584  13.375  13.484  13.946  15.107  16.667  17.014  15.641  14.608  14.116  14.079  14.671  13.671  12.605  13.755  13.477  12.964  13.153  12.767  12.938  12.661  10.591   7.961 
+ 12.856  13.215  13.060  13.716  15.486  16.185  17.369  16.296  15.771  14.716  14.132  13.733  13.424  13.326  13.359  13.673  14.325  15.756  17.116  15.929  14.398  13.816  13.296  14.074  13.989  12.479  12.254  13.367  11.993  11.819  12.991  13.309  13.627  12.745  11.428   9.545 
+ 12.426  12.779  12.576  13.332  15.275  16.154  16.755  15.488  14.777  14.281  13.530  13.189  12.819  12.735  12.993  13.750  14.831  16.211  15.611  13.772  12.495  12.099  12.961  13.399  13.617  14.009  13.443  12.376  10.532  11.231  12.453  12.796  13.571  12.972  12.382  12.165 
+ 12.078  12.976  12.648  13.263  14.982  15.637  16.012  15.193  14.397  13.866  12.709  12.698  12.586  12.849  13.496  14.720  15.653  14.793  12.959  12.619  11.678  10.475  11.903  12.496  13.644  14.445  13.981  13.401  13.512  13.152  12.465  13.209  14.072  13.360  11.984  12.128 
+ 13.402  13.389  13.581  13.828  15.317  16.461  16.964  15.418  14.973  14.472  13.383  12.891  13.339  13.591  14.747  16.024  15.285  13.663  12.399  12.081  11.328  10.647  10.035  10.659  11.933  13.452  15.256  14.731  13.991  13.782  13.384  14.567  14.535  13.396  10.283   8.978 
+ 13.643  13.456  13.939  14.008  14.998  17.044  17.564  16.723  15.661  15.164  13.971  13.839  14.280  14.658  16.456  15.826  14.037  12.904  12.235  11.530  11.152  10.312  10.487  11.107  11.908  13.039  15.187  15.019  12.717  12.838  14.822  16.364  15.403  13.059  10.030   7.753 
+ 13.416  13.186  13.800  13.973  14.719  17.185  17.543  17.306  16.173  15.188  14.067  14.306  14.860  16.291  16.156  13.986  13.043  11.771  11.840  11.259  11.098  10.464  10.043  10.470  11.455  12.449  14.667  14.688  12.610  12.330  15.574  16.963  16.277  14.884   9.343   8.356 
+ 13.073  13.134  13.551  13.913  15.098  17.108  17.330  17.398  15.881  14.953  14.691  15.014  16.306  16.227  15.224  12.539  11.443  11.349  10.660  10.734  10.695  10.472  10.183   9.278   9.984  10.990  13.426  13.820  12.324  11.330  14.869  16.355  15.686  14.627   8.942   8.114 
+ 13.085  13.031  13.386  13.934  15.349  16.977  16.909  17.144  15.726  14.181  15.005  16.149  16.335  15.510  12.735  11.966  11.343  10.494  10.146   9.997   9.527   9.783  10.123   9.875   9.313  10.539  12.385  13.549  12.089  11.799  14.967  16.142  15.782  15.022   9.652   7.657 
+ 12.901  13.032  13.363  13.988  15.430  17.035  16.343  16.535  15.852  14.685  15.278  16.030  15.482  14.370  12.752  10.855  10.394   9.836   9.569   9.304   9.318   9.258   9.075   9.477  10.397  12.175  13.702  12.567  11.752  11.778  12.864  14.288  14.517  14.020   9.056   6.830 
+ 12.917  12.635  13.077  14.187  15.461  16.714  15.792  15.634  15.295  14.427  15.586  15.559  14.314  12.238  10.561   9.912   9.508   9.303   9.037   8.545   7.978   7.806   8.369   8.862   9.602  11.520  13.495  12.443  10.908  10.813  12.049  13.425  14.234  13.428   8.254   6.767 
+ 12.808  12.304  12.746  14.451  15.340  16.462  14.878  14.556  14.866  14.134  15.768  14.884  13.178  10.973   9.480   8.801   9.165   8.638   8.105   7.926   7.569   6.911   7.705   8.213   8.970  10.880  13.090  11.775  10.215  10.686  11.864  13.056  14.089  13.233   7.916   6.357 
+ 12.769  11.993  12.607  14.888  15.657  16.229  14.370  13.847  14.296  14.816  15.545  14.204  12.250  10.597   9.321   8.395   8.324   8.237   7.789   7.830   7.319   7.165   7.573   7.651   8.506  10.460  12.772  11.423   9.854  10.602  11.971  12.820  14.155  13.090   8.613   6.912 
+ 12.415  12.076  12.715  15.034  15.675  15.981  14.493  13.807  14.339  15.239  15.233  13.550  11.434  10.292   9.306   8.453   8.120   7.749   7.326   7.533   7.382   7.386   7.458   7.459   8.237  10.254  12.700  11.458   9.914  10.365  12.046  12.941  14.548  12.714   9.028   7.241 
+ 12.148  11.887  12.507  14.933  15.457  15.820  14.684  13.887  14.791  15.554  15.056  13.174  10.727   9.670   9.667   8.897   8.573   8.011   7.187   6.894   7.325   7.349   7.657   7.442   8.306  10.385  12.752  11.772  10.573  10.411  12.319  13.417  14.371  11.978   9.676   7.940 
+ 12.200  11.956  12.524  14.736  15.165  16.025  15.342  14.308  14.950  15.747  15.356  13.743  10.984  10.273   9.408   8.930   9.211   8.762   8.666   7.783   7.250   8.025   8.104   8.373   9.002  10.979  13.086  12.173  11.223  10.796  13.099  13.634  13.980  12.814  10.016   8.479 
+ 12.319  12.208  12.585  14.315  14.682  16.361  16.405  16.039  15.509  15.770  16.096  15.673  12.938  12.390  11.079   9.678  10.158  10.091   9.147   8.142   8.057   8.675  10.335  10.285   9.843  12.037  13.865  12.911  12.055  12.608  15.590  15.476  14.751  14.114  10.967  10.390 
+ 12.378  12.076  12.347  13.586  14.243  15.888  16.818  17.521  15.975  16.017  17.056  16.637  16.440  14.656  11.977  11.562  11.198  10.572  10.585  10.285  10.253  10.324  10.175  10.266  11.081  13.011  14.671  13.385  12.511  14.093  16.282  15.730  14.641  13.942  11.558  10.794 
+ 12.445  11.920  12.315  13.413  13.927  14.681  17.216  17.418  17.012  16.265  15.697  16.572  16.632  15.864  12.698  11.887  11.468  10.986  10.936  10.423  10.092   9.830   9.757   9.975  11.084  13.405  14.737  13.652  12.610  14.641  16.737  16.104  14.707  13.716  11.026  10.733 
+ 12.534  11.844  12.503  12.955  13.492  14.095  16.721  17.392  17.850  16.306  16.001  16.270  16.898  16.516  12.998  12.394  11.920  11.119  11.007  10.699  10.205  10.062   9.897  10.282  10.749  12.664  14.825  14.258  12.908  15.200  17.063  16.304  15.070  13.638  11.119  10.148 
+ 12.620  12.047  12.591  12.506  13.520  14.018  16.262  17.311  18.068  16.970  16.019  16.190  16.909  17.206  13.882  13.187  12.248  11.483  11.439  10.958  10.745  10.315  10.233  10.416  10.555  11.921  14.508  14.549  12.961  15.454  17.211  16.447  15.484  13.917  10.951   9.257 
+ 12.802  12.277  12.695  12.723  13.362  13.951  16.015  17.122  18.187  17.488  16.281  16.108  16.923  17.530  15.366  13.735  12.599  11.865  11.598  11.383  11.054  10.720  10.635  10.572  10.592  12.685  14.391  13.851  13.027  14.897  17.047  16.274  14.991  13.431  11.074   9.515 
+ 12.724  12.548  12.784  12.727  13.208  13.881  15.675  16.880  18.032  17.467  16.617  15.918  16.256  17.392  16.246  14.433  12.870  12.206  11.723  11.499  11.184  11.208  11.393  11.218  10.695  12.398  14.678  14.375  13.739  14.726  16.895  16.198  15.054  13.231  11.597  10.477 
+ 12.784  12.695  12.845  12.613  13.179  13.920  15.705  16.776  17.834  17.147  16.252  15.557  16.057  17.128  16.654  15.032  13.161  12.257  11.780  11.456  11.438  11.355  11.505  11.077  10.043  11.953  14.331  13.920  13.307  13.407  15.817  15.186  13.345  11.481  10.841  10.492 
+ 12.725  12.812  13.009  12.596  12.877  13.719  15.594  16.449  17.367  16.450  15.976  15.045  15.471  16.707  17.091  15.046  13.444  12.425  12.033  11.904  11.820  11.701  11.831  11.463  10.583  11.181  13.675  13.737  13.763  12.983  14.283  14.133  12.670  10.915  10.304  10.278 
+ 12.754  12.424  12.784  12.224  12.451  13.380  15.361  16.064  16.534  15.566  14.868  14.134  14.633  15.656  16.651  14.250  12.668  11.940  11.527  11.600  11.571  11.436  11.613  11.397  10.456  10.107  13.117  13.430  13.901  12.408  12.538  13.251  12.700  11.346   9.922   8.970 
+ 12.732  12.551  12.418  12.153  12.496  13.519  15.055  16.242  15.386  15.055  14.755  13.704  14.063  14.665  16.180  15.023  13.019  11.879  11.628  11.604  11.339  11.326  11.628  11.524  10.784  11.158  14.265  14.301  13.427  10.998  10.712  12.864  13.096  12.081  10.176   9.431 
+ 12.731  12.630  12.396  12.288  12.520  13.771  14.839  16.372  14.793  14.305  14.539  12.924  12.652  13.290  15.444  15.017  14.206  12.590  11.707  11.871  11.721  11.730  12.090  12.437  12.059  12.531  14.347  14.424  13.493  10.966   9.962  12.323  13.099  12.444   9.387   7.805 
+ 12.686  12.576  12.386  12.194  12.495  13.872  14.635  16.066  14.396  13.464  13.920  12.146  11.636  11.865  12.763  13.154  14.394  13.807  13.479  12.931  12.944  13.245  12.810  12.450  12.368  13.007  13.700  13.605  12.545  10.305   9.350  11.269  12.595  11.855   8.900   6.728 
+ 12.664  12.430  12.496  11.926  12.275  13.869  14.271  15.000  13.134  12.802  13.015  11.485   9.999  10.377  11.200  11.137  12.535  13.641  13.641  13.777  13.923  13.572  12.402  11.358  11.715  11.951  13.894  13.655  10.977   9.977   8.379  10.652  12.289  11.515   7.522   5.349 
+ 12.838  12.622  12.521  11.631  12.133  13.565  13.591  13.641  12.102  12.202  12.244  10.931   8.695   8.428   9.749   9.408  10.062  10.697  12.542  14.113  14.308  13.503  11.015  10.051  10.653  12.115  14.049  13.900  10.963   9.731   8.729   9.853  11.762  11.015   7.185   6.899 
+ 12.699  12.497  12.367  11.635  12.265  12.795  12.003  11.808  11.607  11.720  11.650  10.723   7.784   8.479   9.293   8.999   9.463  10.320  11.410  12.101  12.305  12.562  11.633   9.272   9.092   9.402  10.924  11.980  11.094  10.700   9.228   9.341  11.813  11.429   9.149  10.146 
+ 12.508  12.560  12.667  11.929  12.369  12.462  11.356  11.075  11.095  10.453  10.464   9.660   8.201   8.450   8.494   8.755   8.699   9.274   9.084   9.745  10.801  12.260  11.441   9.304   7.340   6.548   6.759   8.673  11.137  11.552   8.597   8.529  11.190  10.958   8.528   8.831 
+ 12.164  12.176  12.586  12.070  11.831  11.753  10.301  10.081  10.233   9.770   9.909   8.730   7.504   7.718   7.367   8.206   8.635   8.964   8.548   9.242   9.708  10.910  10.190   8.097   6.984   6.069   5.682   5.617   8.721  10.381   7.968   7.647  10.085   9.303   7.019   5.558 
+ 11.518  11.711  12.478  11.552  11.075  11.476  10.000   9.360   8.531   9.037   9.224   7.424   6.320   5.370   5.819   6.213   5.692   6.733   7.807   7.930   6.663   7.337   7.292   6.436   6.443   6.459   5.765   5.715   6.268   7.651   6.345   7.292   8.269   7.949   6.596   5.875 
+ 10.673  11.346  11.838  10.221  10.160  10.629   8.521   8.354   8.532   8.891   8.592   8.497   5.820   5.370   6.379   5.363   6.673   6.097   6.747   7.205   5.482   6.082   5.377   6.850   7.280   6.142   5.943   5.356   4.550   5.174   6.286   6.744   7.808   8.439   9.188   9.343 
+  9.995  11.543  11.408   9.486   8.773   9.393   9.154   7.182   8.323   8.794   9.017   8.620   7.773   7.625   7.862   7.085   7.409   6.719   8.199   8.725   8.591   7.922   7.679   7.604   8.366   8.616   8.397   8.189   7.881   7.935   8.568   9.087   9.692  10.519  11.396  11.485 
+ 10.529  11.119  11.768   9.937   9.378   9.567  10.049   9.289   9.712   9.558   9.214   9.418   9.364   9.125   8.732   8.991   8.441   8.311  10.525  11.151  10.050   9.718   9.537   9.507  10.925  11.087  10.592  10.020   9.866   9.776  10.350  10.560  10.912  10.881  10.647  10.106 
+ 11.266  10.807  11.236  11.360  11.147   9.811  10.383  10.161   9.765   9.441   8.551   7.905   8.162   7.700   8.399   7.855   8.692   9.816  11.756  11.342  10.326   9.557   8.933   9.724  11.482  11.628  10.266   9.702   9.781  10.037   9.617  10.368  10.775  11.492  11.133  11.480 
+ 11.781  11.268  11.856  13.210  13.095  12.336  12.099  12.006  11.447  10.982   9.448   8.813   8.775   9.423   9.830   9.193  10.010  11.734  11.979  12.116  11.291   9.078   9.690  10.566  12.417  12.636  10.454   9.743  10.197  11.355  10.290  10.551  12.209  12.409  11.167  10.713 
+ 11.557  11.128  11.665  13.784  13.984  14.068  13.213  11.743  11.393  10.881   9.127   9.958   9.690   9.331  10.186  10.787  12.020  13.741  13.500  12.342  11.415  10.586   9.890  10.940  12.579  12.860  10.448   9.930  11.255  12.159   9.891  10.673  13.400  12.826  11.556  10.978 
+ 11.651  11.354  11.361  13.724  13.718  14.231  12.746  12.260  11.164  11.008  10.350  10.237   9.601   9.854  10.488  11.075  11.965  13.225  12.638  10.330  10.087  10.393  10.106   8.869  12.074  12.418  11.098   9.351  10.363  12.375  10.091  10.130  12.415  12.455  11.163  10.451 
+ 12.074  10.804  10.966  12.827  13.714  13.830  12.030  11.070  10.065  10.372   9.663   9.114   8.268   8.872   9.443   9.972  11.372  12.379  11.364   9.565   9.815   9.760  10.327   8.441  10.842  12.198  11.133   9.656  11.784  12.178  10.959  10.449  11.757  12.084  12.005  12.374 
+ 12.868  11.772  11.397  10.147  10.393  10.855   8.826   8.646   9.392   9.613   9.786   9.093   8.678   8.186   8.597   9.549   9.548  10.958  11.272  10.194  10.750  10.163  10.139  10.520  11.073  12.431  11.348  11.213  12.343  13.225  12.887  13.532  13.683  14.258  14.290  14.574 
+ 10.736  11.233  11.098  10.814   9.988   7.957   9.273   8.816   9.219   8.805   9.803   9.188   7.302   7.765   8.537   8.122   9.367  10.216   9.946   9.553  10.891  10.467  10.442  11.206  10.970  12.814  11.734  10.991  11.869  12.826  12.735  14.273  14.340  14.321  14.950  15.081 
+ 11.918  12.295  11.810  10.583   9.013   7.555   8.678   8.627   7.512   8.829   9.151   8.266   8.075   9.076   9.848   8.871   8.500  10.497  11.157  10.618  10.235  10.528  11.610  10.250  10.883  12.648  11.837  11.559  12.180  12.394  12.770  14.481  15.288  15.637  15.318  15.058 
+ 12.108  10.644  10.656  11.129  10.651   8.990   9.318   8.627   8.554   8.152   7.706   8.416   8.292   9.152   9.021   8.868   9.995  10.826  12.439  11.500  11.254  10.766  11.547  10.142   9.827  11.416  11.256  11.639  12.355  13.104  12.440  13.883  15.143  15.898  15.385  15.727 
+ 11.597  11.830  10.616  10.433  10.879  10.147   8.380   9.312   9.490   8.817   9.693   9.165   8.504   9.863   9.088   9.262  10.199  10.678  11.852  11.733  11.951  11.920  11.578  10.735  10.681  12.108  11.485  11.290  11.639  13.543  13.994  13.675  14.921  16.093  16.115  15.976 
+ 13.127  13.028  12.117  11.433  11.033   9.399  10.608  10.543   9.238   9.065   9.613   9.818   9.885  10.057   9.356   9.196   9.608  10.952  12.014  12.585  12.223  12.012  10.649  10.683  12.248  12.316  12.211  11.735  11.851  12.692  13.429  13.572  14.890  15.816  15.986  16.620 
+ 10.227  10.925  10.078  10.559   9.964   9.463   8.664   7.923   8.058   9.105   9.305   9.222  10.035   9.706   9.228   9.207   9.466  10.508  11.624  12.542  11.982  12.225  11.814  10.483  12.574  12.134  12.390  12.398  13.023  13.449  13.458  14.232  15.288  15.784  17.133  16.415 
+ 11.809  11.097  10.485   9.379   9.683   9.447   8.810   9.221   7.483   8.162   8.925   9.073   8.794   9.479   9.815  10.704  10.262  10.575  11.901  13.131  12.094  11.627  11.840  13.331  12.954  12.471  12.514  12.661  13.367  13.861  14.388  14.949  15.618  16.454  16.364  16.033 
+ 11.219   9.186   9.258   9.005   8.951   8.928   9.135   9.174   7.305   7.794   9.023   8.554   7.790   9.162   8.810   9.219   8.726   9.309  11.804  12.792  14.378  13.418  13.065  13.350  12.697  11.828  11.230  12.110  12.420  12.412  12.558  13.029  13.295  14.495  15.872  15.240 
+  8.500   6.864   7.527   7.090   5.295   5.820   5.919   5.241   4.715   4.498   4.781   4.985   5.017   5.462   6.218   5.924   6.215   6.891   8.933  10.048  12.204  11.451   9.565   7.690   7.595   7.727   7.891   7.793   7.516   7.274   8.297   8.778   9.257   9.679  10.326  11.638 
+  5.437   4.640   5.408   3.936   3.459   3.864   4.095   3.682   3.165   4.092   4.316   4.266   4.005   4.082   4.523   5.861   5.623   2.980   5.252   5.507   5.791   6.058   5.407   5.684   4.267   4.300   4.585   4.247   4.266   5.016   4.976   5.698   6.481   7.791   8.259   6.877 
+  2.953   2.973   4.416   4.428   5.178   4.995   5.606   5.003   3.720   2.965   4.677   4.664   4.938   3.829   3.731   4.838   3.702   3.769   5.252   5.400   5.443   5.274   5.025   5.263   5.056   3.564   4.176   4.086   4.523   4.071   4.951   5.226   6.103   7.568   8.478   7.011 
+  7.416   7.661   7.763   9.009   9.453   9.446  10.458  10.248  10.030   9.361   8.493   7.961   7.962   7.057   5.536   6.798   7.943   8.745   7.769   7.967   9.967  10.713  11.122  11.061  11.479  11.339  11.123  10.556   9.653   9.274   9.884   9.141   8.959   9.234   9.225   7.998 
+  9.875   8.622   8.755  10.624  12.375  11.902  12.539  13.106  13.265  12.301  11.646  12.013  12.188  11.988  10.890   9.378  11.407  12.148  10.585  11.800  12.541  13.198  13.889  14.413  15.043  14.753  13.949  13.482  12.813  12.388  12.927  12.811  12.873  13.223  13.193  11.890 
+ 11.697  11.542  11.882  12.661  13.858  14.085  14.423  13.121  12.149  11.998  11.238  10.806  10.323  10.892  10.792  10.568  11.069  11.748  12.304  13.674  15.242  14.875  13.892  14.803  14.312  15.172  13.495  12.941  13.862  13.521  12.300  12.143  13.151  13.848  13.018  12.462 
+ 12.198  12.828  12.087  13.176  14.970  16.332  15.680  16.205  15.048  13.279  13.053  12.904  11.885  12.096  12.308  12.657  13.015  14.054  15.814  16.357  16.229  15.657  15.756  15.007  14.177  15.136  14.653  14.719  15.080  13.127  11.439  13.557  15.634  14.439  11.380  10.014 
+ 12.339  11.929  12.585  12.756  13.931  15.858  16.670  17.463  15.532  14.761  13.865  13.567  12.930  12.646  12.933  13.265  14.006  15.350  16.732  16.796  15.492  15.400  16.139  15.518  13.875  15.142  14.483  14.683  15.353  12.935  12.261  14.049  16.753  15.300  11.380   8.973 
+ 12.213  11.502  12.294  12.845  13.532  14.519  16.405  17.844  17.785  15.152  14.777  14.332  12.893  13.206  13.267  13.543  14.177  16.407  17.174  15.597  14.821  15.100  16.133  15.833  13.555  14.714  14.359  14.062  15.104  13.282  13.528  14.070  15.574  14.466  11.323   9.956 
+ 12.143  11.782  12.290  12.700  13.590  14.561  15.571  17.472  17.959  15.611  14.833  14.364  13.128  13.329  13.460  13.860  15.037  17.166  17.043  15.321  14.690  15.047  16.017  15.569  13.493  14.219  14.674  14.185  15.280  13.797  14.786  14.593  15.940  15.117  11.253  10.004 
+ 12.216  12.281  12.601  13.161  13.879  14.717  15.229  17.736  17.515  16.538  15.910  14.889  13.530  13.676  13.948  14.528  15.800  17.354  16.711  15.159  14.984  15.306  16.195  15.507  13.325  14.408  14.652  13.948  14.837  13.956  15.881  15.682  15.290  13.859  10.774   9.862 
+ 12.104  12.071  12.346  13.286  14.123  14.405  15.498  17.722  17.062  16.648  15.392  13.737  13.939  13.833  13.851  14.283  16.075  16.932  16.611  14.976  14.671  15.066  15.812  15.057  12.983  15.073  15.283  14.326  14.741  14.097  16.253  16.264  16.056  14.554   9.205   9.317 
+ 12.221  11.942  12.108  13.168  14.043  14.582  15.757  17.833  17.000  16.285  15.519  13.797  13.667  13.509  13.412  14.021  15.606  17.092  16.921  14.689  14.462  14.862  15.333  14.415  12.595  14.790  15.026  14.143  14.703  13.651  15.533  15.517  15.478  14.869   8.708   8.598 
+ 12.079  10.999  11.875  12.513  13.437  14.460  16.411  17.694  17.009  15.702  14.581  13.759  12.804  12.734  12.600  13.335  14.632  17.118  16.758  14.375  14.147  14.361  14.664  13.170  11.945  14.574  14.431  13.210  14.067  13.147  14.331  14.645  14.593  14.302   9.190   8.340 
+ 11.901  11.972  10.905  12.079  13.316  14.752  16.094  16.276  15.630  15.174  12.526  11.679  12.211  12.063  11.840  11.420  12.162  14.730  15.820  14.303  14.330  12.826  11.730  10.208  12.544  12.967  12.443  12.014  12.569  11.885  11.151  11.562  11.568  11.245   9.548   9.150 
+ 11.683  10.478  11.187  10.680  11.208  11.667  12.164  12.794  12.241  11.863  11.692  11.017  10.214   9.059   8.245   8.803   9.418  11.277  12.640  12.795  11.512  10.436  10.334  12.072  13.136  12.841  12.074  10.883  13.406  12.927  10.416  11.085  11.997  10.935   9.960  10.122 
+ 13.460  12.936  11.783  11.780  10.801  11.549  11.112  10.168  10.646   9.904   8.963   7.925   8.043   8.534   8.543   9.111   9.513  10.253  11.524  13.121  12.198  10.279  11.133  13.294  15.262  15.100  14.883  13.883  15.427  15.416  13.402  12.843  13.346  13.542  13.294  12.275 
+ 13.979  14.108  13.412  11.497  11.340  10.740  10.515   9.111   9.430  10.329   9.908   8.691   8.842   8.421   9.099   8.986   9.107  10.400  10.735  12.231  12.011  11.384  12.843  14.375  16.331  16.988  15.780  15.072  15.740  15.177  14.190  14.633  14.869  15.234  14.407  13.632 
+ 13.574  13.383  12.382  11.377  11.411  10.607   9.533   9.744  10.450  10.485   9.007   8.906   9.243   8.806   9.589   8.964   9.961   9.026  10.665  12.124  11.862  11.860  13.500  14.865  16.413  17.058  16.029  15.638  16.235  15.824  15.937  15.599  15.838  15.177  15.278  14.404 
+ 11.104  10.432  10.438  10.241   9.199   8.366   8.849  10.270  10.629  10.842   9.826   9.443   8.527   9.313   8.900   9.043  10.392  10.713  10.620  13.129  12.687  12.278  14.126  15.591  17.374  17.793  16.801  15.542  16.896  16.370  16.362  15.108  15.973  16.442  16.004  14.446 
+ 10.851  10.534  10.653   9.610   8.920   9.332   9.847   8.681   9.631  10.482   8.418   7.570   7.092   9.297   8.817   8.518   8.288  11.206  12.096  14.765  13.851  11.675  15.247  16.347  17.535  17.225  16.344  17.461  17.946  17.128  16.409  16.116  16.071  16.035  15.547  14.950 
+ 11.001   9.866   9.228   7.705   8.277   9.250   8.080  10.578  10.839   9.778   8.782   9.494   8.624   7.415   8.361   9.427  10.249  10.210  11.312  13.328  13.121  12.927  14.383  16.333  16.968  16.129  15.804  17.081  17.374  17.461  16.013  15.533  15.486  15.263  15.564  14.707 
+ 13.256  13.559  12.674  11.141   9.663  10.500   9.657  10.243   8.843   8.614   8.492   9.282   8.949   8.784   8.372   9.406  10.912  12.299  12.135  13.161  12.754  13.048  15.291  16.660  16.433  16.838  15.604  16.349  16.473  15.800  16.131  14.923  15.206  15.032  15.199  14.805 
+ 13.405  14.249  13.295   9.806  10.943  10.288  10.971  10.651   9.561   9.240   9.632   9.583   8.741   7.842   7.489   8.042   9.870  11.920  11.526  13.318  12.006  12.286  14.683  16.223  15.377  14.346  14.037  14.980  14.398  13.234  13.668  13.881  14.129  14.240  13.733  13.231 
+ 14.852  13.064  12.273   9.632  10.725  10.297   8.856   8.871   9.794   8.823   7.770   8.740   8.026   8.662   8.572   7.198   9.769  10.323  12.334  12.839  11.207  11.692  12.292  14.053  13.801  12.728  12.623  14.567  13.334  12.975  12.162  13.180  13.106  12.565  12.890  12.517 
+ 14.877  13.025  12.765  11.295  12.410  13.182  13.861  14.188  13.744  13.356  12.939  11.842  11.278  11.091  11.669  11.684  12.027  12.797  13.046  13.145  12.374  12.285  12.191  13.231  13.941  12.818  11.744  12.376  11.077  11.712  10.901  10.911  10.972   9.632   9.571   9.405 
+ 13.543  13.997  12.448  13.032  13.412  13.815  15.102  14.703  14.569  14.407  13.285  12.779  12.503  12.134  12.121  12.300  13.092  14.042  14.221  13.840  12.303  12.074  11.669  12.057  12.677  11.903  12.498  12.853  10.153   9.211   9.323  11.307  12.386  10.535   8.485   7.439 
+ 13.102  13.183  12.461  12.061  12.503  14.048  14.681  15.319  13.784  13.578  13.071  12.470  10.979  11.583  11.761  12.502  13.261  13.818  14.122  12.755  12.104  11.541  11.858  12.268  12.961  13.221  12.954  12.591  11.201  10.104   9.359  11.304  12.365  10.541   8.846   7.583 
+ 13.216  12.337  12.454  11.419  12.306  13.596  14.085  13.532  13.056  12.079  12.690  11.373   9.679  10.359  11.247  12.501  13.392  13.023  12.054  11.596  11.110  10.876  11.664  12.190  13.021  13.300  12.827  11.417  10.601   9.632   7.753   9.630  11.610  10.701   8.860   7.334 
+ 12.962  12.609  12.648  11.250  11.798  13.001  13.030  11.938  11.044  10.566  11.710  11.019   9.432   7.425   9.268  11.381  11.305  10.510  10.178  10.268  10.568  10.299  11.599  11.979  13.220  13.655  12.091  10.739  10.864  10.303   8.863  10.902  13.078  12.275   9.803   9.051 
+ 12.777  12.726  12.706  11.428  11.735  12.470  12.333  11.836  11.043  11.158  11.250  10.403   8.765   8.032   9.767  11.404  11.005  10.687  10.749  11.025  10.345  11.291  11.921  12.407  12.943  13.687  12.233  10.090  10.172  10.538   9.541  11.997  14.144  13.905  11.228   8.722 
+ 12.405  12.289  12.115  10.398  11.443  12.491  13.419  12.672  11.011  10.887  10.704   9.482   9.437  10.659  11.741  13.419  14.419  13.135  12.223  12.119  12.058  11.411  10.669  11.456  12.048  12.668  10.518   9.380  11.140  11.205  10.258  10.695  13.036  12.350   9.191   7.785 
+ 12.458  12.279  12.372  11.337  12.412  13.465  14.742  14.174  13.776  13.311  11.498  11.606  11.066  11.735  12.012  13.538  15.289  14.923  13.378  12.898  12.931  13.232  12.781  12.024  11.942  11.918  11.014  11.213  11.770  10.937  11.366  11.886  12.578  12.821  10.145   8.022 
+ 12.185  11.780  11.883  11.810  11.886  13.464  14.771  15.569  14.563  13.599  11.739  11.936  10.755  11.574  11.905  13.122  15.280  15.617  13.569  12.331  12.467  13.205  13.113  12.050  11.557  12.168  11.833  11.766  11.892  10.704  11.064  12.567  12.843  13.070  10.214   6.233 
+ 12.140  11.842  11.633  11.670  11.812  13.682  15.370  16.134  15.427  13.810  13.077  12.051  11.456  11.995  12.411  13.462  15.637  15.801  13.948  12.777  12.707  13.470  13.663  12.774  11.855  13.376  12.828  12.878  12.543  10.988  11.155  12.927  12.756  11.391   9.486   7.394 
+ 12.188  11.976  12.024  12.270  12.638  14.616  15.777  15.409  15.121  13.608  13.328  12.586  12.130  12.397  12.917  14.423  15.406  14.540  13.590  12.957  12.823  13.024  13.419  13.273  13.385  12.833  12.260  12.214  10.712   9.391  10.602  12.302  12.152  11.447   9.801   8.643 
+ 10.465  10.773  11.945  12.430  12.971  13.485  14.644  14.067  13.096  12.578  11.828  11.273  10.929  11.909  12.902  13.728  14.401  12.004  10.955  10.582  10.486  10.804  12.017  11.812  10.778   9.751   9.567  10.353   9.017   7.514   8.450  10.732  10.210   9.467   8.775   9.318 
+ 10.089  10.336  11.112  11.424  12.831  13.591  13.286  12.346  11.779  11.105  10.698   9.532   9.990  10.797  12.861  13.321  12.032  10.190   9.582   9.339   9.287   9.684  11.551  11.657   9.256   7.729   8.264   9.240   7.898   6.264   7.046   8.923   8.498   8.176   6.625   7.467 
+  8.321   9.639   9.575   8.156   7.627   8.036   8.330   8.127   8.781   7.564   7.034   6.285   5.886   5.985   7.709   7.828   8.881   6.278   6.133   6.003   4.875   6.193   6.660   6.575   5.240   5.750   4.587   5.321   5.495   5.199   5.197   5.189   5.724   5.394   5.128   3.844 
+  7.806   9.120   8.998   7.444   7.136   7.017   7.602   8.039   8.628   7.577   6.439   5.735   5.438   5.291   7.263   7.761   7.677   5.594   5.688   5.250   4.509   5.090   5.656   5.830   5.155   6.082   5.342   5.521   5.290   4.953   5.155   3.912   4.052   4.263   3.979   3.797 
+  8.203   8.167   7.949   8.460   8.899   8.832   9.108   8.727   8.284   6.286   5.504   5.538   5.092   3.349   4.540   6.365   6.866   5.678   4.633   4.102   4.767   4.840   4.536   5.525   4.790   5.566   4.944   4.677   5.050   4.118   4.624   3.468   4.025   4.228   4.038   3.499 
+  7.478   7.746   8.037   7.944   8.139   7.872   8.061   8.220   8.136   6.128   5.986   4.335   3.634   3.712   5.079   4.750   5.202   5.453   5.105   4.463   4.439   3.977   5.310   6.145   5.826   5.286   4.746   4.333   4.449   4.848   4.694   4.979   5.432   5.375   4.755   3.753 
+  5.789   8.472  10.143  10.293   8.888   9.667   9.923   9.157   9.181   8.959   8.235   7.539   7.755   7.039   6.028   7.191   8.613   7.827   7.812   8.216   7.240   8.121   6.922   8.092   7.999   7.284   7.795   7.633   7.559   8.038   8.780   9.277   9.824   9.742   9.050   7.984 
+ 11.247   9.758   9.141   8.115   9.084   8.794   9.409   9.906  10.683   9.911   8.460   8.158   8.336   8.266   8.304   8.848   9.974  10.696   8.746   8.688   8.918   8.502   9.005   9.406   9.308   8.094   8.070   7.887   8.201   8.491   8.098   8.151   8.728   8.430   8.609   8.782 
+ 11.702  10.504  10.335  11.781  11.635  12.810  13.753  13.922  14.013  12.933  12.023  11.935  11.895  11.458  11.844  12.424  13.319  14.551  13.471  13.082  12.582  12.538  13.167  13.919  13.610  12.218  11.827  12.210  12.544  11.800  10.523  12.069  11.860  10.173   9.989  10.105 
+ 11.672  10.910  11.277  11.982  12.307  13.817  15.612  16.784  16.214  14.443  13.161  13.136  12.196  12.340  12.392  12.937  14.293  15.870  15.146  13.744  13.285  13.282  13.956  15.564  15.276  12.998  12.597  13.181  13.919  12.792  11.284  14.096  13.538  12.035  10.349  10.663 
+ 11.570  11.159  11.617  12.391  12.536  13.607  15.312  16.337  16.682  15.472  13.398  13.314  12.700  12.737  12.549  12.924  13.994  15.674  16.309  14.841  13.775  13.608  14.143  15.435  16.000  14.488  13.172  13.081  13.627  13.071  11.297  13.579  13.730  10.957  10.203  11.144 
+ 11.406  11.031  11.468  12.470  12.549  13.435  15.008  16.145  16.885  16.157  13.307  13.799  12.698  13.061  12.817  13.450  14.279  15.694  16.517  15.584  14.550  14.127  14.240  15.446  16.330  15.282  13.889  13.774  14.121  13.384  12.170  14.327  13.904  11.719  10.122  10.950 
+ 11.063  10.614  11.160  12.420  11.858  13.458  14.768  15.905  17.024  15.359  14.115  13.883  12.640  13.099  12.676  13.329  13.985  15.645  16.938  14.857  14.203  13.853  13.868  15.135  16.185  14.548  13.456  13.504  13.811  12.632  13.274  14.863  14.442  12.517   9.090   8.392 
+ 10.728  10.491  11.379  12.281  12.330  13.189  14.238  15.862  17.121  16.673  14.281  13.975  12.975  12.925  12.795  13.516  14.256  16.561  16.977  14.947  14.227  13.945  13.998  15.553  16.355  14.706  13.385  13.612  14.134  12.445  14.492  15.854  15.578  13.895   8.825   8.372 
+ 11.231  11.049  11.945  12.557  12.796  13.333  14.341  15.728  17.147  17.168  14.738  14.294  13.579  13.323  13.345  13.927  15.097  16.830  16.776  15.058  14.342  14.227  14.512  16.043  16.174  14.358  13.177  13.098  13.088  12.417  14.527  15.418  15.095  12.819   9.544   8.814 
+ 11.145  10.948  11.841  12.641  12.823  13.094  14.263  15.475  16.699  17.166  14.962  15.324  13.791  13.929  13.788  14.501  15.848  16.556  16.120  14.652  14.305  14.494  14.622  15.775  15.693  14.102  12.938  12.666  12.158  12.528  15.193  15.405  14.997  12.262   9.240   9.294 
+ 10.296   9.915  11.537  12.020  12.061  12.400  14.026  14.351  16.901  17.018  15.851  15.342  13.628  13.776  13.818  14.323  15.958  16.661  15.567  14.264  13.716  13.772  14.052  15.316  15.411  13.647  12.240  12.028  11.311  11.766  14.940  14.872  14.603  12.199   8.837   8.873 
+ 10.579  10.154  11.518  11.618  12.415  12.616  13.957  14.741  17.141  17.248  15.767  14.973  13.643  13.418  13.706  14.497  16.209  16.384  14.923  13.841  13.504  13.669  13.864  15.384  15.596  13.572  12.370  12.282  11.430  12.648  15.625  15.272  14.813  12.531   9.497   7.920 
+ 10.917  10.910  11.735  12.333  12.615  13.139  14.313  14.892  17.188  17.216  16.515  15.283  13.711  13.889  14.365  15.430  16.805  16.099  14.832  14.216  13.855  13.810  13.936  15.448  15.776  14.058  12.742  12.384  11.395  14.141  16.164  15.508  14.561  12.241   9.950   7.884 
+ 10.658  10.515  11.720  12.304  12.169  13.081  14.231  14.520  17.078  16.960  16.653  15.361  13.900  13.972  14.533  15.614  16.432  15.442  14.516  14.033  13.683  13.935  14.021  15.325  15.600  13.877  12.528  12.032  11.800  14.607  16.311  15.778  14.556  12.931  10.658   9.050 
+ 10.135   9.980  11.466  11.788  12.118  12.476  13.773  14.674  17.232  17.489  15.819  15.095  13.538  13.636  13.789  15.484  16.850  14.711  13.245  12.830  12.692  13.060  13.077  14.711  15.210  13.312  11.872  11.378  11.159  14.743  16.391  15.521  14.558  12.047   9.759   8.228 
+ 10.558  10.936  11.784  12.182  12.868  12.932  14.262  15.333  17.396  17.236  15.676  15.180  14.212  13.954  14.398  16.286  16.854  14.698  13.282  13.002  13.028  13.407  13.345  14.784  15.603  14.002  12.298  11.827  11.572  15.440  16.936  16.106  15.123  12.657  10.135   9.053 
+ 10.748  11.122  11.905  12.748  13.304  13.290  14.745  16.198  17.017  17.348  14.754  14.812  14.741  14.068  15.122  16.750  16.434  14.036  13.116  12.948  12.714  13.191  13.309  13.803  14.820  13.327  12.285  11.742  11.532  15.192  16.814  16.161  15.164  12.916  10.336   9.634 
+ 10.349  10.706  11.273  12.525  13.066  13.182  14.640  16.246  16.797  16.847  14.642  13.730  13.913  13.445  14.630  16.031  15.756  12.951  12.008  11.834  11.864  11.770  11.739  12.659  13.203  12.548  11.658  11.024  10.945  14.186  15.826  15.351  14.352  12.038   9.822  10.707 
+  9.593  10.531  11.152  11.696  12.970  13.413  14.296  16.862  17.283  15.608  14.751  13.965  12.981  13.713  14.926  16.166  14.611  12.815  11.577  11.573  11.548  11.363  11.423  12.172  12.399  13.357  11.612  10.413   9.987  13.762  15.509  15.139  14.183  11.793   9.857  10.788 
+ 10.087  10.782  11.094  12.373  13.343  14.136  16.099  17.490  16.670  14.626  14.803  14.155  13.133  13.919  15.229  16.232  14.074  12.459  11.319  11.426  10.769  10.673  10.966  10.683  13.514  14.358  11.480   9.843   9.374  11.311  13.734  14.183  12.516  11.827   9.250   9.784 
+ 10.063  10.657  11.052  12.265  13.748  14.934  15.819  16.531  14.797  13.854  13.332  13.531  12.954  13.588  14.743  15.146  14.037  12.203  11.621  10.638  10.245  10.221  10.631  11.308  13.273  13.842  12.303  10.768  10.111   9.959  13.661  14.867  13.693  13.541  11.369   9.268 
+  9.568   9.259   9.511  10.627  11.892  14.420  15.965  14.902  13.199  11.885  11.612  11.278  11.205  11.399  13.930  14.852  12.442  10.244   9.565   8.876   8.152   8.280   8.647   9.428  12.302  13.468  10.476   8.780   8.142   7.961  12.606  14.157  12.134  12.638  10.757   9.470 
+  9.492  10.320  10.986  12.305  14.094  15.013  14.845  13.296  12.211  11.840  11.556  11.781  11.747  12.145  13.629  14.014  12.665  10.861   9.429   9.158   9.070   8.909   9.117   9.771  11.542  12.713  11.026   9.368   8.423   8.508  10.881  13.094  12.585  12.001  11.275  10.127 
+  7.059   7.390   7.250   9.821  11.839  12.247  11.097  10.312  10.405   9.056   8.844   8.377   6.977   7.328   9.742  11.022   9.124   6.452   6.466   4.948   5.273   4.376   4.823   6.036   8.389  10.093   7.377   5.298   4.401   4.582   7.427   9.875   9.417   8.361   7.880   5.274 
+  7.281   9.115   8.939   7.740   6.803   7.844   9.019  10.543  11.181   8.778   6.840   6.967   6.726   5.060   6.302   6.617   7.312   6.415   5.303   5.217   5.630   4.833   4.192   5.943   6.666   6.042   5.462   4.729   4.732   4.721   6.485   6.231   5.507   4.633   4.269   4.889 
+  7.985   9.243   9.152   7.472   6.652   8.682   9.927   9.926   9.899   9.398   6.436   5.981   6.354   5.457   5.825   6.518   6.379   6.260   5.366   5.269   4.842   3.639   5.273   5.946   6.392   5.336   5.358   4.443   4.462   4.840   6.970   6.386   5.722   3.193   4.031   3.892 
+  6.134   5.289   5.498   6.405   5.682   7.253   9.477   8.943   9.903   9.857   6.359   6.094   5.195   5.911   6.363   6.503   6.761   5.244   4.668   4.774   4.179   3.632   5.211   5.364   5.906   4.972   4.602   4.269   3.886   4.174   6.327   5.696   4.399   4.076   3.841   3.179 
+  4.165   5.528   6.101   5.828   5.339   7.269   7.942   6.802   8.820   9.392   6.043   5.971   5.391   4.705   4.861   6.142   6.900   5.682   3.688   4.682   4.517   4.851   4.826   4.509   4.090   4.374   4.192   4.218   4.514   4.970   5.956   4.586   3.909   3.826   3.583   2.523 
+  5.982   6.270   5.139   4.625   4.867   4.420   7.920   8.382   8.410   8.571   5.474   5.265   5.387   5.109   4.841   5.453   4.949   4.175   3.496   3.596   4.164   4.182   4.045   4.946   5.612   5.162   4.419   4.150   3.548   4.365   6.118   4.878   4.042   2.907   3.329   3.338 
+  4.694   6.086   6.195   5.178   7.284   7.942   8.229   8.059   7.193   7.554   8.386   8.129   6.884   5.498   5.605   5.318   4.797   6.177   6.618   6.932   7.273   7.414   8.030   8.459   8.446   7.112   7.694   7.633   6.457   5.380   5.495   5.753   6.157   6.644   5.208   4.628 
+  4.275   4.374   5.282   4.411   7.337   8.326   7.785   6.303   7.014   7.176   8.568   7.994   6.250   5.913   5.558   5.680   5.271   4.739   5.394   5.857   5.773   6.188   6.809   7.357   7.622   6.366   7.624   7.112   5.078   5.095   4.643   4.756   5.589   5.946   4.506   4.114 
+  4.799   4.468   4.170   4.092   5.129   5.174   7.555   7.753   6.476   5.588   4.744   4.473   4.985   5.142   4.205   4.571   4.531   2.967   3.493   3.870   3.708   3.999   4.836   4.854   4.890   4.809   4.956   4.664   3.918   3.262   4.318   4.272   3.497   3.669   2.988   1.872 
+  5.176   4.670   3.976   3.328   2.949   5.438   6.673   6.319   5.822   5.013   4.697   4.747   4.713   3.535   4.176   5.796   5.270   5.358   4.409   3.215   3.986   4.872   4.929   4.402   5.067   5.176   4.683   3.562   3.381   2.459   3.811   3.996   2.678   2.572   2.500   2.354 
+  4.155   4.987   3.234   3.894   4.508   5.883   6.867   7.070   5.814   4.881   4.870   4.225   4.699   4.834   6.261   5.812   3.514   3.755   3.988   4.226   4.801   4.184   2.878   4.207   4.912   5.171   4.586   4.183   3.199   3.102   3.633   3.611   3.006   3.000   3.300   3.007 
+  4.759   3.656   0.787   3.513   4.457   5.372   4.867   4.964   5.225   4.365   4.406   4.771   4.423   5.593   5.129   4.914   4.727   3.545   3.219   3.260   3.897   4.438   4.523   4.701   4.779   4.721   3.116   3.931   3.878   3.795   3.886   3.010   3.625   3.405   3.312   2.771 
+  5.288   3.583   3.525   3.788   4.007   3.942   4.785   6.387   5.472   3.955   4.394   4.779   4.523   5.728   5.201   3.987   4.769   4.263   4.675   3.919   4.623   4.063   3.485   4.256   4.249   3.752   3.136   3.726   3.686   3.223   3.313   3.230   3.385   3.250   2.525   1.962 
+  5.099   5.092   3.559   3.231   4.372   5.367   5.772   5.783   5.246   2.608   2.265   3.482   3.165   3.900   4.765   4.469   5.042   4.344   3.830   3.848   4.107   4.223   4.898   4.676   3.886   3.825   3.961   3.756   3.330   3.344   3.567   2.922   3.719   2.771   2.410   1.697 
+  2.539   3.754   3.466   2.605   4.353   5.685   5.596   4.593   5.160   3.277   3.778   2.949   3.721   4.091   5.361   4.712   4.254   4.324   3.727   2.815   3.950   4.090   4.232   3.806   4.486   4.826   2.846   2.908   3.661   3.581   2.850   3.246   3.577   2.801   2.840   1.736 
+  3.801   2.800   3.335   3.853   4.396   5.993   5.593   3.995   3.422   4.091   4.735   4.584   4.626   4.432   4.034   4.416   3.676   3.289   4.018   4.052   4.076   3.809   3.916   3.919   4.457   4.861   4.661   3.611   2.544   3.320   3.460   3.022   2.485   2.685   2.734   1.566 
+  4.091   3.656   5.192   5.082   3.457   4.926   5.589   4.005   4.595   3.792   2.596   3.699   3.446   4.952   5.058   5.469   4.091   4.589   4.502   3.216   3.615   3.723   3.103   3.814   3.455   3.704   4.840   4.698   2.630   3.298   3.339   3.400   2.686   3.355   2.359   0.969 
+  4.478   4.864   4.127   4.723   3.922   5.589   6.201   4.526   4.547   4.745   4.130   3.288   2.579   5.394   5.085   4.609   3.257   3.416   4.193   3.875   3.684   4.500   3.189   4.235   3.958   3.741   3.101   3.070   2.677   3.377   2.680   3.111   2.873   2.629   2.211   1.610 
+  2.899   4.886   5.380   4.356   4.483   5.428   4.481   5.195   5.618   2.956   3.382   2.068   3.058   4.035   3.716   4.293   4.251   4.384   3.512   3.650   3.161   4.103   3.656   4.285   4.435   4.278   2.724   3.001   3.100   3.639   2.931   2.641   2.310   1.844   2.854   2.096 
+  5.756   6.770   5.922   4.936   4.280   5.829   6.202   4.715   5.341   2.787   3.339   4.494   5.028   4.061   3.681   2.649   4.059   3.400   3.434   2.926   3.660   3.366   3.628   4.071   4.048   4.110   3.558   3.862   3.128   3.384   2.677   3.022   2.812   2.488   2.781   2.114 
+  5.115   5.583   6.202   5.295   4.109   6.086   6.461   4.194   4.443   4.275   3.940   3.589   5.143   5.866   5.518   4.357   3.520   3.949   2.919   2.273   3.009   3.455   2.889   2.757   2.653   3.374   3.347   3.796   3.829   3.100   2.729   2.403   3.074   2.651   2.318   1.584 
+  4.132   5.206   6.447   6.009   6.202   6.294   5.009   5.532   5.091   5.098   5.298   5.404   4.725   4.652   4.535   4.639   4.442   4.721   4.226   3.484   3.178   2.733   4.100   4.478   4.783   4.983   3.795   2.940   3.715   3.883   3.197   2.900   3.785   4.685   4.728   4.930 
+  6.915   8.699   9.409   9.323   8.840   7.784   6.785   7.203   7.196   7.209   8.086   7.843   5.898   4.238   5.348   5.972   5.749   6.045   6.234   5.001   3.973   3.581   5.263   6.434   7.450   6.528   5.375   3.317   4.217   6.299   4.593   3.245   6.154   7.933   6.928   7.521 
+  7.602   7.990   7.190   7.850   6.553   6.158   4.438   5.168   6.629   5.602   6.043   5.506   4.625   4.143   3.733   4.584   4.984   3.619   4.751   5.408   5.574   6.269   6.280   5.873   5.550   5.634   5.006   5.336   4.464   5.147   4.564   5.274   6.269   6.306   5.194   4.418 
+  7.319   5.765   6.753   7.459   6.249   6.327   5.533   5.123   5.522   5.833   5.985   5.400   4.416   4.566   4.622   4.949   4.330   4.863   4.284   4.878   5.605   6.337   6.611   5.059   4.750   6.686   6.077   5.604   4.952   4.543   4.003   5.269   6.354   6.439   5.324   4.718 
+  3.153   2.871   4.157   5.416   3.841   5.938   5.549   4.414   6.853   7.451   5.693   5.542   5.254   6.022   5.345   4.999   4.708   4.579   3.891   4.279   3.426   4.320   6.173   5.658   6.164   6.267   4.456   4.362   4.076   4.346   3.815   4.498   5.311   6.050   5.937   3.690 
+  4.687   4.883   5.031   5.607   5.887   6.276   6.201   4.924   5.543   6.654   8.470   7.614   5.369   4.983   5.713   5.447   4.167   4.569   5.901   5.049   4.278   4.797   5.990   5.973   6.996   5.564   4.310   4.341   3.742   3.840   3.249   4.503   5.463   4.770   4.147   3.077 
+  4.385   4.462   4.269   4.203   6.897   7.482   5.522   4.205   4.759   6.906   9.602   9.471   5.098   3.382   5.402   6.602   5.448   3.997   5.134   5.974   4.834   5.464   6.904   5.799   6.408   5.096   5.148   5.240   4.197   4.705   4.030   3.765   4.992   4.792   4.617   3.505 
+  4.427   3.697   4.143   5.784   6.965   7.868   5.825   4.989   3.737   6.345   9.008   9.144   6.119   3.409   4.606   7.410   7.185   5.577   5.976   7.654   5.756   4.930   6.417   6.944   6.759   5.833   5.890   4.742   4.355   5.391   3.681   4.360   5.506   5.439   4.354   3.553 
+  4.124   3.338   4.097   4.024   5.404   6.815   6.682   3.018   4.294   5.851   6.149   5.668   6.610   5.769   4.257   4.718   7.517   8.427   5.010   5.164   7.434   7.365   4.664   7.857   8.150   5.040   7.522   6.378   5.261   5.837   3.728   5.073   5.883   6.023   4.793   3.989 
+  5.140   4.580   4.667   4.363   5.067   6.760   6.657   2.985   2.721   3.384   3.097   5.037   6.536   4.291   3.667   3.825   8.029   8.551   3.944   3.545   8.456   7.951   4.936   9.259   9.231   5.936   8.924   7.358   7.357   7.405   5.367   5.755   7.824   7.660   6.752   5.320 
+  1.696   3.749   4.367   4.158   6.740   7.541   5.457   3.405   3.198   4.276   7.010   7.559   6.081   3.104   3.772   5.593   7.696   6.839   4.896   7.319   7.902   5.903   7.359   8.767   7.351   7.915   7.931   5.842   6.638   5.688   5.101   4.991   7.097   6.218   5.637   4.142 
+  4.170   5.494   5.793   5.666   6.366   6.796   5.696   5.656   6.877   8.200   8.566   8.133   3.696   2.651   4.575   4.875   4.887   4.727   5.677   6.211   4.642   4.816   5.885   5.737   6.389   5.935   4.713   4.319   3.639   4.466   4.143   3.613   4.127   4.093   3.157   3.016 
+  3.531   3.786   6.238   5.928   4.017   5.359   5.964   5.285   7.755   7.870   7.887   6.892   5.661   3.736   3.321   4.650   4.612   4.316   4.444   3.693   3.876   3.715   4.675   5.290   6.011   5.791   4.998   4.974   3.497   2.822   3.691   4.352   4.659   4.917   4.968   2.792 
+  4.168   3.539   5.192   5.011   3.097   4.270   3.634   4.094   6.174   6.333   6.990   5.939   3.305   4.541   4.225   3.219   3.498   3.552   2.429   4.180   4.643   3.805   4.195   4.873   4.929   5.509   4.520   3.898   3.431   2.725   3.339   4.130   5.030   4.853   4.827   3.096 
+  4.859   4.371   4.720   5.164   4.904   4.568   4.481   2.644   4.732   5.623   4.472   2.229   1.765   5.520   5.090   3.466   3.316   4.364   4.478   4.270   4.828   4.709   4.207   4.917   4.803   4.392   4.291   4.151   3.884   3.375   3.613   4.501   5.294   5.400   5.212   3.940 
+  4.518   4.671   5.201   4.206   4.676   6.221   5.750   4.176   4.130   4.412   4.123   2.940   4.372   5.015   3.983   3.249   3.078   3.832   3.497   3.658   3.831   4.612   5.295   5.688   5.149   5.471   5.261   5.348   4.847   3.521   3.732   4.811   5.397   5.924   6.223   3.946 
+  4.283   4.502   5.413   5.635   5.002   5.750   5.473   4.420   4.014   3.640   4.425   4.000   3.663   4.163   4.521   3.532   3.663   4.158   4.027   3.716   3.497   4.716   5.035   4.953   5.197   5.348   4.893   4.863   5.436   3.931   3.656   4.531   5.427   6.209   6.541   4.848 
+  5.619   5.211   4.695   5.082   5.039   4.122   5.122   4.623   3.599   4.003   4.907   4.233   2.606   4.969   4.642   3.015   3.256   3.706   4.189   3.714   4.098   5.071   4.761   5.741   5.494   4.444   4.482   4.271   4.388   4.165   3.027   4.301   5.851   5.640   5.580   4.176 
+  2.964   4.208   4.464   3.553   4.072   5.750   5.900   5.273   4.734   4.335   4.581   4.741   2.006   4.613   4.208   3.336   3.951   4.156   3.374   3.428   5.031   4.751   4.667   5.513   5.084   4.248   5.043   4.291   4.124   3.916   3.593   4.421   5.068   5.545   5.422   3.569 
+  5.062   5.670   4.247   4.254   4.866   5.992   4.949   5.047   4.399   4.349   4.090   4.196   3.697   4.091   4.303   3.907   4.221   2.908   3.366   3.504   3.954   4.133   3.699   4.833   5.040   4.237   4.767   4.355   3.419   3.381   4.127   3.915   4.391   5.038   4.830   4.080 
+  4.638   5.155   5.073   4.092   4.681   5.330   5.174   5.493   6.176   4.773   3.824   3.883   2.556   3.805   4.063   3.039   4.715   4.154   3.343   3.044   3.516   4.775   5.691   4.700   4.475   4.091   3.727   4.089   3.937   3.891   3.695   4.252   5.045   5.812   4.917   2.954 
+  4.870   3.932   3.594   2.868   4.656   6.523   5.671   5.124   6.271   5.375   4.183   4.663   3.576   4.337   3.758   3.717   4.077   4.141   3.252   3.832   3.907   4.151   5.624   5.048   4.696   3.891   3.441   3.401   3.443   3.037   2.997   3.097   4.003   4.656   4.043   2.894 
+  4.996   6.519   6.621   4.330   3.793   6.546   6.673   5.739   5.404   7.190   6.598   4.472   4.320   4.861   4.075   2.365   4.078   3.232   2.968   4.441   3.978   4.774   4.641   5.182   4.855   4.572   4.737   4.026   3.950   3.537   2.996   2.801   3.256   3.948   3.477   2.935 
+  4.219   6.415   7.118   5.533   3.960   4.999   7.037   5.519   4.182   7.664   8.815   6.634   4.073   5.326   4.217   3.270   3.752   2.799   3.252   3.344   3.276   3.992   4.152   4.521   3.972   4.827   4.138   3.779   3.292   3.673   2.955   2.805   2.880   3.430   1.398   1.237 
+  4.640   5.203   5.828   3.976   3.104   5.179   7.121   6.309   5.195   8.085   9.096   6.715   4.528   3.521   3.318   4.893   4.791   5.112   3.383   3.621   4.029   4.828   4.346   5.196   5.161   4.840   4.189   3.563   3.721   3.816   2.877   3.177   2.984   2.816   2.489   1.788 
+  4.404   5.050   4.621   2.048   3.293   5.260   5.674   3.752   6.222   8.412   7.713   4.870   4.946   2.159   3.408   3.589   5.064   5.872   3.899   3.093   4.581   4.406   4.333   5.456   5.167   4.446   4.849   3.228   3.104   2.991   3.178   3.313   3.332   3.060   2.739   1.613 
+  4.142   5.101   4.321   3.550   4.889   5.049   4.531   3.051   3.309   5.675   5.522   4.482   4.919   3.583   3.796   2.929   3.691   3.579   3.203   2.987   3.627   3.091   4.565   4.133   4.255   3.312   3.933   3.049   2.993   2.943   2.859   2.285   2.507   2.433   1.868   1.366 
+  4.770   5.219   6.006   5.559   4.160   5.534   6.590   5.604   4.555   4.413   3.539   3.255   4.604   5.199   4.688   4.636   4.675   6.311   5.287   4.080   4.333   5.675   4.910   4.340   6.003   4.598   3.402   2.727   2.232   3.051   2.666   2.047   2.393   2.994   2.760   2.176 
+  4.518   3.331   4.567   3.933   3.653   3.044   6.315   6.308   4.854   4.228   3.579   2.920   4.117   4.551   3.816   2.994   3.306   5.476   5.977   3.833   2.343   5.650   6.745   4.767   4.972   5.942   3.711   4.071   3.663   3.033   3.117   3.109   3.967   3.160   2.343   1.143 
+  4.297   4.488   4.055   4.810   4.118   3.915   5.372   4.779   3.722   3.353   3.121   3.364   3.627   4.490   4.313   3.053   2.801   3.308   3.923   3.931   3.507   4.412   5.516   4.805   3.838   3.700   2.067   2.709   3.131   3.222   3.372   2.877   3.115   3.308   2.233   1.469 
+  3.935   4.469   5.352   5.386   6.538   6.890   6.545   6.339   7.161   6.811   6.082   6.414   6.353   6.647   7.026   7.220   6.863   6.310   7.022   7.106   6.615   6.594   6.017   4.972   4.689   3.595   2.218   3.439   2.734   2.282   3.013   3.171   2.682   2.278   2.202   1.932 
+  5.019   4.195   4.263   4.157   5.123   6.423   5.395   4.389   6.008   5.419   3.961   5.197   4.959   4.915   5.389   6.426   5.355   4.963   5.646   5.655   5.240   5.488   4.812   4.842   4.682   3.642   3.725   2.792   2.775   3.087   2.690   2.848   2.297   2.294   2.302   1.504 
+  4.460   5.150   5.785   5.233   4.151   4.468   4.645   3.033   3.593   3.842   2.567   2.386   3.243   4.695   3.678   4.057   3.950   4.510   3.906   3.648   4.286   4.399   3.259   3.577   3.201   3.524   3.590   3.476   3.176   2.463   2.865   2.965   2.953   2.278   2.284   1.848 
+  4.276   4.664   5.455   5.515   5.431   5.500   4.576   5.644   3.941   4.286   4.206   4.946   4.359   5.197   4.847   3.836   3.878   3.259   3.997   3.993   4.171   4.187   3.763   3.929   4.047   3.439   2.835   2.584   2.751   3.207   3.215   2.798   2.715   2.919   2.780   1.234 
+  4.694   4.767   6.201   7.270   7.293   7.503   7.391   7.408   7.135   6.493   6.811   7.317   8.205   8.503   7.410   5.739   3.886   3.616   5.228   6.211   5.280   5.343   6.292   6.881   4.796   2.861   3.570   3.305   3.220   4.038   3.843   4.230   4.033   2.838   2.404   1.210 
+  5.031   4.962   4.424   4.027   3.793   5.255   6.001   4.575   5.065   4.303   3.767   4.023   5.875   6.373   4.897   3.587   3.942   4.189   3.036   3.812   3.795   4.585   4.428   4.649   4.742   3.850   3.868   3.901   3.497   3.262   3.397   2.950   2.914   2.372   2.468   2.615 
+  5.155   5.762   5.442   4.699   4.299   5.744   6.046   5.175   4.026   4.253   3.239   2.820   2.466   3.771   3.798   3.413   4.027   3.711   3.228   3.408   3.732   3.586   3.274   3.367   3.147   3.508   3.763   3.701   3.172   3.432   3.528   3.514   3.018   2.543   2.475   1.841 
+  4.432   3.445   3.349   2.824   4.719   4.969   4.115   3.979   4.373   4.259   4.071   3.094   3.498   4.842   4.515   3.576   3.961   4.414   3.388   2.267   3.177   3.714   4.199   4.122   3.294   4.178   3.889   3.091   2.834   3.665   3.548   3.164   3.168   2.544   2.638   1.996 
+  5.208   5.038   4.082   2.922   3.752   4.864   5.565   4.601   3.289   3.680   3.826   4.650   3.606   4.792   4.362   4.407   3.716   4.086   3.494   1.144   2.953   4.848   3.863   2.885   3.853   3.746   2.679   1.691   2.329   3.599   3.939   2.841   2.871   2.349   1.967   1.685 
+  5.808   4.799   4.291   3.067   3.406   4.601   5.527   3.452   4.240   3.005   2.894   3.122   3.204   3.200   4.257   4.186   2.803   2.971   2.877   2.653   3.403   4.779   4.437   4.322   4.276   3.882   3.826   3.225   2.749   3.018   3.539   3.331   2.824   1.443   1.842   1.635 
+  4.947   4.007   4.626   4.843   4.952   4.287   4.582   4.540   4.060   2.925   1.991   1.531   2.439   2.566   2.062   3.844   3.957   3.427   2.137   2.610   3.549   3.411   3.458   3.500   4.379   3.591   3.482   3.384   3.673   3.292   3.394   3.194   3.046   1.906   2.146   2.268 
+  5.347   5.415   4.282   5.276   5.101   5.859   4.634   4.128   4.459   3.324   2.850   1.532   2.950   4.685   4.192   3.820   3.804   3.780   2.366   2.940   3.753   3.930   4.466   3.609   4.373   3.743   3.642   3.660   2.037   3.547   3.550   2.778   1.759   2.621   2.622   1.330 
+  4.442   3.569   3.951   4.233   4.163   5.408   6.214   4.429   4.993   4.492   1.582   1.606   2.514   4.938   4.806   4.378   4.433   3.873   2.870   3.172   3.713   3.847   4.595   3.347   3.324   3.044   3.466   2.956   2.083   3.168   2.965   2.854   2.013   2.753   2.590   1.737 
+  4.787   3.622   4.016   4.204   4.118   3.559   4.582   4.055   3.223   3.774   1.496   2.079   2.780   4.252   4.320   3.594   3.350   3.444   3.763   2.878   1.913   2.977   3.754   3.494   3.745   3.618   3.487   3.728   3.018   3.262   2.514   1.971   1.881   1.998   2.006   1.733 
+  4.565   4.490   3.923   4.652   3.936   4.668   4.239   3.336   2.893   4.217   3.913   2.415   2.994   4.019   3.922   4.566   3.561   3.106   4.259   3.360   1.921   2.821   4.544   4.161   3.543   2.768   2.943   2.399   2.090   2.363   2.642   2.113   2.487   2.468   1.772   1.775 
+  2.815   3.264   3.645   3.621   4.593   4.460   5.140   3.832   3.727   4.382   3.300   3.374   3.876   4.880   4.054   3.954   3.411   3.252   4.700   4.204   3.100   3.364   4.640   3.448   4.152   3.454   1.896   2.071   2.214   2.474   3.219   2.310   2.411   2.917   1.477   1.300 
+  4.933   3.033   2.853   3.699   3.370   3.762   5.016   4.253   4.511   3.350   3.091   2.757   2.550   2.973   2.842   2.376   3.939   3.742   3.271   3.419   3.881   3.895   3.691   4.181   4.102   3.710   2.892   3.480   3.119   3.221   2.784   3.182   1.585   2.125   2.327   1.499 
+  6.065   5.114   3.426   4.367   3.485   3.589   4.049   3.957   3.679   2.530   2.554   2.649   3.706   4.072   4.141   2.301   2.831   4.314   4.012   3.527   2.978   3.293   4.577   3.853   3.331   3.214   2.881   2.391   3.155   3.014   2.056   2.713   1.489   2.391   2.488   1.390 
+  6.004   6.099   4.962   5.562   5.808   6.084   6.402   6.336   4.226   0.938   2.203   4.130   4.538   4.320   4.401   3.102   3.794   3.851   4.195   3.883   3.824   3.663   4.430   3.706   4.567   3.603   3.364   2.994   2.653   3.035   2.284   3.270   2.231   2.685   2.574   1.684 
+  9.428   9.533   9.724   9.887  10.440   9.577   9.877   9.015   8.510   7.241   7.199   6.815   6.203   6.336   6.221   6.254   6.055   5.699   5.111   5.237   5.561   5.079   5.289   4.785   4.997   4.348   3.889   4.588   4.529   4.620   4.513   4.692   4.895   4.834   4.508   3.253 
+ 11.068  11.280  11.558  11.782  11.771  11.306  11.317  10.819   9.505   8.400   7.597   7.837   7.478   6.682   7.739   7.561   6.955   6.854   6.334   6.230   7.102   6.873   6.614   6.381   5.892   5.783   5.056   5.833   5.736   5.913   5.516   5.924   6.336   6.011   5.627   4.263 
+  9.798  10.270  10.577  11.027  11.094  10.784  10.611  10.519   9.214   8.246   7.475   6.206   5.945   6.318   6.836   6.814   6.101   5.804   6.489   6.335   7.513   8.010   8.303   8.264   7.764   6.449   4.168   3.907   3.810   3.994   3.627   3.752   4.172   3.820   3.256   2.406 
+  9.434  10.021   9.054   9.170  10.126  10.288   9.117   9.014   7.535   6.636   5.764   4.832   4.466   5.102   5.525   5.303   5.041   4.127   4.609   4.211   6.153   6.078   6.363   6.415   6.050   4.611   4.207   4.116   4.421   3.771   4.040   3.936   3.773   3.827   3.385   3.144 
+  8.473   7.335   7.019   7.265   8.647   9.211   7.614   5.222   4.984   5.300   4.429   2.501   2.206   5.278   5.067   4.219   3.535   3.486   3.279   3.205   3.748   4.148   4.591   4.469   5.050   4.630   5.008   5.171   5.728   4.868   5.148   4.867   4.536   3.937   3.349   2.513 
+  4.086   4.843   4.055   4.461   6.465   6.945   6.855   4.597   4.060   4.200   4.225   3.081   3.273   3.815   3.786   3.350   3.673   3.402   2.382   2.293   2.533   2.427   3.079   3.817   3.438   3.078   3.946   3.722   4.349   3.630   3.297   3.101   2.970   2.601   3.398   2.406 
+  5.714   4.317   5.257   7.238   6.916   6.683   6.615   7.539   5.675   6.916   6.253   6.137   5.268   4.747   5.163   4.815   4.693   4.510   4.971   5.021   5.157   5.477   6.080   6.464   6.382   5.899   5.491   5.226   5.195   4.936   4.223   4.426   4.660   4.659   4.005   3.939 
+  8.223   8.550   8.465   8.550   8.066   7.880   8.641   9.383   9.773  10.485  10.447   9.511   7.960   6.901   7.772   8.137   7.855   7.658   7.489   7.944   8.327   8.657   9.407   9.954   9.920   9.173   8.742   8.124   8.096   8.222   6.607   7.243   7.958   7.738   6.597   6.121 
+  6.121   7.146   7.008   5.906   4.795   5.932   4.892   5.767   6.764   8.252   8.369   6.753   4.295   4.151   5.337   4.969   4.206   4.835   4.639   4.840   5.004   5.201   6.118   6.930   6.904   6.515   6.667   5.077   5.216   5.509   4.119   4.783   5.645   5.815   6.216   5.491 
+  3.114   2.977   4.377   4.270   4.373   4.133   3.598   4.572   2.469   4.953   5.387   4.154   3.166   3.793   4.092   3.591   3.457   4.146   3.864   5.204   5.718   5.054   6.052   6.391   6.214   6.250   7.182   5.976   5.606   4.953   5.329   5.623   6.332   6.853   6.839   6.937 
+  3.821   4.354   4.098   3.965   4.648   4.675   6.119   5.297   4.336   5.102   6.064   4.156   3.486   3.671   4.181   4.413   5.975   5.857   5.642   6.443   6.737   5.256   6.515   6.166   6.593   6.559   6.652   6.603   6.490   6.783   5.599   6.834   7.485   7.290   7.031   7.059 
+  3.331   2.665   2.846   3.961   2.495   4.621   6.069   6.799   6.415   5.347   6.949   5.854   4.243   3.673   3.624   4.686   6.512   7.535   7.439   7.010   7.157   6.810   5.948   7.000   5.824   6.772   8.518   6.510   6.600   6.272   6.255   6.115   7.132   8.286   8.022   6.252 
+  4.430   3.882   4.162   4.635   4.865   4.230   5.768   6.273   6.179   8.032   8.448   6.940   3.668   3.708   4.872   4.444   5.662   7.634   7.829   7.205   7.774   6.918   5.899   7.288   6.817   6.176   7.750   6.746   6.204   5.957   6.158   6.716   7.525   7.344   7.302   6.888 
+  2.342   3.194   4.598   4.749   4.182   4.042   5.140   5.869   6.244   6.964   6.270   4.945   3.782   4.125   4.790   4.890   5.102   6.150   5.847   5.999   6.214   5.880   5.411   6.696   7.144   4.933   7.005   6.046   4.624   4.043   4.538   5.617   5.898   6.170   5.869   5.432 
+  4.400   5.016   4.712   3.131   3.885   4.923   5.115   4.913   5.842   6.165   6.088   6.252   5.034   5.455   5.016   3.418   3.256   4.015   4.767   4.005   4.903   4.806   5.471   5.099   4.482   4.684   5.130   4.611   4.449   5.047   4.601   4.951   4.675   5.259   4.587   4.346 
+  4.763   6.456   7.064   6.150   5.004   5.944   5.875   4.684   4.857   4.191   5.851   4.870   2.754   4.581   4.546   4.265   4.191   3.543   4.040   3.807   4.092   4.059   5.088   4.343   4.502   3.795   3.702   3.985   4.413   4.164   4.567   4.432   3.761   4.177   3.903   3.145 
+  5.244   5.905   5.178   5.596   5.559   4.382   5.296   4.366   4.522   4.276   4.124   4.817   3.668   4.634   4.357   4.279   4.177   4.271   3.886   4.220   4.039   4.749   4.856   3.571   3.247   2.964   3.232   4.211   3.772   3.211   3.790   3.734   3.686   3.381   3.046   2.555 
+  4.840   4.570   4.415   3.570   4.755   4.791   4.114   4.068   3.740   4.683   5.071   4.477   3.060   4.844   4.239   4.307   2.982   3.240   4.208   3.186   4.159   3.656   3.294   3.746   3.251   2.291   3.184   3.562   3.713   3.354   2.881   3.318   4.221   3.700   2.904   1.649 
+  4.268   4.386   5.235   4.717   5.428   5.290   4.965   3.219   4.112   3.604   4.402   3.711   3.507   4.013   4.062   4.891   4.609   3.669   3.114   3.400   4.142   4.025   4.433   4.790   4.076   4.412   3.564   3.173   3.495   3.553   3.163   2.453   3.366   2.763   2.734   2.207 
+  4.693   4.226   4.993   4.901   4.973   5.268   5.338   3.371   4.177   3.820   5.126   5.096   4.453   4.464   4.012   3.179   3.808   3.832   2.682   3.579   4.286   4.184   4.380   4.462   4.150   3.472   3.082   4.474   3.751   3.383   2.769   2.984   2.805   2.797   2.522   2.279 
+  5.493   5.076   5.025   4.181   3.376   5.051   4.563   4.642   4.371   3.992   4.744   4.332   3.403   3.525   3.617   2.415   2.971   3.475   3.321   3.844   3.749   3.406   4.309   4.762   4.789   4.084   3.889   5.200   5.183   4.195   3.742   4.150   4.399   4.783   3.883   3.550 
+  6.404   6.149   6.194   5.669   6.217   6.183   6.171   6.246   5.511   6.323   6.449   5.952   5.233   3.834   5.131   5.895   5.228   5.339   5.476   5.849   6.131   6.332   6.550   7.060   7.313   7.602   7.870   8.946   8.026   6.783   4.296   5.300   6.000   8.059   7.845   7.596 
+  4.884   5.194   4.994   5.059   5.095   6.216   5.492   5.172   3.992   4.496   5.116   5.923   4.215   4.060   4.722   4.235   3.498   4.210   3.640   4.093   4.412   4.762   4.805   5.477   5.624   5.789   6.218   8.230   6.859   5.343   3.340   3.992   5.733   7.518   6.200   6.297 
+  6.252   7.233   7.539   6.706   6.565   7.076   6.852   6.338   6.472   6.861   7.281   6.849   5.264   3.780   4.318   5.298   4.546   4.624   5.146   5.186   4.968   4.410   5.710   5.690   5.552   5.407   5.751   6.908   6.255   4.665   3.971   3.795   4.004   4.945   4.090   4.203 
+  5.502   6.433   6.703   5.514   4.112   6.234   5.074   4.992   3.683   4.795   5.950   6.225   4.278   3.542   3.662   3.762   4.597   5.250   4.032   4.262   4.569   4.224   5.053   5.037   4.477   3.826   4.514   5.842   5.797   4.666   2.650   2.994   3.208   4.810   4.870   4.032 
+  3.887   4.924   5.919   5.753   6.135   5.814   5.474   3.697   3.909   5.777   6.025   5.443   3.263   4.697   4.905   3.512   3.958   4.945   4.082   4.232   4.136   5.155   4.859   4.203   5.114   5.572   4.742   4.812   5.457   5.122   3.264   2.482   3.341   4.101   4.502   3.925 
+  7.629   6.949   7.345   6.973   6.445   7.337   6.929   5.392   6.376   8.102   8.364   7.624   5.027   4.436   4.583   5.149   4.711   5.441   5.917   4.775   4.944   5.008   4.513   4.463   4.742   5.009   4.932   4.398   6.452   5.783   3.338   3.818   4.300   4.779   3.732   3.871 
+  6.676   6.841   7.196   6.937   6.531   5.962   4.730   4.280   5.389   6.754   6.243   6.594   3.910   3.900   4.607   4.873   4.945   4.705   5.287   5.105   4.585   4.999   4.424   5.042   5.018   5.185   5.115   4.960   5.943   5.093   4.207   4.196   5.016   5.261   4.298   3.815 
+  6.856   5.760   6.110   5.358   4.150   5.513   5.920   6.768   7.252   6.385   6.440   5.165   5.546   5.141   5.429   4.602   4.521   5.208   4.834   5.062   5.168   6.080   6.244   6.106   5.573   4.881   5.263   5.333   5.603   5.659   4.599   6.145   6.930   6.087   4.664   4.206 
+  6.065   4.124   5.813   5.877   5.159   6.088   4.900   5.215   5.592   6.151   6.430   6.606   6.139   4.951   4.928   4.616   4.735   5.446   5.318   4.201   5.306   5.946   5.771   6.801   6.220   5.482   4.907   6.406   6.449   5.593   5.250   6.111   7.565   7.137   6.398   5.670 
+  5.589   6.615   6.655   4.722   5.433   6.238   5.689   5.644   4.675   6.156   6.539   6.928   6.331   5.574   4.529   5.812   5.978   6.322   6.184   5.927   4.989   5.326   5.810   6.474   6.352   6.789   5.911   6.068   6.366   6.237   5.629   5.872   7.381   7.233   6.615   5.900 
+  5.629   4.813   6.188   5.803   5.219   4.377   5.259   6.604   6.163   5.939   6.415   7.978   6.915   5.802   5.327   6.535   6.476   5.697   4.831   5.714   5.795   6.124   6.502   6.960   6.627   6.921   5.861   6.142   6.430   6.370   5.643   6.295   6.811   6.766   7.424   6.349 
+  3.965   2.320   3.328   2.718   2.786   4.237   5.969   6.780   6.668   7.247   6.786   5.888   6.635   5.608   4.942   5.306   6.616   6.343   5.300   5.776   6.083   5.308   6.603   7.527   7.084   6.526   5.373   5.364   6.724   6.581   4.965   6.385   7.033   6.961   7.302   6.415 
+  1.958   3.464   3.929   2.837   3.216   4.287   5.107   4.015   5.743   4.443   5.193   5.018   4.665   4.977   4.789   4.523   5.273   5.698   5.319   4.616   4.412   5.778   6.091   7.069   6.604   6.483   5.296   5.874   5.963   5.827   5.004   5.932   6.447   6.095   6.497   6.040 
+  3.466   2.647   3.642   3.329   5.459   6.451   5.352   2.653   5.251   4.895   5.696   4.948   5.315   4.378   4.683   3.931   5.332   5.877   5.533   4.499   3.000   5.081   5.917   6.239   5.692   6.320   5.144   5.488   5.344   5.323   4.341   5.278   5.873   5.645   6.213   5.371 
+  4.874   3.366   3.075   4.439   4.031   5.118   4.842   5.278   4.613   4.237   6.805   6.426   4.844   4.750   4.128   3.844   3.818   4.445   5.098   4.990   4.401   3.428   5.221   4.824   4.415   4.440   3.768   4.413   5.076   4.338   3.751   4.952   5.013   4.706   4.769   4.415 
+  2.897   4.493   4.490   5.407   5.262   5.694   5.297   4.600   5.424   5.569   6.447   5.482   2.598   5.271   5.253   5.109   4.855   4.569   4.214   3.084   4.117   3.560   3.814   3.835   3.949   3.786   3.317   3.213   3.987   4.059   2.951   3.437   4.211   4.229   3.774   2.916 
+  5.163   4.526   2.917   2.336   3.007   4.959   4.162   2.371   1.668   3.451   4.289   2.956   0.846   3.979   4.527   4.515   4.250   3.534   4.219   3.945   4.041   3.684   3.921   4.463   3.992   3.737   3.671   2.517   2.920   3.439   2.824   2.867   3.170   3.518   2.487   1.936 
+  3.949   3.657   3.577   4.000   3.720   4.133   4.807   3.856   2.643   3.765   4.175   2.071   1.808   3.683   3.676   2.812   3.097   2.683   3.738   3.522   4.074   3.832   3.877   4.198   2.960   2.789   3.355   2.977   3.081   3.663   3.596   3.255   3.141   2.338   2.856   1.917 
+  3.825   4.602   4.780   3.951   3.432   4.236   4.641   2.494   3.563   3.823   4.911   3.784   2.403   4.181   4.605   4.666   3.596   2.492   3.636   3.545   4.131   2.825   3.979   4.206   3.865   4.220   3.898   3.027   3.062   2.656   3.224   3.319   3.160   2.897   3.394   2.684 
+  3.849   4.751   3.528   4.158   4.902   4.372   3.893   2.006   2.770   3.948   4.337   2.945   3.664   5.049   4.256   3.804   5.243   4.232   3.498   3.769   4.854   4.832   3.124   3.783   3.850   4.412   5.218   4.707   5.320   5.276   5.614   5.860   5.738   5.601   6.108   5.790 
+  4.694   4.632   2.716   2.195   4.534   5.166   5.017   3.484   4.622   4.415   3.446   3.747   3.019   3.835   4.073   3.910   4.384   4.282   4.529   4.540   4.431   4.953   4.908   4.152   4.059   3.950   4.858   4.281   4.925   4.891   5.490   5.616   5.253   5.063   5.818   5.566 
+  1.017   3.473   2.739   2.778   3.720   2.893   3.699   3.389   3.047   2.480   3.695   3.957   3.679   4.053   4.450   5.339   4.872   4.020   4.199   4.427   4.524   4.776   4.784   3.677   3.474   3.185   3.045   2.288   3.395   3.330   3.698   3.391   2.792   2.818   2.567   1.301 
+  4.103   3.434   3.049   3.342   3.988   3.815   3.290   2.926   3.443   3.080   3.298   4.878   3.513   4.766   4.506   5.077   5.141   4.680   3.462   3.515   3.106   4.645   4.863   3.164   3.029   3.401   3.620   2.899   3.767   3.340   3.308   3.417   2.766   2.614   2.751   2.120 
+  4.977   5.103   4.576   3.021   3.130   4.883   4.876   3.391   0.971   2.538   3.074   3.485   2.270   5.137   4.505   4.845   4.425   3.914   3.017   3.649   4.175   4.029   4.069   2.991   4.348   3.674   3.855   3.866   3.227   2.884   3.037   2.965   2.898   2.310   2.014   2.355 
+  4.569   3.344   2.508   4.705   5.043   4.200   4.255   3.612   4.779   4.972   3.467   3.359   3.337   4.617   4.112   2.526   3.843   4.305   3.926   4.577   3.579   2.721   3.367   3.989   4.487   3.751   3.576   3.866   3.993   4.061   3.173   2.174   3.010   2.725   3.025   2.187 
+  5.527   5.175   4.814   4.449   4.171   3.899   5.378   5.180   3.833   2.796   2.165   3.259   4.208   4.114   4.752   3.676   3.995   3.891   3.618   2.965   2.958   2.198   4.203   4.344   3.021   3.025   4.398   3.999   3.678   4.093   3.930   3.011   3.032   3.090   2.792   1.963 
+  6.221   5.435   4.216   4.060   4.994   5.193   3.829   3.951   4.693   3.197   1.884   3.452   3.774   4.264   4.506   4.061   4.232   3.736   4.316   3.875   3.571   4.204   3.963   3.193   3.887   3.219   3.556   3.119   3.282   2.677   3.972   3.917   3.084   2.250   2.346   2.203 
+  5.341   4.318   4.606   4.311   4.500   5.153   5.229   3.737   3.787   3.306   2.987   3.431   3.427   6.077   5.548   4.143   3.990   3.392   4.002   3.916   4.326   4.535   3.470   3.380   3.961   3.552   3.381   2.347   3.164   3.867   3.025   3.536   3.126   2.999   2.156   2.059 
+  4.452   3.967   3.953   2.274   3.709   6.059   6.020   4.585   4.802   4.481   4.652   4.093   3.303   5.389   5.733   3.620   3.658   3.352   2.944   4.155   4.637   3.131   3.733   3.825   3.863   3.519   3.757   3.001   3.222   2.697   3.151   2.956   2.367   2.954   2.504   1.798 
+  3.542   3.038   2.929   2.596   2.419   3.621   5.213   4.944   3.036   2.623   3.713   3.731   2.022   3.419   4.962   4.719   4.687   4.462   3.907   4.189   3.239   2.794   2.920   3.521   3.275   3.401   3.436   3.121   2.657   2.834   2.400   2.441   3.554   3.817   3.078   2.548 
+  4.002   4.693   3.700   4.706   4.623   4.846   6.065   4.768   3.472   4.055   3.386   3.005   3.365   2.881   4.947   4.381   3.337   3.289   3.563   3.761   3.348   2.925   3.462   2.811   2.821   3.273   3.826   3.799   3.650   3.784   3.404   2.514   2.586   2.861   3.236   1.792 
+  1.955   4.203   4.147   4.204   5.252   5.486   5.524   3.606   4.702   3.489   0.889   1.948   2.842   4.944   4.599   3.468   4.271   4.176   3.658   3.446   3.441   4.718   4.393   3.896   3.599   3.287   3.480   2.653   2.773   4.009   3.371   2.073   2.632   3.353   2.951   2.026 
+  2.746   3.191   2.848   4.592   4.858   4.537   4.539   4.379   3.993   3.236   3.689   3.198   2.577   4.508   5.445   4.162   4.729   4.923   4.994   3.067   3.745   4.358   3.461   3.060   3.391   4.024   4.796   4.029   2.646   2.921   2.380   1.934   2.319   3.299   2.362   0.494 
+  5.145   4.448   4.183   3.662   3.780   3.033   2.671   3.478   3.463   3.825   2.864   2.478   2.010   3.781   4.727   4.655   4.393   4.627   3.881   3.965   3.770   3.393   2.969   3.206   3.913   4.360   4.035   3.559   3.839   3.511   2.711   2.158   2.638   2.737   1.887   0.880 
+  5.282   6.293   5.745   4.028   4.083   6.322   6.180   3.439   3.884   4.253   3.651   1.998   2.792   4.734   4.399   4.053   3.641   4.193   3.463   3.977   4.699   4.435   3.740   3.305   4.095   3.993   3.366   3.601   3.978   3.805   2.518   2.647   2.807   2.695   2.738   2.376 
+  3.083   5.981   5.756   4.990   4.760   6.258   6.554   4.951   3.319   3.596   2.735   2.389   2.247   4.314   4.665   5.073   4.811   4.483   3.789   3.456   3.676   3.954   2.974   3.458   3.391   2.768   3.873   3.530   3.341   3.625   2.082   2.925   3.202   3.197   3.007   2.489 
+  4.088   5.431   6.304   4.694   5.133   5.061   5.206   5.465   4.402   4.904   4.659   5.175   4.591   4.955   5.310   5.500   5.412   6.562   7.313   7.600   6.656   6.071   5.484   5.195   4.921   4.787   4.559   6.373   6.715   6.599   6.388   6.001   5.828   5.505   5.376   4.633 
+  5.974   5.380   6.416   6.907   6.287   6.180   7.124   7.169   6.963   6.901   6.361   7.115   6.616   5.800   5.820   5.912   6.434   8.804  10.087  10.762   8.947   8.093   7.479   7.288   6.840   6.272   6.519   9.109   9.274   8.935   8.557   8.017   7.840   7.559   7.389   6.602 
+  3.399   3.647   3.431   4.211   3.899   4.735   4.631   3.258   3.169   3.740   3.175   4.494   3.009   4.937   5.566   4.761   4.680   5.354   7.409   8.935   6.844   5.269   5.158   5.260   3.779   4.050   4.374   6.360   6.839   6.364   6.452   4.111   4.331   4.146   4.005   3.038 
+  1.767   2.468   1.561   2.019   3.962   3.787   2.833   2.247   1.934   2.932   2.533   1.666   3.150   4.910   4.764   3.407   3.252   3.436   3.415   6.514   6.039   4.055   3.910   4.523   3.065   2.963   3.100   4.249   4.185   3.106   3.396   2.777   3.874   4.074   2.921   2.365 
+  2.606   4.092   3.863   2.798   2.829   3.148   3.597   2.627   3.246   3.109   3.688   3.736   3.871   5.460   4.932   4.670   3.920   4.570   4.441   4.028   4.476   4.407   4.783   4.840   3.652   3.526   3.935   4.299   3.785   3.817   4.627   4.719   3.934   3.864   4.028   2.902 
+  3.753   4.769   4.312   3.130   4.168   4.343   5.597   6.519   5.148   5.198   5.881   6.236   6.267   6.567   7.641   6.833   4.190   5.937   5.685   7.324   8.775   7.910   6.487   7.125   6.601   5.963   7.344   7.570   6.276   6.535   7.123   7.044   5.897   5.972   6.163   5.349 
+  2.984   3.191   3.147   4.714   4.803   4.914   4.892   7.080   8.288   7.540   7.034   7.542   8.175   8.035   8.153   7.559   6.990   8.484   9.233  10.984  12.022  10.955   8.486   8.151   8.086   8.341   8.661   8.850   8.405   6.810   7.748   8.033   7.727   5.815   5.889   5.664 
+  6.290   5.734   4.577   5.354   6.745   8.016   7.431   6.803   8.914   9.093   8.320   8.455   8.953  10.834  10.775  10.100   9.619  10.310  11.027  11.196  12.511  12.721  11.025   9.687   9.426   9.633   9.720  10.888   8.851   8.191   8.877   9.213   9.125   9.915   8.904   7.229 
+  8.004   8.121   8.007   7.321   7.601   9.069   7.886   8.731   9.818  10.933  11.581  11.319  11.236  11.708  12.119  10.755  11.642  12.173  12.240  13.304  13.518  12.614  12.485  12.194  11.839  10.449   9.832  11.137  10.197   8.631   9.097   9.024  10.972  11.669  10.319   9.414 
+ 10.760   9.988  11.737  11.217  12.127  11.981  12.791  12.916  13.605  13.543  14.293  14.021  14.287  13.948  13.609  13.559  13.524  12.939  13.941  14.797  13.254  13.051  12.679  13.375  12.896  11.682  10.662  10.194   9.142   8.390   9.828   9.461  11.885  12.836  10.183   9.330 
+ 11.484  12.988  13.042  12.386  12.915  13.831  14.197  14.971  15.793  16.516  16.043  15.796  15.603  15.220  15.365  15.097  15.174  15.935  16.498  16.433  15.011  13.988  14.148  14.272  13.234  12.028  11.489  10.485  10.119  10.650  11.072   9.837  10.796  11.212   9.089   7.458 
+ 11.651  13.436  13.131  12.136  11.750  13.709  13.687  14.694  16.164  17.523  17.529  16.944  16.441  15.770  15.869  16.050  16.721  17.762  18.320  17.560  16.456  16.099  16.662  16.752  15.360  13.779  13.343  12.183  12.109  12.982  12.775  10.865  11.676  10.907   9.335   8.327 
+ 10.714  13.279  12.655  11.239  11.701  13.791  13.351  14.074  16.491  17.384  17.453  17.178  16.795  15.703  16.101  15.993  16.870  18.032  18.488  17.236  16.154  16.080  16.515  16.543  14.941  13.174  12.974  12.663  11.674  12.495  12.558  11.166  10.336  10.111   9.320   8.852 
+ 11.523  13.556  12.799  11.967  11.745  14.029  13.441  14.698  16.547  17.406  17.672  17.294  16.977  16.008  15.834  16.243  17.301  18.509  18.081  17.135  16.297  16.182  16.823  16.960  15.550  13.676  13.647  13.707  12.584  13.287  13.957  12.484  11.547   9.644   8.995   8.936 
+ 11.619  13.692  13.134  12.150  12.612  14.020  14.075  15.294  16.866  17.597  18.077  17.398  16.932  16.431  16.249  16.917  17.929  18.369  17.248  16.215  15.865  15.822  16.629  16.977  15.642  13.783  13.634  14.150  13.714  13.190  14.460  13.887  12.334  10.458   8.628   8.521 
+ 12.555  14.193  13.139  13.218  13.104  14.350  14.856  15.873  17.575  17.845  18.674  17.333  16.846  16.824  17.829  17.943  17.870  16.945  15.850  15.154  15.241  15.167  16.103  16.750  15.414  13.400  13.118  13.705  13.985  12.278  13.859  14.263  12.712  10.805   7.530   7.406 
+ 13.213  14.424  13.550  13.717  14.018  15.556  16.371  16.553  17.417  17.812  17.909  16.646  16.697  16.748  17.661  17.443  15.837  14.471  14.036  14.134  14.030  14.074  14.947  16.030  14.655  11.906  11.121  11.982  12.882  11.159  10.874  12.609  11.314  10.246   7.056   6.677 
+ 13.640  14.257  13.529  12.946  12.269  14.532  15.551  15.765  15.297  14.790  15.032  15.188  15.978  15.534  14.237  13.247  12.738  13.157  12.810  12.922  12.648  13.058  14.144  15.045  14.782  13.061  11.349  10.607  10.129   8.892   9.372  11.376  10.780   9.435   7.571   6.724 
+ 13.872  14.690  13.018  12.920  12.424  12.574  10.872  10.113  11.456  11.583  13.491  14.553  14.884  12.444  11.696  11.915  11.618  12.734  11.590  11.845  11.985  12.159  13.385  14.666  14.723  13.272  10.974   9.769   8.399   6.872   8.743  10.988  11.727  10.672   8.698   5.816 
+ 13.957  14.400  12.917  12.865  12.457  11.952  11.244  11.002  11.318  11.361  13.835  14.642  14.446  12.025  11.544  11.359  12.015  12.000  11.591  11.964  12.009  11.846  12.900  14.466  14.716  13.600  10.995   9.588   7.799   7.474   9.313  10.265  10.374  10.697   8.961   6.468 
+ 13.918  14.162  12.948  12.833  12.556  12.006  11.142   9.386  10.215  11.359  13.515  14.946  14.271  12.225  10.820  11.370  12.059  11.644  12.037  11.850  11.701  11.781  12.815  14.424  14.629  13.209  10.951   9.473   7.963   9.468  10.174  10.358  11.509  10.986   9.133   6.596 
+ 13.856  14.043  13.041  12.922  12.646  11.860  10.884   8.958   9.440  10.514  13.179  14.856  14.171  12.243  10.324  10.586  11.388  11.366  11.526  11.460  11.399  11.721  13.013  14.509  14.436  12.491  10.219   8.857   7.184   9.404   9.620   9.913  11.579  10.720   8.789   5.416 
+ 13.777  13.947  13.124  13.003  12.647  11.768  10.434   9.634  10.627  11.692  13.000  14.315  13.653  12.241   9.638  10.854  10.505  10.753  11.060  11.409  11.364  11.532  12.837  14.248  13.811  11.395   9.323   7.660   7.589   9.879   9.456   9.547  10.396   9.561   6.493   4.819 
+ 13.552  13.869  12.853  13.755  13.370  14.638  15.353  15.265  14.037  13.009  13.071  14.237  14.859  15.089  14.146  11.271  11.431  12.188  12.032  12.084  11.696  11.732  12.839  13.860  12.754  10.300   8.851   9.330   9.497  11.245  11.195  10.278  10.537   9.766   8.227   7.136 
+ 13.377  13.223  12.860  13.105  14.112  15.286  16.690  16.863  17.270  16.020  14.807  15.439  16.051  16.872  17.011  16.588  15.593  13.665  13.760  13.372  13.578  13.349  14.300  15.048  13.841  11.759  11.687  10.775  10.349  12.632  12.898  11.874  11.288  10.203   7.982   7.143 
+ 12.109  12.243  13.520  13.350  13.857  15.044  15.933  17.807  18.081  17.646  15.173  15.493  15.327  15.685  17.456  18.227  17.593  15.309  14.942  14.255  14.382  14.103  15.271  15.987  14.504  12.901  12.967  12.012  11.076  13.254  13.585  12.285  11.594   9.667   8.059   7.013 
+ 13.038  12.733  12.880  13.132  13.999  14.791  16.258  17.628  17.966  17.247  15.019  14.963  14.435  14.735  15.790  17.548  18.732  17.229  15.856  14.611  14.213  14.254  15.665  16.564  14.430  13.409  13.529  12.249  10.825  12.592  12.714  11.743  11.009  10.255  10.338   8.624 
+ 13.654  13.345  11.881  13.223  13.990  14.813  16.795  17.416  17.020  15.745  14.641  13.866  13.700  13.907  14.435  15.267  16.997  17.911  16.907  14.620  13.383  13.269  14.306  15.944  14.376  12.879  12.828  11.306   9.167   9.024  10.944  12.288  11.643  11.703  12.608   9.229 
+ 13.157  12.934  11.950  13.248  13.585  13.872  15.247  14.432  13.754  13.925  12.572  11.206  11.093  10.026  10.569  10.823  12.349  14.496  14.866  14.537  13.944  12.875  13.576  13.447  12.786  14.259  12.328  11.069  11.639  11.177  10.340  11.246  10.318  11.542  11.309   9.232 
+ 11.375  11.308   9.501  10.144   9.165  10.312  12.168  12.112  11.394  10.624   8.640   9.465   7.854   8.279   8.681   9.975  10.551  10.296  11.425  10.778  10.558   8.645   9.423  10.232  10.443  11.961  10.185  10.171  11.036  10.510   9.802  10.369   9.688   9.081   8.958   7.083 
+  9.061   7.411   8.779   8.553   8.448   8.679   9.871  10.174  11.787  10.680  10.103   9.919   8.308   6.247   8.697   9.834  10.588  10.626   9.060   7.313   8.770   9.206   9.134   9.389   9.648  10.133   8.755   6.721   7.148   7.759   5.686   5.916   6.790   6.691   7.419   6.311 
+  7.550   7.209   7.704   6.843   6.352   7.168   8.452   9.680  11.089  12.408  11.036   7.985   7.571   8.038   7.989   9.347  11.040  11.262   8.210   8.915   8.592   9.067  10.139  10.014  10.776  10.378  10.031   9.618   8.818   8.861   7.449   7.846   8.614   8.824   8.656   8.088 
+  6.987   7.145   7.008   6.345   6.143   7.083   9.408   9.477   9.894  10.813  10.225   8.007   6.795   6.728   7.601   8.400   9.363   8.837   7.577   8.081   7.611   6.138   7.697   8.530  10.047   9.437   7.049   7.034   7.426   6.998   6.118   6.766   7.773   7.432   7.304   7.408 
+  7.600   7.436   7.761   8.021   9.339   9.848   9.484   9.246  10.331  10.846  11.002  11.095  10.415   8.909  10.039  10.937  10.987  10.285  10.487  10.495  11.507  12.056  11.440  12.241  13.525  13.793  15.413  15.506  15.063  14.987  12.814  12.247  11.867  12.004  11.240  10.607 
+  6.495   6.296   7.748   8.665   8.827   9.508   9.848   9.707   9.689  10.169  10.626  10.682   9.907   9.083  10.031  10.169   9.960   9.425   9.917  10.761  11.612  11.832  12.789  13.981  14.294  14.781  16.118  15.622  15.903  15.348  13.924  13.824  12.921  13.513  12.776  12.789 
+  7.248   7.248   7.529   7.155   7.944   7.067   7.269   8.187   8.292   7.933   7.781   8.272   7.139   7.722   8.489   8.741   9.606  10.435  12.010  11.722  12.332  12.602  14.643  16.126  15.442  15.634  15.642  14.823  15.292  15.906  15.335  15.078  15.099  15.132  15.424  14.788 
+  9.049   7.062   7.876   8.437  10.768  11.471  10.754  10.217  10.086  10.483  11.269  10.723  10.323  10.971  11.345  11.322  12.583  12.565  13.624  14.630  15.018  13.824  14.485  15.115  15.251  15.612  14.546  14.431  14.985  15.539  15.207  14.792  15.153  15.039  15.756  14.315 
+ 11.197  11.789  11.332  11.180  11.193  11.825   9.987   8.766   9.428   8.168   9.715   9.054   9.323   9.977  10.391  11.229  12.134  13.894  13.849  14.395  14.197  14.248  14.929  13.720  14.608  13.860  13.261  13.591  14.419  15.364  13.484  13.602  13.644  13.645  12.931  12.553 
+ 15.325  13.974  14.067  14.691  13.591  11.919   9.521   7.805   9.115   9.916   9.721  10.194  10.803  10.481  12.517  13.117  13.169  13.953  14.483  13.430  12.370  13.336  12.701  11.303  11.533  12.159  12.167  12.262  11.720  12.340  11.059  11.796  12.300  12.849  12.459  12.364 
+ 14.812  14.167  14.061  13.415  13.278  13.199  12.685  12.266  12.111  11.938  10.215  10.515  10.666  11.107  13.434  13.984  13.090  13.527  12.973  12.485  13.009  12.633  12.285  11.641  10.571  10.471  11.203  11.305  11.140  10.901  10.203  11.161  11.190  12.649  11.521  10.731 
+ 17.104  16.680  15.788  14.984  14.340  12.911  13.004  13.243  12.100  11.698  11.582  10.727  11.582  10.893  13.082  13.731  12.319  12.533  12.849  11.652  11.608  11.429  12.617  12.546  10.321  10.479   9.880  10.875  10.180  10.177  10.073   9.709   9.505  11.017  10.702   9.009 
+ 16.650  17.130  15.649  14.880  14.411  13.368  13.134  12.821  11.773  10.931  11.180  10.787  10.909  11.209  12.886  12.595  12.307  11.769  12.040  12.008  11.032  11.168  10.601  11.150  11.059  11.207  11.036  10.523   9.591   9.763   9.718   9.717   9.131   9.691   9.176   7.654 
+ 17.832  17.076  14.509  15.326  14.410  13.798  14.023  13.674  11.420  12.194  12.862  12.046  11.204  10.797  11.515  12.168  11.864  12.281  12.332  10.724  11.032  10.922  10.262  10.418  10.486  10.625  11.080  11.004   9.518   9.889   9.738   9.598   9.371   8.230   8.634   7.718 
+ 15.798  15.383  15.100  15.398  14.526  12.356  12.546  12.055  10.920  11.111  11.127  11.110  11.201  10.857  11.517  11.062  10.893  10.153   9.673  10.058  10.318  10.187   9.627   9.558   8.811   9.752  10.167   9.494   8.410   9.096   9.341   9.144   8.371   8.005   7.976   6.558 
+ 14.350  13.771  13.139  13.061  11.129  11.492  10.489   8.681   8.893   8.949  10.115  11.436  12.830  11.389  10.312  11.101   9.764   9.569   9.398  10.755  11.116  10.771   9.254   9.260   9.015   9.633   9.370   9.458   9.310   8.833   9.039   8.499   7.625   8.557   8.274   7.176 
+ 14.734  13.225  11.352  12.479  12.038   9.741   9.841   9.381   9.271   8.290   9.481  11.505  13.697  13.313  11.865  10.831  10.638   9.836  10.412  10.958  11.129  11.083  10.684  10.102   9.081   9.673   8.900   9.674   9.493   8.249   8.826   8.352   7.881   8.187   8.021   7.439 
+ 11.833   9.136  10.082  10.608  10.579   8.950   8.618   7.703   7.119   7.371   8.260  10.448  11.824  14.417  13.949  11.000   9.941  10.766   9.563   8.832   8.775   9.192   9.742  10.303   9.083   8.068   8.915   9.363   8.373   8.205   8.917   8.134   6.681   6.747   7.624   6.820 
+ 11.227   9.504  10.080  11.150  11.416  11.100  10.133   8.623   7.729   7.540   8.078   6.934   9.142  11.339  10.916   9.651   8.828   8.506   8.243   8.849   8.141   7.370   7.631   8.975   8.610   7.950   8.408   7.655   7.598   6.963   6.862   5.992   6.244   6.592   6.797   5.281 
+  7.590   7.194   7.425   6.868   9.132   9.617   7.396   5.965   6.715   5.707   4.959   4.975   6.523   7.603   8.587   9.669   8.413   5.383   6.741   6.120   6.251   5.509   6.819   6.813   5.399   5.887   5.666   5.439   5.663   6.049   5.382   5.062   5.237   6.146   6.021   4.835 
+  6.475   5.989   6.734   7.016   6.467   6.477   5.638   5.492   5.487   3.914   4.761   5.814   5.576   6.026   6.779   7.353   7.219   6.784   5.614   4.834   6.212   6.260   8.202   6.684   5.328   4.451   4.922   4.825   4.577   5.346   5.032   4.939   4.725   5.160   6.276   4.767 
+  5.578   3.747   5.376   5.648   5.953   6.096   4.627   4.635   3.721   4.325   4.245   4.547   5.182   5.936   4.996   6.892   6.875   7.568   8.063   5.775   6.954   6.591   7.649   7.899   7.098   6.194   7.307   6.443   6.290   6.776   5.527   3.841   4.398   4.541   4.783   3.711 
+  5.637   5.160   5.456   4.232   5.858   7.095   6.918   6.675   5.183   5.132   4.328   5.405   5.409   5.519   5.546   6.891   7.148   8.437   9.385   7.798   8.393   8.294   8.473   8.785   7.646   6.614   8.081   7.635   7.287   8.204   6.086   4.802   4.299   3.792   5.652   5.264 
+  5.543   5.323   5.129   3.271   5.582   7.007   7.112   7.744   7.102   6.493   6.353   6.062   5.937   7.098   7.399   7.028   7.747   7.668   9.219   8.974   8.608   9.499   9.311   9.194   9.688   8.264   9.371   9.608   8.741   8.336   8.682   6.823   4.843   5.077   6.568   7.198 
+  5.505   6.793   5.764   4.516   5.989   5.790   7.632   8.081   7.636   8.325   8.717   8.795   8.488   9.073   7.542   8.143   9.348  10.413  11.101  11.111  11.086  10.449  10.255   9.483   9.660   8.585   9.905  10.033   9.414   8.502   9.312   7.261   5.801   6.529   7.634   7.832 
+  8.346   8.935   8.905   8.611   8.187   9.337  10.238  10.791  10.837  10.126   9.560  10.147  10.528   8.616   9.383  10.415  11.417  12.055  11.229  13.300  13.608  10.482  10.383  10.067  10.103  10.006   9.870   9.806   9.042   9.473  10.925  10.511   8.356   7.609   8.732   7.440 
+  7.040   7.458   7.570   8.009   7.141   8.047   8.751   8.273  10.899  10.437  10.994  12.224  12.392  10.543  11.093  10.925  11.266  12.167  12.796  13.851  13.740  12.961  10.534  11.377  11.613  10.107  11.525  11.563  10.546   9.914  11.760  12.138  10.505   9.090  10.104   9.055 
+  8.283   8.307   7.565   7.420   6.886   9.146   9.369   9.167  11.170  11.891  13.228  14.048  13.548  12.260  12.106  11.262  12.568  13.073  14.262  15.950  15.768  14.239  12.547  11.907  11.574  10.955  12.399  12.330  11.074   9.364  10.534  11.971  10.987  10.388  11.693  10.430 
+  8.452   8.969   7.754   7.476   8.864  10.614  11.085  10.631  10.680  11.920  12.553  13.009  13.930  13.231  13.148  12.374  12.602  13.694  13.948  16.656  16.751  14.432  13.878  13.002  13.445  12.567  11.446  12.704  12.361   9.677  10.057  10.880  11.313  12.611  13.043  10.196 
+  8.595   9.019   8.808   9.557   9.409   9.702  10.237   9.208  10.925  12.056  13.646  13.616  13.969  12.972  12.962  13.173  14.494  14.518  13.916  15.321  16.105  15.653  14.461  13.509  13.868  13.345  11.890  12.203  12.192  11.045  10.577  11.763  11.840  12.951  12.590   9.974 
+ 10.221   9.266   8.922  10.512  10.780   8.973   8.934  11.363  11.071  10.127  13.847  14.952  14.401  13.405  13.370  13.428  14.755  14.681  14.199  15.767  16.003  13.810  13.025  12.769  13.634  14.012  12.121  11.979  12.255  11.850  11.026  11.822  13.309  13.199  12.196  10.340 
+ 10.875  11.838  12.327  11.403  12.831  12.531  13.050  13.021  14.418  14.315  14.608  15.514  15.100  13.703  14.309  13.797  14.763  15.266  16.105  16.320  14.589  13.747  13.767  13.150  13.462  13.652  11.326  10.703  12.313  12.570  11.260  11.385  13.578  14.249  10.629   9.318 
+ 11.375  12.828  13.457  11.499  13.333  13.576  15.034  14.637  16.314  16.619  17.511  17.218  16.586  16.243  16.049  15.851  16.174  16.806  17.377  17.634  16.176  15.524  15.265  14.356  12.971  13.410  12.109  11.270  11.751  12.526  11.679  10.688  13.766  13.586  11.201   8.897 
+ 11.325  13.011  13.595  11.719  13.009  13.271  15.035  14.687  16.838  17.762  18.372  17.187  16.526  16.868  16.624  16.771  17.358  18.257  18.831  18.369  17.156  16.851  17.071  15.991  13.391  14.257  13.282  12.129  13.553  13.779  13.224  12.153  14.047  13.361   9.966   8.949 
+ 10.744  13.173  13.425  11.991  13.122  13.835  14.846  15.484  16.534  18.505  18.260  17.806  16.581  16.370  16.315  16.354  17.320  18.396  19.087  17.708  16.285  16.608  17.107  16.351  13.597  13.930  13.454  12.181  12.759  13.696  13.931  12.629  12.771  12.225  10.158   9.718 
+ 11.558  13.676  13.370  13.005  13.390  14.521  14.896  16.157  16.968  18.680  17.775  17.780  16.188  15.846  15.943  16.468  17.612  18.520  18.615  17.108  16.228  16.857  17.791  16.559  13.725  13.602  13.697  12.851  12.810  14.026  15.078  14.314  14.440  13.568   9.290   9.835 
+ 11.503  13.929  13.707  13.330  13.652  14.855  15.170  17.086  17.816  19.026  17.373  17.271  16.305  16.168  16.529  17.478  18.752  18.753  17.056  16.440  15.736  16.620  17.502  16.310  13.377  12.838  13.141  12.592  12.548  13.219  14.420  14.593  14.704  14.089  10.595   9.720 
+ 11.437  14.279  14.077  13.925  14.420  15.052  16.011  18.241  18.325  19.154  16.964  16.427  15.234  16.593  17.521  18.423  18.345  18.068  15.713  15.535  15.203  15.681  16.753  16.052  13.805  12.574  12.026  11.577  11.361  11.731  12.459  14.096  14.477  13.372  10.670   8.012 
+ 11.824  14.711  14.338  14.750  14.971  15.839  17.140  19.108  18.285  18.284  17.714  17.385  16.947  16.193  18.547  17.809  16.694  15.823  14.640  14.037  14.259  14.491  15.848  15.754  14.064  12.295  11.522  10.804  10.903  11.759  13.390  14.573  15.136  13.829  11.840   8.549 
+ 12.080  14.854  14.736  15.129  15.637  17.484  18.116  19.087  17.765  15.641  16.848  17.176  17.712  17.524  17.994  16.753  14.062  13.677  13.712  12.973  12.776  12.879  14.388  14.945  13.418  12.496  12.054  10.857  10.439  11.290  13.382  13.655  14.338  14.454  13.019   8.487 
+ 11.777  14.929  14.879  15.626  16.402  18.252  17.974  17.243  16.969  15.604  14.658  16.099  17.705  17.407  15.692  14.037  12.716  12.849  12.938  12.131  11.792  11.397  12.529  12.401  13.046  13.260  12.154  10.942  10.650  11.439  14.020  13.641  14.424  15.318  14.303   6.552 
+ 11.584  14.946  14.828  16.436  16.980  18.075  17.810  15.170  15.655  14.335  15.114  16.306  17.975  16.239  13.256  12.876  12.876  11.364  10.992  10.861  10.737  11.054  11.026  11.026  12.786  13.036  11.205  10.272  10.265  10.973  13.440  13.140  14.269  15.971  14.934   7.395 
+ 11.538  14.704  14.714  16.805  17.201  16.538  16.556  15.520  15.448  15.189  14.251  15.755  16.835  15.391  13.284  12.153  11.483  11.953  10.898   9.944   9.837  10.293  10.231  11.021  12.292  12.299  10.085   9.237   9.120   9.950  12.470  12.781  13.741  15.453  14.256   7.694 
+ 11.779  14.496  14.617  17.055  17.288  14.940  15.111  14.830  14.814  15.232  14.090  14.303  15.484  15.553  13.711  11.937  10.703  11.266  10.424  10.151   8.811   9.387  10.050  10.805  11.375  11.449   8.777   7.970   7.957   8.534  11.505  12.032  12.450  13.971  13.024   7.948 
+ 11.641  14.140  14.385  17.122  16.987  13.821  13.655  13.539  13.503  14.241  13.099  12.864  15.145  15.676  14.911  12.514  11.392  10.864   9.894   9.626   9.376   9.354  10.173  11.284  10.291   8.975   7.427   5.757   5.737   6.132   8.231  10.361  10.814  12.053  11.911   7.814 
+ 11.708  13.618  14.331  16.942  16.359  13.763  12.570  12.690  12.715  12.473  11.910  11.546  11.773  14.109  14.093  13.726  13.460  12.308  11.780  10.641  10.712  10.694  11.638  13.003  12.062   7.986   7.148   6.335   6.585   6.434   7.361   9.820   8.768  10.968  11.490   9.073 
+ 12.163  12.836  14.960  16.233  15.576  13.647  12.731  12.463  12.710  12.807  10.894  10.378   9.992  10.760  11.894  12.732  12.762  13.993  14.138  12.828  12.004  12.704  13.285  14.793  13.094   9.538   8.161   7.950   7.693   7.667   8.837  10.807   9.315  10.178  10.383   8.447 
+ 11.579  13.149  14.576  14.821  14.344  13.504  12.452  11.825  11.413  11.510  10.775  10.011  10.115  10.394  10.394  10.879  11.125  11.207  12.007  13.277  13.759  14.724  14.764  15.883  14.418  10.955   9.802   9.539   8.698   9.080  10.199  10.931   9.232  12.021  11.611   8.774 
+ 11.483  13.338  14.562  15.045  13.502  12.367  11.064   9.735   9.860  10.567   9.938   9.059   8.319   9.607   9.781   9.916   9.796   9.797  10.592  10.851  11.040  13.057  14.842  14.843  14.641  14.035  13.307  12.125  11.126  10.864  12.234  12.352  10.673  14.097  13.289   8.952 
+ 11.761  13.495  13.509  14.484  13.377  12.284  11.107   9.500  10.451  10.707   9.615   8.107   9.042   8.285   8.411   8.680   8.802   9.778   9.132   9.084  10.231  11.144  13.960  13.958  12.159  12.133  12.121  11.526  12.180  11.634  12.214  13.446  12.005  13.901  13.739   9.318 
+ 12.688  13.454  14.451  14.985  13.076  11.730  10.558   9.671   9.758  10.828   8.569   8.125   8.155   8.415   8.610   8.760   9.181   9.027   9.192   9.370   9.960  11.482  13.519  13.643  11.613  11.202  11.633  11.578  12.406  12.452  12.873  13.985  12.979  14.656  13.943  10.662 
+ 12.381  14.970  14.566  14.321  13.939  11.909  11.096  11.025  10.646  10.742   9.317   8.995   9.372   8.779   8.229   9.022   9.317   9.373   9.681   9.698  10.567  11.451  14.253  14.113  12.538  12.469  12.713  12.832  14.425  14.663  14.918  15.926  15.310  15.565  14.284  10.343 
+ 12.512  15.309  15.061  13.462  13.767  12.210  11.974  11.499  10.999  10.019   8.762   8.667   8.582   8.207   9.070   9.523   9.900  10.479  10.934  11.228  11.644  12.578  14.788  15.232  13.615  13.423  13.702  13.655  15.167  16.041  16.099  17.231  16.898  16.426  15.419  11.394 
+ 12.501  15.477  15.255  13.712  13.564  12.359  11.994  11.087  10.534   9.619   9.598   9.452   8.454   8.874   9.130   8.995   9.413   9.645   9.654  10.601  11.162  12.883  15.372  16.013  13.410  13.239  13.559  13.857  15.633  16.431  16.516  17.835  17.576  16.641  15.708  11.527 
+ 13.043  15.710  15.319  13.963  13.547  12.788  12.192  10.701   9.969  10.283   9.883   9.556   8.544   9.956   9.129   9.258   9.353   9.534  10.188  10.464  11.268  12.714  15.411  15.996  13.920  13.188  13.380  13.859  15.701  16.567  16.698  18.043  17.629  15.983  14.891  11.151 
+ 13.132  15.704  15.177  14.016  13.465  13.187  12.398  10.789  10.532  11.033  10.161   9.640   8.773   9.767   8.734   9.322   9.173  10.122  10.289  10.914  11.515  12.458  14.572  15.645  14.079  13.151  13.225  13.976  15.691  16.230  16.365  17.999  17.482  14.826  13.649  11.323 
+ 13.015  15.629  15.055  14.106  13.655  13.526  12.859  10.974  10.675  11.183   9.714   9.380   8.466   9.150   9.034   9.430   9.618  10.316  10.098  11.044  11.171  12.702  15.046  15.621  13.920  12.911  13.073  13.971  15.500  15.356  15.648  17.217  16.530  13.495  12.252  11.072 
+ 12.663  15.492  15.100  14.332  14.251  13.583  13.347  11.077  10.435  11.033   8.833   9.092   9.721   9.491   9.714   9.459  10.152  10.477  10.328  10.647  11.136  12.764  15.308  16.085  14.394  12.625  13.277  14.426  15.359  14.957  15.712  17.593  16.692  13.693  11.919  10.413 
+ 12.140  15.251  15.001  14.582  14.805  13.370  13.317  10.937  10.108  10.421   8.549   8.849  10.006   9.826   9.491   9.432   9.965  10.324  10.424  10.921  11.452  12.840  15.430  15.682  14.006  12.668  14.077  14.803  13.647  13.415  14.930  17.294  16.185  13.361  11.246  10.715 
+ 12.022  15.019  14.783  14.779  15.353  13.337  13.346  10.832   9.502   9.766   8.470   8.551   9.665   9.173   9.373   9.448   9.840  10.265  10.816  11.039  11.651  13.474  15.844  15.837  13.661  14.302  15.360  14.963  13.107  12.856  14.381  16.768  15.195  13.060  12.348  12.435 
+ 11.916  14.705  14.534  14.970  15.571  13.041  12.625  10.941   9.030   9.707   9.175  10.247  11.217  11.016  10.425   9.846   9.746   9.559  10.288  10.916  11.741  14.478  15.955  15.036  12.775  13.917  16.395  15.990  14.389  12.674  14.465  17.033  15.369  14.354  13.530  12.263 
+ 12.180  14.216  13.981  15.012  15.478  13.344  12.184  11.410  10.711  10.521  10.050   9.953  10.073  10.453  10.272  10.829  10.955  10.950  10.934  11.175  13.204  15.424  15.504  14.103  12.926  14.179  15.517  14.476  13.088  12.724  13.855  16.593  14.694  14.674  15.159  13.738 
+ 11.102  13.589  13.112  14.133  14.537  12.761  13.308  10.952  10.612  11.042  10.291  10.102   9.227  10.372  10.047   9.906  10.354  11.265  12.130  12.647  14.334  15.958  13.962  13.343  12.269  15.458  16.610  14.429  12.548  11.671  12.963  14.746  13.839  14.190  15.049  14.362 
+ 10.482  13.492  13.327  14.312  14.606  13.262  13.143  10.280  10.987  11.133  10.769  10.210   9.598  10.443  10.538  10.522  10.617  10.701  11.806  12.562  14.623  15.527  13.771  12.633  11.895  14.141  15.342  13.294  12.257  11.867  13.346  14.949  14.015  14.723  15.208  15.567 
+ 10.212  13.372  13.196  14.293  14.599  13.412  13.467  10.318   8.844  11.260  11.171  11.486   9.960  10.145  10.714  10.355  10.226  11.202  11.876  12.044  14.478  15.036  13.521  12.305  12.242  13.671  14.997  13.639  12.948  12.547  14.753  16.628  14.653  15.495  15.950  16.027 
+ 10.930  13.952  13.822  14.506  14.976  13.547  13.131  10.693  11.945  12.104  10.781  10.840  11.300  10.877  10.219  10.265  10.711  11.208  12.226  13.028  14.370  15.157  14.460  12.789  11.903  13.732  15.156  14.210  12.850  12.164  13.826  15.679  14.515  14.692  16.734  16.589 
+ 10.737  14.054  14.129  15.418  15.547  12.951  12.975  12.144  11.463  10.923  10.949  11.430  10.976  10.982  11.377  11.180  11.060  11.899  12.126  13.376  14.596  15.353  14.492  13.118  12.371  13.251  14.652  14.226  13.015  13.224  14.075  16.360  14.901  15.251  15.311  14.805 
+ 12.178  14.517  14.154  15.791  15.685  12.207  12.603  12.319  11.236  11.137  10.922   9.949  11.047  11.368  11.084  10.539  10.643  11.485  12.025  12.958  14.537  16.030  15.567  14.275  13.454  14.559  15.711  14.756  13.737  13.738  14.607  16.677  14.499  14.729  15.828  14.652 
+ 12.064  14.908  14.577  15.809  15.804  13.776  12.803  11.303  11.972  12.238  10.769  10.997  10.946  11.146  11.271  11.056  10.905  11.735  12.456  13.068  13.875  16.201  16.125  14.147  13.244  13.472  14.943  14.069  14.230  14.653  15.469  15.186  13.491  15.148  14.331  13.080 
+ 12.956  15.286  14.705  15.840  15.620  13.894  12.831  11.739  11.724  12.020  11.575  10.396   9.620  10.787   9.736  10.615  10.457  10.938  11.323  11.945  13.642  16.043  16.872  15.421  14.120  14.551  15.033  13.886  13.859  14.672  16.316  16.125  13.999  14.622  14.010  12.902 
+ 13.445  15.402  14.647  15.852  15.193  13.622  12.229  11.728  11.268  11.270  11.532  10.026   9.995  10.533   9.808  10.122  10.444  10.901  11.580  12.230  13.307  15.576  16.684  16.148  14.948  15.351  15.745  14.060  14.083  15.175  16.768  15.878  14.380  14.434  13.246   8.859 
+ 13.653  15.234  14.449  15.730  14.621  13.525  11.918  11.451  10.711  10.763  11.028   9.297   9.869  10.030  10.090  10.310  10.489  11.321  11.517  12.446  13.438  15.272  16.329  16.126  15.256  15.494  14.775  13.626  13.628  14.971  16.858  15.913  14.639  14.858  14.109   9.324 
+ 13.871  15.047  14.323  15.388  13.936  13.243  12.147  11.622  10.739  11.077  10.827   9.198  10.044  10.044   9.862  10.700  10.149  11.601  11.676  12.767  13.598  15.133  15.887  16.064  15.455  14.336  13.419  12.515  12.604  13.964  16.155  15.440  14.461  14.906  14.355   9.507 
+ 14.005  14.881  14.338  15.078  13.454  12.861  12.301  11.457  10.766  11.303  10.383   9.306  10.004  10.081   9.839  10.706  10.182  11.994  11.986  13.828  14.115  15.041  15.282  15.565  14.832  13.626  12.115  11.490  11.796  13.213  15.496  14.904  14.170  14.571  14.152   8.978 
+ 13.940  14.666  14.145  14.640  13.213  12.700  12.318  11.053  10.675  11.217   9.772   9.209   9.891   9.996  10.094  10.780  10.935  12.304  12.739  14.465  13.937  13.890  14.531  15.188  13.768  11.939  10.920  10.439  10.961  12.576  15.381  14.844  13.910  13.877  13.973   9.292 
+ 13.868  14.271  14.036  14.150  13.145  12.591  12.059  10.509  10.115  10.728   8.475   9.904  10.013   9.942  10.513  10.566  11.710  12.080  13.347  13.548  12.334  12.258  13.273  14.756  12.747  10.379   9.430   9.071   9.818  11.645  14.654  14.117  13.371  13.205  13.283   8.580 
+ 13.778  14.021  13.754  13.519  13.214  12.463  11.913   9.910   9.544   9.920   8.475  10.493  10.196   9.971  10.421  10.737  12.578  12.033  12.912  11.454  10.987  10.989  12.312  14.688  12.604   9.996   8.869   8.515   8.919  10.540  13.767  13.574  12.963  12.679  12.465   8.176 
+ 13.662  13.907  13.569  13.382  13.134  12.313  11.742   9.524   9.713   9.983   8.470  10.277   9.733  10.087  10.560  11.090  13.540  12.529  11.856  10.353  10.298  10.276  12.063  14.015  11.696   9.545   8.953   8.251   8.779   9.881  13.293  13.374  13.008  12.205  11.331   8.195 
+ 13.563  13.753  13.629  13.573  13.117  12.131  11.768   9.693  10.131  10.455   7.805  10.078   9.831   9.813  11.027  11.341  13.726  12.268  11.215  10.417  10.168  10.218  11.834  12.817  11.244   9.300   8.860   8.047   8.886  10.081  13.441  13.630  13.318  12.394  11.268   8.804 
+ 13.498  13.759  13.798  13.964  13.355  12.243  11.821   9.949  10.346  10.594   8.304  10.147  10.087  10.109  11.104  11.341  13.837  12.969  11.781  10.847  10.837  10.841  12.447  13.481  11.501   9.791   9.149   7.728   8.820  10.433  13.806  13.990  13.911  13.364  10.485   8.209 
+ 13.558  13.775  14.160  14.322  13.538  12.411  12.266  10.360  10.733  10.862   9.098   9.722  10.120   9.990  11.057  10.949  13.013  13.585  12.735  11.619  11.159  10.971  12.451  13.593  12.013   9.824   9.815   7.813   8.614  10.381  13.518  13.628  14.164  13.670  10.019   8.116 
+ 13.605  13.791  14.515  14.546  13.651  12.660  12.666  10.713  11.054  10.972  10.095   9.561  10.271   9.730  10.962  11.048  12.229  13.747  13.535  13.102  11.788  11.634  12.901  14.325  13.079  10.478  10.487   8.469   8.877  10.420  13.281  13.137  13.500  13.026   8.718   8.127 
+ 13.455  13.727  14.761  14.619  13.631  12.761  12.625  10.394  11.219  11.056  10.478   9.384  10.445   9.582  10.594  10.764  11.680  12.826  14.257  14.288  12.580  12.130  13.177  14.136  12.918  10.320  10.396   9.394   8.349   9.764  11.759  11.522  12.567  12.015   8.689   8.167 
+ 13.406  13.736  14.725  14.109  13.352  12.806  12.362  10.107  11.122  10.845  10.264   8.860  10.179   9.181  10.205  10.382  11.450  12.252  13.901  14.894  13.096  12.151  13.743  15.225  12.967  10.127  10.113   9.133   8.808   9.437  12.284  11.999  12.846  12.609   9.663   8.746 
+ 13.321  13.709  14.549  13.646  13.171  12.781  12.154  10.036  11.121  10.829  10.233   9.438  10.174   9.406   9.964  10.044  10.837  11.372  12.792  14.219  13.200  12.578  14.003  15.299  12.698  10.215   9.361   7.988   8.974  10.590  13.016  12.209  13.163  12.703   8.981   8.459 
+ 13.236  13.447  14.221  13.089  12.951  12.535  11.843   9.633  10.918  10.727  10.098   9.103   9.412   8.943  10.023   9.727  10.524  10.486  11.784  12.944  13.351  12.845  13.891  14.164  12.041   9.999   9.626   6.922   7.304   9.549  11.842  12.018  13.887  13.063   8.530   7.252 
+ 12.951  12.968  13.775  12.669  12.751  12.114  11.244   8.506  10.261  10.413   9.979   9.498   9.062   8.848   9.768   9.302  10.105  10.111  11.816  13.201  12.914  12.492  13.674  13.867  11.526   9.813   9.146   7.613   8.206   9.984  11.518  10.964  12.709  11.751   8.715   8.306 
+ 13.376  12.588  13.664  13.204  13.247  11.919  10.142   9.159  10.492  10.146  10.119  10.171   8.501   8.811   8.579  10.076  10.197  11.170  12.220  12.699  11.719  11.414  12.468  13.899  12.026   9.635   9.380   8.095   8.842  11.119  12.736  11.210  11.861  11.326   9.975   9.890 
+ 12.433  14.347  14.881  13.968  14.040  11.649  10.306  10.433  11.345  10.851  10.868   9.377   8.816   9.632   9.879  10.564  12.372  13.354  12.173  11.553  10.076  10.715  12.284  13.403  10.426   9.269   8.473   8.288   8.421  10.768  12.571  10.609  11.616  11.208   9.459   9.456 
+ 14.430  13.746  14.243  13.834  13.188  11.664  11.065  10.926  11.868  10.962   9.733   9.744   9.582  10.110  10.662  11.856  12.588  13.261  11.176  10.464   9.622  10.096  11.801  13.365  11.004   7.687   6.861   6.988   7.795  10.288  11.066   9.881  11.459  11.418   9.790   9.922 
+ 15.255  14.922  12.647  12.718  13.331  13.357  12.756  11.271  12.408  11.381   9.943  10.261  10.577  11.261  11.581  12.767  11.727  10.483   9.993   9.508   9.037   9.263  10.080  11.784  10.419   6.484   6.566   6.844   8.439  10.370  11.394  10.068  11.810  12.441  10.016  10.167 
+ 13.680  13.375  14.495  14.502  14.775  14.025  13.655  11.779  12.318  12.100  11.450  11.410  11.396  12.485  13.662  11.800  11.315  10.239   9.702   9.071   9.009   9.062  10.033  10.662   9.432   6.455   5.241   6.151   7.553  10.781  11.228   9.205  10.740  11.321  10.529  10.723 
+ 14.305  14.044  14.045  13.500  13.771  14.538  14.667  12.288  13.012  12.859  12.421  12.068  13.172  14.014  14.432  11.973  10.866  10.648   9.812   9.398   9.678   8.979  10.231  11.474  10.013   7.291   6.240   7.050   7.726   9.516   8.963   8.340   8.955   9.612   9.523  10.041 
+ 13.759  14.264  14.008  13.470  13.714  15.415  15.876  13.250  13.700  13.691  13.270  12.710  14.435  13.231  12.739  11.598  10.877  10.876   9.659   9.569   9.956   9.371  10.160  11.881  11.042   8.718   6.866   8.077   9.299   9.306   7.320   6.329   9.211   9.914  11.488  11.760 
+ 13.857  13.903  13.767  13.542  13.396  15.891  16.635  14.452  14.440  14.456  14.179  13.876  15.765  13.537  12.270  11.605  11.043  11.277   9.796   9.835   9.406   9.209  10.117  11.325  11.650   9.694   7.684   8.947  10.912  10.957   7.283   8.095   9.815   8.882  11.170  11.210 
+ 13.794  13.861  13.798  13.413  12.667  16.014  16.688  14.846  15.125  14.989  14.728  15.155  16.004  13.183  11.561  10.810  10.790  10.967   9.925   9.954   9.690   9.492  10.280  11.186  12.561  11.386   9.705  11.207  12.587  11.008   7.572   9.543  10.335   8.286   9.737  10.316 
+ 13.526  13.464  13.415  12.569  12.281  15.556  15.607  15.559  15.763  15.229  14.927  15.389  15.019  12.531  11.024  10.346  10.502  10.546  10.166   9.675  10.153   9.473  10.455  10.884  12.234  11.212  10.991  12.288  12.786  10.782   8.410   9.037   9.423   9.126  11.494  11.440 
+ 13.434  13.172  13.221  12.219  12.394  14.897  15.090  16.094  15.829  15.145  15.245  15.884  13.733  11.643  11.590  10.725  10.490   9.917  10.155   9.569  10.221   9.531   9.806  10.212  10.259  10.398  11.239  12.919  11.954   9.812   7.157   6.996   7.832   8.317   9.940  10.026 
+ 13.441  13.199  13.088  12.502  12.430  14.720  15.059  16.475  16.259  15.590  15.181  16.696  15.996  13.261  12.654  11.560  11.310  10.705  10.002   9.636   9.859   9.592  10.132  10.074  10.488  10.371  11.113  13.069  12.596  10.981   7.868   8.772   9.897   8.884   8.318   8.547 
+ 13.438  13.164  13.179  12.542  12.050  14.248  14.864  16.555  16.412  16.099  15.051  15.702  17.029  15.964  13.991  12.807  12.308  11.574  10.251   9.888   9.811  10.362  10.437  11.335  10.649  10.833  12.224  13.272  12.712  10.436   9.001   9.588  10.590   9.642   8.627   8.435 
+ 13.355  13.095  13.391  12.824  11.977  13.905  14.598  16.238  16.959  16.638  15.154  14.853  16.893  16.132  15.141  13.893  12.443  12.257  10.821  11.086   9.879  10.287  10.672  10.487  10.034  10.765  11.610  12.669  11.474   9.117   9.156   9.553  10.742   9.840   8.326   7.875 
+ 13.345  12.984  13.530  12.732  11.762  13.783  14.370  15.744  17.175  16.362  14.655  14.552  15.277  15.540  16.730  15.105  13.253  12.549  11.557  11.137  11.091  10.655  11.319  11.415  11.820  12.775  13.519  13.048  11.300   8.668   9.475   9.664  10.712  11.289   9.656   7.945 
+ 13.190  12.874  13.591  12.383  11.893  13.759  14.313  15.241  16.946  15.769  14.038  14.231  14.505  14.536  16.329  16.135  14.205  12.820  12.298  11.310  11.195  11.364  11.165  11.329  11.683  12.683  13.715  12.686  10.731   8.273   8.711   8.725   9.772  10.460   7.916   6.319 
+ 12.974  12.773  13.379  12.227  11.973  13.438  14.733  15.904  16.315  14.864  13.782  13.736  13.739  13.831  15.418  16.285  14.929  13.144  12.225  11.759  11.666  11.264  10.019  10.253  10.814  12.517  13.237  11.752  10.569   9.278   8.701   9.258  10.993   9.885   7.230   6.455 
+ 13.101  12.893  12.729  11.388  11.626  13.034  12.102  12.380  13.009  11.296  11.727  11.470  11.082  11.306  12.232  13.195  11.783  11.906  11.340  10.632   9.551   8.403   8.997   8.892  10.386  12.279  11.764  10.393   9.942   9.732   7.314   8.907  10.011   9.556   7.075   6.108 
+ 13.600  13.393  13.141  12.381  12.508  13.723  12.850  12.190  12.703  11.195  11.521  11.102   9.973   9.801  11.010  11.704  10.933  10.754  10.160  10.997   9.606   8.346   9.262   9.893  11.448  12.312  11.612   9.963   9.411   8.981   7.558   9.352   9.854   9.137   7.215   6.002 
+ 13.678  13.215  13.007  12.181  12.689  13.867  12.777  12.105  12.399  11.348  11.238  11.393   9.783  10.337  11.033  11.605  11.266  11.088  11.130  10.859  10.578  10.124  10.102  11.202  12.610  12.885  11.515   9.901   9.605   9.019   8.127   9.491   9.695   9.187   7.793   6.719 
+ 13.645  13.334  13.015  12.239  11.982  14.241  15.385  15.626  15.125  13.909  13.363  13.234  12.563  12.522  13.478  15.638  16.522  15.610  14.613  14.703  14.949  15.556  15.084  12.862  13.099  13.573  12.901  10.989   9.235  11.357  11.984  13.818  13.812  11.770   9.591   6.673 
+ 13.407  13.065  12.994  12.766  12.593  14.384  15.001  16.678  15.987  14.967  13.782  13.883  13.205  13.079  13.875  15.200  16.254  16.029  14.770  13.478  13.718  14.510  14.472  12.436  12.297  13.233  13.433  10.990   9.707  11.808  11.532  13.092  12.814  11.140   8.907   5.562 
+ 13.305  12.888  13.344  12.327  12.463  14.134  15.338  16.083  17.100  15.435  13.859  13.933  13.417  12.810  13.330  13.488  15.186  15.785  14.895  12.939  12.485  12.733  13.658  12.878  11.729  13.151  13.562  11.991  11.073  12.176  10.823  11.806  11.921  10.957   8.346   5.055 
+ 13.441  12.805  13.409  12.175  12.550  14.303  15.397  16.225  17.103  15.139  14.048  13.780  13.320  12.700  13.274  13.074  14.403  15.735  15.949  13.736  12.749  12.913  12.928  12.016  12.788  12.807  12.898  12.829  11.898  11.550  10.415  11.312  11.211  10.028   7.600   4.994 
+ 13.535  12.943  13.479  12.298  12.914  14.458  16.051  16.429  16.261  14.280  12.858  12.906  12.610  12.086  12.566  12.949  13.896  14.919  15.162  12.328  11.797  12.372  12.001  11.629  12.857  12.265  12.039  13.007  12.277  10.300  10.172  11.124  10.239   8.814   7.024   5.957 
+ 13.438  13.163  13.568  12.630  13.635  15.186  15.907  15.327  14.484  13.559  12.943  12.155  11.649  11.686  12.070  13.091  14.565  14.232  13.257  11.688  11.472  11.822  12.214  12.489  11.848  10.553  10.767  11.602  11.186   9.117   9.269  10.644  10.709   9.000   6.389   5.945 
+ 13.633  13.633  13.209  12.637  13.113  11.916  12.407  11.576  11.398   9.675  11.151  10.682   7.376   8.317  10.030  11.828  11.622  11.148   9.185   9.083   8.711   9.706  11.061   9.858   8.349   6.631   7.377   9.141   9.155   8.096   6.423   8.680   9.548   9.109   7.014   5.903 
+ 13.806  13.404  12.900  12.754  12.953  12.170  11.230   9.472  10.856   9.689  11.060  10.838   8.214   6.928   9.352  11.629  11.011  11.262  10.167   9.586   8.758   9.713  10.990  10.391   9.101   7.325   6.467   7.483  10.176  10.110   7.212   7.904   9.050   8.383   6.619   6.490 
+ 13.808  13.213  12.615  12.497  12.776  12.113  11.400  10.667  10.828   9.262  11.090  10.757   7.946   6.612   8.404  11.456  10.687  11.386   9.588   9.404   9.687  10.455  11.227  11.533   9.641   7.605   5.073   6.204   9.225  10.442   8.033   8.821  10.019   9.048   7.564   7.171 
+ 13.821  13.077  12.447  12.288  12.684  12.031  10.859  10.834  10.600   9.279  11.135  10.438   7.425   6.916   8.576  11.228  10.584  11.024   9.538   9.689   9.930  10.003  10.882  12.021   9.927   8.356   5.399   6.124   9.035  10.118   8.912   8.656  10.253   9.493   7.760   7.112 
+ 13.840  13.078  12.345  12.103  12.596  11.947  10.901  10.470  10.345   9.109  10.955  10.393   7.404   6.562   8.010  11.076  10.549  11.096   9.236   9.050   9.256   9.401  10.727  12.332  10.734   8.905   4.793   5.873   8.606  10.322   8.974   8.625  10.098   9.599   8.697   8.347 
+ 13.891  13.253  12.474  11.947  12.562  11.830  10.871  10.099  10.370   8.905  10.635  10.385   7.916   7.801   9.143  11.536  10.589  10.919   9.773   9.128   9.336   9.755  10.914  12.313  10.819   8.905   6.312   5.798   7.990   9.886   9.014   9.938  10.704   9.525   8.381   8.453 
+ 13.879  14.006  12.714  12.700  13.227  13.230  14.042  13.687  13.574  12.726  10.937  12.004  10.850  10.909  11.510  12.378  13.159  13.395  14.259  14.279  13.814  11.598  11.698  13.600  13.189  11.329  10.391  10.223  10.421  12.088  13.073  12.184  11.620  10.439   9.626   9.617 
+ 13.406  12.782  13.222  12.534  12.803  15.052  16.012  16.068  14.387  13.106  12.255  11.832  11.383  11.325  11.677  11.733  12.221  12.082  12.956  13.852  14.839  14.410  13.277  13.661  14.373  13.719  11.493  11.580  11.683  13.156  15.115  13.874  12.307  10.797  10.413  10.565 
+ 13.222  13.001  13.387  12.692  12.872  14.984  16.087  16.642  15.180  13.631  12.766  11.933  11.769  11.471  11.593  11.473  12.027  11.771  12.229  12.625  13.362  15.082  14.237  14.313  15.506  15.445  13.292  12.445  12.401  13.267  15.220  15.156  13.431  11.783   9.799   9.521 
+ 13.102  12.932  13.405  12.776  13.217  15.099  16.415  16.807  15.306  14.209  12.727  11.992  11.975  11.345  11.704  11.563  12.321  12.011  12.374  12.461  13.626  16.030  15.467  14.543  15.110  15.858  13.557  12.796  12.735  13.983  14.993  15.319  14.579  13.016   9.939   9.513 
+ 13.033  13.037  13.448  12.862  13.476  15.286  16.687  16.699  15.039  14.276  12.919  12.121  11.914  11.531  11.699  11.860  12.436  12.256  12.564  12.659  13.283  15.192  14.841  14.619  14.779  15.382  14.575  13.392  13.330  14.390  16.239  16.817  15.984  14.502  10.973   7.699 
+ 13.141  12.940  13.313  12.814  13.869  15.582  16.590  16.474  14.606  13.936  12.459  12.091  12.192  11.185  11.780  11.328  12.123  11.529  11.797  11.526  12.217  14.113  14.860  14.803  14.169  15.121  14.240  13.583  13.738  14.455  15.872  16.432  15.708  14.536  11.886   8.166 
+ 13.221  13.059  13.273  12.671  14.137  16.038  16.065  16.071  14.335  13.331  11.891  11.834  11.842  10.570  11.435  10.954  11.795  11.203  11.755  11.241  12.069  13.707  15.175  14.627  14.310  14.505  14.708  14.393  14.222  14.525  15.943  16.737  15.998  14.730  12.102   8.700 
+ 13.308  13.102  13.316  13.031  14.384  16.372  15.701  14.966  14.058  13.232  11.703  11.343  11.497  10.247  11.145  10.504  11.189  10.718  11.242  10.699  11.468  12.827  14.583  14.993  14.477  14.752  15.170  14.479  14.181  14.651  15.878  16.605  15.613  14.759  12.876   9.507 
+ 13.250  13.107  13.244  13.434  14.559  15.943  15.227  13.476  12.863  12.278  10.706  11.174  10.541   9.950  10.683   9.881  10.899  10.331  10.550  10.303  10.563  11.768  13.783  14.271  14.049  14.140  14.574  13.994  13.526  13.682  15.188  16.347  14.896  14.094  11.813   9.657 
+ 12.662  12.519  12.119  14.213  14.925  14.461  13.340  12.921  11.607  12.022  10.210  10.092   9.223   9.616   9.023   8.931   9.699   8.820   9.310   9.138   9.793  11.030  13.697  14.637  13.770  13.501  13.785  13.338  12.898  12.603  14.117  15.884  14.434  13.260  10.634   9.815 
+ 11.507  11.021   9.998  11.912  11.190  10.598  11.893  11.207   8.449   8.992   8.550   8.086   7.193   7.281   6.139   6.838   7.665   7.832   8.025   7.923   8.238   8.927  11.651  12.577  12.101  11.538  12.037  11.779  11.299  11.231  12.607  14.095  12.503  10.553  10.074   9.358 
+  9.699  10.191  10.871   9.154   8.572   6.955   8.544   8.878   6.718   8.053   8.465   7.191   4.336   4.942   6.083   6.090   6.206   5.865   5.473   6.112   6.376   7.047   7.925   8.346   8.406   8.998   9.761   9.431   8.335   7.231   8.147   9.672   8.664   8.011   9.551   9.870 
+  7.568   9.795  10.154   8.816   8.867   8.105   8.055   8.604   5.567   5.199   4.675   3.470   4.139   5.007   5.666   4.815   4.892   4.910   4.631   4.749   5.054   6.047   5.368   6.177   5.782   7.116   8.837   9.024   7.106   5.368   7.299   8.371   7.478   7.134   9.208   9.624 
+  5.519   7.028   7.509   8.210   8.030   9.109   8.407   8.742   6.778   5.375   5.147   4.093   3.708   3.706   5.168   5.018   6.285   4.276   4.523   4.623   3.220   4.485   5.187   5.605   5.254   4.974   4.870   5.559   4.371   5.070   6.970   7.364   5.754   5.753   4.561   3.480 
+  6.115   6.016   7.663   7.811   7.600   8.396   8.332   8.559   6.613   5.281   3.296   4.594   4.508   4.499   4.932   5.146   4.868   4.211   4.391   4.352   5.085   5.121   5.260   5.604   4.079   5.256   5.489   4.872   5.256   4.999   6.134   7.107   6.031   5.868   3.849   2.787 
+  5.672   5.660   6.772   6.918   7.483   8.607   7.662   7.584   7.200   6.091   5.670   5.741   6.021   6.063   5.954   5.409   5.451   5.677   6.027   6.058   6.023   6.390   6.368   6.317   7.201   7.966   8.249   8.157   7.712   7.015   6.920   6.717   6.580   6.583   5.644   4.288 
+  8.472   8.144   7.464   8.402   7.854   7.870   8.980   9.617  10.865  10.561   9.606   9.537   9.770   9.772  10.522  11.231  11.843  10.874  11.008  11.127  10.971  11.862  11.742  12.688  12.784  13.063  14.348  15.021  13.782  11.527  12.928  12.372  11.652  11.869  11.967  10.743 
+  7.009   7.378   7.670   9.760  10.677  10.577  10.779   9.617  11.128  12.330  11.468  12.045  10.447  11.143  11.484  12.559  12.316  12.389  12.718  12.488  11.805  13.467  13.761  14.487  14.362  15.324  15.463  16.620  16.208  14.505  14.140  14.588  13.786  13.350  13.529  12.639 
+ 11.676  11.976  11.437  13.085  13.799  13.211  12.293  11.946  10.399  10.865  10.573  10.787  10.232  10.177  10.556  10.589   9.850   9.962   9.928   9.083   9.448  10.894  12.340  12.634  12.057  12.255  13.747  14.631  14.527  14.136  15.354  16.265  15.230  13.232  12.881  13.290 
+ 12.365  13.318  13.235  14.409  14.468  16.036  15.195  13.192  11.320  11.319  11.397  10.707   9.668   9.532   9.308   8.710   9.472   9.545  10.173  10.314  11.158  12.707  11.916  11.315  10.980  11.342  11.925  12.647  12.507  12.691  14.829  15.833  14.157  12.107  11.095  11.947 
+ 12.799  13.014  13.794  13.630  15.175  16.083  16.380  14.581  12.351  11.413  11.950  11.684  10.457   9.914  10.417   9.638   9.828  10.209  10.464  12.164  14.039  14.442  12.289  11.645  10.896  10.970  12.437  12.960  12.027  11.762  13.244  13.821  12.948  12.097  10.145   8.822 
+ 12.430  12.270  13.212  13.108  14.563  16.330  15.469  14.183  12.763  12.462  11.759  11.246  11.079  10.668  10.685  11.096  10.666  11.265  11.509  13.411  14.685  14.228  11.948  11.448  11.013  11.902  13.536  12.949  11.849  11.124  12.678  13.460  12.510  12.296  10.562   7.634 
+ 11.253  12.067  12.251  12.779  14.944  16.223  15.593  13.634  12.475  12.193  11.374  10.928  10.855  10.947  10.772  10.870  11.149  11.246  12.386  13.990  14.710  13.350  11.986  11.371  11.743  12.508  13.727  13.564  12.410  12.054  12.909  13.624  12.474  11.913  10.434   6.681 
+ 11.295  11.906  12.639  13.380  13.614  13.627  14.279  12.905  11.475  11.339  10.928  10.330  10.665  11.107  10.720  10.909  11.410  11.598  13.549  14.597  14.199  12.631  11.908  11.761  12.358  12.688  13.441  13.510  12.007  11.634  12.459  13.487  12.043  11.033  10.057   6.140 
+  9.432   9.179   8.288   9.416  10.498   9.851  10.559   9.685   8.384   6.686   5.073   6.321   6.300   6.509   6.566   6.538   7.063   7.827  10.389  11.409   9.457   8.018   7.547   7.757   8.239   8.684  10.269   9.758   9.546   9.701   9.611   9.964   9.119   8.038   7.108   6.312 
+ 10.040  10.581   9.728   7.668   7.716   8.742   9.696   8.852   6.972   6.377   6.100   4.846   5.478   5.810   6.456   5.682   6.427   7.247   9.962   8.964   7.504   8.199   7.574   7.648   7.639   7.623   8.867   8.932   9.193   9.713   9.291   8.904   7.554   6.754   5.788   4.866 
+  8.004   7.625   7.779   7.190   6.787   6.677   9.426   8.609   6.051   6.591   6.220   6.078   6.662   6.960   7.436   7.507   7.571   7.672   8.493   8.191   8.039   7.468   6.965   7.133   7.058   6.249   6.552   7.000   6.249   5.636   5.769   6.544   5.635   5.230   4.803   2.927 
+  5.100   5.069   6.548   8.626   9.456   9.194   9.819   9.463   7.703   9.734  10.495  11.074  11.247  10.093  10.942  12.298  12.611  11.585  10.681  11.870  11.555   9.552  10.680   9.460   9.124   8.946   7.836   8.855   8.409   8.103   6.960   7.133   6.403   7.004   6.260   5.552 
+  5.152   6.181   6.779   7.817   8.731   8.043   7.802   8.138   8.029   8.416   8.203   9.172   9.637   7.593   8.757  10.444  10.962  10.186   9.682  10.131  10.348   9.759   9.941   9.036   9.599   9.051   8.321  10.009  10.742  10.901  10.439   9.291   9.400   9.250   9.863   9.372 
+  5.591   7.365   8.258   7.589   7.296   8.373   9.246   8.920   9.271   8.752   8.229   8.871   9.015   8.379   7.989   7.765   8.358   9.233   9.055   8.331   8.149   8.902   9.287   8.988   9.284   8.867   8.421   9.481   9.788  10.173  10.466  10.543  10.230  10.041   9.539   8.658 
+  8.714   8.162   7.535   8.809   7.885   7.227   9.282   9.209   9.360   8.820   9.373   9.568  10.000   9.311   9.072   9.570   9.208  10.272  11.387  11.310  10.912  10.688  10.723  11.086  10.946  10.968  11.236  12.024  10.863  10.817  11.372  11.274  11.306  10.598  10.662   9.544 
+  9.199  10.240   9.804   9.940   9.735   8.823  10.013  10.171  11.324  11.100  11.380  12.283  11.539  10.943  10.069  11.065  12.874  13.100  13.473  13.045  12.262  12.878  13.570  13.222  12.006  12.468  12.854  13.600  12.789  11.946  12.200  12.951  12.584  11.673  11.754  10.724 
+ 13.004  12.105  10.608  11.167  11.211   9.884  11.308  10.623  10.962  11.652  11.950  12.087  11.206  10.677  11.384  12.690  13.767  13.019  13.290  12.296  11.517  12.926  13.541  12.904  11.650  12.318  12.878  12.638  12.447  12.231  12.077  12.840  12.107  11.831  11.534  11.129 
+ 14.099  13.913  14.296  14.208  13.860  12.616  12.597  12.906  11.819  11.220  11.943  12.764  11.175   9.669  11.676  13.453  13.939  13.408  13.813  13.105  12.794  12.524  12.023  12.117  13.142  12.231  12.266  12.201  11.910  11.878  12.601  11.789  11.449  11.555  12.084  11.891 
+ 14.661  15.991  16.951  16.708  15.919  14.709  13.964  13.312  12.953  12.716  12.129  12.236   9.948  10.129  13.348  13.943  14.975  14.041  12.490  13.566  14.145  13.059  12.666  12.888  13.575  13.875  13.538  13.389  13.550  13.611  12.671  12.468  12.215  12.079  12.565  11.628 
+ 14.988  14.862  15.720  13.987  14.278  13.268  12.081  10.973  11.958  11.261  11.885  11.641  10.298  11.071  12.530  12.733  14.756  14.516  13.429  12.035  12.986  13.383  12.999  11.949  12.620  13.270  13.527  13.153  13.311  13.035  13.448  13.419  11.902  11.717  11.704  10.838 
+ 13.276  13.845  14.923  14.528  13.906  13.514  12.976  10.483  10.431  10.727  11.276  10.204  10.662  10.722  12.595  13.522  14.171  13.554  13.315  12.982  12.137  12.602  13.471  11.534  10.928  11.204  11.354  11.517  12.146  12.771  12.106  11.070   9.364  10.003  10.846   9.997 
+ 12.986  11.772  12.676  13.994  14.726  15.609  15.018  14.083  14.007  13.667  13.195  13.537  13.355  13.962  14.909  15.728  15.366  14.413  14.008  13.767  12.518  11.326  11.919  10.075   9.883   9.612  10.613  10.686  10.966  11.106  10.241  10.025   9.575   9.211   8.227   8.591 
+ 14.184  14.156  13.574  14.046  15.500  15.918  15.167  14.537  13.765  12.854  12.708  13.455  13.118  14.139  14.961  15.937  14.712  13.808  13.697  13.178  10.828   9.327   9.036   9.721   9.490   9.015   9.712   9.538   9.488   8.698   8.019   8.192   7.386   6.960   6.637   5.891 
+ 14.216  15.545  14.657  13.770  14.412  14.896  13.402  12.818  12.428  12.880  11.665  12.603  11.835  13.066  13.821  14.251  12.250  11.988  11.999  10.736   9.328   7.876   7.149   7.198   7.366   6.894   7.614   7.646   8.252   8.186   6.936   6.694   5.958   5.554   6.637   5.903 
+ 14.560  13.189  13.041  11.870  10.223  11.389  11.667  11.127  11.309  10.510   8.444   9.487   9.324   9.672   8.990   8.961   8.344   8.239   8.030   7.540   6.851   5.967   5.183   5.375   5.259   5.171   5.059   5.643   5.301   5.896   4.944   5.395   5.568   4.884   5.330   4.355 
+ 10.225  10.397   9.722   8.025   7.626   7.664   8.290   7.697   6.666   4.914   5.240   5.384   7.359   7.268   6.946   7.498   6.743   6.373   6.108   4.984   4.396   3.949   4.706   4.924   4.054   3.540   5.143   5.002   4.392   4.387   4.175   4.433   3.309   4.608   4.264   2.610 
+  7.893   8.262   8.374   6.145   6.207   7.333   8.254   6.944   5.606   5.565   5.734   5.504   6.338   6.320   6.271   7.609   5.594   5.866   5.039   4.673   5.197   3.705   5.007   3.987   3.941   4.252   4.798   4.823   4.295   3.336   3.790   4.373   3.293   3.625   3.911   3.228 
+  6.754   6.086   5.473   4.499   6.316   8.067   8.426   7.601   5.265   5.143   5.156   5.284   4.109   5.228   6.140   7.569   5.915   4.989   5.781   5.048   4.605   4.007   4.624   5.267   4.674   4.611   3.396   4.377   4.780   4.401   4.117   4.458   3.584   3.748   3.637   3.085 
+  6.316   6.130   4.191   6.121   6.815   6.732   5.848   6.433   4.936   5.065   4.357   4.228   4.508   4.813   5.711   6.271   6.037   5.662   4.407   5.145   5.263   4.515   3.403   3.464   4.058   4.635   4.191   2.993   4.298   5.233   4.662   3.775   3.778   4.073   4.405   3.889 
+  5.612   6.434   6.581   5.644   6.083   7.585   7.028   5.326   4.377   5.821   4.883   4.663   4.360   6.282   5.854   6.192   6.371   5.730   5.102   3.745   4.296   4.808   4.371   4.539   4.971   4.806   4.292   3.826   3.496   3.547   4.235   4.793   4.939   4.370   3.640   3.144 
+  7.644   7.232   6.095   6.696   7.403   7.956   7.413   6.162   5.015   5.698   5.888   5.671   5.860   5.925   6.200   6.555   7.662   8.100   7.956   8.223   8.551   8.433   8.773   8.671   7.700   7.153   8.339   9.057   9.654   9.885   9.852   9.149   8.435   8.226   8.799   8.870 
+ 14.296  14.708  15.349  15.200  15.107  14.830  13.835  13.885  13.677  12.745  13.066  13.193  12.953  12.182  11.362  10.356  10.436  11.442  11.030  11.083  12.185  12.223  12.067  12.809  12.301  11.456  11.792  12.072  12.499  12.673  12.753  11.807  10.896  10.741  11.616  11.707 
+ 18.721  18.586  17.912  17.084  17.800  17.247  16.107  15.927  14.401  14.512  15.358  15.270  14.343  13.751  12.662  12.347  11.391  11.974  11.608  12.044  13.977  14.124  13.978  14.775  14.835  13.714  13.000  12.685  11.496  10.801  11.330  10.650   9.760  10.652  11.088  10.462 
+ 16.588  16.170  15.417  14.746  15.440  15.237  14.441  13.981  13.074  13.161  13.053  12.014  10.398  10.464   9.913   9.126   9.515   9.290   9.858  10.105  11.108  12.179  11.837  11.571  14.404  13.705  11.340  10.200  10.853   9.917  10.620   9.961   9.384   9.770   9.470   9.777 
+ 13.537  12.293  12.555  13.719  13.543  11.871  11.153   9.965   7.833   9.166   9.725   8.963   8.390   8.170   8.953   7.960   7.387   7.717   8.631   8.511   9.916  12.069  12.899  11.512  12.540  13.601  11.403  10.394   9.806   9.573  10.875  11.205  10.891  11.047  11.287  11.158 
+ 11.804  11.930  12.375  14.403  14.244  13.612  11.757  11.749  10.715  10.930  10.767   9.884  10.076   9.573   9.878   9.379   9.401   9.206   9.769  10.259  10.745  11.551  12.527  12.217  11.813  14.001  13.398  11.793  11.424  11.564  12.575  12.725   9.540  10.394  11.531  10.486 
+ 13.543  13.512  14.031  14.512  15.030  14.310  12.976  11.237  11.293  11.067   9.592  10.435   9.887   9.788   9.705   9.371  10.182  10.235  10.979  11.668  12.520  14.312  15.297  13.944  13.015  13.289  12.881  11.711  11.329  12.228  14.212  14.072  11.553  10.851  11.341  10.207 
+ 13.478  13.753  14.408  14.292  15.419  14.300  12.979   9.802  11.397  10.901   9.541  10.288  10.450  10.092  10.663   9.752  10.454  10.144  10.795  10.929  12.105  14.030  15.240  14.171  14.196  14.764  13.516  12.059  11.943  12.209  14.812  15.155  13.890  11.540  11.237  10.449 
+ 13.494  13.539  14.119  14.284  15.182  13.758  12.448   9.047  11.221  10.641   9.416   9.822  10.185   9.879   9.994   9.377   9.022   9.730   9.874  10.865  11.985  14.589  16.328  15.049  14.841  13.806  12.346  11.208  11.195  11.831  14.410  14.801  13.195  11.610  12.025  10.693 
+ 12.603  12.386  13.301  14.190  14.574  12.894  11.481   7.874  10.299   9.368   9.316   9.646   9.862   9.946   9.567   9.272   9.515  10.060  11.724  12.721  12.960  15.238  15.376  14.424  12.773  11.316   9.840   9.045   9.447  10.530  13.721  13.913  12.130  11.396  10.363   8.967 
+ 13.961  13.718  13.858  13.213  12.713  10.940  10.507   9.581   9.932   9.012   8.189   7.961   9.015   8.563   8.923   8.746   8.634   9.542  11.363  12.067  11.729  12.553  13.264  12.840   8.523   7.597   6.691   6.404   7.458   8.796  11.897  11.727  10.696   9.713   8.380   6.845 
+ 12.992  11.585  10.665   9.910   8.835   8.306   8.713   7.772   7.842   8.065   7.081   6.418   7.248   7.388   7.909   7.272   6.954   6.643   7.337   7.013   6.722   7.527   7.697   7.741   6.754   6.452   5.276   5.452   5.890   7.890   8.585   8.390   7.629   7.786   7.621   6.823 
+ 10.691  10.759  10.519   8.938   9.193   7.571   7.389   6.945   7.321   7.388   7.042   7.887   7.029   6.153   6.085   6.292   7.902   9.917  11.301  11.569  10.165   9.172  10.637   9.835  10.275  11.065   9.922  10.145   9.532   8.752   9.763  12.114  12.548  12.261  12.370  13.013 
+  9.785  10.023   8.303   8.694   9.215   7.318   6.149   6.063   7.395   7.197   6.364   8.081   8.079   7.094   6.665   6.015   8.469   9.621  11.433  11.886  10.292  10.135  11.389  10.244  11.239  12.558  12.064  11.727  10.629   9.406   9.852  12.031  12.138  11.949  12.556  12.757 
+  8.427   8.538   7.347   7.552   7.947   6.346   5.898   6.078   5.522   6.626   7.336   8.374   8.055   6.763   6.586   7.096   7.823   9.240   9.630  10.026   9.812   9.511   8.775   9.239  10.709  10.721  10.371  10.777   9.458   8.852   9.320  10.242   9.620   9.400  10.910  10.407 
+ 14.135  13.311  11.715  11.301  12.132  11.725  10.981  10.886  10.572   9.904  10.693  11.457  10.967  11.139  11.205  11.214  10.954  11.534  11.513  12.154  12.037  12.292  11.991  12.435  12.986  12.943  12.820  12.867  12.948  12.600  13.209  12.879  12.648  12.950  12.458  12.240 
+ 17.403  16.644  14.429  15.094  15.294  15.857  16.372  15.693  14.174  14.173  14.990  15.190  14.526  13.894  11.973  10.756  11.903  12.713  11.821  11.627  11.910  11.559  10.971  11.349  11.449  11.303  11.143  11.304  11.519  11.427  11.592  11.533  10.804  10.951  10.763  10.855 
+ 15.891  17.255  15.969  16.770  15.444  16.382  16.093  15.479  13.378  13.313  14.488  13.893  13.992  13.143  11.054  11.569  12.396  11.907  11.072  11.033  11.567  11.272  10.450  11.010  11.463  11.696  12.201  11.131  11.614  12.939  12.155  11.421  10.256  10.486  11.050  10.312 
+ 17.020  17.302  16.366  15.912  15.149  14.662  15.241  15.042  13.644  13.786  14.166  14.486  13.992  12.563  11.002  11.410  10.930  10.329  10.323  10.297   9.584   9.465  10.231   9.364  10.285  11.628  12.370  10.789  11.908  13.345  11.595  10.290   9.057  10.585  10.511  10.221 
+ 14.481  15.200  15.537  15.065  14.942  15.814  15.828  14.689  14.363  13.235  14.941  15.343  14.674  12.414  10.779   9.820  10.029   9.187   8.415   7.845   8.348   9.494   9.935   9.249   9.474  12.038  13.472  11.468  11.831  13.270  11.938  10.217   8.802  10.217  11.467  11.844 
+ 15.662  14.496  13.363  13.351  14.934  16.086  15.334  14.231  14.077  12.867  14.280  14.910  14.525  12.203  10.337  10.014   9.376   9.492   7.890   6.924   7.361   8.022   7.548   7.746   8.138   9.708  11.698  11.121   9.557  12.094  11.510   9.884   8.779  11.350  11.942  11.711 
+ 12.746  12.843  12.415  13.498  13.233  14.358  13.160  13.280  12.962  11.923  13.054  13.311  12.591  11.961  10.896   9.109   8.211   8.230   8.180   7.780   8.296   8.400   7.490   6.906   8.999   9.566  11.723  11.046   9.248  11.883  12.074  11.408  11.883  13.171  12.659  10.572 
+ 12.719  11.968  11.017  10.373  10.363  11.204   9.649   8.945   9.876   9.504   9.499  10.921   9.849   7.363   7.219   6.862   5.963   5.745   6.634   5.970   5.995   6.587   6.854   6.213   7.355   8.822   8.741   8.054   7.527   8.967   9.454   9.418  10.237   9.420   8.586   7.368 
+ 10.273  10.033   9.914   9.153   7.952   9.205   8.275   7.670   7.788   6.875   5.880   5.709   5.808   5.240   4.166   4.977   5.252   5.426   4.891   4.774   5.097   5.548   5.537   5.630   7.155   7.881   6.515   6.598   6.657   5.925   6.569   7.232   6.812   7.102   7.222   6.148 
+  8.782   9.305   9.239   7.216   7.871   7.922   6.928   7.865   5.837   5.190   4.779   5.745   6.549   5.842   4.976   5.249   4.764   4.554   5.262   5.577   4.889   4.871   4.581   5.017   6.231   6.907   6.417   6.616   5.969   5.782   4.726   5.614   6.057   6.428   7.045   6.235 
+  9.309   9.102   7.818   8.110   7.685   7.798   8.751   8.893   8.808   8.820   8.637   8.271   6.698   6.151   8.013   9.205   9.501   9.560   9.408   9.139   9.445   9.979  10.089   9.837  10.377  11.312  11.900  12.279  12.220  12.084  12.254  11.997  10.845   9.671  10.280   9.453 
+ 10.553  10.482   9.668   8.362   9.617  10.073   9.873  10.782  10.740  11.224  10.827   9.893   8.961   7.757  10.586  11.542  11.492  11.396  11.186  10.600  11.050  11.838  12.013  11.366  12.028  13.215  13.825  14.241  14.106  14.234  14.442  14.450  13.751  12.525  12.897  12.018 
+  9.217   9.974  11.616  12.365  12.343  12.068  11.430  10.593  10.702   9.335   8.826   8.696   9.623   8.988   9.370  10.195   8.548   8.031   8.790   8.188   9.333   9.506   9.327   9.438   9.879  11.268  13.121  11.406  11.294  13.696  13.773  13.092  12.830  13.764  11.930  10.956 
+ 14.329  13.572  13.724  13.769  13.398  13.606  12.520  11.992  10.994   8.749   9.968  11.533  12.275  13.008  12.839  11.732  10.509   8.511   8.445   9.413   9.750   9.859  10.035  10.640  10.402  11.997  12.453  11.128  12.498  11.738  11.808  11.104  11.725  12.217  11.790   8.799 
+ 13.811  13.097  12.305  12.701  11.898  12.160  11.481  10.919   9.994   8.087   7.015   9.660  10.225  12.178  12.242  10.129   8.461   6.464   7.535   7.020   5.773   6.212   6.142   6.413   7.399   7.630   7.981   9.270  10.726   9.093   8.533   8.439   9.294   9.096   9.416   7.726 
+  9.990  10.545  10.718   9.970   9.371   7.527   6.981   6.106   6.548   7.169   5.730   6.229   7.425   8.783   7.389   6.507   6.332   5.104   4.495   3.887   5.228   5.378   5.813   6.297   6.718   5.401   4.719   5.331   6.694   5.913   5.480   5.511   4.796   4.983   5.457   5.798 
+ 10.674  11.364  10.959   9.022   8.788   7.823   6.432   5.969   6.032   7.193   5.873   7.416   8.704   7.883   5.931   5.259   4.212   4.308   3.811   3.901   4.535   4.466   3.365   4.296   5.813   5.037   3.930   5.007   5.155   5.343   5.432   5.771   5.708   5.407   6.669   5.730 
+ 10.088  11.090  10.845   8.944   7.961   8.243   7.999   6.147   6.287   6.886   6.250   7.675   7.210   6.659   6.839   6.257   5.466   5.108   4.340   4.894   3.297   5.105   4.840   4.207   5.308   5.552   3.954   4.075   4.947   5.735   5.250   4.942   4.782   4.618   5.722   5.198 
+ 10.483  11.214  10.349   8.748   8.569   7.269   8.086   7.595   6.403   6.064   6.204   7.751   7.162   7.696   6.665   4.615   4.382   4.186   4.110   5.810   4.767   5.448   5.603   5.618   5.705   6.384   5.192   5.504   4.601   5.330   5.253   5.550   4.366   4.457   4.310   4.999 
+  9.750  10.544   9.451   6.598   7.071   6.087   6.599   6.203   5.275   6.369   5.786   5.602   3.881   5.695   5.369   5.161   3.827   3.515   4.124   5.245   5.424   5.166   4.933   5.333   4.481   5.603   5.135   4.699   3.940   4.569   4.643   4.988   4.831   4.869   5.237   4.839 
+  9.125   9.945   8.110   6.936   6.170   5.882   6.203   5.659   5.205   5.939   6.015   4.273   4.193   5.602   5.258   4.106   4.739   5.066   4.821   4.697   4.142   3.905   3.294   3.881   4.458   5.005   4.080   3.466   3.399   4.504   4.331   4.625   4.901   4.869   4.387   4.835 
+  9.209   9.594   8.778   6.738   4.262   4.804   4.763   2.892   3.776   4.604   4.085   4.173   4.575   5.294   4.989   5.374   5.327   4.444   3.919   4.231   4.977   3.864   4.888   5.112   3.969   3.711   2.765   3.287   3.155   4.096   3.967   4.006   4.159   4.267   4.288   3.527 
+ 13.795  14.092  14.168  13.857  13.287  12.846  12.408  11.129   9.506   9.966   9.044  10.061   8.973   9.603  10.350   9.989   9.285   8.782   9.408  10.463   9.890   8.603   8.917   9.850   9.141   8.042   9.316  10.079   9.885  11.131  11.096   9.697   9.911   9.931  10.381   9.930 
+ 17.761  16.727  17.184  17.268  17.083  16.212  15.251  13.431  13.578  13.846  12.836  12.540  11.944  11.341  11.767  10.852  10.364  10.398  11.059  11.407  10.911   9.600   9.804  10.521   9.436   8.881  10.111  10.891  11.378  12.579  11.792  10.734  10.449  10.672  11.211  10.950 
+ 17.472  15.759  16.004  14.440  15.107  14.215  13.529  12.846  12.787  11.978  10.493  10.045   9.647  10.545  10.827   9.722  10.000   9.579   9.027   9.013   9.499   8.390   7.709   8.286   8.963   8.938   8.761   9.756  10.768  11.600  11.135  10.073   9.487   9.815   9.948   9.805 
+ 13.422  13.566  13.639  12.941  11.147  10.827  11.770  11.581  11.020  10.224   8.229   8.322   8.636   8.031   8.247   7.770   8.338   8.319   7.733   5.814   8.155   8.276   7.756   7.685   8.551   8.350   7.728   8.508   9.454   8.972  11.150  10.025   9.351   9.006   8.519   9.384 
+ 10.416   9.856  11.494  13.170  13.776  13.088  12.352  12.568  11.965  12.634  11.401  10.035   9.178   7.287   7.741   7.839   6.825   6.612   6.192   5.080   6.037   6.310   5.357   5.825   6.404   7.910   8.807   7.334   7.441   8.156  10.526  11.013  11.314  10.117   9.227   8.998 
+ 10.426  11.384  12.353  13.888  13.744  13.077  13.587  12.856  12.878  13.720  11.389  10.609   9.027   8.408   7.914   7.589   8.045   7.697   6.655   6.484   6.910   6.073   5.768   6.967   7.684  10.263  11.078   8.939   9.175  10.525  11.644  12.732  12.752  10.404   9.589   9.661 
+  9.327  11.270  12.542  13.759  14.443  11.627  12.607  13.485  13.434  13.792  13.497  11.503  10.414  10.413   9.253   6.648   6.108   6.478   6.465   6.787   6.613   6.346   7.650   7.427   8.367  10.084  11.548  10.150  10.615  11.900  12.251  11.894  11.602  10.214  11.113  11.600 
+ 10.414  10.916  12.841  13.656  14.957  13.511  12.126  12.205  13.192  13.233  13.506  13.563  12.846  10.446   9.362   9.708  10.457  10.396   8.943   8.946   9.341   8.882   9.619   9.017   9.925  13.167  13.168  13.636  12.741  12.095  11.782  10.461  10.295  10.870  11.138  10.041 
+ 12.792  12.350  13.325  13.972  15.550  14.105  12.300  12.044  12.576  12.074  11.435  13.217  12.865  12.556  13.197  13.404  12.783  11.151  11.028  10.553   9.879   8.299   8.971  10.855  12.782  14.508  13.265  12.580  12.607  11.200   9.528   9.724   9.921   9.644   9.900  10.382 
+ 13.407  13.471  13.903  14.321  15.976  14.976  12.789  12.332  12.601  12.256   9.884  11.531  10.786  12.013  12.786  13.764  13.364  13.461  13.346  13.965  13.045  11.818  12.091  12.541  14.600  15.501  12.894  11.658  12.982  12.256   9.907   9.209   9.003   8.886   8.582   8.587 
+ 13.360  13.409  13.969  14.793  16.262  14.830  12.391  12.734  12.059  11.715   9.600  10.666   9.600  10.627  10.541  11.040  11.554  12.581  13.567  14.735  14.110  14.160  14.458  13.835  15.296  15.868  13.578  11.687  11.997  13.246  12.834  11.175  10.480   9.888   9.010   8.597 
+ 13.240  13.112  13.931  14.812  15.596  13.530  12.000  11.760  11.134  10.681   9.209   9.949   8.741   9.443   9.435   9.916  10.321  10.759  11.025  12.154  13.048  14.569  15.382  14.341  14.507  15.427  13.838  11.247   9.320  10.276  13.004  13.098  12.504  12.246  10.261   8.345 
+ 13.247  13.251  13.859  14.085  14.382  12.568  11.573  10.654  10.482   9.695   8.593   8.825   8.416   8.802   9.424   9.696  10.233  10.642  10.702  11.057  11.345  12.154  14.372  14.516  12.845  12.909  12.831  12.484  11.459  11.217  13.619  14.090  13.241  13.726  12.020   8.723 
+ 13.175  13.220  13.823  13.475  13.363  12.440  11.365   9.856  10.254   8.688   8.856   8.482   8.230   8.549   8.916   8.925   9.438   9.202   9.939  10.437  10.787  11.943  14.759  15.235  12.873  12.285  13.416  13.746  12.436  11.686  12.035  12.255  11.533  11.466  10.068   7.054 
+ 13.112  13.225  13.779  13.287  13.003  12.362  11.110   9.719   9.690   7.656   7.952   8.842   8.759   9.056   8.759   8.282   8.846   9.279   9.422   9.772  10.195  11.522  14.433  15.237  12.663  12.029  12.099  11.836  11.398  11.154  12.047  12.656  12.031  12.281  10.547   8.337 
+ 13.077  13.102  13.552  12.597  12.750  12.407  10.978  10.080   9.723   8.384   9.039   8.656   7.970   8.708   8.359   7.827   9.186   9.899  10.157  10.822  11.032  12.064  15.301  15.852  13.043  12.147  12.261  12.570  12.171  11.562  13.626  14.328  13.619  13.616  11.045   8.768 
+ 12.742  12.385  12.880  12.044  12.498  11.844  10.114   9.386   9.805   8.507   7.961   7.422   7.484   8.819   8.862   9.043   9.305   9.875   9.883  11.779  12.943  13.979  15.510  15.986  14.096  12.334  10.817  10.375  10.208  11.003  13.269  12.900  11.700  12.386   9.885   6.050 
+ 11.588  11.228  11.469  11.871  10.332   8.825   7.754   7.486   7.465   8.407   8.688   8.259   6.147   7.408   6.850   6.835   7.461   7.401   8.027  10.262  11.564  11.920  12.202  12.440  10.765   8.294   7.425   7.004   7.230   8.386  10.800  10.053   9.551  10.001   6.750   3.696 
+ 10.957  10.901  10.434   9.199   7.995   5.723   6.671   6.551   7.048   5.029   7.078   7.893   6.518   5.997   5.679   3.650   4.474   4.916   4.241   5.111   5.120   4.941   7.349   7.999   5.895   4.634   5.466   4.287   4.592   4.977   5.360   5.469   4.946   5.351   3.516   2.970 
+ 10.211   9.996   8.634   8.539   8.302   5.736   6.583   7.469   7.111   5.952   6.027   5.935   4.904   4.915   5.665   4.766   3.634   4.035   4.592   4.558   5.637   6.166   8.353   8.912   6.949   5.485   4.954   4.197   3.820   4.570   4.572   4.123   4.356   4.269   3.678   3.083 
+  9.271   9.087   8.898   7.191   7.079   5.732   6.294   5.719   4.895   4.339   4.548   3.966   4.184   5.987   5.654   2.929   3.733   5.237   4.623   4.708   5.100   5.452   7.283   7.786   5.331   5.541   3.688   3.708   2.745   3.266   5.176   5.339   4.410   4.161   3.623   2.539 
+  6.641   5.995   6.836   7.469   6.755   5.134   5.745   4.379   5.182   3.654   3.764   3.652   4.038   6.325   5.730   3.035   4.165   4.192   5.332   5.164   4.914   4.925   5.984   6.911   5.378   4.850   4.562   3.266   3.081   3.495   4.696   4.903   3.835   3.889   3.345   2.608 
+  5.478   4.932   5.808   4.696   4.614   4.665   4.386   4.770   4.645   2.574   2.359   3.903   4.105   5.919   5.898   4.187   3.587   3.537   4.205   4.658   4.501   4.770   5.389   5.350   4.495   5.131   2.677   2.355   2.961   2.366   3.335   3.263   4.096   3.072   2.491   1.770 
+  8.013   7.280   7.390   6.627   6.700   6.165   6.046   6.039   4.946   5.884   6.112   6.041   5.884   7.100   6.983   5.918   6.691   7.108   7.396   7.286   7.864   7.865   7.712   7.566   7.499   7.879   8.150   8.406   8.182   7.850   8.235   8.315   8.106   7.827   8.306   7.584 
+ 15.852  16.372  16.405  15.617  15.086  14.745  15.017  15.638  15.483  15.157  14.337  13.031  11.556  12.054  12.687  12.190  11.668  12.922  13.089  12.647  12.367  11.954  11.987  10.897  10.919  12.130  11.966  12.029  11.744  10.666  11.517  12.017  11.332  10.976  11.798  10.937 
+ 17.781  18.061  17.962  15.816  16.698  16.424  15.195  16.280  15.703  15.173  14.149  13.597  12.729  11.752  12.787  12.350  12.573  13.098  13.333  12.963  13.108  11.964  12.060  11.066  10.871  13.226  12.448  12.424  11.598  10.630  10.910  12.530  10.667  10.133  10.900  10.975 
+ 18.431  16.470  16.043  15.662  14.320  14.121  13.513  13.191  13.470  12.996  12.397  10.734  11.235   9.906   9.101   9.550   9.577   9.300  10.507  11.107  10.127   9.841  10.686  10.112   8.844  11.968  11.564  11.403  10.861  10.778   9.998  12.082  11.492  10.699  10.817  10.174 
+ 16.746  14.927  13.618  11.760  11.089  10.550  10.398  10.134   9.602   9.318   8.732   9.535   7.841   8.362   8.748   7.883   7.766   8.243   8.698  10.290   9.506   9.362  10.447   9.374   8.870  11.154  11.656  10.314  10.196  10.440  10.097  10.467  10.775  10.533  10.847  10.365 
+ 12.151  10.974  11.103   9.528   8.114   8.232   8.352   7.877   7.732   7.856   8.350   8.103   7.983   7.633   7.335   6.969   6.987   7.769   8.036   8.047   7.994   8.936   8.984   8.389   8.616   9.016  10.451  10.622   9.659   9.991  10.791  10.606  10.026  10.356  10.359   9.234 
+ 10.671   9.020   8.661   7.703   9.272   8.396   7.330   6.942   7.283   6.910   6.906   5.999   5.252   6.824   5.289   5.735   8.262   9.505   8.635   8.617   8.609   9.054   8.882   8.481   8.709   9.954  10.067   9.528   9.257   9.860  10.093  10.425  10.286  10.720  11.076  10.668 
+ 11.280  11.004   9.572   9.124   9.625   9.429   8.425   7.329   8.271   8.718   8.181   8.880   7.396   7.957   7.517   6.732   8.487   9.427   9.688   9.575   9.552   9.701   9.075   9.580   9.176  10.869  10.056   9.960   9.812  10.398  10.138  11.214   9.748  10.343  10.953  10.031 
+ 12.748  12.239  11.609  10.792  10.758  10.776   9.713   9.168   9.956  10.567  10.110  10.246  10.049   9.600   7.983   7.874   9.263  11.085  11.247  11.051  11.011  11.043   9.450  10.075   9.757  11.518  11.821  11.020  10.888  11.358  10.234  10.640  10.713  11.626  11.626  11.218 
+  9.707  10.826  10.656   9.747   9.310   9.974   9.671   9.718   9.099   9.126   8.401   8.680   7.057   7.370   8.276   8.529   8.413   9.718   9.050  10.529   9.915   8.794   8.296   8.670   9.759  11.721  11.231   9.260   9.703   9.780  10.616  11.325  11.093  11.229  10.977  10.129 
+  8.999  10.543  11.164  10.207  11.803  11.974  12.542  11.838  12.201  10.967  10.017   8.034   8.601   9.109   9.097   9.480  10.100  10.321  11.189  11.780  10.934  10.633  10.995  11.197  12.019  13.239  12.178  10.101   9.286  10.051  11.243  11.840   9.666   9.831   9.439   8.077 
+ 11.788  12.696  11.670  11.550  12.532  14.117  13.949  15.192  14.739  13.761  13.251  12.263  10.548  11.530  11.308  11.824  12.285  13.220  14.205  14.715  13.680  12.183  11.257  11.133  11.813  13.643  13.065  10.875  10.385  10.557  13.246  13.963  12.234  10.274   9.358   6.809 
+ 12.855  12.188  12.889  11.224  12.289  13.805  15.252  16.428  16.350  14.018  13.159  11.994  10.787  11.450  11.336  11.571  12.047  13.078  14.522  15.558  14.206  12.108  11.024  10.648   9.963  11.857  13.455  12.680  11.568  11.583  13.997  14.627  12.521  10.523   9.305   6.363 
+ 13.101  12.660  13.331  11.512  11.867  13.500  14.653  15.480  15.907  13.635  12.406  11.875  10.906  11.113  11.025  11.021  11.056  11.429  12.225  13.737  14.100  12.730  11.332  11.209  11.069  12.663  15.263  14.085  12.500  12.770  14.145  13.792  11.608  10.171   9.189   5.612 
+ 13.166  13.097  13.574  12.038  12.071  13.605  14.846  15.523  15.651  13.899  12.668  12.495  11.321  11.486  11.583  11.486  11.612  11.762  12.193  13.338  14.368  14.392  11.985  10.857  10.461  11.083  13.999  13.355  12.309  13.434  15.241  14.979  13.692  11.800   9.960   5.951 
+ 13.229  13.411  13.777  12.152  12.044  13.559  14.584  14.929  15.361  13.799  11.595  12.202  11.293  10.872  11.238  11.319  11.479  11.460  11.441  12.070  13.552  15.410  14.161  12.689  12.157  12.376  13.927  13.710  12.775  14.202  15.714  14.757  13.589  11.984  10.784   7.443 
+ 13.202  13.345  13.665  11.704  11.979  13.337  14.342  14.276  14.688  13.398  11.060  12.009  11.059  10.176  10.451  10.830  10.933  10.844  10.243   9.836  11.832  13.871  14.021  13.097  12.220  13.282  14.106  14.168  13.659  14.313  15.108  13.918  13.357  12.232  11.283   8.751 
+ 13.046  12.788  13.180  10.657  11.759  12.548  13.616  13.737  13.502  12.453  10.418  11.994  10.306   9.306   9.733   9.954   9.828  10.944   9.630   9.088   9.502  11.468  13.412  13.691  12.892  13.771  13.945  13.092  12.924  13.297  13.971  12.496  12.567  11.771  11.427   9.184 
+ 13.007  12.511  12.874  10.712  11.717  12.124  12.901  12.663  12.127  11.605  10.987  11.898   9.812   8.667   9.229   9.817   9.770  10.945  10.026  10.604  10.099  10.334  11.814  11.603  11.295  10.921  10.697  10.707  11.712  12.256  12.108  11.356  12.177  12.029  12.437  11.206 
+ 13.215  12.965  13.162  11.423  11.365  12.348  12.838  12.478  11.865  11.080  10.988  11.675  10.426   8.106   8.955   9.647  10.000  11.150  10.375  10.733  10.526  10.678  11.617  11.434  10.352   8.066   7.795   8.055  10.169  11.092  10.639  10.533  12.078  11.817  12.223  10.757 
+ 13.153  13.104  13.136  11.685  11.534  12.567  12.919  12.530  12.019  11.307  11.362  11.795  10.368   8.418   9.346   9.738  10.211  10.892  10.326  10.460  10.620  10.666  11.632  12.197   9.689   7.704   6.242   7.299   9.331  10.425  10.891  11.072  12.381  11.987  11.127   9.744 
+ 13.140  13.046  12.968  11.646  11.797  12.369  12.684  12.008  10.775  10.954  11.745  11.736   9.872   8.214   9.209   9.564  10.114  10.281  10.150  10.033  10.752  10.818  11.114  11.677  10.163   8.162   5.566   5.973   8.738  10.095  10.614  11.089  12.359  11.945  11.429   9.626 
+ 12.853  12.336  12.253  11.405  11.586  11.707  12.166  11.485  10.368  11.572  11.633  10.693   9.639   7.854   8.233   7.696   8.559   8.489   8.619   8.675   8.904   9.878  12.238  12.042  10.753   8.529   5.990   6.288   7.882   9.002   9.533   9.549  10.634  10.925  11.269  10.121 
+ 12.562  11.422  11.620  11.691  10.721  12.052  11.694  10.171  10.419  10.675   9.661  10.417   8.763   6.217   6.604   6.416   7.849   8.616   8.664   8.933   9.692  10.527  11.949  11.912  10.075   8.194   6.731   6.164   7.176   8.611   9.078   8.897   9.860  10.059  11.390  10.167 
+ 12.537  12.048  10.268  11.344  10.724  10.843  11.963  11.135  10.806  10.475  10.181   9.140   6.839   7.170   7.363   7.697   9.553   9.580  10.468  10.463  10.411  10.748  12.162  12.135  10.867   8.639   7.831   7.304   8.052   9.239   9.969   8.372   8.267   8.087   9.007   8.068 
+ 11.159  10.944  11.874  11.104  11.189  12.363  12.070  10.940   9.994  10.499  10.051   7.965   7.676   9.045  10.038  10.803  11.590  12.063  12.994  12.352  10.455  10.009  11.652  11.779  11.507   8.652   8.424   7.905   8.435   8.635  10.381   8.714   8.820   9.645   9.564   9.148 
+  9.631  10.967  11.483   9.975  11.027  11.144  12.100  10.793  11.383  10.569  10.181   8.323   8.526   8.853   8.562   9.468  10.894  12.062  13.424  12.482  10.348  10.525   9.965  10.904  11.513   9.386   8.937   9.278   9.855   9.314   9.758  10.234  10.390  11.325  11.608  11.314 
+  7.815  10.111   9.811   9.005   9.005   9.315   9.898   9.586   9.473   9.021   8.891   8.003   7.726   7.830   7.482   6.831   7.838  10.322  11.371  10.346  10.018   9.794   9.152  10.710  10.852   9.517   9.459  10.081  10.408  10.497  11.039  11.149  11.237  11.814  12.725  13.167 
+  8.528   7.657   7.829   8.763   8.297   8.544   8.728   8.611   6.792   6.410   6.281   7.822   7.641   6.774   7.392   7.304   8.787   9.998   9.932   9.622   9.194   9.728   9.515   9.687   9.708  10.817  10.639  10.295  10.292  11.391  12.000  11.812  11.375  12.798  13.144  12.793 
+  7.857   7.022   7.676   8.192   7.762   8.298   7.203   8.632   8.525   7.549   8.550   8.526   8.820   8.336   9.408   8.598   9.100  10.218  10.187   9.571  10.250   9.880   9.742   8.723   9.126  10.023  10.373  10.454   8.803  11.513  11.715  12.384  12.483  13.243  13.536  13.489 
+  5.141   7.924   8.299   6.757   6.117   7.627   7.654   7.556   8.625   7.583   8.028   8.321   8.210   7.707   8.732   9.796   9.526   9.319   9.895   9.865   9.773  10.331   9.607  10.166   9.278  11.104  10.196  10.920  10.534  11.233  12.958  13.055  12.826  13.964  14.157  13.788 
+  7.830   7.275   5.836   7.225   7.520   6.817   7.335   8.547   8.746   8.471   8.246   8.932   8.951   9.091   9.341   9.531  10.085  10.614  11.360  10.528   9.657  11.270  10.981  10.522  10.209  11.575  10.279  11.263  11.317  11.837  12.449  12.903  13.335  14.420  14.873  14.397 
+  9.646   9.516   9.348   9.730   8.760   9.421   9.318   8.838   9.358   9.540   8.106   6.623   8.731   9.343   8.959   9.545  10.020  11.121  12.565  11.975  10.938  10.235  10.767  11.371  10.304  12.601  11.692  11.549  11.917  12.397  12.749  13.046  13.625  13.965  13.791  14.801 
+  9.894  11.168  11.467  11.741  12.242  12.953  12.835  12.309  11.510  11.533   9.836   9.267   9.069   9.701  10.519  11.143  11.238  10.901  12.223  11.437  10.899  10.921  11.941  12.512  11.503  12.929  11.839  11.091  11.684  11.141  11.653  13.976  14.500  13.384  13.464  13.910 
+ 12.086  12.087  11.705  13.035  13.812  14.719  15.763  15.495  13.932  13.647  12.121  12.313  11.653  11.691  10.727  10.672  11.932  12.727  12.867  12.127  11.300  10.992  10.685  11.216  13.003  14.067  12.743  11.278  10.156   9.717  10.583  10.725  11.712  12.359  11.447  10.437 
+ 12.903  12.679  12.218  12.309  13.402  15.224  15.967  16.508  15.619  13.616  14.032  13.511  11.741  13.029  12.333  12.830  13.249  14.455  14.617  13.197  12.575  11.837  11.116  11.555  12.866  14.290  12.534  10.854   8.857   9.273  10.580   9.775   9.986  11.936  10.341   8.543 
+ 12.950  12.337  12.509  12.113  13.040  14.388  15.136  16.057  16.607  15.221  13.940  14.298  13.455  12.938  13.324  12.854  14.148  15.262  16.054  14.562  14.431  13.104  13.035  12.761  13.419  14.038  12.957  11.949  11.898  11.628  12.089  12.001  10.731  11.898  10.940   9.675 
+ 12.701  12.028  12.447  11.930  12.993  14.136  14.584  16.736  17.219  14.954  14.666  14.381  12.975  12.958  12.925  12.669  13.391  14.672  17.193  16.510  15.420  13.952  13.731  13.242  14.043  14.350  13.684  12.411  11.988  11.990  13.164  13.585  11.737  12.613  11.273   9.985 
+ 12.477  11.683  12.145  11.834  12.732  13.890  13.819  16.528  17.095  15.937  14.563  13.712  12.567  12.651  11.958  12.086  12.490  13.348  16.053  15.522  14.538  13.207  12.955  12.635  13.447  13.903  13.545  12.127  10.945  11.608  13.871  14.779  12.780  13.075  10.305   8.842 
+ 12.259  12.000  12.129  12.287  13.160  14.060  14.020  16.657  17.411  17.200  15.193  13.737  13.429  13.621  13.375  13.410  14.034  15.163  16.961  16.382  14.175  12.858  11.347  12.166  12.412  13.200  13.704  13.000  12.302  12.740  13.883  14.720  12.421  11.943  10.100   9.289 
+ 12.286  11.940  11.810  12.310  13.195  13.838  14.039  16.484  17.124  17.455  15.246  14.453  13.987  13.885  13.598  13.630  14.301  15.146  16.886  16.276  15.169  13.876  12.839  12.712  12.699  11.894  12.239  12.387  12.170  12.619  13.772  14.460  12.055  11.039  10.440  10.156 
+ 12.290  11.822  11.439  12.062  13.017  13.372  13.656  16.094  16.932  17.107  16.007  14.956  13.030  14.175  13.355  14.085  13.858  15.781  16.518  16.676  15.073  14.379  13.845  14.784  14.765  14.156  13.553  12.975  12.380  13.002  14.291  14.711  12.711  12.174  10.866  10.310 
+ 12.132  11.319  11.254  12.173  12.883  13.196  13.886  15.968  17.035  17.346  15.552  14.190  13.511  13.751  13.678  14.144  14.545  15.445  16.254  15.781  13.674  12.728  12.829  13.303  13.514  12.497  11.786  11.670  11.777  12.620  13.987  14.727  12.652  11.910   9.052   8.096 
+ 12.035  11.225  11.460  12.197  12.616  13.267  13.699  15.825  17.298  17.579  16.396  14.552  13.320  13.794  13.862  14.136  14.616  15.450  17.027  16.423  15.180  14.356  14.023  14.615  15.152  14.169  12.935  12.260  12.208  12.637  13.881  14.701  12.493  11.949  10.344   9.906 
+ 11.997  11.334  11.413  12.436  12.450  13.393  13.864  15.547  17.214  17.485  16.494  14.352  13.285  13.826  14.003  14.176  14.713  15.111  15.819  15.602  14.658  13.892  13.785  14.273  14.925  13.545  12.246  11.641  12.137  12.878  14.010  14.538  12.193  11.340   9.636   9.011 
+ 12.273  11.734  11.746  12.574  12.988  13.525  14.322  15.511  17.235  17.567  16.718  14.677  13.858  14.306  14.571  14.646  15.121  15.966  16.270  15.693  14.525  14.377  14.559  15.204  14.977  13.560  11.969  11.506  12.345  13.626  14.620  15.118  12.859  12.271  10.118   8.889 
+ 12.105  11.531  11.415  12.222  12.860  13.378  14.241  15.164  16.945  17.138  16.982  14.296  13.767  14.248  14.517  14.544  14.927  15.762  16.101  16.216  14.373  13.744  13.898  14.798  14.497  13.259  12.661  11.850  12.275  14.116  15.423  15.063  12.424  10.737   9.567   9.371 
+ 11.988  11.515  11.046  12.189  12.762  13.061  13.874  15.036  16.764  17.163  17.096  14.219  14.517  13.903  14.493  14.306  15.393  15.372  16.688  15.783  14.212  13.659  13.389  13.827  14.204  11.987  11.794  11.007  11.076  12.923  14.485  14.272  11.870  10.705   9.097   8.387 
+ 11.872  10.881  11.177  12.060  12.415  12.909  13.527  14.759  16.827  17.670  17.108  14.377  14.594  13.812  14.236  14.546  15.486  16.223  15.535  14.069  13.354  13.279  13.584  14.452  13.292  11.716  10.884  10.354  10.962  12.424  14.327  13.945  11.764  11.753  10.258   9.440 
+ 11.761  11.162  11.611  12.112  12.593  13.052  13.710  14.934  16.978  17.894  16.941  14.572  14.598  14.257  14.726  15.006  16.530  17.672  16.354  14.390  13.646  13.552  13.981  15.101  13.628  11.372  10.412  10.730  11.237  12.706  14.555  14.031  11.605  11.576   9.447   8.316 
+ 11.772  11.632  11.877  12.089  12.918  13.180  13.924  15.118  16.827  17.692  16.530  14.654  15.175  14.896  15.437  15.915  17.896  17.895  16.058  13.978  12.947  12.983  13.821  14.773  13.161  11.143  10.501  10.728  11.245  12.594  13.601  14.104  12.078  10.925   9.038   7.996 
+ 11.689  11.630  11.493  12.155  13.012  13.139  14.009  15.608  16.818  17.819  16.671  14.446  15.395  14.813  15.617  16.628  17.877  16.358  15.781  14.228  13.811  13.812  14.291  14.488  13.871  12.195  11.583  11.203  10.752  11.063  12.286  12.487  10.707   9.841   9.245   8.485 
+ 11.324  11.357  11.153  12.038  12.733  12.778  13.953  15.356  16.808  17.810  15.706  14.774  15.108  14.432  15.341  16.410  17.338  15.154  14.069  12.655  12.132  12.266  12.963  13.170  12.290  10.691  10.298  10.025  10.181  11.708  13.220  12.668  10.983  10.213   9.031   8.771 
+ 11.262  10.980  11.189  11.888  12.444  12.809  13.928  15.487  17.174  17.687  14.986  14.601  14.678  14.456  15.477  17.148  16.449  14.293  13.282  11.931  11.453  11.571  12.144  12.596  12.200  10.398   9.827   9.585  10.058  11.847  13.761  12.955  11.184  11.111   9.206   8.129 
+ 11.358  11.549  11.903  12.333  12.814  13.380  14.554  16.441  17.493  17.355  14.691  14.496  14.712  14.978  16.552  17.107  15.104  13.768  13.016  11.932  11.711  11.669  12.406  13.099  12.507  10.799  10.210  10.250  10.697  12.592  14.055  12.922  11.526  10.810   9.817   7.600 
+ 11.756  11.688  11.890  12.504  12.898  13.550  14.919  16.474  16.927  16.673  14.641  14.323  14.604  15.339  16.479  16.449  14.633  13.603  12.698  12.137  11.672  11.434  11.814  11.445  10.369   9.199   8.923   9.415  10.308  12.185  13.393  12.121  10.748  11.026   9.385   8.165 
+ 11.480  11.278  11.396  12.409  12.661  13.034  15.075  15.900  16.826  15.311  13.866  14.173  14.039  15.040  16.165  15.697  13.622  11.867  11.331  10.829  10.731  10.822  11.438  11.318   9.943   9.063   9.634   9.495   9.745  11.019  12.615  11.141  10.434  11.357  10.015   8.379 
+ 11.238  10.738  11.130  12.194  12.933  12.887  15.099  16.536  16.382  14.888  13.493  13.099  13.554  14.803  16.333  15.592  12.712  11.688  11.118  10.744  10.412  10.972  11.883  12.407  10.277   8.876  10.267   9.720   9.736  11.269  12.379  10.929   9.953  11.278   9.637   7.745 
+ 11.119  11.153  11.742  12.222  13.038  13.643  15.771  16.272  15.662  14.605  13.644  12.968  13.346  14.749  16.209  15.518  12.908  12.016  11.667  10.934  10.919  11.394  12.798  13.219  11.435   9.743  11.294  10.397  10.307  12.036  13.223  11.289   9.630  11.036   9.632   6.850 
+ 10.208  10.408  11.189  12.499  13.493  14.513  15.981  15.828  15.540  14.137  13.399  12.978  13.198  14.043  15.532  15.295  13.765  12.401  11.933  10.880  10.807  11.506  11.999  10.771  10.872  11.856  10.560   9.782   9.348  10.478  11.974  10.731   8.961  11.085  11.722   9.485 
+  9.142   9.067   9.455   9.947  11.745  13.096  14.993  14.444  13.137  12.027  10.318  10.500  10.851  11.729  13.664  14.257  11.708  10.268   9.724   8.664   8.800   8.830   9.446   8.003   8.892  10.515   8.494   7.483   7.772   8.066  10.269   8.766   6.706   9.791  10.336   9.805 
+  9.034   9.378  10.061  10.760  12.388  14.178  14.215  12.846  11.909  11.517  10.759  10.453  10.645  11.594  12.705  14.055  12.898  10.717   9.830   8.817   9.058   8.722   6.963   6.686   7.429   9.562   8.506   6.712   7.418   7.367   9.439   9.049   7.494   9.430  10.504  11.038 
+  6.352   6.304   5.408   5.505   9.184  10.994  10.749  10.374  11.068   8.461   5.903   5.474   6.037   6.375   8.015  11.309  10.049   7.064   6.281   5.887   5.681   5.726   6.364   6.725   6.089   7.178   6.083   4.610   4.621   5.373   5.459   5.774   6.137   7.311   7.803   7.132 
+  6.191   5.178   6.553   6.194   6.639   8.504   8.806   8.969  10.119   8.458   7.010   5.375   4.815   6.325   8.212   8.874   7.494   7.371   7.828   6.166   5.845   6.256   5.761   6.380   6.277   6.081   4.596   4.452   4.636   4.444   5.632   5.098   5.696   5.349   4.625   4.902 
+  6.827   5.718   5.799   5.906   5.623   7.990   9.109   9.051   9.905   8.783   7.121   5.596   6.093   6.181   7.299   7.940   6.796   6.536   6.250   5.058   5.207   5.444   5.235   5.721   4.850   5.617   4.517   3.236   3.609   4.258   4.688   4.171   4.460   3.389   3.901   3.350 
+  4.791   4.720   3.838   4.770   5.613   6.912   8.161   8.659   9.527   8.074   6.837   5.287   4.444   6.178   6.222   6.251   6.707   6.057   5.604   5.396   4.882   4.840   3.829   4.594   4.686   5.065   3.441   3.903   3.888   4.595   4.649   3.950   3.614   3.775   3.755   3.253 
+  4.911   4.846   4.957   4.442   4.105   6.239   7.978   7.979   8.812   8.171   6.876   4.110   3.470   5.494   6.203   5.458   5.765   5.395   5.781   5.366   4.559   2.888   2.993   3.823   3.398   3.720   3.238   2.961   3.665   3.740   4.250   4.155   3.654   4.008   3.052   2.441 
+  2.070   4.042   4.643   4.934   5.417   6.458   8.299   7.994   8.494   7.051   5.072   3.512   2.330   4.124   5.359   4.943   4.019   4.596   4.485   4.964   4.077   4.164   3.337   4.366   4.783   3.451   3.682   3.194   2.843   3.787   4.167   3.723   3.580   3.037   2.530   1.798 
+  5.700   5.384   3.878   4.635   4.478   4.924   7.050   6.702   8.061   7.287   5.213   5.076   4.575   5.050   5.103   5.722   4.974   5.570   5.691   4.962   4.310   3.771   2.675   3.877   3.563   3.830   3.561   2.379   2.942   3.379   3.560   3.093   3.340   3.323   2.669   1.756 
+  5.463   5.567   5.027   5.874   5.774   5.893   7.291   7.843   8.122   6.463   4.677   4.478   3.663   5.626   6.772   6.850   5.059   4.412   5.407   4.058   4.084   3.567   3.256   3.850   3.824   4.070   3.555   3.412   3.050   2.651   3.372   3.420   3.842   3.731   2.539   1.337 
+  3.836   5.007   4.653   4.094   3.559   4.291   5.902   5.807   6.823   5.654   4.581   4.093   4.023   6.260   6.594   6.165   5.142   4.771   4.781   3.909   4.364   4.013   3.911   3.650   4.423   4.906   4.535   3.587   2.692   2.731   2.183   2.882   4.222   4.318   3.153   2.017 
+  5.721   6.200   6.175   7.036   8.338   8.976   8.963   9.231   9.393   9.179   8.505   8.071   8.063   8.582   9.226   9.020   9.562   9.476   8.325   8.555   9.139   9.173   8.306   7.286   7.814   8.571   8.921   8.387   8.890   9.467   8.841   9.216   9.680   9.198   9.811   9.288 
+  7.756   7.447   7.297   8.056   8.845   9.573   9.410   9.454   9.738   9.437   8.556   7.361   7.416   8.825   9.342   8.775   9.940   9.997   8.203   8.896   9.257   9.316   8.312   6.875   7.783   8.646   9.157   8.565   9.156   9.628   8.966   9.619  10.113   9.939  10.248  10.466 
+  4.446   5.789   6.217   6.352   5.559   6.501   7.339   6.910   6.432   6.042   6.633   5.571   6.437   6.893   7.329   7.473   8.596   7.960   8.167   6.650   7.603   8.437   8.868   8.256   7.694   8.144   7.968   8.167   9.958   9.863   9.624  10.342  10.147  11.314  11.185  11.824 
+  5.567   6.472   5.534   5.389   5.336   6.352   6.113   4.803   6.150   6.991   7.550   7.762   7.658   9.542   8.825   7.973   8.988  10.571   9.817   9.591  10.235  10.103  10.225   9.935   9.407  10.207  10.722   9.301  10.326  10.910  11.556  11.783  12.081  12.409  13.818  13.863 
+  7.931   7.190   5.685   5.290   6.080   7.474   7.877   7.694   7.834   8.041   8.248   8.433   8.553   8.892   9.504   8.721  11.203  11.299  10.727  10.320  10.764  11.394  10.768  11.193  10.415  10.898  11.359  10.897  11.323  11.085  12.168  12.796  12.480  12.720  13.910  13.354 
+  6.838   6.590   7.914   6.790   8.515   8.819   8.829   7.925   8.518   7.521   7.964   8.094   9.623   9.338   9.280   9.222  10.710  10.923  11.217  10.355  10.944  10.493  10.233  11.302  10.525  10.325  11.680  11.552  11.836  11.381  11.883  12.635  12.802  13.040  13.904  13.796 
+  8.222   8.059   8.404   8.179   8.532   7.442   7.359   7.287   8.851   8.899   8.031   8.636   9.914  10.350   8.715   9.035  10.307  11.871  11.032   9.922  10.965  10.689  11.556  10.916  10.667  10.866  11.371  11.550  11.323  10.809  12.058  12.317  13.265  13.446  14.215  14.097 
+  8.888   8.459   7.592   8.206   8.619   9.260   8.540   8.517   9.998  10.053   8.489   9.744   9.576   9.814   8.815   9.474   9.527  10.738  11.213   9.859  11.114  11.077  10.665   9.963   8.858  10.517  11.111  10.715  10.690  11.103  12.231  13.492  14.094  13.088  13.874  13.516 
+  9.049   8.007   7.244   6.721   7.622   8.464   9.694   9.641   8.258   9.914   9.931   9.025   8.575   8.641   8.938   8.825  11.155  11.473  11.478  10.562  10.288  10.587  10.350  10.799   9.627  11.441  11.927  10.868  10.903  11.757  11.674  13.857  13.793  12.099  13.521  13.868 
+  7.370   6.978   8.135   6.590   6.927   8.983   9.633   9.071   8.753  10.330  10.463   8.986   7.925   9.468   9.195   9.220  11.168  11.160  10.474  11.305  10.428  10.248  10.166  10.070  10.855  12.218  12.027  10.788   9.861  10.643  11.848  14.240  14.205  12.513  13.523  13.202 
+  8.967   9.155  10.992  11.030  11.572  12.940  12.697  12.272  11.041  10.706   9.335   9.494   7.819   7.791   8.461   9.903  10.612  11.273  10.641   8.850   8.777   9.527   8.773   9.259  10.183  11.864  11.364   9.675   9.340  10.455  10.519  12.706  12.788  11.110  12.222  12.666 
+ 11.305  11.548  11.058  11.857  13.929  14.694  15.218  13.934  12.547  11.459  10.969  10.252  10.900  10.690  11.188  11.885  12.653  12.299  10.614   9.740   8.584   8.224   7.853   8.577   9.695  12.362  11.995  10.779  10.440   9.789   9.230  10.892  10.884  10.046  10.642  11.843 
+ 11.681  11.444  11.719  12.421  13.619  15.213  16.125  15.067  13.391  12.212  11.450  11.139  11.527  11.760  12.128  13.023  14.483  13.772  10.423   9.485   8.328   7.405   7.523   8.760  10.449  13.455  13.040  11.783  11.403   9.971  10.631  13.045  12.528  10.915  10.370   9.232 
+ 11.757  12.057  12.288  12.829  13.686  15.069  16.408  15.834  14.421  13.361  12.160  11.810  11.976  11.497  11.940  12.753  14.694  14.649  11.519  10.447   9.697   9.098   9.168  10.357  12.179  14.152  13.430  11.578  10.776  10.644  12.054  13.654  12.836  12.541  12.280   9.507 
+ 11.480  11.591  11.847  12.729  13.299  14.499  15.506  16.475  14.139  14.122  12.787  11.531  11.711  11.921  12.080  13.331  14.514  15.118  12.781  11.769  11.105  10.197  10.006  10.803  12.195  14.693  14.037  12.103  10.942  10.738  12.904  13.376  12.020  12.817  12.696  11.046 
+ 11.142  11.049  11.049  12.214  13.052  13.269  15.825  16.617  14.742  14.439  12.819  11.447  11.955  11.571  12.088  12.619  14.087  14.767  14.047  12.563  11.398  11.072  11.035  11.425  12.884  15.099  14.244  12.333  11.013  11.374  13.227  13.390  11.830  12.732  13.081  11.911 
+ 11.161  11.086  11.651  12.090  12.928  13.124  15.733  16.633  15.534  14.289  12.680  11.538  11.904  11.629  11.880  12.601  13.753  15.087  13.698  12.172  11.673  10.951  10.929  11.639  13.318  14.793  13.892  12.221  10.870  11.553  13.633  13.484  12.063  12.115  12.186  11.260 
+ 11.243  11.500  12.039  12.409  13.072  13.138  15.502  16.083  15.898  14.903  13.294  11.938  12.015  11.877  12.325  13.011  14.008  14.937  13.722  11.873  11.609  11.000  11.270  12.158  14.178  14.750  13.736  12.483  11.543  12.649  14.192  13.259  11.571  11.494  11.785  11.373 
+ 11.196  11.247  11.407  12.282  12.767  12.863  15.191  15.526  15.724  14.934  13.658  12.217  12.754  12.270  13.062  13.920  14.903  15.704  14.643  12.463  12.117  11.840  11.651  12.121  14.366  14.944  14.070  12.667  11.528  12.681  13.568  12.735  11.285  11.127  11.566  11.395 
+ 10.734  10.812  11.079  11.578  11.881  12.710  14.745  15.785  15.974  14.448  12.844  12.174  11.849  12.270  12.682  13.326  14.633  14.689  13.519  11.149  10.657   9.976   8.726   9.942  12.587  12.933  12.282  11.234  10.568  12.128  12.951  11.865  10.690   9.610   9.640   9.831 
+ 10.973  10.903  11.508  11.606  12.640  12.886  14.754  16.017  16.412  15.371  13.667  12.505  12.817  12.896  13.330  13.972  15.215  15.729  14.232  12.843  12.180  11.413  11.594  12.466  13.736  14.074  13.450  12.002  11.242  13.165  13.709  12.248  11.058  10.774  11.360  11.245 
+ 11.356  11.346  11.856  12.368  12.960  13.141  14.842  15.983  16.290  15.690  14.206  12.591  12.932  12.743  13.605  13.957  15.327  15.221  14.028  12.235  11.475  10.877  11.024  12.123  14.017  14.204  12.830  11.174  10.675  13.323  13.384  11.760  10.353  10.869  11.275  11.434 
+ 11.363  11.441  11.691  12.370  12.728  13.172  14.876  15.512  16.043  15.265  13.978  13.027  12.747  12.926  13.149  14.135  15.500  14.953  13.029  11.813  11.129  11.035  10.225  11.030  12.392  12.176  11.543  11.072  10.392  12.010  12.047  10.787   9.629   9.666   9.684   8.512 
+ 11.104  11.048  11.207  12.055  12.565  12.733  14.668  15.709  16.224  14.830  13.185  12.965  12.711  12.723  13.110  14.440  15.613  15.420  13.176  11.145  10.230  10.016   9.746  10.552  12.405  11.688  11.584  10.716   9.554  11.470  11.548  10.201   9.199   8.966   9.409   8.797 
+ 11.232  11.052  11.603  11.993  12.607  13.009  14.810  16.103  16.343  15.244  13.194  12.943  13.081  13.083  13.547  14.676  16.423  15.658  13.696  12.476  11.576  11.227  11.140  11.998  13.331  13.006  12.480  11.577  10.085  11.941  11.709  10.420   9.511   9.141  10.002  10.361 
+ 11.554  11.349  11.896  12.390  12.757  13.326  14.862  15.860  16.162  15.296  13.667  13.383  13.215  13.372  13.945  14.812  15.399  15.443  13.721  12.783  12.052  11.724  11.419  12.052  13.371  12.921  12.604  12.079  10.813  13.047  12.396  10.761   9.897   9.567  10.158  10.495 
+ 11.597  11.410  11.603  12.416  12.570  12.937  14.569  15.123  16.097  15.294  13.548  13.743  13.197  13.546  13.708  14.461  14.756  14.918  13.334  12.286  12.093  11.873  11.702  12.736  14.455  13.441  13.042  12.204  10.854  12.044  11.003  10.340  10.088   9.581   9.714   9.898 
+ 11.657  10.778  10.641  11.814  11.403  12.548  13.605  14.746  15.988  14.420  14.046  14.070  12.661  13.724  13.317  14.605  15.318  14.247  13.211  12.344  12.175  11.945  11.772  12.873  13.970  13.891  13.231  12.461  10.775  11.946  10.224   9.441   9.097   8.647   9.932  10.530 
+ 11.622  10.187  11.134  11.847  10.648  12.301  13.075  13.920  15.880  15.320  13.776  13.317  13.190  13.091  13.602  15.092  14.757  14.003  13.232  12.717  12.341  12.352  12.337  12.938  13.802  14.462  14.118  13.275  11.380  11.819  10.407   9.690   9.447  10.083  10.777  11.481 
+ 11.627  11.697  11.018  10.315  11.147  11.171  12.899  14.477  14.784  13.913  13.726  11.413  12.060  12.075  13.417  14.136  14.000  13.492  13.346  12.642  12.174  12.015  11.766  11.836  12.270  13.305  13.480  12.949  11.210  11.026  10.011   9.503  10.036  10.104  10.728  11.237 
+ 10.254  11.513  12.222  10.491  10.592  11.787  12.534  13.106  13.501  13.842  12.498  11.077  11.891  12.150  14.007  14.782  13.193  12.806  12.824  11.198  11.601  11.879  10.809  10.703  10.466  13.003  13.631  12.814  10.603   9.887   8.631   8.174   8.524  10.005  10.483  11.117 
+  9.032  11.939  11.480  10.351  10.007  11.047  11.325  11.380  12.540  13.501  12.320   9.967  11.659  10.986  13.679  14.089  12.889  11.483  11.215  10.286  10.409   9.592   9.914   9.269   8.582  10.344  11.429  11.168  10.116   9.324   6.798   6.935   7.043  10.046   9.919   9.599 
+  9.092  11.265  10.898  10.277   7.834   9.339  10.528  10.935  11.230  11.992  10.799   9.824  10.071  10.202  12.437  12.876  10.603   9.689   9.682   9.375   9.049   8.575   8.365   8.476   7.828   8.936  10.518  10.244   9.182   8.602   6.589   5.516   6.236   8.925   9.373   8.814 
+  8.864   9.604   9.890   9.239   8.012   7.933   7.819   8.722   9.711   9.434   9.104   8.688   8.679   9.261   9.947   9.888   8.320   8.929   9.576   8.804   7.502   7.467   7.433   6.925   7.862   7.656   9.442   9.506   7.589   7.696   6.387   5.721   6.684   8.179   8.763   7.715 
+  8.633   7.519   7.863   6.480   6.110   5.201   4.773   7.169   8.679   9.370   9.775   8.769   8.103   9.295  10.508   9.295   8.217   9.167   9.102   7.595   6.788   6.356   7.423   7.450   6.465   6.806   7.837   8.127   7.877   8.330   7.114   7.188   7.357   8.015   8.404   6.927 
+  7.650   6.574   6.445   6.284   5.461   5.027   5.646   7.339   7.957   7.715   8.458   6.693   6.039   6.408   8.190   8.239   7.700   8.068   8.000   6.419   6.302   5.199   5.718   5.603   5.762   6.100   7.204   8.121   7.330   7.375   6.367   7.423   7.752   7.828   8.056   7.208 
+  4.522   4.808   3.607   4.423   5.483   5.990   6.933   6.047   6.531   7.333   7.336   6.946   6.208   6.456   7.264   7.336   6.537   6.933   6.377   5.356   5.986   5.783   6.055   6.799   5.260   5.061   4.967   5.867   6.811   6.289   5.825   6.366   8.016   7.184   6.871   6.479 
+  4.054   4.989   4.868   5.077   5.462   6.140   6.640   6.411   6.954   6.291   7.085   5.359   5.287   5.086   5.688   4.981   4.921   6.203   6.009   4.391   3.444   5.286   6.203   6.572   5.600   5.601   4.696   6.111   5.669   5.289   5.961   6.508   6.899   6.620   6.134   6.028 
+  3.809   4.955   5.219   5.573   4.930   6.474   6.427   6.961   6.094   5.216   4.537   4.643   4.067   5.907   6.309   5.748   5.834   7.286   6.576   5.654   5.246   5.706   6.019   5.933   5.319   5.080   5.730   5.426   5.089   4.499   4.964   5.385   5.527   5.947   5.704   3.596 
+  5.391   5.987   5.020   5.043   5.516   6.481   6.304   6.598   6.652   6.218   4.485   3.392   4.100   5.173   5.386   6.486   6.549   7.299   7.190   6.961   6.033   6.067   5.218   6.116   6.260   5.459   4.739   4.985   4.639   5.426   6.850   7.390   7.411   6.570   6.300   6.931 
+  4.950   4.526   3.824   4.541   5.135   4.157   4.526   5.765   5.846   5.149   3.846   3.505   4.121   4.256   5.731   6.480   7.569   8.461   8.726   6.844   5.542   5.184   4.682   6.061   5.766   5.974   5.619   5.251   4.563   5.362   6.611   7.068   7.180   6.733   5.984   6.766 
+  4.877   4.596   4.577   4.157   3.589   4.090   5.249   5.005   4.303   4.618   4.613   3.952   4.445   4.389   6.127   6.028   6.162   7.887   7.748   7.016   5.683   5.471   4.953   5.547   5.377   4.668   4.132   4.479   4.274   4.996   6.004   6.805   6.966   5.936   5.439   6.156 
+  4.478   4.868   3.021   2.568   3.701   5.179   3.935   3.437   4.503   4.900   4.081   3.456   2.797   4.281   5.284   5.146   5.029   4.766   5.052   4.828   4.226   4.608   5.113   5.627   4.329   4.051   3.548   3.339   3.447   4.019   3.798   3.957   3.824   4.058   3.663   3.663 
+  5.489   4.792   5.121   4.972   4.485   5.947   6.322   4.846   4.756   6.051   4.895   5.466   5.245   4.441   5.560   6.005   6.726   7.196   7.073   6.859   6.435   5.759   6.118   6.103   5.801   6.137   6.407   6.042   6.037   6.842   7.160   6.624   5.832   6.032   6.079   6.015 
+  7.247   8.028   8.472   8.652   8.563   8.701   8.971   8.802   8.847   8.833   8.387   8.616   8.837   8.973   9.399  10.001  10.676  11.394  11.699  11.343  10.405   9.825   9.467   9.237   9.650  10.398  10.600   9.715  10.005  11.128  11.819  10.568   9.807   9.666  10.040  10.336 
+  5.345   6.163   6.821   7.934   6.271   6.076   6.341   6.560   6.665   6.104   6.017   5.837   5.992   6.507   6.467   7.406   8.278   9.341   9.737   9.664   8.373   7.547   7.162   6.800   7.289   8.108   8.875   7.402   7.371   8.956  10.118   8.182   7.339   7.476   7.908   8.269 
+  4.618   6.629   7.793   8.256   6.886   6.459   5.428   4.677   3.603   6.474   6.269   6.850   6.264   5.513   6.397   7.043   7.413   8.844  10.231   9.244   8.165   7.853   7.188   8.090   8.613   8.387   8.227   7.573   7.381   8.309   8.630   9.519   7.462   7.431   7.975   7.827 
+  5.564   6.147   6.432   6.815   6.046   7.004   6.000   6.666   7.042   7.285   6.427   6.629   6.824   7.290   8.114   8.134   8.580   8.008  10.529  10.306   8.812   8.033   7.447   7.733   8.014   8.257   9.980   8.693   7.941   7.765   9.191   9.819   8.370   7.505   7.955   8.483 
+  3.972   5.258   6.649   7.120   6.156   6.446   7.492   6.917   6.835   5.864   5.610   7.250   8.235   8.146   7.429   8.767   9.191   8.735   9.540  10.271  10.444   9.043   8.370   9.008   8.703   8.592   9.495   8.573   7.703   8.680   9.795   9.411   8.694   8.615   8.757   8.790 
+  4.629   6.849   7.409   7.291   6.168   5.446   6.635   6.348   5.938   7.231   7.206   6.735   7.280   7.068   7.545   9.543   9.987  10.447  11.248   9.651  10.565   9.985   9.214  10.143   9.623   9.798   9.359   8.656   8.203   9.226  10.355  10.036  10.013   9.486   9.487   8.971 
+  6.057   6.222   5.943   5.268   5.888   6.500   7.301   6.973   5.863   7.087   7.564   8.102   8.726   8.163   8.874   7.823   9.841   9.130  10.171  11.727  11.701   9.327   9.576   9.378   9.817  10.676  10.254   9.421   9.169   9.311  11.377  11.460   9.805   9.147   9.697   9.008 
+  5.097   5.036   5.180   7.015   8.200   8.275   7.504   6.639   6.667   6.664   7.421   8.731   7.847   8.431   8.730   9.220   9.254   9.808  10.668  12.120  12.443  10.776   9.393   9.535  10.081  10.691  10.563   9.451   9.931   9.298  11.062  11.094   9.956   9.779   9.481   8.555 
+  4.944   5.620   6.510   6.965   7.305   7.089   8.507   8.166   6.313   6.670   7.764   7.601   8.447   8.025   7.125   9.332   9.337   9.436  10.081  12.021  12.108  10.602   9.419   9.774  10.093  10.585   9.987  10.027   9.554   8.840  10.243  11.748  10.517  10.119   9.576  10.216 
+  4.363   5.817   7.470   7.222   6.629   7.975   7.442   6.652   5.430   7.112   7.118   6.991   6.648   7.180   6.638   8.934   9.121  10.290  11.013  11.890  12.464  10.496  10.049   9.794   9.274  11.157  11.725   9.645   9.540   8.812  10.176  10.833  10.035   9.359  10.080   9.303 
+  7.105   6.135   7.293   6.391   7.982   8.807   8.424   6.992   7.895   8.406   8.353   8.670   8.143   8.018   9.068   8.287   8.482   9.992  10.457  12.087  12.212  10.622  10.044   9.692   8.971  10.352  11.095  10.306  10.268   9.926  10.650  11.023  10.109  10.522  10.442  10.239 
+  7.234   6.066   6.414   7.187   6.802   6.671   7.542   7.844   7.251   6.586   8.398   8.895   8.944   9.001   8.838   8.000   8.981  11.245  11.249  12.343  12.845  10.413  10.254  10.006   9.864  12.160  11.671  10.425  10.097  10.270  12.203  11.395   9.415   9.922  11.341  10.507 
+  7.399   7.170   5.395   5.740   7.333   8.073   8.487   7.923   6.651   7.475   8.349   8.685   8.633   8.967   9.141   9.157   9.589  10.477  11.462  12.591  11.667  10.341  10.142   9.849  10.059  11.476  11.593  10.389   9.382  10.484  11.532  11.167  10.513  10.472  11.085  10.544 
+  7.125   6.541   6.653   6.814   6.718   8.487   8.884   9.136   7.545   8.517   6.871   6.620   8.051   9.018   9.507   9.423   9.932  10.284  10.446  12.070  11.282  10.768   9.339  10.230  10.693   9.647  10.745  10.397   9.500   9.068  10.788  11.506  11.167  10.384   9.856   9.660 
+  6.372   6.700   6.808   6.668   6.239   6.624   8.419   9.250   8.411   8.493   8.272   7.370   8.994   8.761   9.292   8.739   9.674  10.583   9.580  11.526  10.990  10.536   9.961   9.325  10.972  10.554  10.776   9.770   8.900   9.060  10.546  11.818  11.353   9.948   9.035   9.414 
+  5.577   6.258   5.770   7.014   8.489   7.979  10.065  10.962   9.452   8.344   8.173   8.629   8.640   7.795   8.930   8.940  10.001  10.714  11.137  11.413  11.051  10.744   9.651  10.385   9.083  10.742  11.849  10.424   9.519  10.440  11.205  11.731  10.847   9.907   9.647   8.847 
+  6.291   6.587   7.559   9.182   9.869   8.283   9.781  10.561   8.143   8.979   9.284   7.791   8.465   7.098   7.807   8.772  10.229  10.422  10.992  12.093  11.160  10.321   9.717   9.943  10.609  10.927  10.851  10.926   9.065   9.881  11.213  11.488  10.524  10.677  11.019   9.867 
+  4.453   6.859   7.731   8.351   8.294   7.929   9.872  10.675   8.799   9.849   8.894   8.132   7.670   7.999   6.500   8.745   9.989  11.701  11.536  12.350  11.784  10.890  10.303  10.508  11.517  11.659  11.372  10.988   9.738   9.981  10.723  11.190  10.165  10.116  10.365   9.367 
+  5.483   4.152   4.671   7.421   8.967   8.373   9.996   9.938   8.569   9.197   8.701   8.969   8.403   7.685   7.287   8.452   9.702  10.954  11.283  12.114  11.412  10.673   9.651  11.099  11.593  10.983  10.850  10.915  10.664  11.298  11.716  11.968  10.345  10.416  11.044   9.411 
+  5.891   6.357   5.747   7.593   7.694   8.540   9.168   8.061   9.344  10.300   9.510   9.288   7.863   9.123   8.320   9.058   9.927   9.688  11.579  11.460  11.583   9.891  10.194  10.487  10.090   9.901  11.293  10.138  10.384  11.593  12.316  11.774  11.460  10.433  10.829  10.244 
+  7.076   6.839   7.008   7.314   7.054   7.099   9.572   9.936   9.527  10.481   8.659   9.312   8.062   7.823   8.554   8.677  10.763  11.047  11.105  10.051  10.865   9.603   9.133   9.631   9.892  10.217  10.684  10.203   9.784  11.352  12.562  11.372  11.307  10.626  10.942   9.680 
+  4.983   6.107   7.948   7.585   7.198   8.441  10.140   9.186   9.207  10.170   7.574   8.392   8.782   8.082   8.303   7.810  10.432  11.228  12.432  12.148  11.770  10.089   9.222  10.588   9.581  10.339  11.727  11.279  10.634  10.556  11.542  11.188  11.229  10.530  11.363  10.633 
+  5.702   6.064   7.313   8.716   7.876   7.794   9.872  10.129   9.534  10.483   8.251   8.557   9.199   8.913   9.444   9.625   9.966  10.573  12.045  13.330  11.948  10.261   9.376   9.943   9.785   9.874  11.262  10.841   9.646  10.303  10.957  11.523  11.553  10.552  11.169  10.472 
+  8.880   8.830   8.931   8.137   7.250   9.356  10.172  10.486  10.692  11.154  10.073   9.778   9.034   9.860   9.116   9.726  10.358  11.773  12.283  12.384  11.442  10.090  10.577  10.335  10.778  10.905  10.682  10.643  10.374  11.230  13.040  12.598  11.923  11.398  10.979   9.323 
+  8.576   8.089   7.691   7.414   8.372   8.585   9.071   9.758  10.255  11.097  10.027   8.972   8.518   9.017   8.445   8.982  10.909  11.707  11.733  12.556  12.426  11.234  11.422  11.380  10.869   9.857  11.726  11.088  10.215  11.348  13.223  12.106  12.246  11.952  10.615  10.116 
+  4.126   5.241   7.651   9.138   8.438   9.106  10.855   9.831   9.679  10.299   7.719   8.306   7.588   8.186   8.721   9.115  10.155  10.547  12.306  13.948  13.858  11.762   9.929   9.991  10.749  10.740  10.796  10.084   9.708  11.744  12.519  11.991  12.442  12.780  11.058  10.475 
+  6.619   5.753   5.278   7.700   7.345   8.705  10.686   9.126   9.206   9.590   8.151   7.962   7.817   7.655   8.446   8.708   8.892  10.900  11.596  13.465  12.727   9.955  10.292  10.390  10.662  11.265  11.677  10.079  10.783  11.658  12.601  11.884  12.887  12.701  11.729  10.160 
+  6.376   6.665   6.032   6.417   7.802   9.513  11.321   9.747   8.683   9.129   7.737   7.495   7.038   7.631   8.696   8.684   9.060  10.740  11.931  12.230  12.367  11.120  10.137   9.980  10.437  10.795  11.547   9.902   9.620  10.310  12.103  11.251  11.380  11.266  10.918   9.514 
+  7.187   6.982   7.591   8.276   8.248  10.213  12.127  10.757   8.150   8.329   8.707   8.454   7.776   8.442   9.398   9.572   8.593   9.746  11.450  12.860  12.756  11.368   9.390   9.306  10.125  10.450  10.254   9.578   8.763   9.839  12.400  11.769  11.079  10.034  10.036   8.974 
+  6.822   6.602   5.969   6.429   7.264  10.941  12.375  10.489   7.699   6.722   7.367   8.279   8.376   7.982   8.277   9.490  10.608  10.026  11.016  13.160  12.585  11.247   9.558   9.852   9.189   9.173  10.900  10.149   8.865   8.381  10.530  10.810  11.416  10.609  10.099   8.903 
+  4.591   6.929   6.734   7.687   6.243  11.264  12.404   9.885   6.604   6.752   7.362   7.461   7.248   7.423   6.436   8.983   9.936  10.430  11.579  12.130  11.890  10.185   9.270   9.748   9.732   9.952  10.589   9.762   9.564   9.021  10.398  11.177  12.073  11.929  10.813   9.962 
+  5.804   7.936   7.687   7.404   7.904  11.325  12.444  10.139   7.756   6.336   7.027   7.748   6.217   6.570   6.328   8.783   9.701   9.676  10.482  12.769  12.582  10.531   9.713  10.152   9.319  10.101   9.600   8.930   9.502   9.819  11.088  11.222  11.412  11.680  10.828   9.710 
+  6.199   7.477   8.109   7.744   7.637  11.425  12.270   9.701   8.104   8.060   7.770   8.743   8.336   7.434   7.519   8.728   9.278   9.745  11.276  12.156  11.331  10.124   8.906  10.292  10.292  10.213  10.457   8.669   8.154  10.560  12.454  11.402  10.858  11.810  10.578   9.759 
+  5.362   7.239   8.335   8.699   7.694  10.958  11.697   9.737   6.905   7.130   7.451   7.648   7.251   8.168   6.602   7.134   8.914   9.894  10.514  12.761  12.004  10.031   8.489   9.395   9.490   8.916   8.967   8.887   8.506  10.224  12.319  11.457  11.412  11.286  10.217   9.939 
+  6.119   7.152   7.834   8.396   7.532  10.849  10.379   7.833   7.609   7.109   8.032   7.783   7.918   8.009   8.200   8.590   9.828  10.362  10.863  12.254  10.879   9.856   8.912   9.424   9.324   9.450   8.830   8.294   8.700   9.333  12.119  11.197  10.093  10.815   8.831   8.085 
+  9.716   7.949   7.974   6.779   8.106  10.888  10.661   8.609   9.153   7.786   6.894   6.957   8.562   7.892   9.424  10.496   9.611  10.160  10.777  11.787  10.880   9.157   8.079   8.126   9.403   9.838   9.374   8.935   9.112   9.890  10.878  10.572  10.479  10.642   9.522   8.520 
+ 10.275   9.578   7.721   7.886   9.657  10.733   8.545   8.360   8.158   6.546   7.711   8.050   7.808   7.294   8.297   9.353  10.452   9.521  10.899  10.730  10.124   9.378   8.151   8.064   9.048   9.658  10.062   9.409   9.167   9.486  10.690   9.923  11.393  11.109   9.707   9.229 
+  7.776   6.872   6.490   7.685   9.414  10.867   9.783   8.921   6.752   5.404   7.626   7.878   5.856   7.393   7.735   8.912   8.510  10.007  11.192  11.792  10.587  10.005   8.451   7.877   8.062   7.778   8.961   9.159   7.195  10.028  11.419   9.447  10.520  10.715  10.066   9.662 
+  7.663   6.258   6.769   7.865   8.700   9.649   9.094   8.098   7.365   5.923   5.729   6.860   6.525   5.298   7.457   7.943   8.984   9.440   9.656  11.073  10.278   8.602   8.748   7.780   8.444   8.672   8.829   7.610   7.710   7.994   9.535   9.849  10.280  11.069   9.677   9.313 
+  8.443   7.539   8.071   8.932   8.052   8.894   8.789   8.097   6.419   6.393   7.126   7.770   7.813   6.706   6.901   7.680   8.544   9.634  11.248  12.011  11.323   9.399   8.137   7.851   8.740   8.802   9.194   7.734   7.102   8.940   9.706   9.127   9.780  11.416   9.785   9.410 
+  8.268   8.581   8.048   7.326   6.427   8.939   8.843   7.618   7.137   6.912   7.430   7.137   7.716   7.640   7.383   7.562   8.676   9.830  10.862  11.816  11.898   8.293   7.236   8.223   8.304   9.808   9.882   7.868   7.043   8.408   9.464   9.399   9.235   9.646   8.870   7.831 
+  9.208   9.687   9.064   7.064   7.050   8.526   7.392   8.230   8.192   6.967   5.702   6.947   6.939   6.951   7.065   7.763   8.823   8.673   9.742  10.599  10.342   8.879   7.552   7.152   8.320   9.358   8.689   8.261   8.375   8.120   9.146   9.096   9.417   8.834   7.871   7.531 
+  8.524   7.102   6.203   7.914   7.960   9.150   7.948   6.373   6.121   6.133   5.430   7.371   8.065   6.526   7.417   8.020   8.800   9.551   9.850  10.263   9.404   8.430   7.539   7.797   8.290   8.744   8.104   8.009   8.293   7.832   8.422   8.441   9.068   8.055   7.240   7.655 
+  7.922   7.831   7.426   7.463   8.399   9.288   7.703   4.765   5.818   6.596   6.005   6.264   6.653   5.746   6.998   7.254   6.899   7.924   9.769  11.450  10.347   7.867   6.709   7.238   7.511   8.063   7.635   6.908   7.038   6.982   7.224   6.894   7.531   6.716   6.602   7.518 
+  7.656   6.982   5.291   4.900   6.435   8.567   7.630   4.625   4.661   4.214   6.192   6.569   6.553   5.213   5.638   6.929   6.987   7.723   9.151  11.042  10.524   7.612   6.719   6.264   5.401   6.592   6.735   5.977   5.952   6.856   7.294   8.019   7.553   7.362   7.421   7.579 
+ 11.429  11.743  11.913  12.304  12.508  12.631  12.613  12.444  11.953  11.277  10.659  10.086   9.572   9.030   8.837   8.473   8.443   8.621   8.989  10.065   9.281   8.757   9.012   9.137   8.782   8.298   6.835   6.501   5.951   7.052   6.938   6.878   7.316   7.766   7.153   6.779 
+ 13.666  13.385  13.487  14.406  14.493  14.360  14.633  14.538  13.793  12.709  11.787  11.306  10.938   9.865   9.891   9.674   9.006   9.812   9.862  10.179   9.958   9.754  10.473  10.416  10.051   9.519   7.952   7.874   7.625   6.896   6.716   6.536   7.685   7.997   7.794   7.076 
+  9.849   8.650   9.802  11.486  12.117  13.540  13.566  12.949  11.458  10.675   9.797   9.922   8.359   7.621   6.239   4.905   6.581   7.036   7.709   7.250   7.048   6.123   6.615   6.795   6.546   7.560   5.915   5.355   5.226   5.996   5.693   5.129   6.020   6.798   6.660   5.495 
+ 11.394  10.771  10.426   9.287  10.422  10.950  11.008  11.583  11.472  10.712   9.360   7.924   6.354   6.590   6.174   5.306   4.710   5.869   6.778   7.289   6.233   5.869   6.798   6.743   5.361   5.559   6.916   7.402   6.508   6.228   6.514   6.180   6.695   6.058   5.810   5.875 
+ 10.942  10.254  10.178   8.776  10.589  11.058   9.974   9.541   8.968   8.559   8.707   7.133   7.449   6.351   5.506   4.961   4.628   4.587   5.110   6.550   6.034   6.799   5.694   6.137   5.104   5.708   6.799   6.649   6.073   6.225   5.822   6.095   6.368   6.373   5.580   5.872 
+  9.045   7.577   8.064   7.182   7.948   7.677   8.383   9.362   7.471   6.851   5.330   4.664   5.064   4.700   3.862   4.199   5.530   5.524   5.077   6.049   5.522   5.737   5.143   5.641   5.125   5.186   5.771   6.024   5.702   5.500   5.283   4.766   5.982   6.428   5.866   5.130 
+  8.229   7.153   7.771   7.442   7.221   7.094   6.151   6.497   6.868   5.736   5.044   6.113   5.773   5.478   5.150   4.919   5.493   5.108   5.122   5.165   5.418   4.788   5.524   4.878   3.546   3.603   5.247   5.140   4.421   4.528   5.283   5.468   4.271   5.237   4.534   3.574 
+  7.884   7.005   6.847   7.552   6.020   5.467   4.408   5.616   6.412   6.559   6.060   4.675   3.390   5.493   5.487   4.814   5.517   5.764   5.510   5.250   5.168   5.981   5.716   4.652   4.115   4.467   5.455   5.424   4.812   4.166   4.451   4.712   4.236   4.950   3.917   2.388 
+  8.191   8.286   7.322   7.791   7.505   5.677   6.798   6.705   5.604   5.369   5.643   4.316   4.357   5.806   5.717   5.134   4.656   5.838   5.531   4.629   5.484   6.703   6.049   4.892   4.973   4.461   4.750   4.678   4.141   4.313   5.000   5.275   5.122   5.690   3.871   2.715 
+  6.860   6.469   6.397   5.826   6.309   5.580   6.533   4.906   5.776   6.019   6.135   5.015   4.687   6.153   5.955   4.848   3.386   5.264   5.565   6.493   5.779   6.091   5.643   4.449   4.476   5.361   4.864   4.703   5.155   4.341   4.540   5.592   5.406   5.531   4.131   3.512 
+  7.222   5.914   4.939   6.194   5.814   6.848   6.706   5.605   5.123   5.304   4.965   5.483   4.246   4.675   5.346   3.890   4.175   5.240   4.889   5.971   6.554   5.671   5.376   5.332   4.864   5.019   4.491   5.103   5.065   4.324   5.147   4.990   5.074   4.959   4.139   3.165 
+  5.941   5.804   4.936   5.450   6.209   6.856   6.139   5.573   5.136   5.201   5.830   6.446   5.733   4.471   5.121   5.195   4.803   5.973   5.780   5.562   6.396   5.466   5.558   4.307   4.515   3.927   4.699   5.768   4.784   4.052   4.032   4.050   4.854   4.377   3.948   3.918 
+  8.061   7.753   6.569   6.324   8.497   8.028   7.276   8.546   7.471   5.231   6.266   6.706   5.475   4.902   4.552   4.905   5.651   6.643   6.221   5.581   6.414   5.209   4.809   5.501   5.199   3.897   4.410   4.906   4.408   4.247   4.715   4.559   4.306   4.423   4.277   4.427 
+  6.383   7.437   6.539   7.901   9.277   8.257   7.447   8.243   7.834   7.728   5.946   4.222   5.225   4.742   4.674   5.331   5.295   5.762   6.204   6.210   5.895   5.405   5.032   5.103   5.969   5.531   4.629   4.662   4.165   4.122   4.577   4.907   4.170   3.993   4.347   3.705 
+  7.436   7.770   7.329   7.092   8.055   8.152   7.904   7.612   6.996   7.163   5.174   5.906   6.135   5.702   5.146   5.250   5.714   6.368   6.811   6.469   6.446   5.561   5.305   4.903   5.621   4.403   5.131   5.163   4.018   3.504   5.318   5.514   5.314   4.270   4.234   3.585 
+ 11.869  11.476  10.550  11.066  11.704  11.772  11.454  11.260  10.540   9.505   8.864   9.212   9.788   9.680   9.125   8.738   9.466   9.845   9.035   7.302   6.638   6.069   6.697   6.261   6.768   5.435   6.221   5.972   6.256   6.686   6.639   7.844   7.689   7.347   6.388   5.439 
+ 12.017  11.536  10.704  10.507  10.505  10.512   9.571   9.466   9.205   9.063   7.971   6.800   7.542   7.887   7.735   7.843   7.946   7.945   7.212   5.916   5.418   6.207   6.601   6.637   6.994   6.620   5.560   6.450   6.441   5.590   5.233   6.620   6.558   6.324   6.118   4.725 
+  5.056   6.424   6.817   7.764   8.783   7.603   7.974   7.763   7.825   7.094   6.011   5.997   4.527   5.942   6.331   5.817   6.401   6.462   5.430   5.667   5.238   6.043   6.324   6.561   6.350   5.980   5.993   6.515   6.971   6.706   5.690   6.098   6.647   6.377   6.279   4.922 
+  5.621   6.136   7.189   9.323   8.530   8.667   9.137   8.272   7.491   7.786   7.013   6.911   6.736   6.648   5.538   7.520   7.657   8.033   6.903   6.253   7.700   7.046   7.351   8.204   7.230   7.411   7.386   8.243   8.075   7.621   7.464   7.775   7.732   7.928   7.491   6.626 
+  7.725   7.941   8.256   9.677   9.444   8.070   8.737   9.280   8.308   7.426   7.000   7.564   6.841   7.806   6.782   6.171   8.488   8.362   7.912   7.404   7.397   7.412   8.323   8.826   8.113   7.971   7.396   9.588   9.801   8.701   8.063   8.639   8.833   8.245   8.044   7.458 
+  7.771   7.686   7.334   7.544   8.371   8.463   9.938   9.387   8.076   7.655   6.820   6.491   6.089   7.285   7.708   8.159   7.187   7.898   7.721   7.407   7.921   6.752   7.860   8.659   7.686   8.032   7.297   7.192   7.143   7.462   7.933   8.440   8.220   7.413   7.647   6.852 
+  7.699   6.493   7.230   9.507  10.221  10.368  10.558   9.265   7.783   6.810   6.326   7.038   7.618   6.949   7.434   7.341   7.378   6.458   7.596   7.616   8.264   7.447   6.387   6.843   7.956   7.759   8.453   8.116   7.710   7.241   7.758   7.664   7.490   8.553   8.123   7.518 
+  9.292   9.922  10.834  11.274  11.234  11.427  10.883  10.946   8.971   7.684   7.595   7.306   7.760   7.059   7.255   7.780   7.517   7.277   8.232   8.007   8.045   7.508   8.530   8.222   9.036   8.427   8.802   9.547   8.829   9.257   9.219   9.569   8.638   8.933   8.103   8.668 
+  8.495   9.557  10.295  10.516   9.005  10.211   9.213   9.459   8.521   7.661   8.282   7.699   7.667   7.990   7.398   8.652   8.581   7.824   8.626   8.096   7.912   7.603   7.309   8.285   8.606   8.981  10.056  10.959  10.414   9.698   9.234   9.467   9.860   9.347   8.654   8.774 
+ 11.003  10.591   9.731  10.609  11.482  10.081   8.987   9.357   9.161   9.424   8.229   7.300   6.889   7.931   8.259   9.125   9.029   9.913   9.158   8.876   7.235   7.307   8.004   7.760   9.348   9.768   7.973   9.442   9.576   9.237  10.051   8.387   8.833   9.593   9.674   8.513 
+ 11.265   9.400   9.695  10.792  11.670  11.282   9.106   7.811   8.222   8.952   8.695   7.491   7.910   8.038   9.133   8.357   9.330   9.749  10.352   9.257   7.518   6.927   6.339   6.921   8.423   8.448   7.582   8.144   7.937   8.282   7.757   7.110   7.360   8.174   7.698   7.219 
+  9.762   7.931   9.450  10.641  10.331   9.543   7.244   7.747   7.794   7.439   7.281   6.623   7.311   8.393   7.683   7.460   9.227   9.095   8.261   6.903   6.144   5.393   6.446   7.502   7.607   6.184   5.556   6.602   6.027   5.087   5.954   6.632   6.247   6.961   5.568   5.119 
+  9.992  10.461  10.653  10.532   8.907   8.139   6.540   5.507   7.745   7.906   7.555   7.284   6.985   7.248   7.341   6.710   7.372   7.598   6.128   6.014   5.168   5.127   6.609   6.663   6.146   3.930   5.427   5.751   5.451   4.673   4.427   5.645   5.623   5.388   5.600   4.693 
+  8.203   7.507   6.678   6.611   6.146   4.622   4.266   4.110   4.494   4.898   4.269   4.259   4.622   4.657   5.095   4.954   4.681   6.201   5.251   5.359   5.387   4.474   5.361   5.811   5.400   4.461   5.039   5.350   4.669   4.482   4.556   4.698   5.083   5.328   5.794   4.621 
+  5.226   5.867   5.260   5.922   5.899   4.123   2.915   4.170   3.085   3.446   3.750   4.897   3.611   4.096   5.133   4.644   5.057   5.899   4.139   4.813   5.293   4.998   5.602   5.053   4.498   3.712   3.904   5.963   6.634   5.839   4.903   5.333   5.329   3.993   4.430   4.197 
+  5.543   5.965   5.404   5.512   5.272   4.645   4.228   4.574   3.891   4.504   4.538   5.809   4.556   4.459   4.428   4.512   5.295   4.890   4.952   5.112   4.970   4.995   5.808   5.307   5.546   4.412   4.177   5.574   5.958   5.603   4.582   4.925   4.965   4.337   4.485   3.972 
+  5.120   4.973   4.441   4.937   4.964   4.047   3.545   3.831   3.767   3.694   4.083   4.694   4.144   4.715   3.966   4.357   4.746   4.755   5.822   3.652   4.898   5.464   5.225   4.240   3.906   4.196   2.910   3.915   4.138   4.257   4.424   4.998   4.710   4.635   4.678   3.428 
+  7.556   6.849   6.489   6.359   5.461   5.854   5.410   4.861   5.122   4.522   4.642   4.920   4.107   4.884   4.701   3.658   4.134   5.401   5.208   4.253   5.426   5.291   4.188   5.238   5.116   5.009   3.881   4.618   4.396   3.967   3.848   4.045   3.377   3.764   2.753   2.029 
+  4.960   5.946   5.964   5.827   4.341   4.411   4.348   4.129   3.683   2.529   4.840   4.915   2.991   4.059   3.838   2.701   3.351   5.379   4.665   3.793   4.183   3.969   4.212   5.061   5.334   4.624   5.078   4.501   4.014   3.505   3.651   3.701   3.782   3.891   2.610   1.550 
+  5.629   6.937   6.036   4.175   3.616   4.737   5.130   3.516   2.019   2.100   4.207   5.214   4.408   3.756   3.959   3.610   3.646   4.393   4.467   4.484   3.888   3.992   3.902   3.284   4.506   4.413   4.815   4.270   3.806   3.206   3.441   4.074   4.283   4.270   3.262   2.162 
+  6.634   6.569   4.932   3.745   2.994   2.631   4.606   4.825   3.314   2.549   2.632   3.533   2.809   3.196   3.672   3.181   3.735   4.280   4.675   4.154   4.026   2.471   3.726   3.643   4.552   4.950   4.117   3.561   3.892   3.774   3.330   3.842   3.916   4.259   3.517   3.194 
+  5.922   5.401   5.543   4.947   3.267   4.751   4.720   3.029   3.457   4.521   4.834   3.573   2.588   3.914   4.525   2.993   4.450   4.302   3.756   3.880   4.296   3.189   3.891   4.175   4.561   3.340   2.963   3.444   4.152   3.218   3.776   4.306   4.817   3.736   2.409   2.617 
+  5.010   5.503   4.663   3.942   4.033   4.537   5.387   4.480   4.608   4.505   4.903   4.702   4.061   5.199   5.633   5.251   4.405   4.999   4.662   5.002   3.624   3.090   2.785   4.056   4.502   3.555   3.867   3.853   3.780   3.298   3.496   3.371   3.542   3.006   2.386   2.217 
+  4.294   4.947   5.145   3.709   3.669   4.999   4.383   4.159   4.061   3.861   3.920   4.481   5.045   5.391   5.372   5.328   4.285   3.829   4.425   5.267   4.272   4.313   4.313   4.189   4.269   3.651   4.340   4.326   4.269   4.242   3.599   3.829   3.939   3.081   3.131   2.032 
+  5.860   3.283   4.492   5.343   4.758   5.362   5.195   4.606   4.652   5.450   5.369   4.958   4.523   5.308   5.265   4.815   5.710   5.611   5.604   6.544   6.047   5.118   4.401   3.936   3.165   3.242   3.611   3.973   3.479   3.284   3.497   3.494   3.812   3.849   3.146   2.365 
+  6.226   6.163   5.800   4.682   5.344   6.714   6.350   5.190   5.038   6.086   6.380   5.473   5.143   4.524   5.530   4.666   5.798   6.001   7.222   6.882   6.479   5.003   4.790   5.033   4.040   3.611   3.865   4.468   3.678   4.149   4.956   4.636   3.864   4.230   3.937   2.703 
+  5.140   5.788   5.858   4.830   3.984   5.886   6.614   5.567   5.579   4.619   3.863   4.705   5.269   4.882   5.503   6.388   6.189   6.615   7.334   7.480   7.540   6.060   5.029   4.049   4.532   4.205   3.433   4.481   4.091   3.949   5.256   4.586   3.827   3.990   3.896   2.594 
+  5.534   4.934   4.464   4.234   4.927   6.442   5.936   6.141   5.637   3.989   4.463   5.546   5.515   5.543   4.254   6.211   5.814   5.994   7.573   7.936   7.227   5.619   5.338   4.765   4.328   5.298   4.244   3.852   3.888   4.267   4.733   4.298   4.323   5.016   3.789   4.054 
+  5.943   5.221   5.791   6.000   4.843   5.827   6.633   7.135   6.809   6.775   6.513   5.475   5.201   5.445   5.674   4.900   5.006   7.202   8.067   8.477   8.204   7.020   5.418   5.225   5.020   5.319   5.020   4.813   4.599   5.603   5.801   5.005   4.850   5.788   4.833   4.088 
+  6.612   6.714   6.335   6.948   5.540   6.272   6.701   5.345   6.515   6.364   5.441   5.124   5.533   6.266   6.470   4.729   6.554   7.587   8.808   9.041   8.810   7.738   6.118   5.709   5.079   6.180   4.927   4.751   4.302   5.680   6.493   4.867   5.069   5.631   5.447   4.732 
+  6.378   6.644   6.403   5.233   5.770   6.584   6.624   6.100   5.565   7.104   5.905   4.356   5.536   6.109   6.326   4.772   6.534   8.229   8.739   9.951   9.939   6.485   6.662   5.707   5.324   6.323   6.107   4.864   5.106   6.050   5.708   5.435   5.523   6.436   5.628   4.654 
+  5.928   5.175   5.067   5.347   5.805   5.326   6.868   7.113   5.057   6.324   6.598   6.279   5.606   5.667   5.950   6.359   7.061   7.515   7.925   9.411   8.836   7.661   6.539   5.956   5.607   4.942   5.448   5.840   6.286   6.811   6.763   5.700   5.639   5.946   5.369   4.983 
+  5.165   5.182   5.158   5.786   6.932   6.832   6.256   5.854   5.299   5.965   5.839   5.603   4.833   4.497   4.643   5.610   5.652   7.824   8.791   9.803   9.867   6.651   5.984   6.024   5.686   5.585   5.201   5.316   5.058   6.051   5.932   5.787   5.900   5.814   6.003   5.320 
+  5.172   4.971   3.718   4.628   5.082   6.524   6.405   6.603   5.218   5.131   4.293   4.871   4.834   5.780   6.377   6.651   6.350   7.556   8.734  10.434  10.663   8.384   6.514   6.302   5.848   5.095   5.093   5.832   6.290   6.055   5.885   5.627   5.836   6.729   6.310   5.385 
+  4.227   5.375   4.299   1.786   5.107   6.206   5.080   5.891   5.230   3.443   3.864   5.408   4.060   4.688   4.967   6.465   6.963   6.961   6.805   9.164   9.764   7.721   7.061   6.188   5.673   6.526   5.421   5.945   6.335   6.135   5.573   5.957   5.825   6.323   5.840   6.549 
+  4.333   5.376   5.405   5.093   4.090   4.856   5.250   5.604   4.748   3.299   4.209   4.996   5.051   5.861   5.472   6.009   7.274   7.590   7.108   8.813  10.191   7.629   6.324   6.071   6.009   5.887   4.840   6.440   6.879   6.795   6.393   6.327   5.775   7.045   6.922   6.425 
+  6.296   5.258   4.401   3.398   5.044   5.672   5.239   6.204   4.418   4.570   5.915   5.383   4.475   6.139   5.421   6.298   5.832   7.984   8.881  10.562  10.786   8.239   5.728   5.277   5.136   5.751   5.868   6.264   6.832   6.818   6.189   5.476   6.093   7.222   6.936   5.635 
+  6.281   4.798   3.175   4.071   5.567   5.937   5.077   5.684   4.436   6.368   5.899   4.860   5.642   6.000   6.488   6.584   5.649   6.529   8.769  11.272  10.132   8.222   7.018   5.805   6.443   6.360   5.537   6.748   7.029   6.664   6.658   5.210   5.273   6.255   6.283   5.972 
+  5.280   6.026   5.927   4.579   4.830   4.686   4.943   5.677   5.181   4.878   4.695   5.191   5.203   5.795   6.042   6.170   5.898   7.075   8.189  11.129  10.271   8.078   6.260   6.306   6.185   5.770   5.493   5.043   5.189   7.163   6.743   5.650   6.580   7.102   7.171   6.700 
+  5.316   5.843   5.775   3.688   3.614   3.181   3.847   6.386   6.497   5.899   5.880   5.489   5.080   5.481   6.172   5.812   7.893   8.552   8.610   9.569   9.477   8.497   7.192   5.323   6.410   6.369   6.488   5.900   7.441   8.269   7.597   5.930   5.852   6.142   6.654   5.426 
+  5.797   6.369   5.280   3.947   4.144   5.521   6.075   6.910   6.682   7.038   6.597   6.155   5.596   4.646   6.488   6.334   7.059   7.897   8.220  10.117   9.536   8.028   7.328   6.124   5.965   5.768   6.377   6.055   7.662   7.801   7.039   5.671   6.392   7.172   6.693   5.230 
+  5.353   5.416   4.583   4.549   5.134   5.115   4.525   4.267   5.417   5.001   5.732   5.204   5.299   6.170   6.359   6.628   7.830   8.267   8.756   9.687   9.247   6.550   5.403   6.974   6.727   7.104   6.013   6.529   7.527   6.805   6.397   5.247   5.997   6.461   6.755   5.452 
+  7.616   7.402   6.719   5.261   5.923   5.845   4.043   4.817   5.906   6.076   5.522   5.127   5.864   6.176   6.756   6.490   6.909   6.954   8.207  10.518  10.126   8.422   6.483   6.607   6.231   6.534   5.556   5.640   7.547   8.241   6.820   6.035   6.063   6.225   6.577   5.442 
+  6.127   5.720   5.278   6.334   6.418   4.703   6.455   6.407   5.309   6.089   5.394   5.026   5.882   5.701   6.149   6.986   7.921   7.974   8.469  10.747   9.447   7.301   6.571   5.854   5.952   6.170   6.013   5.993   7.041   7.901   6.383   5.989   5.918   6.836   7.209   5.877 
+  6.232   6.199   3.803   5.875   5.998   6.663   6.794   5.738   5.161   6.214   6.800   5.116   4.879   4.628   4.059   5.473   6.616   7.637   8.267   9.552   9.687   8.343   6.150   6.023   6.551   5.867   5.792   6.354   6.638   7.064   6.209   5.484   5.382   6.740   7.582   6.480 
+  6.268   7.000   6.098   6.228   6.325   6.655   6.447   5.676   3.805   5.406   5.899   5.581   3.905   4.475   4.034   5.499   6.469   6.196   7.502  10.888  10.477   7.511   5.675   5.844   6.344   6.752   6.011   5.767   6.465   6.601   4.612   4.942   5.785   6.141   6.077   4.940 
+  6.243   6.604   5.723   5.851   7.081   7.051   6.125   4.545   5.215   4.722   5.871   6.325   4.918   4.431   5.432   5.946   6.790   7.270   8.746  10.970  10.683   7.385   6.583   6.057   6.131   6.557   6.279   6.397   6.919   7.217   5.614   5.611   5.896   6.235   6.597   4.641 
+  5.620   6.519   5.777   5.540   5.568   5.770   5.446   6.965   6.608   6.537   6.452   4.288   3.779   5.096   4.948   5.496   7.282   7.706   9.565  10.263   9.075   7.856   6.761   5.750   6.015   6.090   6.165   6.169   7.125   7.153   5.482   6.160   6.459   6.494   6.276   4.844 
+  5.484   6.656   6.551   5.290   6.592   7.279   7.186   7.499   5.984   5.702   6.211   5.674   5.033   5.190   5.445   5.362   7.460   7.662   8.559   9.174   8.956   8.222   5.943   6.596   6.541   5.637   6.189   6.289   7.063   7.353   6.851   4.936   5.991   5.921   6.383   5.910 
+ 10.275  10.292   9.544   8.193   8.397   8.005   8.461   8.408   7.084   4.887   3.792   3.796   4.054   5.745   5.746   5.792   6.798   8.458   8.818   9.010   9.219   8.188   6.561   5.462   4.878   4.864   5.582   5.651   7.101   7.423   6.319   5.629   5.278   5.663   6.153   4.861 
+ 10.564   9.798   8.629   7.696   6.634   6.513   8.219   7.767   6.241   4.607   3.212   4.740   4.414   4.477   5.373   7.027   6.720   7.547   8.228   8.792   7.744   6.804   6.540   5.764   6.126   6.787   5.002   5.746   6.877   7.320   5.998   6.501   6.195   5.675   5.571   4.805 
+  6.697   6.655   6.653   7.502   6.440   4.576   6.195   7.649   7.070   4.765   5.310   5.010   5.228   5.461   4.946   4.491   5.369   7.129   8.889  10.067  10.424   8.458   7.001   6.096   5.969   6.930   6.115   5.569   7.102   6.673   5.552   5.498   4.967   5.943   5.957   5.507 
+  5.849   6.268   6.076   6.353   5.401   6.237   6.571   6.146   6.552   6.489   6.661   6.564   5.412   6.682   4.761   4.422   5.177   6.313   8.791  10.314   9.768   7.589   6.951   6.485   5.717   5.831   5.041   5.456   6.724   7.049   5.653   5.541   5.733   6.000   6.746   5.933 
+  4.348   4.642   5.662   6.534   6.115   6.184   5.639   5.713   6.055   6.426   6.616   5.924   5.558   6.255   4.628   4.587   6.405   6.121   7.642   9.155   8.900   7.226   6.316   6.892   6.141   5.596   5.619   6.154   6.312   6.739   6.811   5.782   5.232   6.023   6.896   5.032 
+  4.313   4.272   4.973   5.708   6.322   5.965   5.489   5.239   6.009   5.254   4.502   5.530   6.225   5.582   5.457   5.447   6.445   6.602   7.322   9.751  10.384   8.018   7.252   5.853   5.525   4.498   3.879   4.610   7.075   7.351   5.869   5.653   5.678   5.246   5.928   5.252 
+  3.825   4.976   5.110   5.786   5.325   5.913   7.068   6.196   6.558   5.477   4.243   5.941   6.326   5.607   5.121   5.856   6.642   6.983   8.874   9.957  10.105   7.319   5.697   5.628   5.680   5.263   4.964   5.058   5.527   6.670   6.112   6.019   5.747   5.419   5.830   5.042 
+  4.468   5.087   5.352   5.401   6.424   5.745   7.220   6.010   5.907   4.335   5.114   5.651   5.572   5.742   5.817   5.278   6.652   7.255   8.143   9.769   8.938   6.435   4.923   4.966   6.132   6.293   5.546   5.512   5.772   6.196   5.228   4.929   5.256   5.605   5.776   4.998 
+  4.007   5.083   5.556   5.679   5.054   6.407   6.902   6.854   6.199   5.843   5.514   5.132   4.588   5.087   6.229   5.218   5.781   6.516   8.424   8.721   7.580   6.830   6.020   5.675   5.218   5.379   5.330   5.679   5.781   6.384   5.473   4.889   5.392   5.290   5.559   4.324 
+  5.235   5.113   5.089   4.967   4.817   6.177   7.388   6.336   5.963   5.709   5.327   5.402   4.456   4.908   4.286   4.222   5.328   6.722   7.376   8.018   7.591   6.092   5.886   5.099   5.156   5.386   5.489   5.971   6.514   6.319   5.258   4.618   4.707   5.105   4.677   3.728 
+  3.442   4.732   5.335   5.567   5.431   6.306   6.872   5.822   4.643   6.318   5.693   6.133   6.408   5.678   4.506   5.096   4.257   6.593   6.879   7.142   6.323   5.324   4.930   5.739   6.012   6.162   5.772   4.775   6.122   6.462   5.802   5.496   5.021   5.500   4.821   4.066 
+  6.491   5.527   5.727   5.815   4.531   5.924   7.156   7.518   7.304   7.039   5.416   5.244   5.608   5.297   5.561   6.348   6.309   6.795   7.041   8.097   7.681   5.979   4.582   5.679   5.761   5.951   5.826   5.692   5.968   6.732   6.388   5.647   5.211   5.836   5.444   3.955 
+  6.204   6.510   6.514   6.245   5.772   5.253   5.084   6.668   6.151   6.418   5.560   5.848   4.805   5.231   4.862   5.752   6.149   5.894   7.144   8.564   6.157   5.921   5.623   4.969   5.151   5.855   5.810   6.170   5.297   6.861   5.716   5.331   5.572   5.245   5.324   4.063 
+  4.489   5.938   5.654   5.667   5.865   5.263   6.670   7.442   7.139   5.808   3.907   3.612   4.346   4.233   4.450   5.605   5.539   5.667   8.247   8.815   7.026   5.953   4.873   5.264   4.811   5.453   5.523   5.806   5.364   6.167   5.295   5.485   4.536   5.447   5.020   3.539 
+  6.556   5.410   5.876   5.145   5.805   5.857   4.873   3.500   3.192   3.314   4.677   4.452   4.533   4.325   4.222   4.900   5.552   6.076   7.808   8.621   6.478   6.390   5.062   5.563   4.675   4.685   5.194   6.239   6.461   6.033   4.679   4.809   5.427   5.297   4.395   4.082 
+  6.868   6.613   4.074   5.376   5.817   6.271   5.444   3.626   4.356   4.006   4.723   5.939   4.354   4.607   4.780   5.691   5.225   5.061   6.650   7.704   6.392   5.887   5.290   4.234   5.019   5.496   4.615   5.441   5.605   4.875   4.442   4.779   5.226   4.412   3.922   3.112 
+  7.023   6.829   5.953   6.136   5.977   3.727   4.048   5.974   6.284   5.630   5.163   5.575   5.002   4.435   4.684   5.059   5.157   4.868   6.723   6.586   6.013   4.870   5.355   4.215   4.152   4.894   5.149   4.289   4.338   3.827   4.102   4.870   4.560   4.424   3.028   2.433 
+  4.697   5.698   5.537   5.430   5.123   4.190   4.647   5.668   6.949   5.424   4.016   5.192   3.868   5.055   4.362   4.075   4.212   6.352   6.354   5.520   5.379   3.872   4.042   4.442   4.242   4.675   5.045   4.819   4.995   4.528   4.294   3.962   3.785   2.679   2.820   1.905 
+  5.055   6.749   7.035   6.352   5.563   5.529   6.833   7.719   7.424   5.462   4.068   3.730   3.637   4.718   3.422   3.832   4.902   6.953   6.629   6.605   5.508   4.506   4.763   5.775   5.232   4.066   4.211   4.661   5.098   4.113   3.291   4.879   5.085   3.589   3.634   3.228 
+  5.841   4.492   3.470   4.408   6.042   6.396   6.689   5.652   4.778   4.375   4.646   4.855   5.248   3.873   3.430   4.089   5.924   6.448   6.147   6.523   5.467   5.337   5.254   4.905   4.839   4.692   4.217   5.045   5.530   4.172   5.177   5.543   5.416   4.565   4.526   3.759 
+  6.313   6.547   6.306   7.089   7.372   6.082   5.917   6.029   5.333   4.960   4.797   5.997   5.718   3.927   5.118   5.205   5.617   5.931   5.274   4.871   4.614   4.604   5.679   6.074   5.361   5.286   5.755   5.791   5.902   6.007   6.299   6.274   5.887   5.824   5.534   4.567 
+  4.606   4.165   3.078   5.368   5.900   6.328   7.369   6.208   5.837   5.960   4.725   6.063   5.636   3.031   5.578   5.179   4.614   5.540   6.220   6.602   6.364   5.700   5.080   4.732   5.895   6.263   6.840   6.520   7.137   5.789   6.811   7.575   6.837   6.069   6.958   6.867 
+  6.107   5.319   5.440   5.708   5.739   7.095   7.523   6.143   5.697   5.449   3.856   4.494   5.350   5.592   5.487   4.964   5.006   4.661   4.863   5.350   5.933   5.144   6.204   5.223   5.830   5.958   6.884   6.495   6.634   7.314   7.288   6.960   6.185   5.741   6.149   5.438 
+  8.161   6.735   6.402   6.545   6.014   6.472   7.422   6.484   6.211   6.012   5.166   4.521   7.014   7.106   6.417   5.845   6.319   6.173   6.800   7.567   8.139   7.387   6.175   5.820   6.343   6.774   7.822   7.236   6.665   7.465   7.774   8.802   7.268   7.888   7.611   5.975 
+  9.320   8.190   8.325   7.901   7.761   7.627   7.354   7.857   7.887   7.845   7.726   7.153   6.667   7.767   7.495   7.609   8.229   7.122   6.921   8.157   7.375   7.437   7.070   6.240   7.029   7.476   7.074   7.464   7.357   7.923   8.155   9.160   8.234   8.643   7.985   7.163 
+  6.907   7.206   6.750   7.935   7.481   6.853   8.319   8.098   6.107   5.320   6.025   6.717   6.287   6.297   6.201   6.155   6.846   6.426   6.415   7.245   6.757   6.034   5.861   5.884   7.334   7.478   6.508   6.242   6.296   6.033   7.366   8.895   8.057   7.498   7.665   6.375 
+  5.906   6.972   6.337   6.589   7.732   6.875   5.958   7.115   6.540   4.246   3.522   4.362   4.472   5.046   4.983   4.252   4.310   5.668   5.865   6.165   5.372   6.656   5.983   5.383   6.261   6.275   6.390   7.701   6.911   7.419   7.333   7.627   7.511   6.834   6.767   5.590 
+  5.948   6.497   6.076   6.268   6.914   5.954   5.985   4.543   5.212   5.375   5.360   3.905   4.814   4.199   5.386   4.465   3.139   5.103   5.913   5.851   5.772   5.741   5.640   5.356   5.295   5.687   5.472   6.462   6.319   6.870   7.049   7.089   6.853   7.043   6.908   5.954 
+  6.138   4.438   4.667   6.529   7.543   7.042   7.443   6.887   6.168   6.194   5.983   6.284   5.546   5.352   4.890   5.225   5.404   6.656   6.395   5.397   5.453   6.618   5.856   5.342   6.059   6.139   6.358   6.519   6.597   6.078   6.810   7.464   7.484   7.736   7.010   5.782 
+  5.305   5.909   5.347   6.174   6.473   6.678   7.858   7.104   6.945   5.824   5.571   6.057   5.585   5.272   5.271   6.160   6.034   6.280   5.832   5.862   6.028   6.138   6.187   6.359   5.594   5.888   6.477   7.287   6.569   6.193   6.363   6.386   7.603   7.611   6.843   5.700 
+  6.737   7.619   7.945   6.973   6.541   7.523   6.661   6.222   5.688   6.256   6.199   6.820   4.961   6.391   5.867   4.741   5.409   5.567   5.161   5.610   6.385   5.537   5.840   5.141   4.341   5.641   6.333   7.402   6.745   6.876   7.138   7.776   9.092   9.176   8.238   5.842 
+  6.870   7.132   6.789   5.627   7.834   7.535   4.272   5.318   6.281   6.666   5.602   6.264   6.960   6.183   6.454   5.684   6.911   5.682   6.309   6.783   6.666   6.315   7.544   7.039   6.975   6.754   6.718   7.196   6.309   6.783   7.316   8.038   8.426   8.840   8.127   7.077 
+  7.856   6.823   6.277   7.422   8.033   8.231   8.062   6.513   8.534   8.522   7.175   7.500   7.192   7.558   7.921   7.473   8.032   7.334   7.691   7.294   6.896   6.649   7.615   8.026   8.174   7.936   7.325   7.346   7.762   7.375   6.950   7.154   7.264   7.545   8.659   8.247 
+  6.634   4.807   4.939   5.129   8.706   9.627   7.695   8.999   9.849   9.567   8.541   8.355   7.280   7.396   7.615   6.855   8.231   7.708   6.246   5.883   5.533   6.113   5.089   5.821   7.083   6.860   6.092   5.839   5.909   6.741   5.899   6.335   6.306   6.154   5.954   5.428 
+  6.011   6.038   6.669   7.363   9.233   9.977   7.013  10.389  11.315   9.057   8.681   9.026   6.765   6.942   6.812   8.725   8.573  10.267   9.152   6.894   6.009   5.799   4.466   5.364   7.392   7.781   5.992   5.608   6.095   7.321   6.951   6.258   6.378   6.806   6.230   5.505 
+  6.622   3.358   6.191   8.047   9.912  11.133   9.056  11.110  12.160  10.065   8.198   8.334   7.147   7.350   5.793   9.433   9.951  10.962  10.141   7.799   7.196   6.769   6.722   7.482   9.262   9.769   7.881   6.549   6.610   6.985   7.364   6.621   6.837   6.344   6.609   5.745 
+  6.084   5.240   5.059   5.913  10.687  12.131  10.258  10.403  12.192  10.767   7.216   6.927   6.217   8.621   8.735   9.461  10.910   9.396   8.936   8.369   8.864   8.940   8.103   8.540  10.492   9.364   8.376   7.663   7.486   8.566   8.698   6.546   7.045   7.158   7.440   6.945 
+  5.436   5.972   7.124   6.442  11.153  12.378  10.014   8.544  10.674   9.546   7.133   7.683   6.472   8.210   8.269   9.314   9.955   9.521   9.124   8.663   7.700   8.125   8.035   8.839   9.729   9.621   8.395   7.090   5.782   7.480   8.560   7.678   6.562   7.677   6.566   5.779 
+  6.556   7.172   6.476   7.416  11.067  12.175  10.063   8.537   9.645   7.463   7.316   7.265   5.912   6.386   5.891   8.191   8.758  10.467  10.171   7.750   7.156   7.316   6.110   8.574   8.871   9.507   7.087   6.393   5.033   6.383   7.976   7.578   7.650   8.389   7.225   5.272 
+  6.633   6.981   7.014   6.234   9.760  10.742   8.704   8.617   9.733   7.623   7.096   7.683   5.827   5.784   4.841   6.484   7.403   9.542   8.233   7.665   7.074   7.007   7.164   7.815   8.334   8.091   6.092   5.879   5.165   5.791   6.784   6.909   6.891   7.281   6.400   4.602 
+  7.036   7.899   7.463   5.693   8.960   9.219   6.773   6.589   9.085   8.206   6.530   7.344   5.154   5.229   5.616   5.845   6.652   8.016   7.277   6.879   6.563   6.899   5.350   6.627   7.554   6.946   5.625   5.305   5.354   6.129   6.625   6.619   6.253   6.316   6.079   5.281 
+  7.579   7.358   5.001   4.273   6.297   6.770   5.783   6.273   8.859   7.591   4.951   5.090   4.532   5.475   5.196   6.341   6.893   8.126   8.271   5.556   6.418   6.708   5.500   6.703   7.635   6.546   5.712   4.380   4.712   6.479   6.330   5.413   5.811   6.827   6.334   4.796 
+  6.804   7.463   5.340   5.781   7.593   7.390   4.799   6.886   9.109   7.806   5.848   5.674   4.377   5.221   5.712   5.480   6.522   6.929   6.981   5.684   5.141   6.178   6.712   6.469   7.379   6.163   4.724   5.194   4.840   5.159   5.640   5.392   5.384   6.096   5.043   4.643 
+  5.836   7.078   6.609   5.585   7.374   7.922   6.029   7.790   8.878   7.351   6.044   5.406   5.080   5.260   5.110   5.354   6.243   6.195   6.426   5.002   5.525   6.270   6.486   7.307   6.674   6.984   5.819   5.750   5.546   5.174   6.243   5.120   5.501   5.658   5.230   4.984 
+  5.995   6.426   6.499   6.198   5.394   7.786   7.006   6.640   6.574   5.446   5.358   5.959   5.758   5.732   5.124   4.780   5.404   7.232   6.886   4.978   5.318   6.719   6.224   6.564   7.540   7.931   6.923   5.661   4.680   4.914   6.346   5.742   5.577   6.547   5.576   5.097 
+  1.838   5.180   5.975   5.906   7.567   7.613   6.828   6.655   7.792   6.274   5.220   6.579   5.034   4.353   4.588   4.436   5.218   7.240   6.788   5.733   5.852   6.223   5.812   7.566   7.519   8.670   8.259   7.170   5.266   4.760   5.347   6.104   5.672   5.826   5.926   4.517 
+  5.940   6.287   5.516   4.456   6.049   4.822   4.612   5.279   7.297   6.241   4.923   4.825   4.876   5.176   4.768   4.898   5.868   5.961   5.657   5.526   4.799   4.770   6.168   7.569   7.270   8.064   8.280   7.243   5.818   6.468   6.409   5.514   5.401   6.791   6.692   5.271 
+  4.992   5.270   5.844   4.517   5.885   7.697   8.411   7.816   6.573   5.399   4.888   5.076   4.818   5.357   5.289   4.571   4.205   4.805   5.241   5.641   6.016   6.077   7.080   7.571   7.853   8.342   7.471   6.325   5.760   6.632   5.964   5.644   6.271   7.092   7.065   6.122 
+  5.971   6.959   7.115   5.902   6.991   9.835  10.716   8.455   6.904   7.236   5.713   4.813   5.446   5.312   5.103   4.482   4.675   5.759   5.635   6.407   5.363   5.984   8.371   8.966   8.756   8.649   9.396   8.542   7.282   6.228   6.016   6.475   6.345   7.686   7.025   5.545 
+  4.681   6.154   7.203   6.462   8.696  11.385  11.167   7.915   7.869   8.735   6.606   6.050   6.586   5.828   5.287   4.551   4.438   5.555   6.453   6.580   6.723   6.724   7.794  10.012   9.722   9.495   9.606   9.145   7.523   6.685   7.166   7.617   7.415   8.412   7.522   5.839 
+  3.807   4.640   4.978   2.408  10.476  12.227  10.386   6.954   7.907   8.420   5.324   6.318   6.095   5.831   6.745   4.747   6.064   5.717   6.858   7.080   7.618   8.740   9.749  10.204   9.601  10.113  11.044  10.649   8.363   7.905   7.625   8.279   7.948   8.558   7.831   5.859 
+  5.518   6.274   5.224   4.917  11.330  13.128  11.502   5.855   7.368   7.477   5.952   5.765   5.180   6.776   7.223   4.591   5.476   6.210   6.390   7.184   7.572   9.771  10.655  11.000  10.853   9.740  11.735  11.216   8.704   7.656   7.808   8.371   7.511   9.449   7.733   6.007 
+  6.485   7.616   6.202   4.926  11.995  13.566  11.651   5.145   6.173   5.758   5.335   5.930   4.340   6.350   6.971   5.291   6.034   6.189   6.334   7.816   7.628   9.520  11.491  11.358  10.780  10.797  11.794  11.265   9.030   7.265   8.215   8.120   7.370  10.274   8.249   5.687 
+  5.688   7.242   6.281   5.216  12.401  13.706  11.430   5.031   6.857   6.494   5.448   5.198   3.708   7.176   7.377   6.796   7.513   7.938   7.604   7.747   7.501   9.271  11.500  10.884  10.151  11.821  11.385  11.019   9.004   7.102   8.166   9.020   8.480  10.415   8.923   5.830 
+  5.554   6.685   5.392   6.872  12.547  13.583  11.062   5.046   7.073   6.778   5.027   5.437   4.807   6.584   6.786   6.049   6.546   6.760   6.737   7.123   7.382   8.800   9.975   9.688   9.784  11.040  11.196  10.793   8.903   8.311   7.495   8.650   8.970  10.246   7.890   5.205 
+  6.426   6.592   5.661   6.156  11.998  13.193  10.912   6.278   7.373   7.420   5.834   6.083   4.586   6.299   6.356   5.254   5.353   5.102   5.688   5.972   6.312   9.088  10.623   9.373   9.085   9.524  10.664  10.460   8.153   7.217   6.012   7.447   8.026   8.505   8.412   5.186 
+  9.791   9.677   9.635   9.280  11.242  12.430  10.097   6.144   7.402   7.239   5.400   6.036   5.111   5.869   5.743   4.617   4.807   5.454   5.857   5.125   6.276   8.658   9.298   8.552   8.945   8.217   9.590   9.172   7.437   5.533   6.246   6.736   8.159   7.707   7.769   5.601 
+ 12.227  10.855  11.068  11.582  10.493  11.101   9.995   8.365   7.648   7.097   5.607   5.964   5.365   5.246   5.753   5.332   5.018   6.565   5.889   5.435   6.754   8.018   6.564   7.525   7.854   7.595   8.703   7.959   6.138   5.972   5.972   6.448   7.790   7.420   7.123   4.469 
+ 10.688  10.300   9.333   9.180   9.404  10.058   7.983   5.515   6.007   5.321   5.610   5.077   3.693   5.018   5.245   4.681   3.793   4.663   4.746   4.993   6.041   7.840   7.912   7.820   6.983   7.880   7.738   7.398   6.195   6.320   6.779   6.857   7.870   7.742   6.574   5.169 
+  7.038   7.867   9.162   8.917   8.810   9.351   7.386   4.996   5.532   5.087   6.237   6.348   5.685   5.549   4.671   4.920   3.586   4.232   4.807   6.409   6.806   6.880   8.213   7.729   6.916   7.153   8.141   7.780   5.568   6.057   6.367   6.672   7.116   7.618   6.600   4.945 
+  8.905   9.062   8.894   8.022   7.938   8.301   6.556   5.246   5.555   6.472   6.773   5.917   6.142   6.362   4.911   4.534   4.861   5.672   5.116   5.285   5.190   6.469   8.569   7.063   6.526   6.023   8.314   7.907   5.758   4.715   5.829   6.052   6.473   6.994   5.662   5.454 
+  7.700   8.324   9.248   8.782   9.216   8.441   8.089   8.165   7.666   6.934   6.526   6.514   6.807   7.109   5.996   5.926   7.126   6.476   5.953   6.281   6.669   6.363   7.898   6.812   7.079   7.715   8.004   7.323   6.958   6.991   7.668   6.668   7.183   7.004   6.783   6.941 
+ 12.499  13.205  13.728  13.770  13.350  12.380  11.579  11.675  11.371  10.397   9.500   9.881   9.676   8.959   8.363   8.023   7.923   7.759   7.408   6.716   7.249   7.452   7.650   7.577   7.772   7.331   7.153   6.504   6.893   7.283   7.767   7.568   7.665   7.220   7.135   6.425 
+ 11.827  11.464  12.127  12.493  11.508   9.760   8.602   9.450   9.339   8.249   6.661   8.606   8.363   6.628   6.435   6.482   6.513   5.674   5.430   6.337   6.729   6.894   7.481   6.517   6.434   6.040   7.813   6.956   6.576   6.680   6.460   6.534   6.959   7.240   6.872   6.015 
+  7.909   9.279   9.812   9.539   9.287   8.713   9.217   9.419   9.234   8.208   9.124   8.520   7.106   6.376   7.006   6.107   5.372   6.143   5.782   6.026   6.124   5.994   5.533   6.669   6.865   5.829   8.252   7.805   6.282   6.882   7.081   6.863   7.744   8.086   7.240   6.637 
+  8.715   7.106   8.481   7.567   7.784   7.154   7.097   7.648   7.369   6.552   8.054   7.800   7.494   5.905   5.602   7.027   7.253   6.906   7.263   6.455   6.771   6.872   6.673   7.393   7.226   5.891   8.629   7.948   6.803   7.290   7.171   7.810   8.074   7.926   7.502   6.886 
+  9.404   9.813   8.558   8.790   9.457  10.609   9.444   8.241   8.087   6.429   6.068   7.534   6.857   5.586   6.744   5.727   6.957   7.770   8.037   7.432   7.263   7.467   6.922   6.315   6.909   6.833   9.765   9.125   5.858   5.989   6.034   7.321   7.396   7.414   6.198   4.986 
+  9.210   9.696   9.670   9.464  11.662  12.708  10.844   7.924   7.435   7.252   8.088   7.571   7.190   6.410   5.596   6.616   6.886   8.564   8.070   8.197   7.100   7.251   6.735   6.947   7.846   8.409  10.303   9.402   6.445   5.753   6.195   7.894   7.181   7.485   5.854   5.294 
+ 10.393  10.190   9.777   9.665  11.413  13.086  11.240   8.831   8.994   7.485   7.199   8.493   7.847   6.970   7.036   8.403   7.722  10.653  10.031   7.986   6.947   7.144   7.131   6.465   6.978   8.928   8.620   7.637   6.758   7.191   6.757   7.722   7.563   7.706   5.433   5.060 
+  9.640   9.532   9.151  10.097  12.331  12.891  10.221   8.023   8.422   7.825   8.416   9.396   7.641   7.226   7.798   7.254   7.869  11.100   9.963   6.686   6.444   6.602   7.312   7.227   6.890   7.523   8.288   8.680   7.772   6.428   6.868   7.772   8.209   8.248   6.182   5.805 
+ 10.128  11.055  11.228  10.554  12.114  12.324   9.874   8.878   8.051   8.482   7.573   9.079   7.727   7.619   8.008   8.480   7.536  10.315   8.983   7.406   6.479   6.182   6.012   6.561   6.509   6.805   8.239   7.583   7.481   5.716   5.388   7.319   7.673   6.796   6.325   5.521 
+  8.679   9.232   8.946  10.296  10.222  10.291   8.974   9.280   8.215   7.129   7.249   7.702   7.354   5.780   6.248   6.629   6.643   8.689   8.530   8.026   6.382   6.595   6.095   6.230   6.163   6.334   7.654   6.793   5.969   6.178   4.549   5.438   6.096   6.289   5.278   4.378 
+  8.330   9.408   8.939   9.209   8.885   9.139   9.465   8.083   7.993   7.420   5.985   7.021   6.346   6.001   6.034   6.865   6.486   7.355   7.091   7.074   6.081   5.963   6.384   6.925   5.993   6.471   7.448   5.871   5.798   6.208   5.916   5.784   6.635   6.554   5.531   3.953 
+  6.987   9.705  10.485   9.404   8.537   9.351   8.287   7.127   8.160   7.170   7.302   7.347   5.919   6.326   7.466   7.448   6.249   6.360   6.676   6.502   5.520   4.945   6.068   6.334   6.510   5.488   5.727   5.579   5.174   5.219   5.478   5.780   5.278   5.474   4.954   4.472 
+  9.531  10.444   9.482   8.722   8.059   9.170   7.575   6.375   6.905   7.641   8.552   7.591   7.052   7.600   7.187   7.270   6.387   7.363   6.734   6.636   6.162   5.569   6.822   5.745   6.516   6.334   5.670   5.427   5.271   5.276   4.713   5.023   5.251   5.186   5.135   3.978 
+  8.373  11.319  11.347  10.250  10.538   9.871   7.802   7.362   7.282   8.358   8.366   6.386   6.526   5.302   4.445   6.101   6.264   5.949   6.659   6.488   7.064   5.146   4.856   6.320   6.273   5.251   6.045   5.697   5.791   4.377   4.309   5.143   5.350   5.822   5.445   4.554 
+ 10.949  11.753  11.721  11.075   9.667   9.028   9.308   7.661   7.398   7.917   8.204   6.090   6.762   6.161   4.972   4.655   5.564   6.222   5.803   5.720   5.725   5.598   5.724   6.681   6.170   5.015   5.573   5.264   5.241   4.474   3.419   4.345   5.073   5.447   5.176   3.886 
+  9.203   8.138   8.207   8.296   8.603  10.144   9.759   8.017   7.489   6.771   7.331   6.624   6.182   6.109   6.982   6.323   6.700   6.741   6.129   7.327   8.232   6.262   6.229   6.561   6.583   6.809   7.765   7.081   5.937   5.353   5.333   4.763   5.647   5.646   4.682   3.950 
+  9.845   8.652   8.413   8.032  10.029  12.360  12.145   9.000   7.733   7.478   7.892   7.398   7.316   8.340   7.633   6.592   6.949   7.000   7.406   7.992   9.640   8.822   7.139   7.169   7.441   8.861  10.194   9.479   6.846   6.404   6.538   7.244   7.733   6.297   6.004   4.858 
+  7.905   8.489   8.554   5.562   7.547  12.461  13.367  10.674   8.131   9.835   9.168   6.840   8.741   7.641   5.970   5.790   6.867   8.367   7.467   9.678   9.890   9.541   8.414   8.288   8.648   9.757  11.638  11.482   7.389   6.981   7.478   8.221   9.327   7.350   6.844   3.698 
+  7.065   7.566   8.704   8.242   8.184  12.721  14.000  11.762   6.921   9.336   8.570   5.201   8.692   8.778   6.279   6.803   5.816   9.715   8.828  10.559  10.202  11.191   9.497   9.482   8.625  10.498  11.312  11.266   8.422   6.613   7.122   8.267   9.243   8.596   7.457   4.665 
+  7.358   7.942   7.231   7.890   8.555  12.804  14.389  12.452   6.518   8.669   8.734   5.331   8.234   8.647   6.077   6.135   5.423   9.981   9.479  11.454  11.534  12.059  10.448   9.653   8.755   9.525  11.126  10.356   8.954   7.672   7.378   8.933   9.199   8.798   8.172   4.882 
+  6.289   7.355   7.741   8.107   9.602  12.362  14.319  12.971   6.680   8.226   8.781   5.576   7.946   8.014   6.505   6.886   6.979   7.964   8.581  11.084  12.300  10.337   9.279   9.622   8.851  10.608  12.156  11.664   9.572   8.565   7.211   8.641   9.179   9.569   8.163   5.645 
+  7.378   7.663   7.181   7.778   8.297  11.278  13.443  12.767   9.017   7.989   9.491   7.945   7.650   8.042   6.239   6.506   7.641   6.842   8.922  10.093  11.367  10.150   8.457   9.348   9.127   9.718  11.842  11.702   8.656   8.411   7.831   8.679   9.018   9.280   8.318   6.004 
+  7.089   7.180   8.733   8.585   6.759  10.549  12.187  12.053   9.970   8.061   9.489   7.632   6.731   7.995   8.268   6.652   6.829   6.999   8.399   9.723  10.812  10.358   8.423   8.820   7.859   8.776  10.394   9.876   7.816   7.470   7.535   8.018   8.872   9.342   8.769   6.475 
+  6.908   8.710   9.365   7.863   6.440  10.491  12.633  12.387   9.173   6.511   8.347   6.977   6.327   6.975   6.221   5.076   6.192   6.769   8.683   9.887   9.074   9.318   8.296   9.160   7.388   8.286   9.121   9.297   8.166   7.315   6.921   7.634   8.631   9.169   8.460   6.238 
+  9.610   9.595   9.485   9.888   9.490  10.390  11.723  11.727   9.949   8.411   7.994   8.221   8.350   8.500   8.184   7.409   7.376   7.321   7.817   8.902   8.926   9.035   7.143   8.077   7.650   7.895   8.544   9.253   8.154   6.110   6.671   7.066   8.369   7.418   6.971   5.804 
+  8.594   9.013   9.395  10.453  10.044  10.817  12.052  11.240   8.482   7.105   7.898   7.526   7.587   7.456   6.549   6.564   6.279   6.834   7.801   8.791   8.919   7.898   6.388   7.046   6.742   7.048   8.636   7.683   7.088   5.924   6.362   6.815   7.933   7.448   6.874   5.978 
+  9.405   9.423  10.008  10.403   9.855   9.547   9.650   7.968   7.383   7.415   8.054   8.323   7.634   6.842   6.067   6.438   6.063   5.900   7.422   7.837   8.236   7.560   6.575   7.596   7.125   6.481   7.634   7.856   6.010   6.105   7.186   6.784   8.353   7.966   6.995   5.978 
+  8.992   8.642   9.563  10.297   9.650   9.755  11.000   9.138   8.022   7.282   7.178   7.097   5.934   5.509   6.175   4.835   5.360   6.064   6.568   6.908   7.745   7.353   7.404   7.523   7.096   7.033   7.303   7.676   6.907   6.619   6.690   6.804   6.897   6.764   7.003   5.941 
+  8.082   9.470   8.533   8.135   9.551   9.850  10.368   9.991   7.614   6.600   6.191   6.962   5.971   6.878   5.743   4.243   4.493   6.863   7.549   7.551   7.814   7.791   6.011   5.246   5.723   7.270   8.288   7.483   6.680   6.470   6.834   7.015   7.752   7.144   7.306   6.559 
+ 10.290  10.349   9.820   8.687   8.244   9.503   9.673   8.931   7.650   7.720   7.540   7.067   6.888   6.793   6.207   4.657   5.282   5.890   6.303   8.079   7.401   7.471   6.112   5.773   6.409   7.174   7.759   7.822   6.891   6.575   7.629   7.591   8.025   7.157   7.158   7.350 
+ 10.810  11.725  11.818  10.340  10.058   9.419   9.983   8.282   8.160   8.385   7.634   9.096   8.785   8.642   8.649   8.006   8.531   8.458   8.748   9.577   9.346   8.821   8.469   8.858   7.811   8.445   8.807   8.252   6.205   5.967   7.131   7.172   7.715   7.371   7.525   7.123 
+ 11.923  12.071  11.710  11.232  10.946   9.295   9.794   8.639   8.266   9.592   9.985  10.169   9.909  10.071   9.141   8.276   8.802   9.068   9.292   9.968   9.792   8.585   8.485   8.588   8.251   8.707   9.490   8.765   6.806   6.495   6.484   7.651   8.154   8.037   8.237   7.697 
+  9.778   9.524  10.004   9.895   9.653   8.896  10.359  10.100   8.833   7.475   7.464   7.828   8.447   7.679   5.755   5.852   5.266   5.983   6.778   6.377   6.422   6.312   7.251   7.715   7.744   6.638   5.921   6.403   6.797   6.705   7.140   8.033   7.839   8.081   8.183   7.043 
+ 10.318  10.487  10.634  10.111   9.673   8.555   8.965   8.128   7.876   8.239   8.101   8.899   8.101   6.851   6.403   6.232   5.250   5.680   5.776   6.229   6.704   7.338   7.212   7.240   7.237   6.945   7.312   7.612   7.360   6.076   7.358   7.826   8.362   8.994   9.012   7.478 
+  8.698   9.261   9.209   9.497   7.709   7.883   8.940   9.172   7.357   6.352   7.004   7.062   6.986   7.414   6.092   5.874   6.219   5.861   7.672   7.994   6.538   6.988   6.722   7.377   7.479   7.606   8.510   6.647   6.316   6.698   7.489   7.940   8.452   7.943   8.197   7.161 
+  9.048   9.011   8.505   8.849   8.262   7.104   8.037   8.018   6.943   7.191   7.446   6.879   6.465   7.751   6.784   6.417   5.805   6.453   6.594   7.242   5.641   6.989   6.970   6.074   6.009   6.002   7.116   6.917   6.834   7.397   7.911   8.166   8.158   7.688   8.789   8.652 
+  8.484   8.227   8.678   9.251   9.522   8.878   7.542   6.716   6.815   7.213   5.288   6.690   6.545   6.699   6.051   7.325   6.646   7.067   6.798   7.975   6.190   6.558   7.569   6.888   6.753   6.939   7.421   6.426   6.371   6.725   7.538   7.851   8.098   7.765   8.887   9.896 
+  7.556   7.473   8.128   8.027   7.670   7.688   6.579   6.761   7.604   6.909   6.675   5.898   6.195   4.765   5.607   5.572   5.480   7.136   7.445   8.145   8.541   8.276   7.667   7.016   7.321   7.262   7.077   6.696   6.757   6.800   7.230   7.719   8.161   7.673   7.668   8.239 
+ 10.743  11.279  11.920  10.359  11.081  10.470  10.679  10.002  10.777   9.877  10.397   9.458   9.287   6.958   7.477   7.707   8.553  10.071   9.453  10.412  11.710  11.972  11.611   9.505   9.896  10.011  10.882  11.036   9.188   8.139   7.322   7.679   7.356   9.425  10.600   9.673 
+ 12.470  13.487  12.790  11.869  11.851  11.532  10.782   9.883  11.442  11.721  11.467  11.568  11.061   8.694   9.098   9.648   9.926  11.011  10.647  11.232  11.854  11.378  11.308  10.301   9.736   9.890  10.370  10.699   9.752   7.187   6.963   7.102   7.794   9.099  10.052   9.881 
+ 13.328  14.187  12.672  12.433  13.013  12.738  10.748   9.948  10.847  12.723  12.834  12.088  11.332   9.206   9.220  10.111  10.084  10.908  10.440  10.880  11.896  12.047  11.276   9.498   8.060   7.402   7.490   6.909   7.117   6.726   6.161   6.759   7.802   8.827   9.290   6.629 
+ 13.833  14.510  13.064  12.956  13.385  12.672  11.371   9.755  11.346  13.438  13.138  12.361  11.768   9.080   9.193  10.117  10.378  10.976  10.932  12.006  13.055  12.839  11.399   9.520   7.996   6.321   7.015   7.358   7.951   8.094   6.891   8.318   8.814   9.166   8.059   6.619 
+ 14.207  14.746  13.234  13.825  13.315  13.745  13.726  13.222  13.563  13.634  13.409  13.066  12.437  11.606  10.569  11.190  12.054  11.652  11.551  12.985  13.778  12.751  11.237   9.946   9.505   9.316   8.697   8.599   9.349   9.287   9.167   9.448   9.134   8.592   8.953   8.291 
+ 15.084  15.541  14.295  14.548  15.953  16.205  16.590  15.543  15.413  16.274  15.415  14.796  13.634  13.695  13.067  13.171  13.564  13.132  12.797  14.555  14.363  12.819  11.025   9.977   9.892   9.581   9.043   8.865   9.560   9.513   9.513   9.800   9.150   8.969   9.626   8.782 
+ 14.895  15.547  13.914  14.037  16.582  17.781  18.870  17.666  16.198  16.987  17.591  17.685  16.613  15.040  13.341  13.195  12.941  13.098  14.193  15.218  12.860  11.204   9.732   9.426   8.868   7.661   6.848   7.569   8.558   8.073   7.618   9.175   8.594   7.075   7.005   6.422 
+ 15.719  16.227  15.542  16.069  16.859  18.126  19.754  18.606  16.842  17.687  18.177  18.647  18.139  15.797  13.528  13.839  13.799  14.650  15.749  15.687  13.329  11.558  10.100   8.809   7.704   7.265   6.993   7.673   8.962  10.015  10.039  11.172  10.234   7.509   6.690   6.300 
+ 16.108  16.356  15.801  16.118  16.572  18.580  19.805  18.358  17.873  18.309  18.187  18.692  18.506  16.180  14.036  14.395  14.460  15.890  16.134  14.493  12.585  11.103   9.349   8.604   8.012   6.999   6.689   6.742   8.587  10.288   9.745  10.312   9.250   6.580   6.299   5.789 
+ 16.184  16.383  16.034  16.136  16.452  18.629  19.461  18.365  18.256  18.212  17.369  18.538  18.329  17.094  15.143  15.044  15.390  16.769  15.970  14.025  11.925  10.239   9.050   8.872   8.456   7.556   7.427   7.570   9.204  11.148  11.184  10.905   8.534   7.287   7.112   6.984 
+ 16.292  16.405  16.212  16.228  16.674  18.785  19.372  18.532  18.356  18.041  16.933  17.989  18.912  18.239  15.819  15.775  16.073  17.363  15.893  14.488  12.690  11.389  10.124   9.380   9.222   8.466   8.359   8.154   8.859  10.794  11.055  11.839  10.308   7.946   7.903   7.686 
+ 16.182  16.372  16.324  16.238  16.790  18.934  19.368  18.628  18.363  17.895  16.879  16.442  19.109  18.915  16.950  16.652  16.726  18.012  16.570  14.814  12.887  11.404  10.272   9.234   8.964   6.949   7.025   7.073   7.872   9.544   9.858  11.395  10.027   6.667   6.398   5.427 
+ 16.102  16.248  16.290  16.165  16.698  18.945  19.230  18.295  18.004  17.647  16.634  15.218  18.248  18.063  18.171  16.729  16.334  17.776  16.785  14.783  12.924  11.350  10.179   9.199   8.943   8.197   7.916   7.726   8.240   9.434   9.479  11.410  10.925   7.856   7.602   6.806 
+ 15.933  16.114  16.142  16.128  16.905  18.806  18.736  17.551  17.288  16.994  15.742  14.912  16.682  17.216  18.201  18.144  16.806  17.869  17.332  15.489  13.260  11.903  10.416   9.329   9.035   8.509   8.708   8.432   8.825  10.144  10.070  10.403   9.972   8.741   7.587   7.321 
+ 15.794  15.868  15.671  16.042  16.879  18.125  17.861  15.715  15.986  15.938  14.376  14.029  15.191  15.078  18.151  17.912  17.567  17.889  17.889  15.774  12.951  11.510   9.506   9.044   8.128   8.222   9.450   9.387   8.951  11.164   9.905   8.684   8.965   7.991   6.527   5.962 
+ 14.950  14.988  14.026  15.756  16.797  16.286  15.524  14.404  14.295  14.059  12.545  13.226  12.816  13.902  15.571  16.949  17.243  17.226  17.719  16.553  12.967  11.395   9.271   8.174   7.668   8.358   9.284   9.298   9.503  11.698   9.682   8.874   8.645   8.502   9.053   7.333 
+ 13.955  13.461  13.833  14.473  15.049  13.013  13.346  13.326  12.771  12.771  11.692  11.430  11.624  11.828  12.652  14.009  16.630  16.561  16.668  15.747  12.317  10.270   8.763   8.466   7.420   8.071   8.992   9.078   9.314  11.138   8.704   8.249   8.384   9.068   8.388   6.143 
+ 13.379  13.049  13.465  13.022  13.060  11.711  10.783  10.590   9.855   9.405  10.009   9.922   9.731   9.436   9.855  10.920  13.406  15.198  15.599  15.872  14.068  10.177   7.950   8.313   7.770   8.653   9.072   8.495   8.657   9.849   8.030   7.327   7.876   9.186   7.350   5.611 
+ 13.183  12.948  13.396  12.832  12.776  12.531  12.016  11.001   9.570   9.449   8.928   9.058   8.501   8.935   8.328  10.470  11.693  12.707  15.807  16.861  14.726  10.726   8.536   8.680   7.865   7.990   8.258   7.558   9.426  10.060   8.439   8.056   8.422   9.110   7.165   5.759 
+ 13.922  13.187  13.897  13.836  14.689  13.488  12.391  11.829  10.617  10.013   9.934  10.863  11.809  11.570  11.060  11.968  11.866  13.568  15.938  17.195  16.642  15.093  12.286  11.445   9.704   9.458   9.752  10.046  12.137  12.857  11.600  11.205  11.332  10.518   9.364   8.443 
+ 14.912  14.888  14.883  15.782  16.967  16.685  15.132  14.034  13.479  13.071  10.404  12.344  12.739  12.515  11.785  12.956  14.020  15.385  17.458  18.481  18.223  17.615  13.704  12.019  10.343  10.299  10.771  11.555  13.978  14.952  13.348  13.542  13.831  12.605   9.609   8.748 
+ 15.191  15.339  14.764  14.261  16.245  17.074  17.387  16.639  15.256  14.820  12.679  13.205  12.898  12.639  13.010  13.134  14.642  15.963  18.122  18.528  18.031  17.347  15.281  11.840  10.849  11.134  12.114  11.944  13.851  14.698  12.868  12.828  13.539  12.726   8.893   7.850 
+ 15.080  15.287  14.654  14.564  15.164  17.004  17.767  15.979  15.594  15.185  13.491  12.635  13.038  12.607  13.113  13.291  14.761  16.695  18.431  18.161  17.430  16.191  13.413  10.691   9.630  10.742  11.583  10.195  11.825  12.969  11.356  10.930  11.966  11.348   7.957   6.274 
+ 14.388  13.988  12.687  12.593  13.538  15.228  15.580  15.087  13.396  12.771  12.076  11.885   9.551   9.602  10.795  11.247  12.677  14.979  16.251  15.508  14.605  13.258  10.670  10.099  11.719  12.367  10.400   8.666   9.288  10.650  10.536   9.328   9.343  10.278   8.283   5.784 
+ 14.293  14.041  13.139  12.811  13.193  14.099  14.064  12.160  11.778  10.985  10.920  11.543   9.896   8.916   9.943  11.164  13.583  15.554  14.198  12.001  10.458   9.252  10.351  10.814  11.758  13.121  11.942   8.591   6.692   7.559   8.339   8.770   9.941   9.598   8.451   6.939 
+ 14.257  13.759  13.185  12.636  12.756  14.277  13.855  11.807  11.872  10.583  11.402  11.823   9.574   9.085  10.384  12.646  13.828  15.539  13.521  10.573   9.438   9.576  10.386  10.596  11.259  12.631  12.035   8.602   6.948   6.974   7.952   8.303   9.933  10.486   8.735   6.733 
+ 14.205  13.589  13.192  12.266  12.132  14.119  13.300  12.512  12.080  10.850  11.774  11.957   9.921  10.540  11.157  12.833  13.251  14.109  11.931  10.560  10.617  10.236  10.492  10.651  11.157  12.419  12.684   8.149   6.724   6.783   6.799   7.243   9.486  10.140   8.279   6.900 
+ 14.209  13.491  13.190  11.926  12.037  14.163  13.538  12.666  12.220  10.446  11.940  11.807  10.849  11.401  11.384  11.818  12.330  12.104  10.444  10.897  10.661  10.585  11.075  11.148  11.412  12.802  12.723   8.792   7.260   7.411   6.630   8.160  10.011   9.582   7.352   6.710 
+ 14.309  13.676  13.477  12.566  12.309  14.204  13.831  12.857  12.956  12.572  11.878  11.958  12.458  12.811  12.369  12.282  12.280  12.475  12.063  11.712  11.004  10.881  11.211  11.357  11.485  13.018  12.832   9.421   8.432   7.694   8.715   9.604  11.750  10.706   9.410   8.666 
+ 14.716  14.328  13.540  12.846  12.513  14.950  14.718  13.471  14.056  13.296  12.866  13.120  13.881  13.773  13.258  12.917  13.134  13.734  13.889  12.771  12.071  10.931  10.907  11.068  11.056  12.182  11.711   9.028   8.639   6.750   9.185  10.039  10.009   9.575   8.689   7.801 
+ 14.785  14.368  14.084  13.024  13.315  14.920  14.694  14.556  14.706  13.859  13.581  14.286  13.286  12.508  12.677  12.243  12.556  12.450  12.858  13.310  13.621  12.102  10.757  11.262  11.654  12.518  11.507   8.875   9.149   8.484   8.450   8.476   8.184   8.476   8.093   8.879 
+ 13.906  13.627  13.565  12.183  12.203  13.632  14.170  14.569  14.092  12.660  12.789  13.646  12.572  10.823  10.895  11.421  12.004  11.884  12.218  12.721  12.768  12.570  13.174  13.153  13.496  14.035  12.403   9.538   9.830   9.896  10.319  10.237   8.987   9.483   8.870   8.730 
+ 13.669  13.375  13.369  11.997  12.118  13.434  14.625  15.056  14.757  12.387  12.166  13.470  11.950  10.354  10.537  11.410  11.801  12.419  12.152  12.841  13.132  12.519  12.837  12.551  12.752  13.265  11.133   8.874  10.421   9.925   9.159   9.914   8.690   8.909   9.142   8.902 
+ 13.718  13.178  13.379  11.629  12.525  13.674  14.773  15.717  16.288  14.749  12.923  13.709  11.822  11.094  10.664  11.478  11.718  12.117  11.751  12.323  12.440  12.260  12.715  12.128  11.754  12.057   9.926   8.093   8.465   7.873   6.271   6.520   6.269   6.127   7.202   7.677 
+ 13.703  12.889  13.390  11.708  12.962  13.903  15.028  16.353  16.773  15.896  14.438  14.735  12.860  11.812  11.349  11.801  11.831  12.102  11.941  12.605  12.623  12.418  12.624  12.009  11.138  10.711   9.542   6.897   5.113   4.798   4.748   5.979   5.349   5.408   5.522   6.578 
+ 13.511  12.732  13.059  11.063  12.595  13.599  14.951  16.512  16.491  16.449  15.717  14.787  13.031  11.630  11.201  11.563  11.821  12.063  11.832  12.510  12.670  12.370  12.828  12.095  11.159  10.510   9.933   6.543   5.128   3.999   4.844   5.986   5.898   5.708   4.942   6.276 
+ 13.307  13.093  12.995  11.147  11.968  13.140  14.428  15.893  15.295  14.708  15.859  15.614  13.006  11.658  11.284  11.812  12.025  12.176  12.140  12.689  12.917  12.683  13.156  12.268  11.610  10.984  10.036   6.918   5.146   5.211   4.861   5.776   5.653   5.525   5.268   6.635 
+ 13.402  13.314  13.172  11.648  12.144  13.204  14.412  16.003  15.493  14.802  15.788  16.486  14.020  11.760  11.102  11.844  12.219  12.474  12.361  12.976  13.269  12.987  13.278  12.585  11.955  11.444   9.961   8.022   5.347   5.412   4.878   5.232   4.805   4.835   4.575   4.706 
+ 13.485  13.185  13.079  11.722  12.308  13.293  14.153  15.841  15.044  14.363  15.666  16.309  13.386  12.425  11.309  11.853  12.098  12.573  12.513  13.137  13.624  13.372  13.296  12.017  10.773   9.903   8.782   7.038   5.781   5.416   5.034   4.948   5.497   5.151   4.591   5.376 
+ 13.609  12.877  12.860  11.216  12.246  13.354  14.489  16.177  15.879  15.474  16.067  15.892  15.283  15.250  13.683  11.524  11.619  11.620  11.793  12.385  13.614  13.961  14.133  13.526  11.870  10.081   8.658   8.678  10.784  11.968  11.376  10.228   9.691   9.723  10.169   9.301 
+ 13.359  13.108  12.477  12.358  11.862  13.234  14.372  16.617  16.573  15.909  15.758  14.746  15.939  15.495  14.632  12.916  12.639  11.753  12.098  12.198  13.056  13.374  14.054  13.340  11.688   9.741   9.414   9.578  10.927  12.056  11.377  10.748  10.400  10.348  10.295   9.173 
+ 11.027  11.057  12.634  12.609  12.438  14.675  15.928  16.036  15.008  15.242  14.637  14.149  15.036  15.480  14.103  12.831  12.475  12.384  11.868  10.985  10.550  10.595  11.463  11.221  10.729   9.005   9.013   9.121   9.724  11.290  12.037  10.735  10.024  10.005   9.568   7.983 
+ 11.686  11.283  11.648  10.210  11.078  12.203  12.752  12.239  11.344  10.264  10.763  10.223  11.289  11.502  11.037  10.235   9.665  10.391   9.675   9.410   9.669   9.033   8.839   9.307   9.111   7.100   6.271   6.186   7.081   7.857   9.091   7.949   8.043   8.748   8.801   6.493 
+  9.954  11.077  10.348  10.370   9.585  10.097  10.214  10.772  10.686   9.478   9.700   9.714   9.130  10.125   9.869   9.848   9.777  10.973  10.925  10.326   9.911  10.044   9.667   9.441   9.324   8.837   7.655   7.828   8.389   8.300   7.816   8.980   9.518  10.562  10.966   9.659 
+  8.738   8.001   9.517   9.914   9.517  11.007  11.362  11.631  11.435   9.991   9.955  10.987  11.502  11.993  11.747  10.937  11.367  12.884  13.091  12.467  11.094  11.532  12.024  10.985  10.176   9.697   9.619   9.017   9.041   9.913  10.102  11.366  11.478  11.402  11.477  11.622 
+  8.063   6.892   7.167   8.639   8.316   8.527   9.354   8.850   9.318   8.706   7.988   8.389   7.709   8.328   8.713   8.778   9.420   9.941   9.358   9.435   8.256   8.893   9.477   9.756  10.261  10.135  10.476   9.384  10.912  10.977  11.556  11.431  11.538  12.652  13.180  13.651 
+  6.024   8.051   8.669   8.535   8.020   7.675   8.450   8.461   7.219   7.394   7.095   7.069   7.411   7.366   8.284   8.480   9.233  10.090   9.653  10.281  10.476   9.506   9.699   9.770  10.550  10.465  11.285  11.047  11.930  13.328  13.873  13.114  14.141  15.169  15.425  15.036 
+  8.806   8.477   8.797   8.300   7.087   6.645   9.152   9.603   8.498   8.062   7.163   7.454   8.118   8.927   9.147   8.698   8.829   9.653  10.194  10.097  10.584   9.224   9.502   9.732  10.631  11.344  10.316  10.619  10.636  12.949  13.975  13.438  15.006  15.887  15.849  15.835 
+  7.743   7.000   7.049   6.447   6.836   5.750   6.712   7.782   8.027   7.873   8.300   9.360   8.358   7.968   7.261   7.339   9.025   9.370   9.460  10.594  10.016   8.604  10.262  10.242  10.086  11.550  11.045  10.489  10.335  11.551  13.551  13.518  13.501  15.121  15.684  14.825 
+  3.999   4.354   5.037   6.499   6.040   5.835   6.668   8.105   7.865   7.570   8.316   7.423   5.535   6.703   5.642   6.374   6.588   8.127   8.211   8.648   8.451   8.069   8.078   6.836   6.900   7.725   8.939   8.774   8.879   9.622  11.198  12.312  12.944  13.896  13.519  12.878 
+  6.567   7.056   6.471   6.286   6.453   5.611   5.506   7.646   7.290   6.486   5.960   5.682   3.747   5.461   4.831   4.839   4.834   5.725   5.569   5.039   5.946   6.916   7.424   6.795   7.243   7.073   6.670   6.870   7.316   8.265   8.110   9.358   9.201  10.758  10.508  10.036 
+  7.802   6.134   6.560   5.438   5.997   6.135   6.094   8.094   7.182   6.093   5.208   5.574   4.694   5.613   5.371   5.850   5.509   5.244   5.932   6.004   5.674   5.317   6.268   6.337   6.388   5.401   5.844   5.977   6.580   6.169   6.020   6.108   6.776   7.549   8.316   7.397 
+  6.743   6.523   6.247   6.356   5.669   6.620   6.969   7.172   4.397   5.048   5.485   5.701   4.711   5.826   6.132   6.431   6.668   6.547   7.186   7.008   6.241   5.840   6.278   5.959   6.622   6.313   6.133   5.541   5.843   6.271   7.010   7.252   8.537   8.637   8.582   7.858 
+  5.667   7.377   7.349   8.214   8.542   8.204   7.744   8.292   8.219   8.396   8.901   9.145   8.974   8.799   9.388   9.168   8.282   9.116  11.026  10.678  10.590  10.734  10.080   9.998   9.930   9.341  10.103  10.047   9.641  10.358  11.152  11.460  13.853  13.781  12.101  10.688 
+  7.386   8.569   8.410   8.906  10.803  11.404  10.461   9.837   9.570   9.620  10.395  10.504   9.437   9.675  10.847  10.582   8.960  11.023  12.490  11.511  11.738  12.376  11.074  11.025  10.577  11.698  11.635  10.927  11.243  12.782  14.128  13.256  15.092  14.839  13.761  13.715 
+ 11.165   8.869   7.895   8.658   9.448  11.292  10.705  10.789  10.457   9.705  10.391   8.827   8.973   7.734   9.279   9.561  10.288  11.158  12.483  11.553  11.366  10.903   8.743  10.050  10.720  12.942  12.348  10.626  11.374  14.356  14.369  12.552  11.604  12.369  14.012  13.935 
+ 13.267  13.044  13.197  13.019  14.089  14.465  14.313  14.503  13.035  13.100  12.459  12.383  12.285  11.899  12.080  12.791  13.610  14.147  13.767  13.169  12.682  11.967  11.570  11.262  12.363  12.718  11.352   9.164  10.786  12.914  11.867   9.744   9.083   9.575  10.189   9.786 
+ 13.311  13.610  12.575  12.697  14.457  14.900  15.505  13.866  13.085  12.625  13.096  12.255  12.093  12.229  12.607  12.988  14.082  14.101  13.655  13.147  12.620  11.997  12.032  12.007  12.470  12.091  11.138   9.616   8.781   7.409   7.836   7.924   7.543   7.391   7.603   6.602 
+ 13.200  12.375  11.460  12.254  13.019  13.619  13.678  12.846  11.875  11.868  11.600  11.283  10.906  11.284  12.244  12.970  12.825  12.193  12.050  11.959  11.743  11.320  12.212  12.130  10.591  10.448  10.732   9.702   7.219   6.959   7.272   7.150   7.273   7.103   7.621   7.029 
+ 12.808  12.577  11.937  11.542  12.165  11.780  10.678  10.463   8.993   9.645   9.486   9.506   7.805   8.468  11.039  10.763  10.170  10.099  10.364  10.515  10.511  10.883  12.298  12.018   8.455   9.031  10.279  10.090   6.659   6.592   6.309   6.860   8.823   8.090   7.388   6.898 
+ 13.114  12.623  12.125  11.727  11.852  11.897  11.724  11.067   8.996   8.692   8.999   8.563   6.916   8.677  11.272  10.967  10.513  10.733  10.735  10.867  10.909  11.008  12.369  12.056   8.645   9.195  10.356   9.996   6.982   6.962   5.394   7.524   9.086   8.360   7.095   5.766 
+ 12.846  12.369  12.094  11.994  11.956  12.224  11.764  10.731   8.934   8.727   9.308   8.348   7.191   8.766  11.396  11.191  10.809  11.190  10.900  11.081  11.155  11.268  12.445  11.976   8.293   8.220   9.956  10.209   6.839   6.454   5.218   7.145   7.622   6.822   6.101   6.917 
+ 12.942  12.176  12.093  11.970  12.226  12.292  11.237  10.277   9.266   9.267   9.727   8.556   7.749   9.095  10.935  11.685  10.737  10.523  10.573  11.015  11.337  11.578  12.361  11.259   7.811   7.435   8.779   9.484   6.941   6.402   5.547   6.134   6.528   6.678   6.448   6.178 
+ 13.046  12.453  12.475  11.969  12.866  14.112  14.008  12.995  11.971  12.030  11.777  11.029  10.289  11.282  12.269  13.432  14.437  15.063  14.031  12.943  12.373  12.420  12.702  12.177   9.589   8.508   8.173   8.793   8.903   8.397   8.367   8.176   8.243   7.265   8.465   8.122 
+ 13.336  12.682  12.808  11.967  13.744  14.404  15.506  14.992  13.382  12.439  12.855  11.848  11.243  11.507  11.880  12.605  13.911  15.268  16.618  16.100  14.927  13.433  13.015  12.966  13.034  11.508   9.959   9.340  10.006   9.823   8.673   9.060   8.251   6.318   7.168   6.411 
+ 13.349  12.460  12.821  12.245  13.462  14.581  16.060  15.703  14.357  12.365  12.763  11.947  11.122  11.363  11.514  11.952  12.570  13.225  15.766  16.846  16.390  14.118  13.031  13.099  13.868  12.356  10.568   9.299  10.530  10.503   9.249  10.778  10.137   7.511   8.237   8.294 
+ 13.326  12.642  12.893  12.623  13.457  15.085  16.144  15.868  14.372  12.948  12.586  12.058  11.330  11.310  11.585  11.741  12.112  12.543  13.820  15.924  17.395  15.516  13.444  13.170  14.032  13.333  11.114   9.287  11.384  11.269   9.303  12.558  11.902   8.365   9.144   9.606 
+ 13.311  12.967  13.015  12.882  13.988  15.654  16.105  15.488  14.048  12.827  12.717  11.885  11.507  11.471  11.776  11.787  12.119  12.378  13.078  14.769  16.494  16.208  13.902  12.968  13.395  13.822  11.844   8.997  11.177  11.090   8.608  12.124  12.136   8.969   9.123   9.673 
+ 13.451  13.000  12.733  13.371  14.276  15.360  15.203  13.725  12.507  12.342  11.968  10.632  10.974  10.685  11.014  10.594  10.425  11.067  12.179  13.481  15.014  15.444  13.325  12.394  13.358  14.086  12.525  10.513  12.000  11.756   9.852  13.059  13.052   9.904  10.046   9.823 
+ 12.755  10.493  11.964  12.423  13.122  15.362  14.514  12.294  12.315  10.399  11.016   9.710  10.027   9.231   9.025   9.070   8.952   8.862  10.052  11.273  12.816  13.980  12.858  10.591  11.869  12.888  11.946  10.338  11.779  11.372   8.901  12.289  12.109   9.083   9.637   9.265 
+ 11.065  10.923  11.352  12.164  12.930  13.740  12.598  10.923  10.695   9.831   9.741  10.067  10.181   9.623   9.795   9.899   9.893  10.318  10.387  11.283  11.037  11.993  12.630  11.460  12.118  12.381  11.531   9.650  10.517   9.896   9.475   9.629   9.040   8.570   9.428   9.321 
+  8.509   8.085   8.397   9.238   9.007   9.812   9.123   9.104   8.890   8.638   7.742   8.155   8.163   7.938   8.003   8.261   8.378   8.551   8.919   9.369   9.833   9.608  10.404  10.128  10.165  10.795   9.597   7.061   7.109   7.888   7.606   7.047   6.627   7.062   7.579   7.718 
+  6.817   5.597   5.737   6.873   8.895   8.825   7.327   7.460   7.243   7.393   6.041   3.309   4.107   4.121   4.636   6.307   6.655   5.529   6.448   7.231   7.582   7.005   6.457   6.106   5.971   6.834   5.874   5.548   6.553   6.178   5.905   6.644   6.391   6.962   6.659   5.253 
+  6.880   6.373   6.642   7.131   5.982   8.462   9.241   7.962   7.214   6.525   6.790   5.822   5.724   6.132   6.550   6.409   7.260   7.325   7.954   8.485   8.445   8.462   8.483   8.884   9.074   8.946   8.018   6.887   6.427   7.133   7.883   8.043   8.127   8.021   7.942   7.636 
+  8.574   8.305   8.263   9.746   9.448  10.259  10.456  10.025   9.772   8.822   8.793   9.894  10.299  10.230  10.905  10.992  11.604  12.642  12.259  12.026  13.475  12.890  12.837  13.618  13.319  13.706  13.660  10.822  11.141  11.651  11.467  12.316  12.192  12.037  12.000  11.839 
+  9.528   9.499   8.544  11.481  11.977  12.237  12.394  11.449   9.911   9.023  10.365  10.392  10.059  10.788  11.406  12.319  11.413  12.279  12.428  12.222  12.660  11.134  12.612  12.696  12.705  13.633  13.684  11.318  11.063  11.319  11.203  12.918  12.176  12.074  11.421  11.620 
+ 12.392  12.747  12.189  13.940  14.843  15.301  13.931  12.259  11.962  11.022  10.122   9.659   9.625   8.757   9.115   9.311   9.518   9.997  10.633  11.262  12.883  13.867  12.935  11.661  11.370  12.476  11.924   9.525  10.367  10.004  12.072  12.673  10.857   9.974   9.073   9.253 
+ 13.332  13.491  13.858  14.139  15.656  17.169  16.456  15.007  13.570  13.195  12.332  11.819  11.443  11.117  11.269  11.292  11.423  11.774  12.451  13.507  14.944  14.203  12.171  11.260  11.495  12.497  11.061   9.569  10.787  12.745  14.716  14.644  13.636  10.981   8.365   7.781 
+ 12.987  13.188  13.493  13.487  15.071  17.047  16.343  16.293  14.580  13.605  12.713  12.290  12.304  12.044  12.021  12.201  12.485  13.326  14.718  16.228  16.123  14.464  12.553  11.142  11.279  11.635   9.646   7.654   8.843  10.592  12.981  12.910  11.646   9.743   8.686   7.611 
+ 12.335  12.641  12.712  12.859  14.304  16.105  17.083  15.517  14.080  13.647  12.477  11.366  11.824  11.222  11.379  11.537  11.963  12.934  14.362  16.387  15.268  12.888  11.866  11.583  11.696  10.665   9.651   9.717   8.795   9.202  11.102  12.300  11.037   9.925   9.546   7.374 
+ 10.852  11.561  11.759  11.891  14.371  16.036  15.950  13.950  12.746  12.327  11.441  10.614  10.800  10.291  10.427  10.593  11.245  12.800  14.759  14.147  10.610   9.930  10.755  11.312  11.034   9.795   8.611   9.048   8.350   8.111  10.659  12.563  11.295  10.137   9.463   7.291 
+ 11.789  11.881  11.560  11.955  11.978  11.693  11.701  10.502  10.173   8.955   9.129   8.967   8.624   8.412   8.562   7.834   8.756  10.304   9.287   8.778   8.223   8.773   9.420   8.774   7.554   7.353   7.555   7.043   6.750   7.373   7.507   7.882   8.276   7.902   7.838   7.454 
+ 11.269  10.768   8.989  10.914  10.704  10.304  10.111   9.529   8.780   8.728   7.577   7.581   8.151   7.555   6.674   6.917   7.657   7.685   7.689   9.372   9.246   9.494   9.575   8.921   7.961   7.545   7.299   8.244   9.066   8.910   9.687  10.011   9.406   7.442   8.568   7.784 
+  9.923   8.424   8.037   9.402  11.404  11.439  11.117  11.640  11.885  11.026  11.873  11.057  10.913  11.698  10.834  11.170   9.515  10.645  13.429  14.227  14.623  14.195  13.624  12.421  11.038  10.030   9.970  10.531  10.551  11.796  11.449  12.097  11.236  10.656  10.439   9.635 
+ 11.700  11.865  11.406  12.507  12.484  12.899  12.338  13.281  12.003  11.732  11.771  11.957  11.441  11.301  10.611  10.234  12.338  12.364  14.450  14.592  15.110  14.907  14.209  12.232  11.103  10.812  11.752  10.553  10.789  11.394  12.085  12.970  12.121  11.206  10.602   9.905 
+ 14.366  13.848  12.253  10.927  11.536  11.482  11.513  11.543  11.076  11.064  12.669  13.432  11.993  12.117  11.591  12.505  14.181  14.661  14.683  13.913  13.470  13.094  12.357  10.432   9.687   9.978   9.541  10.191  10.470  11.433  11.365  10.972  10.651  11.180  10.029   7.972 
+ 11.780  12.569  11.931   9.495   8.784   9.103  10.566  10.952  10.213  11.334  12.806  13.685  14.522  13.724  13.396  13.007  13.974  14.925  14.072  13.078  12.705  13.717  13.037  11.822  12.361  12.516  11.340  12.013  13.853  13.530  12.126  11.666  12.237  13.390  13.450  10.972 
+ 12.379  11.445   9.940  10.431   9.757   9.362  11.110  10.747   9.546   9.322  12.753  14.260  13.855  12.895  13.541  12.851  12.644  12.830  12.168  11.641  11.821  13.768  14.280  11.876  10.535  10.990  10.068   9.632  12.642  12.778  12.405  11.680  11.084  11.312  11.864  11.632 
+ 14.948  14.552  14.330  13.875  12.961  11.908  11.535  11.303  10.390  10.731  14.023  14.426  13.358  12.186  13.200  12.675  11.257  12.656  12.226  12.383  11.669  12.642  13.209  11.674  10.983  10.679  10.974   9.939  10.268  10.750  11.882  12.863  10.685   8.724  10.181  10.558 
+ 14.882  14.283  13.077  12.700  11.112  10.398  10.547  10.584  11.518  10.986  11.445  12.359  13.298  13.093  13.250  13.416  12.891  14.197  12.552  11.731  11.384  13.931  15.017  13.541  11.768   9.354  10.687  10.954  13.024  14.916  13.977  12.537  10.704  10.450  10.342  10.299 
+ 11.702  11.635  10.186   8.978  10.007  10.865  10.191  11.493  11.461  12.132  12.231  12.918  14.104  13.913  13.605  13.734  12.593  13.596  12.745  11.185  12.103  15.319  15.718  14.390  12.666  10.275  10.661  13.038  15.474  15.626  14.563  13.695  10.466   9.989  10.617  10.736 
+ 11.858  11.961  11.231  11.328   9.828   9.857   9.268  10.080  11.259  11.807  12.349  11.968  12.369  13.491  13.555  12.800  11.847  12.288  11.379  10.309  11.712  13.460  14.662  13.291  10.866  10.914   9.587  11.458  13.931  14.119  13.961  12.767  11.175  10.668   9.961   9.418 
+ 12.307  12.304  13.443  13.194  11.166  11.078  10.304   9.765  11.968  13.094  14.086  13.743  13.698  13.373  13.650  12.627  11.506  11.681  10.803  10.475  11.116  12.473  13.278  10.416   9.904  10.085   9.406   9.801  10.203  11.243  13.747  12.520  10.816   9.902   8.048   8.374 
+ 14.115  13.751  13.921  13.752  12.694  13.001  13.850  14.061  14.245  13.897  14.698  13.736  12.820  13.782  13.041  12.679  11.166  11.468  10.582   9.239  10.717  11.978  12.542  10.233   9.801   9.568   9.611   8.494   8.539   9.854  11.254  11.008   8.985   9.031   7.613   7.164 
+ 13.659  13.014  12.682  13.653  13.859  14.689  15.690  16.465  16.887  16.351  16.706  16.668  16.825  16.608  15.210  13.283  12.199  11.891  11.581  10.901  10.368  10.904  10.208   8.947   8.351   8.502   7.570   7.537   9.014  10.431   9.308   8.428   9.040   7.934   6.785   6.027 
+ 13.246  12.734  12.613  13.522  14.261  14.720  15.877  17.122  17.328  17.271  16.592  15.605  17.247  17.403  16.199  14.524  13.739  13.276  13.562  13.963  14.795  14.222  11.239   8.821   5.922   6.243   5.719   6.573   8.710  10.937  10.016   8.185   8.019   7.534   6.071   3.416 
+ 12.966  12.359  12.150  13.400  14.091  14.247  15.656  17.350  17.651  16.851  15.278  15.618  17.051  17.745  16.972  14.544  13.958  13.219  13.217  13.805  14.886  13.726  10.546   8.789   7.630   5.876   6.049   6.294   8.737  10.893  10.278   8.486   7.710   6.891   5.814   4.017 
+ 12.747  11.903  12.292  13.233  13.783  14.266  15.874  17.502  17.946  16.687  15.000  15.761  16.522  17.973  17.287  14.830  14.211  13.729  13.546  14.430  15.012  11.946   9.978   8.676   7.882   6.712   6.522   6.797   8.677  11.492  10.877   8.860   8.292   7.189   5.920   5.566 
+ 12.605  12.257  12.750  13.316  13.977  14.595  16.254  17.490  17.768  16.459  15.141  15.885  16.258  17.513  17.701  16.038  15.093  14.619  15.102  15.658  14.104  11.841  10.260   9.025   7.914   6.875   6.814   6.972   8.602  11.591  11.818   9.299   7.154   6.454   5.888   6.442 
+ 12.762  12.417  12.699  13.425  14.044  14.616  16.504  17.247  17.586  16.158  15.191  15.865  16.049  17.209  17.879  16.608  15.748  15.677  16.514  15.688  13.085  10.562   9.348   8.610   7.809   6.746   5.815   5.298   7.247  10.024  11.343   9.523   6.948   5.523   5.129   6.349 
+ 12.439  11.863  11.924  13.197  13.701  14.138  16.354  16.827  17.231  15.221  14.164  15.557  15.344  16.741  17.356  16.998  15.323  15.168  15.786  15.024  11.569   9.848   8.802   7.758   6.996   6.303   5.642   5.953   6.192   8.745  10.867   9.242   6.312   6.083   5.390   4.513 
+ 12.156  10.983  11.876  12.805  13.303  13.790  16.476  17.303  17.047  15.090  13.959  15.146  14.872  16.348  17.184  16.794  15.433  16.126  15.926  13.931  11.282   9.709   8.587   7.251   6.982   6.490   5.860   7.144   7.246   8.923  11.094   9.848   7.429   7.473   7.069   6.347 
+ 11.969  11.678  12.397  12.973  13.686  14.653  16.850  17.542  17.019  15.339  13.970  14.980  14.994  16.092  17.207  17.255  16.087  17.020  16.703  13.850  11.249   9.526   7.915   7.217   7.191   7.113   6.782   6.551   7.570   9.671  11.899  10.346   6.709   6.275   6.283   6.409 
+ 12.209  11.711  12.156  13.066  13.820  14.745  16.844  16.975  16.706  15.366  13.831  15.004  14.950  15.955  17.238  17.834  16.876  17.094  16.474  14.026  11.479   9.586   8.435   7.890   7.457   7.300   6.917   7.058   8.370   9.975  11.553   8.905   6.802   6.641   6.416   6.385 
+ 12.213  11.167  11.592  12.839  13.578  14.387  16.580  16.679  16.297  15.212  13.350  14.670  14.357  15.350  16.350  17.691  16.882  16.816  16.390  13.829  11.596   9.686   8.652   7.750   7.612   6.581   6.255   6.527   7.238   9.184  11.190   8.515   6.327   6.419   5.478   5.562 
+ 11.797  10.739  11.620  12.396  13.266  14.328  16.638  16.949  15.806  14.793  13.056  14.088  13.869  14.723  16.152  17.693  17.032  17.195  16.737  13.899  11.854   9.557   8.260   7.121   7.401   6.795   5.663   5.896   6.679   8.800  10.211   6.939   5.718   5.351   4.961   5.376 
+ 11.792  11.224  12.037  12.609  13.784  15.127  16.912  16.824  15.540  14.862  13.728  13.998  14.126  14.730  15.988  17.566  18.094  17.893  17.476  14.895  12.535  10.424   9.191   8.488   8.027   7.832   7.434   7.168   7.076   8.606   9.959   7.518   6.567   6.267   6.257   6.321 
+ 11.822  11.367  11.977  12.916  13.971  15.267  16.843  16.208  15.467  14.967  13.464  13.867  13.517  14.365  15.411  16.702  18.068  17.983  17.692  15.343  12.777  10.510   9.424   8.841   8.306   7.780   7.796   7.646   7.794  10.039  10.863   8.631   6.884   6.729   6.835   6.626 
+ 11.791  10.825  11.507  12.808  13.493  14.717  16.410  15.931  14.648  14.527  12.757  13.251  12.906  13.935  14.239  15.455  17.631  17.249  17.690  15.940  13.472  10.400   9.243   8.278   7.264   6.732   7.753   8.618   9.615   9.873  10.472   8.413   6.619   7.147   6.718   5.760 
+ 11.651  10.385  11.757  12.416  13.512  15.374  16.273  15.915  13.631  13.901  12.550  12.685  12.698  13.235  13.740  15.195  17.310  17.444  17.520  16.392  13.629  11.013   9.124   7.967   7.966   7.452   7.485   8.524  10.513  10.375  10.286   8.770   7.531   7.819   6.777   5.757 
+ 11.930  11.183  12.346  12.907  14.397  15.923  16.343  15.704  13.735  13.849  13.034  12.935  12.958  13.395  13.982  15.208  16.745  17.849  17.932  16.743  14.409  11.546   9.363   8.484   8.603   8.131   7.980   8.609  11.882  12.429  10.893   8.584   7.742   7.529   6.860   6.590 
+ 12.135  11.488  12.181  13.510  14.542  15.861  15.583  15.130  13.548  13.810  12.797  12.798  12.858  13.128  13.691  14.728  15.905  17.757  18.033  17.309  14.709  11.878  10.017   9.043   7.985   8.695   8.961   9.525  12.774  13.236  11.234   8.751   7.697   7.845   6.725   5.987 
+ 12.146  11.291  11.615  13.454  14.441  15.588  15.086  13.725  12.957  13.318  11.613  12.214  11.984  12.336  12.528  13.765  14.849  17.059  18.092  17.350  15.428  12.860  10.030   8.943   8.679   9.501   9.894   9.358  12.331  12.254  10.078   8.804   8.000   7.693   7.745   6.850 
+ 11.785  10.508  11.931  12.942  14.878  15.663  14.741  13.173  12.551  12.929  11.016  11.815  11.320  11.930  12.127  13.173  14.144  16.619  18.059  16.953  16.162  13.165  10.625   8.575   8.743   8.347   9.583  10.053  12.234  11.786   9.682   8.108   8.023   8.649   8.261   7.368 
+ 11.790  11.065  12.554  14.023  14.317  14.260  13.944  12.424  11.931  12.058  11.047  11.187  10.935  11.578  11.681  12.493  13.259  15.400  17.425  16.701  16.159  13.371   9.930   8.931   8.892   8.875   8.957  10.498  12.061  11.155  10.490   8.629   9.264   8.987   7.434   6.377 
+  9.756  10.751  11.465   9.954  10.206  11.020   9.591   9.064   9.122   7.827   7.973   7.966   8.472   8.958   9.197   9.547  10.168  11.923  14.866  15.333  14.092  12.340   9.317   7.908   6.894   6.535   7.543   8.042   9.009   7.803   8.674   8.835   8.212   7.689   5.921   4.551 
+  9.607  10.458   9.717   9.554   8.888   9.084   7.683   7.747   7.611   8.171   8.572   8.140   7.745   8.927   9.335   8.729   9.947  11.299  13.197  13.101  11.968  12.963  12.326  11.000  10.202   9.437   8.935   9.983  10.513   9.782   8.956   9.794  10.340   9.989   9.185   7.524 
+ 10.543  10.911   9.838   9.055   8.030   8.994   9.019   6.654   6.862   6.655   7.103   8.359   7.345   7.590   7.445   7.484   8.795   9.787  11.360  12.093  11.110  11.431  10.419   8.554   8.018   7.208   7.594   7.948   8.522   8.301   8.486   8.718   8.477   9.233   9.876   8.605 
+  9.747  10.938  10.099   7.705   8.652   9.153   8.849   7.136   7.497   6.640   5.930   6.584   6.021   7.668   7.625   7.395   6.508   9.037  10.661  10.980  10.525   8.150   8.781   7.021   7.232   6.418   6.479   7.912   8.303   9.427  10.139   9.627   7.429   8.916   9.709   8.384 
+  9.423  10.102  10.028  10.117   9.118   8.783  10.194  10.007   8.209   8.658   9.505   8.631   9.234   9.561   9.058   9.796  10.433  10.585  11.515  12.035  11.946  11.620  11.940  11.274  10.742  10.818  10.685  10.765  10.560  10.131  10.562  11.017  10.298   9.835   9.945   9.117 
+  8.716  10.071  10.709  11.662  10.999  11.667  12.393  12.148  12.864  12.733  12.902  13.034  12.806  12.590  10.714  11.734  11.715  12.318  13.017  13.089  14.060  13.198  13.394  12.502  12.382  13.061  13.120  12.474  11.192  11.498  12.840  13.122  11.859  12.192  13.388  12.403 
+ 10.204  10.496  10.489  12.175  11.986  11.221  12.253  12.242  12.415  12.185  10.786  11.083   9.958  10.239   9.218   9.359  10.205  10.900  12.224  13.255  13.469  12.439  11.666  12.206  12.206  12.258  12.834  12.192  11.087  11.157  12.215  11.621   9.151  11.441  13.082  13.139 
+ 11.352  11.438  11.852  11.926   9.767   8.058  10.373  10.038  10.278  11.289  11.065  12.505  11.765  10.447  10.280  11.165  10.401  12.083  12.943  15.647  15.721  13.463  11.326  11.884  12.125  12.489  11.775  12.087  11.323  10.839  11.268  11.129   8.965   9.868  12.685  13.244 
+ 11.436   9.989  10.201  10.395   9.378   9.208  10.951  10.147  10.815  12.050  10.760  11.727  11.617  11.007  10.154  11.299  11.082  12.538  13.773  15.593  16.499  14.843  12.385  12.698  12.838  12.410  10.425  10.194  10.530  10.011   9.747   9.663   8.989   8.891  10.454  11.023 
+ 11.197  11.960   9.852   8.911   9.442  10.484  10.469  10.903  11.013  11.385  11.458  10.779  12.284  11.823  10.742  11.215  12.571  12.568  13.066  14.654  15.184  14.394  12.598  13.013  13.075  12.565  11.537  10.442  10.148  11.271  11.160   9.886   9.829   9.398  10.131  10.110 
+ 12.216  11.874  10.160   9.055   8.924   9.251  11.394  12.219  11.819  12.587  12.041  11.024  11.526  11.890  11.895  11.960  11.261  12.158  13.311  16.087  15.958  13.875  12.118  10.899  11.174  11.805  11.304  10.898  10.347  11.096  11.337   9.407  10.356  10.062   9.544   9.952 
+ 10.311   9.557   8.522  10.273   9.698   8.902  10.197  11.857  11.247  10.479  10.298  11.507  11.837  11.097  10.662  10.789  11.037  12.376  12.830  15.362  14.485  11.948  11.008  10.395  11.263  12.972  13.110  12.588  10.471  10.448  10.547  10.895  11.358  10.645  10.561   9.793 
+ 10.663  10.134  10.479   9.279   9.434   9.205   8.836   7.881   8.808  10.442  10.705   9.963   8.504   9.585   9.242   9.370  11.120  12.229  12.970  14.469  13.341  12.345  10.547  11.065  11.439  11.841  11.589  11.405  10.837  10.474  10.011   9.953  10.949  10.761  10.329   9.467 
+ 12.667  12.350  12.093  10.736   9.983   8.771   6.761   6.882   9.232  10.106  10.770   9.800   8.072   8.134   8.514  10.394  11.114  11.180  11.849  13.185  13.556  10.724   9.762  10.127   9.762  10.228  10.812   9.930   9.912  10.601   9.988   9.787  10.106   9.651   9.557   8.741 
+ 10.048   8.471   9.085   8.197   8.420   8.041   8.275   8.698   8.660   8.058   9.479  10.729   9.539   9.297   9.077  11.740  10.909   9.801  12.160  13.825  13.324  11.767  10.950  11.141  11.317  10.493  10.343  10.527  10.576  10.775  10.170  11.170  10.441   9.911   8.563   8.327 
+ 10.694   9.183   8.212   8.600   8.642   7.458   5.861   8.161   9.176   8.940   9.402   9.896   9.307   9.956   9.847  11.837  11.288  10.956  13.267  14.592  12.405  11.476  10.867   9.819  11.385  10.743  10.697  11.138  10.503  10.725   9.609  10.809  10.215   9.606   9.955   9.454 
+ 10.536   9.532   8.900   7.602   7.540   8.163   7.436   8.749   7.866   7.082   7.849   8.676   8.987   8.769   8.132   8.878  10.117  10.546  13.064  13.552  11.493  10.734  10.105   9.771   9.547  10.233  10.079   8.682   8.730   9.803  10.104  10.860  10.770  10.167  10.284   9.486 
+ 10.740   9.175   7.158   6.687   7.226   8.972   8.544   7.818   7.842   7.360   8.787   8.251   8.180   8.861   8.234   7.987   7.979   9.140  11.474  11.601  11.118  10.559   9.158   8.657   9.122   9.188   9.519   8.945   8.504   9.420   9.746  10.397  10.207   9.576   9.132   8.792 
+ 11.089   9.723   8.215   7.511   7.587   6.708   5.493   6.214   6.954   7.974   9.620   8.978   8.280   7.904   7.609   8.017   8.531  10.204  12.400  12.821  11.248   9.581   8.716   8.973   8.783   9.375   9.105   7.340   8.136   8.821   9.221   9.027   9.256  10.546   8.640   8.493 
+  9.614   9.833   9.516   9.673   8.591   8.969   8.913   8.451   8.525   8.280   9.181   8.314   7.924   7.459   7.183   8.008   9.369  11.915  12.391  11.807  11.431   9.522   9.663   9.238   9.101   9.783  10.083   8.697   6.008   8.969   9.435   8.982   9.776  10.684   9.437   9.167 
+ 10.220  11.305  11.772  11.018  10.201  10.961  11.835  11.837  10.608   9.339   8.914   8.576   7.361   6.513   6.890   6.352   8.823  10.110  11.330   9.621   9.722   9.279   8.443   7.297   8.696  10.656  11.008   9.020   6.834   8.553   8.473   8.787  10.643  10.343   8.532   7.717 
+  5.567   8.144   9.278   8.369   6.789   6.146   9.464  10.057   7.058   5.432   5.516   4.874   4.169   3.906   4.684   4.607   5.137   5.881   6.873   6.770   5.788   4.624   4.246   4.998   5.734   6.970   7.627   5.746   4.617   5.802   5.173   5.148   7.727   6.679   5.107   4.959 
+  9.398   9.070   8.500   7.629   7.903   8.723   8.426   6.543   6.735   7.412   7.627   6.344   4.960   5.167   4.709   4.548   4.820   5.742   4.548   6.076   6.089   4.724   5.607   4.773   4.918   4.449   5.207   4.922   4.682   5.526   5.178   5.441   5.460   4.580   4.595   3.378 
+  8.427   8.194   6.385   5.021   7.010   8.219   8.103   6.927   6.654   6.653   6.638   6.562   4.946   5.310   4.274   4.349   5.635   5.743   4.889   4.921   3.954   3.628   4.703   4.544   4.665   4.719   5.036   5.195   5.534   6.052   5.407   5.452   6.568   5.518   5.498   4.434 
+  6.598   5.775   5.905   5.973   4.054   3.657   5.276   5.137   5.170   4.648   4.900   5.024   5.321   4.513   3.697   4.711   6.083   5.101   4.037   3.322   4.336   4.441   4.911   5.239   4.280   4.353   4.225   4.420   5.670   5.465   5.529   5.449   5.523   4.587   5.160   4.038 
+  5.676   5.212   5.921   4.810   4.142   5.266   6.009   6.308   5.149   4.393   4.850   4.592   3.427   4.813   3.955   4.661   5.539   5.850   5.118   3.929   5.336   5.211   4.838   4.793   4.335   4.458   4.535   4.486   4.778   5.013   5.242   4.627   4.524   4.484   4.764   3.942 
+  4.808   5.471   5.017   5.152   4.764   3.688   6.060   6.197   4.169   3.414   3.333   3.645   3.551   5.156   4.409   4.511   5.470   4.972   5.291   4.572   4.464   4.409   4.024   4.357   4.038   4.043   4.462   4.393   5.812   5.031   5.133   4.522   4.736   4.685   4.055   3.482 
+  6.763   7.158   8.440   8.277   8.689   9.771  10.452  10.828  10.731  10.398  10.277   9.979   9.520   9.723   9.889  10.150  10.412  10.944  11.298  10.827  10.089   9.775   9.822   9.800   9.801   9.904   8.992   7.818   8.038   7.278   6.580   6.089   6.138   5.266   6.522   6.954 
+ 11.375  10.747   9.764  10.873  11.417  11.108  13.686  14.521  13.682  12.649  13.143  12.162  12.099  11.376  11.990  12.416  13.167  14.747  15.185  13.694  12.747  12.641  12.839  12.548  12.541  13.701  12.430  11.848  11.936  10.453   9.496   8.789   9.393   9.586  11.204  10.747 
+ 12.051  12.256  10.595  10.709  10.639  11.198  12.163  12.485  12.571  12.545  13.452  13.130  12.192  12.636  13.294  12.991  12.752  15.390  15.610  15.124  13.126  12.669  12.263  11.968  12.377  13.585  13.540  11.540  11.519  11.261  10.643  10.553  12.344  12.267  12.555  13.090 
+ 12.530  13.333  13.486  13.705  12.816  12.360  12.182  12.372  12.195  11.818  13.037  14.051  12.860  13.194  12.583  12.819  12.356  13.170  15.272  14.952  14.531  14.318  12.744  13.997  13.231  12.630  14.181  12.384  11.882  13.596  14.295  12.860  13.796  13.958  14.116  14.079 
+ 14.958  14.364  15.474  15.173  14.276  13.119  13.443  14.401  14.435  13.591  13.277  14.602  13.740  12.433  13.136  12.883  14.107  14.519  14.684  15.038  16.033  16.147  14.281  13.384  12.881  13.189  13.159  12.272  12.316  12.678  13.695  13.799  14.573  14.845  14.131  14.294 
+ 15.775  14.387  13.224  12.926  12.969  12.047  10.757  12.680  12.170  10.937  11.043  11.962  13.210  12.989  13.403  13.366  13.256  13.034  14.231  14.288  14.605  13.369  13.097  13.491  13.786  12.551  12.870  11.461  10.809  11.802  12.788  13.871  13.908  14.438  13.969  12.734 
+ 12.008  13.344  13.102  11.250  10.245   9.731  11.751  11.776  10.750   9.594   9.963  11.824  12.395  13.466  14.734  14.518  14.597  13.273  13.240  14.972  15.022  14.053  11.849  13.701  14.019  13.652  13.441  10.814  10.331  12.172  12.943  12.722  12.408  12.740  12.699  12.443 
+ 10.467  12.076  11.614   9.627   7.798   9.630  11.632  11.967  11.321  11.181   9.745  11.498  12.112  13.624  14.226  14.926  15.828  14.724  14.839  15.128  15.599  14.578  13.358  13.284  13.451  13.507  13.034  10.303   9.839  11.616  13.639  13.371  11.950  11.588  12.675  12.442 
+  8.918   8.565   7.986   7.486   7.404   8.076  11.949  13.957  12.908  10.819  10.641  11.790   9.985  11.367  13.020  14.195  15.982  14.358  14.574  14.593  15.972  14.759  13.214  12.652  13.273  13.687  13.624  11.404  10.640  11.841  12.674  12.694  11.712  11.773  12.540  12.925 
+  9.237   9.050   8.675   7.414   7.407   7.313  11.911  14.056  12.782   9.996  11.201  11.850   9.703  10.860  12.200  12.997  15.852  14.497  14.410  15.910  16.394  14.773  12.517  11.987  12.004  13.698  13.446  11.672  11.596  12.156  12.413  11.603  11.224  12.627  13.291  13.375 
+  9.800   7.898   6.428   6.609   6.668   7.707  11.049  13.401  12.011   7.862  10.818  10.633   9.910  10.311  11.685  13.130  15.797  13.914  13.682  16.700  15.586  12.880  12.639  11.949  12.613  13.650  13.464  12.350  11.834  11.544  12.772  11.610  11.818  13.274  13.657  13.424 
+  9.642   7.365   8.402   8.993   7.819   7.804  10.949  13.233  11.631   7.042  10.481  10.764   8.922   8.685  11.422  13.332  15.780  13.708  13.205  14.672  13.496  12.630  11.846  11.491  10.758  13.810  13.632  11.333  10.919  11.864  11.989  10.871  11.525  13.184  13.823  11.916 
+  9.560   9.634   9.895   9.236   7.898   8.194  10.950  13.284  11.969   7.364   9.965   9.917   8.768   8.992  10.821  13.066  15.405  13.721  12.962  13.907  13.356  13.135  13.012  11.926  10.432  13.536  13.174  10.381  10.488  11.306  12.257  12.148  10.302  12.527  14.148  12.819 
+  8.338   9.507   8.980   7.317   7.486   7.402  10.992  13.140  11.702   7.917  10.211  11.055   8.776   8.655  11.791  14.088  15.313  13.461  12.690  12.964  13.400  13.294  13.153  12.238  11.314  13.007  12.534  10.181  11.255  11.992  12.705  12.456  10.368  12.009  12.696  12.976 
+  8.139   7.034   6.629   6.125   7.556   7.696  10.439  12.755  11.407   8.645  10.965  10.292   8.457   7.692  11.532  14.165  14.293  12.080  13.314  13.659  14.860  13.950  12.945  12.310  11.629  13.193  12.493  10.820  10.620  11.651  11.679  12.142  10.827  13.582  14.004  12.714 
+  9.478   8.590   7.003   6.657   7.119   7.488  10.019  12.327  10.692   7.493  10.119  10.927   8.633   8.466  11.324  14.314  13.443  11.965  12.223  13.189  14.698  14.148  13.366  12.040  12.248  12.559  11.669  10.639  10.675  11.680  12.255  11.351   9.678  11.877  13.596  12.840 
+  6.667   6.571   5.593   5.723   6.098   4.726  10.647  12.358  10.719   7.883   9.641  10.871   9.354   9.634  11.965  12.845  12.573  13.455  13.698  14.316  13.490  13.157  14.106  12.443  12.057  11.473  10.842  10.162  10.712  12.049  12.329  11.355  10.287  13.729  14.280  12.712 
+  7.010   7.337   6.988   6.312   5.205   6.715  10.448  12.128  10.148   8.142  10.110  10.597   7.730   9.784  12.443  12.652  13.360  12.716  12.918  14.011  14.209  13.281  12.634  11.417  12.486  11.708  11.124   8.933   9.962  11.626  12.494  11.705  10.136  12.651  13.828  12.472 
+  7.422   5.740   6.518   5.314   5.123   6.236  10.356  11.815   9.673   9.159   9.731  10.880   8.880   9.637  12.608  12.721  13.992  12.204  11.791  12.741  12.566  13.677  13.573  12.119  11.276  11.523  11.371   9.197  10.141  12.109  12.730  12.209   9.922  12.664  13.565  11.904 
+  5.374   5.710   5.754   6.808   7.667   8.716  10.459  11.737   9.633   9.075   8.727   9.166   7.791  10.440  12.587  12.459  14.183  12.100  11.678  13.785  13.237  14.864  13.384  11.518  11.811  11.786  10.871   9.702  11.257  11.966  11.987  11.181  10.581  13.224  13.992  12.425 
+  4.773   6.074   6.581   7.750   6.321   7.850  10.090  11.697   9.844   9.045   9.089   9.876   8.413  10.893  12.251  12.454  14.160  11.994  12.556  15.270  16.411  15.655  13.038  11.053  11.613  11.695  11.145  10.047  11.179  11.621  11.418  10.930  11.007  13.378  13.123  11.565 
+  5.311   4.610   5.903   7.433   7.086   7.810   9.928  11.472   9.648   8.722   9.762  10.149   7.735   9.890  10.770  12.274  13.971  13.808  12.796  15.817  15.884  13.789  12.767  11.587  11.758  11.183  10.827  10.276  10.643  11.101  11.538  11.046  11.442  13.545  13.224  11.650 
+  6.028   6.912   5.268   7.459   7.966   7.323   9.249  10.902   8.946  10.352  10.976  10.513   8.159  10.675  11.592  12.293  11.640  14.327  14.679  14.274  13.971  12.473  12.508  11.245  11.324  10.662  11.281  10.893   9.873  10.507  11.112  10.151  11.311  12.686  12.916  11.481 
+  6.968   6.912   5.931   7.282   8.078   8.675   9.159   9.791   8.786  11.386  12.685  11.636   7.736   9.527  11.296  12.274  11.197  14.333  14.605  14.685  15.002  13.330  12.683  12.655  12.026  10.986  10.903  10.175   9.891  10.935  10.250  10.020  10.617  12.175  12.969  11.401 
+  6.056   5.066   4.352   4.799   8.463   8.941   9.876   9.856   7.670  11.592  12.256  11.037   7.553  10.097  11.280  12.188  12.188  12.287  12.261  13.076  13.899  13.527  12.797  12.356  11.034  12.150  11.868  11.336  10.293  10.942  11.428   9.463  11.006  11.810  12.340  11.862 
+  5.913   6.194   6.037   5.760   7.924   8.363   8.460   9.559   7.693  11.393  12.329  10.174   6.961   9.010  11.600  13.247  12.874  13.014  13.153  12.794  13.452  12.189  11.594  12.251  11.635  11.499  11.832  11.015   9.687  10.136  11.129  10.260  11.678  12.321  12.732  11.294 
+  5.606   5.789   5.454   6.706   9.164   9.950   9.145   8.262   8.121  10.874  12.672  10.934   7.721   9.500  10.392  12.648  11.612  11.427  12.327  13.053  13.546  13.274  12.645  10.107  11.506  12.082  11.024  10.426  10.205  11.057  11.410   9.730  11.096  12.003  12.192  10.423 
+  4.978   6.492   6.328   6.226   9.909  10.800   9.188   8.822   7.838  10.402  12.088   9.831   7.077   9.442  11.127  12.450  10.398  11.775  13.149  14.060  14.616  13.135  12.209  10.788  12.518  11.364  10.761  10.562   9.647   9.932  11.373   9.903  10.527  11.567  12.308  11.627 
+  5.848   6.156   5.829   6.721  10.197  11.288   9.100   8.525   8.818  10.495  11.574   9.220   7.304   9.898  11.186  11.660  10.112  12.609  13.746  13.968  13.573  12.908  11.113  10.931  11.638  11.446  10.560  10.401   9.793  10.271  11.134   9.987  10.315  11.363  11.690  10.583 
+  5.452   5.870   5.359   6.472  10.519  11.113   8.251   8.108   9.399  10.462  11.624   9.598   8.203   9.801  11.738  12.195  10.077  13.289  13.389  13.198  13.147  11.401  11.320  12.007  10.924  10.732  10.979  11.038   9.150   9.941  10.180   9.184  10.622  10.813  10.379  10.965 
+  6.200   7.435   6.466   4.836  10.343  11.103   8.118   7.832   9.667  10.149  11.013   9.613   7.903  10.317  12.061  11.862   9.855  11.392  12.699  12.923  12.729  12.782  12.066  12.344  10.697  10.944  10.869  10.555   8.649   9.359   9.479   9.740  10.640  11.523  11.325  10.820 
+  6.037   7.627   6.925   6.119  10.303  11.060   8.075   8.666  10.273  10.800  10.796  10.339   7.989   9.691  12.004  11.142  10.166  11.092  12.412  13.888  12.539  11.277  11.474  12.186  10.299  11.071  11.238   9.663   8.655   9.504   9.467   9.971  10.336  11.313  10.595  11.703 
+  6.154   6.515   7.132   6.433   9.891  10.696   8.709   8.422  10.525  10.761  10.477   9.818   8.524  10.715  12.311  10.067   9.147  11.745  12.420  13.281  13.090  11.221  11.182  11.636  10.493  10.379  10.271   9.993   8.976  10.121  10.369   9.600   9.703  10.973  10.760  12.893 
+  4.824   6.743   6.603   6.207  10.164  10.671   8.282   9.621  11.059  10.425  10.139   9.383   8.945  10.808  12.234  10.352  10.194  11.550  12.586  13.202  11.997  11.026  11.999  12.313  10.629   9.963  10.740  10.218   8.948   9.133   9.733   9.516  10.471  10.094  10.876  12.991 
+  6.871   6.935   6.492   6.116   9.876  10.702   9.164   9.819  11.511  10.936  10.132   8.706   7.846  10.973  11.815   9.561  10.962  11.827  12.477  13.146  11.496  12.002  12.099  11.126  10.200  10.497   9.732   9.831   9.360   9.767   9.977   9.810  10.518  10.670  10.355  11.824 
+  5.727   4.751   5.304   5.053   9.142   9.846   7.654   9.470  11.320   9.949  10.114   9.933   8.173  10.465  10.767   9.603   9.153  12.064  12.458  13.119  12.217  11.051  10.730  10.642   9.938  11.067  11.132   9.985   9.826  10.181  10.342  10.152  10.671  11.631  10.213  11.026 
+  6.889   6.974   6.425   6.508   9.059  10.121   8.062   9.254  11.503  10.190   9.505   9.854   8.541   9.457   9.289   9.171  10.001  11.538  12.512  13.092  12.313  11.609  10.560   9.761  10.061   9.978  10.509  10.876   9.294   9.738  10.002   9.023  10.588  10.868  10.827  12.276 
+  9.704  10.130  10.256  10.107   9.490  10.748  10.235  10.414  10.941  10.034  10.212  10.249   9.998   9.918  10.842   9.240   9.615  11.558  11.465  11.828  12.123  11.144  10.071   9.969   9.961  11.118  10.325  10.597   9.086   9.698  10.146  10.030  10.551  11.528  10.841  11.659 
+ 12.154  12.320  11.934  11.265  11.345  10.870  11.344  11.126  10.091  10.363  11.356  11.203  10.643   9.993  10.788   9.340  10.535  11.938  12.739  13.182  13.157  10.377  10.803   9.742   9.628  11.090  11.245   9.374   8.697  10.588   9.836  10.002  10.576  11.090  10.127  11.271 
+  8.515   8.473   8.074   6.481   9.424  10.220   7.674   9.502  11.790  10.313  10.037  11.163   8.966   9.958  10.938   9.542  10.136  11.580  12.433  13.075  13.052  11.414  10.387   9.733   9.888  10.630  10.678  10.512   8.817  10.001   9.838   9.186   9.735  10.068  10.500  11.748 
+  5.110   6.319   6.202   5.815   8.991  10.193   8.240   9.711  12.038  10.621   8.789   9.534   8.205   9.698  10.410   9.609  10.024  11.686  11.952  12.146  11.593  11.315  10.462  10.418   9.864  10.386  11.097  10.655   8.246  10.320  10.148   9.231   9.687  10.118   9.941  11.235 
+  6.388   7.040   6.017   5.709   8.794   9.431   7.336   9.572  11.896  10.350   9.430   9.740   6.808   9.472  10.704   9.460   8.362  11.227  11.862  12.304  12.089   9.936   9.751   9.681   9.566  10.182   9.745   9.505   8.656   9.327   9.209   9.196   9.967  10.721  10.591  10.568 
+  6.568   6.669   5.314   3.853   8.104   8.602   6.472   9.130  12.013  10.672   9.053   8.919   7.328   9.409  10.921  10.346   9.667  11.304  12.022  12.261  10.875  10.243  10.403  10.022   9.952   9.397   9.876   9.699   7.698  10.408  10.056   9.989  10.063  10.472   9.963  11.579 
+  6.512   6.569   4.735   5.320   7.828   7.019   7.028  11.909  13.179  11.070  10.080   9.343   8.303   9.544  10.677   9.664   9.509  10.083  11.749  11.259  10.769   9.464   9.404  11.018  10.087   9.536  11.110  10.049   7.787  11.073  10.118   9.793   9.259   9.088   9.805  11.379 
+  6.787   6.735   4.822   5.795   8.277   7.874   8.532  13.026  13.632  10.761  10.537   9.585   8.004   8.859  10.899   9.066   9.335  10.535  12.055  11.090  11.243   9.647   9.706  10.001   9.013   9.495  10.940  10.743   8.036   9.086   9.706   9.704   9.802   9.024  10.512  11.282 
+  5.315   6.266   4.750   5.566   7.838   7.372   8.912  13.041  12.699   9.170   9.579   8.139   6.770   8.459  11.269   9.779   8.530  10.255  12.479  12.334  11.599  10.166   9.356  10.862   8.982   9.149  10.222   9.832   8.911   9.362   9.040   9.111   9.629   8.934  10.149  11.377 
+  5.588   6.305   6.055   6.628   5.713   6.916   9.491  13.208  12.949   9.635  10.570   9.307   7.350   8.948  11.394   9.402   7.769  10.879  12.931  12.005  11.113   9.851   8.535  10.023   9.252   8.809   9.618   9.496   8.035  10.323   9.446   8.870   9.324   9.863   9.894  10.555 
+ 10.189  10.245   9.957   8.531   8.109   7.774   9.465  13.293  13.043   9.732  10.121   8.660   8.747   9.176  11.371   9.671   8.886  10.935  12.948  11.722  11.511   8.987   9.233   8.987   8.486   9.488  10.593  10.048   8.087   9.832   9.627   9.038   9.244   9.400   8.889  10.457 
+ 10.726   9.714   9.021   7.504   8.007   8.663   9.981  12.568  12.163   8.852   8.946   8.179   8.922   8.308  10.964   9.448   9.092  11.391  12.691  11.225  11.298   9.266   9.530   8.978   8.609   9.622  10.589  10.453   7.916   9.681   9.119   9.367   8.913   9.282   9.362  10.047 
+  6.711   7.617   6.481   5.825   7.945   8.305   7.863  10.566  10.659  11.118  11.423  10.335   8.761   9.427  11.299   9.652   9.575  11.556  12.471  10.498  10.562   9.782   9.065   9.213   8.161   9.321  10.261  10.340   8.191  10.158   9.630   9.493   8.952   9.426   9.459  10.709 
+  7.489   6.468   5.824   6.801   6.379   7.050   7.740   9.344  11.051  12.049  10.780   9.571   8.544   8.761  10.559   9.351   9.737  11.204  12.189  10.773  10.572   9.015   7.950  10.060   8.919  10.003  10.335  10.564   8.347  10.091   9.107   8.741   9.185   9.220   9.135  10.212 
+  7.226   7.019   7.122   7.557   8.601   8.461   8.068   9.078  10.714  11.907  10.358   9.016   7.173   7.760  10.916   9.647   9.397  11.152  12.087  12.160  11.167   8.772   8.940  10.698   9.745   8.604   9.549  10.287   8.430  10.709   9.877   8.400   8.915   9.473   8.968  10.220 
+  5.329   6.068   5.719   7.163   8.001   8.104   6.181   6.959  10.318  11.491  10.546   8.494   6.867   7.784  10.971  10.229   9.263  11.184  11.931  11.830  10.648   8.985   8.783  10.651  10.059   8.884   9.101   8.137   8.587  10.275   9.653   9.165  10.116   8.532   8.742  10.441 
+  6.617   9.042   9.002   8.992   7.908   6.191   6.612   8.124  10.084  10.422  10.012   8.925   7.757   8.021  10.972  10.265   9.140  11.082  11.878  10.773  10.433   9.920   9.116   9.570   9.374   9.077   9.473   8.235   8.362   9.525   9.817   8.715   9.910   9.416   9.147   9.593 
+ 12.504  12.556  11.887  11.447  10.936  10.207  10.535  10.277   9.073   8.904   9.990   8.801   8.188   9.160  10.843  10.416   8.954  10.393  11.870  10.536   9.950   9.248  10.287  10.530   9.450   9.667   9.133   9.113   9.217  10.324  10.099   8.434   9.715  10.030  10.024   9.309 
+ 11.864  11.459  10.395   9.479  10.017   9.764   9.343   9.310  10.385   9.785   9.691   9.036   8.236   8.626  10.350  10.697   9.460  10.677  11.152  10.420   9.845  10.082   9.393   9.691   9.247   9.861   9.619   8.603   9.030  10.206  10.587   8.392   9.838  10.317   9.903   9.923 
+  7.712   8.900   8.902   7.564   8.937   9.437   9.485   9.903   9.051   9.466   9.919   7.780   9.738   9.943  10.936  11.300  10.684  10.548  11.751  12.010  11.970   9.911   9.068  10.491  10.347   9.353  10.800  10.143   9.357  10.789  10.625   9.519  10.193  10.200  10.192   8.979 
+  8.357   7.923   7.945   8.361   8.639  10.540  11.111   9.333   9.788   9.904  10.397   9.558   9.529   9.773  10.302  11.180  10.104  10.326  10.945  10.730  11.376   9.398   9.799  10.109  11.327  10.054  10.441   9.859   9.423  10.326   9.794   9.931   9.529  10.575  10.655   9.709 
+  9.559  10.407   9.017   9.040  10.639  10.428  10.698   9.100   9.479  10.222  10.000   9.724  10.197  10.514   9.685  11.206  10.611   9.414  10.624  10.828  11.007  10.088  10.072  10.145  11.004  10.545  10.153  10.645  10.508  11.048  10.596  10.450  11.018  11.700  11.226  10.629 
+  8.119  10.021  10.483  10.859  10.986  12.208  10.946   9.906   9.898  10.397  10.868   9.877   9.824  11.289  10.493  11.864  11.433  11.130  11.578  10.295  11.069  10.547  10.784   9.815  10.413  11.006  11.216  11.837  11.587  10.619  11.214  11.141  11.244  10.768  11.328  10.460 
+  8.484   8.417   9.737  10.514  10.208  10.633  10.826  10.980   9.285  11.026  11.418   9.505  10.778  10.781  10.540  11.310  11.084  12.161  12.153  11.394  10.763  10.551  10.889  10.523  10.812  11.184  10.899  11.648  11.127  10.317  10.779  10.750  11.020  10.824  11.500  10.912 
+  9.313   9.436   9.350   8.866   9.588  10.114   9.716  10.772  10.561  10.591  11.641  10.266   9.880   8.854   9.986  11.238  12.182  11.593  11.786  10.429   8.855   9.411  10.645  10.152  10.519  10.823  11.616  11.187  10.702  10.378  10.066  10.675  11.586  10.080  11.363  10.172 
+  8.411   9.205   8.358  10.131   9.953   9.164   9.138  10.621   9.964  10.942  10.900   9.661  10.784  10.387  10.008  10.591  12.762  12.509  11.169   9.914  10.255   9.701   9.880   9.823   9.648   9.885  11.203  11.027  10.858   9.911   8.917  10.467  11.373  11.638  11.429  10.085 
+  8.074   8.012   8.439   8.854   9.962  10.907  10.063   9.544  10.299   9.554  11.311  11.043   8.928  10.129  10.748  10.594  10.332  12.228  11.990  11.907  12.035  10.737   9.855   8.979  10.408  10.017   9.849  10.797   9.644  10.678  10.211  10.216  11.913  11.887  11.017  10.695 
+ 10.017   9.600   8.858   8.175  10.764  10.715   9.761   8.391   8.267  10.003  11.585  11.729   9.352  10.854  11.082  11.614  11.882  13.188  11.608  10.669  11.615  11.237  10.591   9.842  11.064  11.554  12.023  11.393  10.721  11.318  10.295   9.724  10.530  11.180  10.840  10.582 
+  6.215   7.168   8.209   9.846  10.834  10.426   9.685  10.570   9.774  10.201  13.086  12.563  10.258  11.284  10.785  10.991  11.720  12.593  11.699  10.960  10.891  11.305  10.322  10.471  10.145  11.573  11.552  11.304  11.356  11.188  10.958  10.233  11.147  11.753  11.611  10.991 
+  5.648   7.297   7.790   7.507   7.426   8.418   9.910  10.694  11.021   9.344  12.021  12.034   9.527  10.798  10.381  10.585  11.174  11.918  11.869  11.246  10.859  11.067   9.989  10.173  10.273  10.926  11.619  11.504  10.398  10.730  10.714  10.847  11.400  11.719  12.052  10.989 
+  7.610   7.217   8.730   9.031   9.518   9.923  10.148  10.669  10.526   9.566  11.271  11.054   9.003   9.399  10.299   9.837  10.965  11.598  12.008  12.875  10.110   9.227  10.222   9.893   9.749  10.324  11.469  10.466   9.484  10.071  10.007   9.430  10.276  10.958  10.878  10.401 
+  8.919   8.327   7.931   7.231   9.789   9.836   9.818  11.222  11.101  10.007  10.756   9.338   8.915   9.611  10.647  10.534  10.891  11.610  11.430  11.830   9.433   8.893   9.376  10.189  10.322  10.543  11.334  10.434   9.083  10.572  10.761  10.273  10.397  11.161  11.858  10.965 
+  9.468   8.342   8.588   8.276  10.405  10.758   9.433  11.658  11.801  10.704  11.796  10.642   8.764   8.508   9.063  10.340  10.160  10.851  10.787   9.956   9.228   9.674   9.994  11.238  10.340  10.077  11.131   9.983   9.588   9.981  10.552   9.990  10.724  11.581  11.749  11.383 
+ 10.121  10.217  10.480   9.755   9.244  10.018  10.368  11.598  11.396  10.463  10.395   9.667   9.331   8.482  10.724  10.958  10.937  11.492  10.272   9.782   9.200   9.708   9.430  10.052   9.114   9.424  11.470  10.885   9.748  10.125   9.393   9.299  10.779  11.069  11.247  10.813 
+  6.816   7.726   7.988   7.086   7.981   9.199  10.308  11.199  11.412  10.958  10.767   7.502   8.235   9.001   9.147  10.085  10.054  11.645  11.294  11.191  10.003   8.091   8.823  10.158   9.161   9.358  11.573  10.795   8.958   9.507   9.425   9.605  10.961  11.003  11.755  10.483 
+  6.463   5.638   6.380   7.609   8.243   9.690   9.471  10.858  11.174  10.866  10.521   8.264   7.543   8.556   8.754   9.602  10.761  11.862  11.116  11.234  10.497   8.999   9.337   9.546   9.471   9.583  11.583  10.472   8.592   9.747   8.718   9.091  10.759  11.347  11.657  10.179 
+  6.568   7.458   7.537   7.813   8.888   9.964   8.695  11.085  11.215  10.873  10.675   8.428   8.217   9.646   9.000   9.620  11.155  11.259  11.257  11.097  10.215   9.295   9.036   9.239  10.403   9.467  11.476  10.582   9.283   9.543   8.853   8.903  10.752  11.039  10.796  10.598 
+  8.761   6.825   5.845   7.222   8.402   9.337   7.609  11.055  11.177  11.038  11.202  10.530   7.843   8.739   8.742   9.953  10.609  11.520  10.568  11.944  11.385   9.347   9.487   9.157  10.396  10.774  11.317  11.254  10.184  10.327  10.469   9.495  10.848  11.294  11.116   9.450 
+ 10.002   9.798   7.767   6.633   7.693   6.640   7.457  10.374  10.960  10.904  11.538  10.901   8.327   8.778   8.620   9.347  10.593  11.689   9.906  10.329  10.289   8.974   9.807   8.989   9.504  11.203  12.163  11.247   9.561   9.676   9.516   9.529  10.370  10.316  10.166   9.635 
+  9.167   9.474   7.445   7.315   8.491   8.498   7.240  10.568  11.061  11.127  11.158  10.361   7.622   8.685   8.254   8.431  10.501  11.428  10.628  10.762  10.465   9.354   9.696   9.760  10.409  10.985  11.435  10.355   8.773   9.182   8.940   9.184   9.931   9.889   9.902   9.301 
+  8.321   8.648   6.992   6.568   8.814   8.584   8.046  11.129  11.349  11.129  10.864   9.874   7.219   8.310   8.453   7.786   8.842  10.116  10.825  11.053  11.152  10.934  10.414  10.596  10.840  10.624  10.740  10.336   9.790   9.128   9.684   9.857   9.924   9.605  10.331   9.709 
+  8.445   8.703   7.066   6.992   7.067   7.432   8.073  11.376  11.339  10.723   9.485   8.030   7.852   7.809   8.065   8.748   8.903   9.155   9.942   9.986   9.400   9.463   9.043   9.281   9.594   9.145  10.947  10.335   9.286   8.567   9.642  10.092   8.706   9.177   8.755   8.755 
+ 12.731  13.774  13.840  13.167  12.605  12.364  12.695  13.058  13.661  12.809  12.524  12.908  12.061  11.298  11.642  12.024  12.498  12.623  13.002  13.620  13.263  12.672  12.139  11.840  10.980  10.936  11.884  10.534   9.455  10.408  10.738  12.209  11.629  10.136   9.431   8.844 
+ 15.025  15.695  14.891  13.506  13.721  14.345  15.075  15.387  15.192  13.874  14.077  14.094  13.342  12.544  12.938  12.700  13.093  13.706  13.883  15.459  14.598  13.685  13.339  13.042  11.969  11.901  13.035  11.600  10.641  11.337  11.775  14.021  13.560  11.600  10.543   9.290 
+ 14.702  13.794  11.924  12.455  11.981  14.140  15.852  15.591  13.565  12.958  12.658  13.091  12.099  11.662  11.712  11.956  12.997  13.497  13.243  15.035  15.245  12.965  12.639  12.921  11.516  11.288  12.637  11.408  10.071  10.523  11.334  13.824  13.420  11.437  10.277   9.209 
+ 12.019  10.767  10.372   9.619  10.098  12.078  12.631  11.781  11.448  10.891  11.744   9.418   8.470   7.528   9.189   9.777  10.503  11.029  11.384  11.246  11.972   9.430   9.222   8.725   8.349   8.707   8.935   8.584   7.866   8.913   9.215  12.063  11.316   8.489   8.484   8.323 
+  7.820   8.247   8.403   7.815   8.621   8.287  10.734  12.502  11.814   8.986  11.248   9.654   6.864   6.173   8.554   8.630   9.102   9.950  10.755  10.639  10.427   9.163   8.549   9.242   9.572   9.802   9.455   8.567   8.046   8.537   8.737   9.368  10.039   9.608   9.470   8.523 
+  5.347   6.686   7.275   6.383   8.624   8.648   9.890  12.044  11.689   8.170  10.751  10.354   6.710   7.147   8.845   8.942  10.182  10.069  11.368  11.435  10.124   9.142   8.027   8.073   9.689  10.139   8.631   8.741   7.307   8.775   8.471   9.143  10.528   9.689   9.730   9.530 
+  8.177   7.780   6.832   6.732   9.080   8.587   9.286  12.086  11.324   7.326  10.979  10.924   8.561   7.931   7.901   8.449  10.028   9.637  11.505  11.215   9.705   9.746   8.681   7.969   9.828   9.904   8.497   9.260   8.892   9.513   8.500   8.511  10.283   9.796  10.046   9.985 
+  7.156   7.591   6.063   6.276   9.043   8.561   8.718  11.652  11.064   7.710  11.396  12.224   9.318   7.419   7.108   7.861   8.726   9.228  11.561  12.698  11.052   8.708   8.838   8.863   8.710   9.807   9.605   9.361   7.557   9.142   9.285   8.381   9.923  10.475  10.875  10.745 
+  6.915   7.180   5.483   7.024   8.859   8.018   8.817  11.225  10.651   8.252  10.521  12.037   9.488   7.917   7.530   7.859   8.515   9.358   9.678  12.271  10.732   9.564   9.052   9.147   8.296   8.799   9.291   9.655   7.798  10.287  10.436   8.690  10.672  10.771  10.734  10.138 
+  5.023   6.090   6.920   6.597   8.221   7.363   8.542  10.363   9.767   7.492  11.328  11.980   8.324   7.064   7.993   8.516   9.039   9.049  11.449  12.300  10.388   7.967   8.118   8.442   9.078   8.570   9.405   9.254   8.074  10.547   9.800   9.568  10.544  10.899  11.145  10.769 
+  3.225   5.068   5.537   4.577   7.628   7.381   7.078   8.778   8.922   7.762  11.388  11.553   6.414   5.950   5.916   7.468   8.754   8.983  11.404  11.997  10.628   7.492   7.586   8.548   9.784   9.856   9.605   8.730   8.229   9.227   9.150   8.617  10.582  10.361  11.006  10.760 
+  5.953   5.151   5.410   5.184   7.527   7.231   5.484   6.326   7.589   8.077  11.680  11.128   6.156   7.017   7.421   8.292   8.348   8.542  11.743  11.093  10.087   8.695   7.495   8.612   8.709   9.000   9.064  10.004   8.791  10.306  10.159   8.211   9.261   9.950  10.752   9.466 
+  5.322   6.101   5.308   6.198   7.295   6.277   5.898   7.269   7.363   9.009  11.751  10.423   5.471   6.311   6.998   7.619   8.604   9.539  12.161  11.460   9.333   9.630   9.217   9.525   9.899   8.946   8.492   9.428   8.533   9.345   8.853   7.778   9.276  10.133  10.713  10.538 
+  6.013   6.557   4.751   5.164   6.562   6.048   6.712   6.271   6.456   9.738  11.691   9.550   5.690   7.862   7.697   7.532   8.614  10.604  11.389  10.648  11.031   9.059   8.370  10.019   9.417   8.289   9.567   9.634   8.271  10.090   9.915   7.891  10.084   9.925  10.651  10.964 
+  5.429   6.699   6.339   6.110   7.270   6.221   6.346   7.332   6.984  11.014  11.485   8.485   6.036   7.005   7.355   7.172   8.159  10.207  10.193  10.838  10.095   8.441   8.526  10.561   8.889   8.609   9.705   9.720   8.193   9.776   9.183   8.767  10.106  10.181  10.093  10.336 
+  3.900   4.259   4.973   5.961   7.270   6.376   5.170   4.612   5.881  10.786  11.218   8.079   5.441   7.124   7.306   7.320   8.361  10.178  10.157  10.405   9.631   8.301   8.386   9.975   7.539   7.736   8.737  10.088   8.841   8.497   8.541   7.431  10.669   9.651   9.909  10.443 
+  4.246   2.552   3.956   5.169   5.631   4.875   5.335   5.587   6.167  10.364  10.512   6.837   4.949   6.673   7.170   7.589   7.968  10.536  10.187   9.561   9.071   8.146   8.603   9.218   7.352   8.605   7.929   9.787   8.415   7.545   8.406   6.917   9.410   9.750   9.864  10.937 
+  3.807   4.210   5.292   4.600   4.821   4.912   6.469   6.833   6.929  10.368  10.037   4.828   4.771   6.999   6.713   7.680   8.537  10.726  10.932  10.015   7.982   7.975   8.211   8.201   7.877   8.904   8.753   9.253   8.604   8.083   8.234   7.057   9.533   9.831  10.480  10.391 
+  4.511   3.752   3.570   5.167   5.873   5.616   4.356   4.713   8.302  10.889  10.075   5.399   5.819   5.311   5.988   6.644   7.571  11.161  10.691   9.652   9.231   8.166   8.439   8.501   7.819   8.136   8.554   8.862   8.625   8.000   7.174   7.165   9.032  10.256  10.987   9.460 
+  4.725   4.931   4.614   5.490   5.302   6.579   7.991   7.792   7.394  10.655  10.039   6.935   5.842   5.608   6.360   7.846   9.071  12.054  10.434   9.974   8.787   6.776   7.792   8.241   7.796   7.208   7.497   8.839   7.909   7.482   7.001   6.786   9.480  10.893  10.575  10.121 
+  5.010   4.542   4.946   5.223   4.030   4.818   7.880   7.895   7.250   9.991   9.268   6.994   5.798   5.182   5.592   6.499   9.120  11.809  10.492   9.811   7.537   6.569   7.686   8.551   8.247   7.784   7.434   7.840   7.529   8.133   7.508   6.738   9.760  10.273  10.233   9.371 
+  5.308   5.314   4.573   3.346   4.991   5.503   7.614   7.125   7.959   9.465   8.005   7.563   5.948   5.890   6.950   6.848  10.987  11.372   9.800   9.035   8.404   7.887   7.615   7.257   6.215   7.282   7.261   8.100   7.974   8.082   7.865   7.050   9.477   9.547   9.818   8.298 
+  2.984   2.890   1.195   2.767   3.532   3.679   5.057   5.147   8.208   8.860   6.879   5.591   4.918   7.186   7.158   6.869  10.862  10.323   8.556  10.035   8.443   7.216   6.716   6.792   6.442   5.653   7.763   8.885   8.309   7.788   7.614   6.760   9.016   9.248   9.536   9.161 
+  2.991   3.509   3.239   4.706   4.850   5.560   5.457   5.921   7.444   7.775   5.134   5.995   4.731   5.813   7.306   7.183   9.323   8.916   9.820   9.652   8.750   7.779   6.559   6.900   6.413   6.511   6.611   8.178   7.031   7.586   7.170   6.322   8.930   9.296   9.481   9.515 
+  4.467   4.704   4.730   4.352   4.527   4.217   3.967   5.232   5.798   6.764   5.774   6.279   5.328   5.932   6.384   6.456   8.511   8.603   9.394   9.799   8.976   7.403   6.723   6.858   5.696   5.607   6.926   8.556   7.461   7.555   7.136   5.412   8.712   9.475  10.177   9.356 
+  5.234   6.921   6.078   3.839   5.803   6.765   7.196   7.432   7.507   5.791   5.436   5.898   6.687   5.645   6.441   7.347   8.259   8.705   9.469   9.121   6.783   7.145   7.408   6.858   6.785   5.657   7.107   7.713   7.538   6.976   6.018   6.089   8.849   9.351  10.219   9.278 
+  6.886   6.850   7.423   6.363   7.550   7.891   8.012   6.952   6.007   4.657   6.449   8.360   8.117   6.964   7.100   7.942   7.945   7.746   9.117   9.343   6.539   8.184   8.573   7.717   7.476   8.175   6.873   8.743   8.356   7.811   6.650   6.327   9.332  10.207   9.444   8.674 
+  5.934   6.537   6.882   5.888   8.013   8.453   8.841   7.677   5.966   4.408   6.297   7.460   7.653   7.948   7.443   8.781   8.679   8.233   8.709   8.735   8.523   7.634   6.057   7.604   7.780   8.758   7.020   9.685   9.117   8.810   7.254   7.147   8.634   9.224   9.460   8.059 
+  6.509   5.391   6.782   7.030   7.424   6.729   7.629   6.716   5.583   4.066   6.875   7.472   6.964   8.483   9.532   9.131   8.817   8.805   9.518   8.829   7.419   7.418   7.662   7.920   7.955   7.557   8.295   9.104   8.805   7.846   6.716   6.782   7.529   7.921   8.011   8.371 
+  6.519   5.996   5.853   6.619   7.056   7.911   6.744   6.679   5.649   4.535   6.774   7.671   6.904   8.724   8.702   7.653   6.561   8.066   8.360   8.231   8.165   7.040   6.724   6.843   6.322   5.564   6.497   7.200   8.078   7.471   7.284   6.505   7.460   8.225   7.702   7.089 
+  7.295   6.635   6.518   5.972   5.924   7.672   8.319   7.766   5.467   5.360   5.043   6.272   6.869   6.117   5.618   6.685   5.931   7.630   8.082   8.550   7.763   7.006   5.244   4.982   5.641   5.377   4.951   5.677   6.071   6.183   7.147   6.533   6.863   7.880   7.944   6.763 
+  8.346   7.705   7.153   6.844   5.953   5.895   5.994   6.371   6.362   7.000   5.887   5.711   5.938   5.689   5.660   5.875   6.183   6.992   8.996   8.000   5.376   4.916   5.110   5.314   4.828   5.140   4.728   5.117   6.247   5.977   6.393   6.037   8.083   8.385   7.877   6.087 
+  7.744   6.712   4.857   4.659   5.666   6.541   6.154   6.578   5.476   5.528   4.643   6.149   5.302   6.590   6.612   5.753   7.301   7.505   7.908   7.846   4.206   4.910   5.075   6.509   6.519   6.370   6.699   6.037   6.220   6.502   6.831   5.447   6.684   6.860   7.162   5.299 
+  7.533   6.531   7.058   7.257   7.719   7.249   6.297   6.756   6.491   5.546   5.201   5.034   5.781   6.390   7.670   7.008   7.205   7.178   7.971   7.887   5.866   5.527   4.956   6.025   5.835   5.978   6.761   6.086   6.694   7.117   6.902   5.913   5.637   6.102   6.077   4.576 
+ 10.043   8.675   8.206   6.879   7.623   7.855   8.127   7.888   6.005   5.448   6.563   6.477   5.483   5.894   6.770   6.917   7.336   6.178   6.776   7.512   6.690   5.328   5.680   5.980   6.883   6.521   6.568   7.214   7.320   7.402   6.735   6.441   6.331   7.553   6.973   5.998 
+  9.592   8.450   8.770   7.980   7.052   7.318   8.438   7.812   5.439   5.820   6.694   6.510   5.394   6.850   7.216   6.825   7.622   7.863   7.403   6.179   6.139   5.135   5.262   5.535   6.285   6.049   6.451   6.472   6.333   6.541   6.449   6.989   6.634   6.164   5.859   5.081 
+  9.421   8.306   6.864   7.445   7.743   8.060   7.638   8.103   7.239   6.867   6.867   6.166   6.936   7.078   5.946   6.352   7.251   7.005   6.727   6.252   5.337   5.114   4.753   4.676   5.433   6.218   6.496   6.996   6.977   6.481   6.623   5.724   5.993   5.899   5.480   4.711 
+ 10.237  10.255   9.405   8.437   9.486   9.080   8.276   5.383   5.475   6.358   5.242   5.920   6.778   7.435   6.968   7.461   8.218   7.469   5.961   5.461   5.936   5.762   5.547   5.531   5.827   6.094   6.803   6.993   8.051   7.909   7.563   6.827   7.459   7.209   6.092   5.377 
+  8.410   8.596   7.404   7.422   9.297   9.092   8.050   7.156   5.566   5.690   6.684   7.217   7.766   7.815   8.096   8.235   7.370   6.701   5.763   5.128   5.941   6.046   5.759   5.061   5.340   5.591   5.990   7.340   6.685   6.942   7.433   7.309   6.638   6.438   5.010   5.265 
+  6.755   6.616   7.341   6.263   7.944   9.230   8.867   6.358   4.568   5.143   7.135   6.683   7.033   7.082   7.047   6.779   6.995   6.453   6.408   5.149   5.845   5.207   5.121   5.628   5.441   5.177   6.438   7.092   7.023   6.317   8.285   8.097   6.870   6.354   5.450   4.880 
+  7.329   5.384   6.091   5.536   4.533   5.312   6.491   5.655   5.680   5.063   4.273   4.575   3.993   5.292   5.517   6.071   6.168   5.581   4.998   4.286   3.715   4.951   4.767   4.503   4.679   4.187   4.164   5.171   5.243   5.829   5.629   4.853   4.983   5.478   4.216   3.763 
+  5.409   4.028   4.636   6.046   5.434   4.978   5.890   5.428   4.405   3.464   4.072   4.322   4.794   5.723   5.404   4.578   5.139   5.250   5.270   5.485   5.327   5.310   5.274   4.424   5.014   4.738   4.753   5.472   4.915   4.794   4.364   4.467   4.063   4.466   4.308   2.361 
+  4.087   4.541   3.697   5.278   6.262   6.893   7.218   5.947   3.941   3.885   4.902   5.294   4.728   4.676   4.422   5.907   5.907   6.423   6.337   5.379   4.735   5.457   6.118   5.675   4.944   4.639   4.247   3.961   3.852   4.261   3.554   3.540   3.254   2.954   3.009   2.565 
+  5.057   4.929   4.712   2.295   4.201   5.073   5.481   4.251   4.779   4.493   3.791   3.896   4.480   5.732   5.210   5.517   5.187   4.390   4.203   2.987   3.797   5.675   6.902   6.694   5.340   4.854   4.149   4.104   4.054   3.755   3.158   3.373   2.905   3.310   2.989   2.934 
+  5.580   5.735   3.689   4.196   4.670   5.471   5.754   5.928   4.406   4.356   3.897   4.556   4.499   6.348   6.042   5.021   5.051   5.076   4.909   4.995   4.353   5.347   5.898   6.864   6.440   6.493   7.219   8.033   6.974   4.459   4.234   5.022   4.718   5.551   4.569   3.358 
+  5.336   6.090   4.821   2.584   5.248   6.978   7.188   6.708   5.261   5.984   5.576   4.305   2.991   5.626   5.482   4.444   3.982   5.769   5.371   6.317   5.585   5.794   5.527   6.133   7.933   7.836   8.326   8.768   7.751   6.986   6.545   7.034   6.630   7.287   5.755   4.492 
+  4.589   5.858   5.565   5.083   4.442   5.008   6.968   7.049   6.865   5.376   4.029   4.865   3.566   3.640   4.586   4.618   3.065   5.302   5.560   5.621   5.101   6.665   6.514   4.984   8.147   8.025   7.797   8.302   8.561   7.681   6.671   7.420   6.877   6.977   6.868   5.443 
+  7.050   6.358   5.304   4.288   4.504   5.991   5.629   5.698   6.215   5.318   3.264   3.095   4.151   4.645   4.911   4.851   5.094   4.611   4.692   4.972   4.795   4.674   6.342   6.029   8.744   8.425   7.155   7.243   8.505   6.391   5.903   6.871   6.868   6.381   6.501   6.886 
+  5.927   4.750   3.450   4.013   5.162   6.482   6.015   5.938   5.970   5.636   4.758   4.356   5.304   4.869   4.985   4.224   5.298   5.406   4.990   5.582   6.047   5.836   6.670   7.974   9.174   7.631   7.702   7.566   7.918   6.328   6.216   6.642   6.785   7.226   7.069   6.610 
+  4.873   5.773   5.957   4.948   4.299   5.808   6.829   5.314   5.435   7.352   5.940   6.306   8.156   6.710   5.432   5.199   5.324   5.894   5.256   6.874   7.890   8.512   8.236   8.879   8.209   7.659   8.968   8.457   7.106   6.776   6.823   7.368   6.886   6.838   7.611   6.456 
+  4.243   6.397   6.440   4.718   5.647   5.837   6.418   4.029   6.571   8.383   6.737   6.442   8.837   7.160   5.251   4.625   5.581   6.721   5.761   7.621   8.277   7.796   8.187   8.535   7.991   7.718   8.104   8.663   7.330   6.462   7.326   7.008   6.098   7.157   7.592   6.656 
+  6.183   7.094   6.866   4.399   5.062   6.140   6.390   5.283   6.358   7.346   7.102   6.461   8.385   6.871   5.080   4.739   6.275   8.461   7.316   8.149   8.440   7.929   6.814   8.095   8.662   8.019   8.780   7.830   6.854   6.700   7.353   6.951   5.457   6.045   6.303   5.297 
+  4.762   6.338   7.031   4.901   5.770   6.507   7.616   6.876   7.785   9.574   8.746   5.099   7.944   7.819   6.530   6.831   6.898   9.296   8.361  10.384   9.493   8.607   7.870   8.234   8.111   8.379   9.015   8.231   7.204   7.272   7.354   6.352   6.058   6.357   6.578   4.686 
+  4.838   6.911   6.803   3.952   3.469   7.387   7.949   5.129   7.193   9.765   8.984   5.914   9.582   8.785   7.280   8.358   7.644  10.334   9.448  11.075   9.689   9.510   7.723   7.133   7.804   8.704   8.934   8.789   8.017   7.081   6.277   6.244   5.952   5.912   6.025   5.108 
+  3.727   6.249   5.970   2.480   3.623   8.045   9.035   6.681   5.427   8.361   8.316   6.875  10.156   9.407   8.436   9.694   8.627  11.801  10.256  11.493   9.624   8.443   8.034   7.688   7.615   8.065   8.558   8.899   8.540   6.789   5.760   7.379   6.196   6.210   5.418   4.148 
+  4.836   6.162   6.661   4.524   3.603   8.205   9.439   7.013   6.274   9.110   9.103   5.973   8.900   9.608   8.502  10.870   9.211  12.687  11.717  11.339  10.146   8.626   7.112   7.903   8.909   9.475  10.213   9.839   8.754   7.893   6.677   6.196   6.201   6.555   5.796   4.410 
+  4.455   6.182   6.926   4.768   4.385   8.099   9.683   7.801   5.118   8.314   9.330   6.163  10.084  10.892   7.614  11.235  10.358  12.914  12.451  10.421  10.394   8.295   7.225   7.104   9.129   9.728  10.963  10.495   9.358   8.556   7.310   5.972   6.220   6.020   5.085   4.255 
+  4.884   6.968   7.258   4.270   4.297   7.735   9.895   8.447   4.762   9.302  10.134   6.854  10.151  11.546   8.680  11.977  11.154  12.527  12.395  10.780  10.845   7.889   6.899   7.430   8.595   9.580  11.362   9.770   9.798   9.414   7.143   5.347   6.018   6.958   6.211   4.445 
+  3.021   6.804   7.323   5.345   5.198   8.123  10.019   8.440   4.937  10.050  10.798   7.458  10.412  11.910   9.203  12.468  11.638  11.431  11.751  10.624  10.821   7.073   6.693   7.475   8.580   9.212  11.181   9.984   9.805   9.751   8.852   6.565   6.707   7.417   7.738   5.518 
+  4.690   6.481   7.012   4.179   3.565   7.775   9.972   8.447   5.673  10.409  11.084   7.780  10.751  12.011   8.945  12.629  11.874  11.601  11.704  10.202  10.577   7.458   6.791   7.139   8.765   9.423  11.090   9.846  10.289  10.337   9.707   7.080   6.441   8.118   8.308   6.340 
+  5.013   6.703   7.130   5.177   3.335   7.875  10.107   8.840   4.375   9.788  10.862   7.867  10.280  11.909   9.115  12.587  12.039  10.595  10.739   9.580   9.911   7.352   7.056   6.987   7.649   8.499  11.435  10.731  10.594  10.599  10.902   7.199   6.341   7.710   8.575   5.982 
+  5.573   6.023   7.067   5.404   3.308   7.180   9.642   8.821   4.780   8.896  10.413   7.767   9.634  11.855   9.595  11.849  11.842   8.814   9.365   9.136   9.212   7.288   7.777   6.364   6.915   8.448  12.294  11.216  10.307  10.286  10.326   7.897   6.262   7.365   8.142   5.806 
+  5.453   6.959   7.369   5.032   4.898   5.969   9.265   8.984   5.031   9.212  10.206   7.322   8.918  11.411   9.501  10.319  10.931   8.506   9.750   8.178   9.312   6.873   7.199   6.358   7.365   8.190  11.919  10.766   8.947   9.527  10.491   7.709   6.837   6.482   7.827   6.538 
+  6.628   6.795   8.239   7.158   4.551   6.586   9.952   9.581   4.907   9.081   9.901   6.415   8.725  10.131   8.103   8.956   9.900   8.341   8.738   8.196   7.738   6.780   5.907   6.694   8.208   8.317  10.493   9.712   8.075   8.513   9.096   7.911   7.129   6.656   7.658   6.231 
+  4.599   7.672   8.825   6.937   3.090   6.586   9.971   9.665   5.625   9.201  10.260   7.561   8.342   9.474   7.743   8.587   9.087   7.930   9.638   9.051   9.417   8.408   7.698   8.337  10.067   8.174   8.568   7.499   8.138   7.745   8.442   7.621   6.506   5.889   6.418   5.752 
+  5.764   7.774   8.869   6.653   5.879   8.582   9.759   8.569   7.045   9.202  10.087   6.969   7.101   8.471   7.903   8.583   9.902   8.786   9.890   9.400   9.047   8.042   8.049   8.061   9.657   7.512   8.171   7.383   6.942   7.228   7.971   7.424   5.716   5.490   6.726   5.963 
+  5.382   7.998   9.353   7.982   5.461   8.198   9.991   9.582   7.500   8.860   9.041   7.373   6.937   8.770   7.570   8.281   9.678   8.562   9.550   8.987   8.168   7.847   7.042   7.540   8.876   6.992   6.836   6.563   6.550   6.714   7.333   7.071   5.273   5.416   5.982   4.529 
+  6.192   8.057   9.397   7.696   4.760   5.498   8.042   8.706   6.382   7.927   9.585   8.062   6.830   8.216   7.260   7.043   8.604   6.878   7.922   8.083   8.228   6.818   7.271   6.945   7.878   6.521   7.000   6.456   5.779   5.935   5.995   5.169   4.858   5.419   5.929   4.385 
+ 11.447  11.689  11.428  10.111   9.992  10.334  10.971  10.521  10.009   9.612   9.358   7.767   8.641   8.644   7.828   8.908   9.233   7.585   8.423   8.456   7.956   7.192   7.321   6.983   7.431   6.206   6.436   6.882   6.389   6.617   6.118   5.714   5.529   4.359   5.353   4.487 
+ 12.182  11.718  10.764  10.207   9.045   9.949  10.699  10.585   9.982   9.265   7.900   7.328   8.163   8.143   7.324   7.864   9.002   8.355   9.141   7.677   7.716   7.224   7.710   6.888   6.120   6.271   6.068   6.055   6.171   6.732   6.952   6.497   6.575   5.299   5.306   5.532 
+  7.415   8.988   9.904   8.065   6.126   6.489   6.509   5.996   5.761   5.550   7.213   6.269   5.755   6.592   5.676   8.119   8.101   8.709   8.929   9.710  10.272   7.801   8.555   8.199   7.980   7.299   6.714   6.467   6.155   6.205   6.657   6.592   5.974   4.726   5.118   4.406 
+  6.442   8.062   9.535   8.247   6.066   8.103   9.327   7.891   6.380   4.702   7.443   6.489   6.373   6.585   5.922   7.609   7.521   7.533   8.652   9.526  10.789   8.552   8.790   8.680   8.073   7.785   8.110   7.333   5.805   5.339   6.279   5.231   5.215   4.796   5.321   3.843 
+  8.288   8.104   8.275   8.020   6.319   8.999  10.785   9.215   6.555   5.752   6.739   6.459   4.992   6.870   5.874   6.658   6.199   8.584   9.032  10.033  10.749   9.179   9.245   8.247   7.710   7.912   8.458   6.744   5.743   6.344   6.479   6.064   5.692   5.319   4.510   4.040 
+  9.491   8.918   8.409   7.706   7.418   9.604  11.592  10.443   7.272   6.232   7.261   6.429   6.709   7.698   5.866   5.680   5.461   9.723   9.358  11.666  11.407   9.726   8.357   8.585   7.819   7.485   7.352   6.129   7.141   6.945   6.027   4.479   5.142   6.218   5.101   3.497 
+  4.905   6.881   7.697   5.646   5.536  10.101  11.603   9.599   4.955   6.786   6.345   3.620   6.121   6.244   5.356   5.536   6.224  10.996  10.440  12.736  12.258  10.864   9.063   8.488   7.394   6.148   6.710   6.847   6.894   6.913   6.842   5.493   4.618   5.876   5.173   4.464 
+  6.824   7.172   7.856   6.063   6.509  10.755  11.682   8.816   6.142   8.328   7.765   4.482   6.617   6.008   4.978   6.125   7.774  11.152   9.985  11.585  10.337  10.958   8.585   7.410   7.244   5.865   6.249   5.625   6.663   7.435   6.401   5.991   5.631   5.658   5.078   3.842 
+  6.848   6.012   6.870   5.787   7.145  11.656  12.270   9.722   7.121   9.037   7.711   5.828   7.463   6.077   4.796   5.730   8.572  10.465   9.520  10.907   9.406   8.635   7.942   6.204   5.446   5.257   6.139   5.989   6.726   7.352   6.504   5.822   6.168   6.106   5.494   4.111 
+  2.165   4.811   6.150   6.383   8.437  11.685  11.206   7.694   7.729   9.329   7.751   6.191   7.931   5.920   5.888   6.048   7.335   8.331   9.031  10.086   9.614   9.173   7.676   6.583   5.453   5.658   6.038   5.620   6.238   6.608   6.020   5.027   4.816   5.411   5.656   4.059 
+  5.662   6.379   5.706   4.693   9.192  11.430  10.098   7.122   7.944   8.725   6.098   6.971   7.779   6.304   5.717   6.021   7.194   7.659   9.399   9.889   9.900   8.880   8.044   6.757   6.456   5.873   5.224   5.178   6.391   7.404   7.024   5.155   5.148   5.361   4.786   4.175 
+  6.783   7.060   7.034   6.805  10.108  11.666   9.967   5.153   7.694   8.231   5.818   4.273   5.269   6.452   6.520   5.171   7.136   8.503   9.180  10.356  10.236  10.493   8.657   7.884   7.877   6.919   7.037   7.644   6.968   7.383   7.561   6.507   6.268   7.144   6.676   5.794 
+  7.505   8.541   8.535   7.212  10.431  11.794   9.517   5.972   6.120   6.845   7.354   5.693   4.461   6.906   7.093   5.676   6.998   9.280   9.173  11.501  10.708  10.596   9.219   7.972   7.492   8.083   8.714   8.224   8.158   8.371   8.577   6.922   6.976   7.374   7.357   6.776 
+  7.528   8.526   8.599   7.327  11.084  12.126  10.342   7.481   7.654   7.296   7.021   6.577   5.438   6.660   5.862   6.672   6.712   9.769   9.633  10.702   9.893   9.405   9.144   8.669   8.495   9.038   8.222   8.008   7.459   8.206   7.217   6.185   6.851   7.216   6.817   6.560 
+  7.861   7.477   7.418   6.767  10.122  10.224   9.561   7.960   8.521   6.628   6.351   7.323   5.967   6.414   6.115   7.871   7.435   8.768   7.911   9.453  10.830  10.124   7.798  10.249   9.333   9.091   8.570   8.253   8.228   7.583   7.138   5.805   6.761   6.929   6.871   5.953 
+  5.759   6.939   5.983   5.856  10.048  10.676   8.977   8.417   9.121   6.573   5.116   5.294   5.614   6.892   6.475   7.738   7.467   8.164   8.269   9.521  10.309   9.358   8.690  10.735  10.023   8.617   7.079   7.341   7.705   7.623   7.297   5.746   5.889   6.563   6.383   5.443 
+  7.994   7.067   5.614   6.138   9.287   9.407   7.257   9.252   9.732   6.843   6.113   6.025   5.058   5.640   5.802   5.245   6.462   6.831   7.280   8.131   8.256   8.508   8.775   9.176   9.881   9.290   8.847   7.773   8.081   7.654   7.411   5.116   6.359   6.741   7.162   5.431 
+  6.658   7.412   6.400   7.000   9.019   9.244   8.688   9.224   9.121   5.516   6.184   6.349   5.842   5.944   6.033   6.687   6.458   5.740   6.712   8.747   8.741   9.736   8.545   7.736   8.641   8.815  10.294   9.125   8.249   7.431   6.860   5.048   6.058   8.177   7.206   5.921 
+  5.833   6.759   5.902   6.463   8.134   8.626   7.410  10.097   9.784   5.869   7.180   6.666   5.887   6.067   5.890   5.200   5.320   5.809   5.920   9.064   9.538  10.227   8.531   7.999   8.320   9.376   9.830   9.609   8.548   7.323   7.589   7.587   6.969   8.491   7.685   5.758 
+  5.757   6.831   5.745   6.863   9.916  10.195   8.505  10.348   9.812   6.127   7.087   5.969   5.208   5.732   5.630   5.411   6.593   7.200   7.269   9.209   9.462   9.353   8.078   6.729   8.072   8.797   8.717   8.575   6.990   6.856   7.924   8.742   8.120   8.637   8.359   6.310 
+  6.803   6.277   3.678   8.154  10.125   8.803   7.686   9.567   9.052   4.885   5.962   5.444   5.605   4.450   4.922   5.794   6.100   6.261   6.322   9.395   8.905   8.377   6.449   5.871   7.183   7.614   7.599   7.541   7.481   7.416   7.412   7.516   7.709   8.011   8.191   5.659 
+  6.856   7.598   6.460   8.250  10.066   8.796   6.730   7.782   7.630   5.226   6.694   5.894   5.693   5.749   5.015   4.727   5.030   6.444   7.344   8.559   8.509   7.695   6.169   6.018   5.264   6.170   8.348   8.187   7.550   6.900   6.726   5.763   7.337   7.319   6.997   4.474 
+  6.690   6.779   5.260   8.034   9.169   7.807   7.522   8.388   6.948   5.487   5.970   5.503   5.660   5.832   5.737   4.435   4.426   6.217   5.574   6.976   5.642   5.812   6.174   5.466   4.541   4.999   7.473   8.118   6.378   5.893   6.254   5.840   5.798   7.051   6.319   4.215 
+  5.850   6.138   4.482   7.650   8.221   7.419   6.101   7.462   5.344   5.421   5.710   5.651   5.281   4.647   5.187   4.799   4.471   5.400   5.966   7.407   6.320   5.257   4.152   5.548   5.332   5.418   5.615   6.801   5.090   6.220   5.392   5.005   5.610   5.981   6.055   3.882 
+  5.953   5.870   4.144   8.308   9.953   8.888   6.114   6.667   4.146   4.660   5.616   4.743   3.994   3.427   4.881   5.149   4.369   5.071   6.486   5.701   6.624   6.105   5.018   5.771   5.847   5.004   5.921   6.371   5.619   5.203   4.329   4.450   5.739   5.653   5.573   5.122 
+  6.065   5.430   5.288   7.206   8.831   8.455   4.623   5.541   5.348   3.864   4.710   3.325   3.834   4.510   4.707   4.825   4.506   6.004   5.136   5.639   6.912   6.658   5.671   4.605   4.559   5.747   6.211   6.420   5.516   5.041   5.517   5.253   5.629   6.141   6.283   4.969 
+  6.172   4.976   6.551   8.055   9.089   7.893   6.702   5.716   5.191   4.613   5.195   4.236   5.450   4.459   5.196   5.315   5.483   5.592   5.399   6.354   6.548   5.914   4.120   4.816   5.455   6.108   5.437   5.600   4.844   5.458   5.672   5.264   5.278   5.994   5.682   5.211 
+  6.374   4.351   5.299   7.829   9.409   8.215   7.156   7.775   7.368   6.919   6.231   4.631   3.599   4.512   5.342   5.146   6.293   5.688   5.011   6.058   6.785   5.733   4.347   4.567   5.792   6.774   6.597   6.246   6.741   6.000   6.440   6.514   6.140   5.503   6.440   5.755 
+  6.354   6.576   6.498   6.501   7.337   8.394   7.862   8.632   7.746   6.737   6.588   5.810   2.890   5.888   5.695   5.734   6.789   5.831   4.820   6.732   7.052   6.931   6.642   7.037   7.374   8.310   7.912   8.053   8.059   7.128   7.142   6.451   6.364   6.078   6.268   6.248 
+  6.011   7.120   5.936   8.228   8.420   8.031   8.036   8.920   7.247   5.600   6.195   4.071   4.397   6.370   6.620   5.820   5.892   6.104   6.353   6.844   6.963   7.200   6.971   7.504   7.177   8.571   8.596   8.293   8.780   7.709   6.264   6.828   6.811   7.136   7.159   6.478 
+  5.776   6.710   6.321   7.803   7.949   7.541   8.187   8.138   7.177   6.390   5.996   5.512   6.589   6.061   6.688   7.993   8.034   7.163   5.775   6.042   5.691   6.205   5.294   5.819   6.808   6.972   7.495   7.770   7.679   6.796   7.547   6.819   7.053   8.057   7.276   7.122 
+  5.027   5.775   5.720   7.877   8.673   8.483   8.988   8.254   7.886   6.580   6.338   5.356   4.634   6.184   5.948   7.120   7.742   7.260   7.048   6.863   5.541   5.548   5.465   6.542   7.279   6.881   8.158   8.060   7.637   7.677   7.812   7.961   7.512   7.752   6.935   7.516 
+  5.803   6.053   5.451   8.442   9.338   7.206   8.329   8.540   6.548   4.067   5.988   6.431   5.971   6.987   7.174   7.596   7.324   6.893   7.163   7.735   5.699   5.639   6.199   7.706   7.936   8.311   8.031   7.826   7.310   8.239   8.065   7.567   6.800   7.035   7.124   6.812 
+  6.202   6.033   6.627   8.555   9.983   8.722   8.054   9.072   7.882   5.456   5.573   6.311   7.479   7.211   8.103   6.939   7.482   6.890   6.222   7.858   5.354   5.657   6.632   7.268   7.982   7.844   7.301   8.001   7.998   7.521   6.845   6.778   7.111   6.721   6.986   6.452 
+  6.061   5.777   5.068   8.251   9.523   7.650   5.935   6.805   4.853   5.388   5.787   5.736   5.629   5.274   7.316   6.817   5.943   6.087   5.735   6.346   4.474   5.556   5.846   5.484   6.716   7.178   6.755   6.237   7.349   6.050   5.513   5.769   5.846   6.024   5.659   5.218 
+  5.800   6.466   4.629   7.662   9.293   7.518   6.929   7.913   6.049   4.630   5.440   3.747   3.698   4.189   5.130   4.616   5.302   7.046   6.566   6.890   5.697   5.192   4.487   5.311   5.050   5.517   5.657   6.332   5.633   5.563   4.351   4.273   4.470   5.196   4.062   2.733 
+  5.720   5.351   4.486   7.782   9.281   7.537   6.688   8.495   7.192   6.347   6.402   4.359   4.913   4.871   5.102   5.248   5.637   8.724   8.071   8.359   6.163   5.419   5.064   5.698   5.331   6.125   6.921   7.301   5.585   5.539   5.946   5.753   5.927   6.005   4.404   3.205 
+  3.865   4.409   5.188   7.101   8.955   7.436   6.489   9.143   8.186   8.107   8.263   5.365   6.355   5.218   5.700   5.894   6.683   9.664   9.508  10.383   7.096   5.533   5.180   5.269   5.633   6.344   7.735   8.691   6.399   5.246   5.151   6.707   6.779   5.989   4.448   2.637 
+  4.477   4.115   2.936   7.214   8.875   7.305   6.764   8.970   8.245   9.127   9.284   6.467   7.817   5.569   5.304   6.758   6.857  10.153  10.197  10.805   7.476   5.879   5.758   5.336   5.415   6.865   8.304   9.481   6.904   5.620   6.308   7.283   7.453   6.648   5.759   3.443 
+  2.526   3.747   3.811   7.042   8.709   7.194   5.957   6.307   6.328   9.389   9.667   7.141   8.438   6.638   6.865   7.365   8.082  10.862  10.653  11.104   7.237   6.792   6.316   5.987   5.680   5.902   7.676   8.927   6.399   5.822   6.539   7.815   7.670   6.470   5.779   2.775 
+  2.931   3.815   3.855   7.512   8.361   5.855   6.537   8.017   6.664   9.417   9.665   7.661   9.114   6.852   7.311   8.279   8.654  11.233  10.829  11.057   7.371   6.398   6.187   6.080   6.182   6.279   8.265   9.515   6.908   5.685   6.308   8.010   8.347   6.871   5.768   2.688 
+  4.344   4.997   4.146   7.403   8.237   6.039   6.588   7.891   5.722   9.093   9.538   7.771   9.317   6.981   7.581   7.889   8.752  11.705  11.157  10.750   7.458   6.762   6.425   6.149   6.418   6.614   8.556   9.456   7.199   6.240   6.896   7.946   8.163   6.654   5.074   3.059 
+  5.293   4.760   3.387   6.250   8.051   6.862   5.838   7.406   5.927   9.006   9.583   7.861   9.669   7.878   8.779   7.852   8.713  11.553  11.200   9.265   7.809   6.727   6.029   5.861   7.299   7.077   9.442   9.904   8.479   6.745   5.965   7.596   7.137   5.285   4.404   3.914 
+  4.888   4.633   3.816   5.944   7.587   6.169   4.832   6.394   5.076   9.109   9.682   7.748   9.774   7.845   9.086   7.610   8.341  11.169  11.184   9.719   7.839   7.235   5.303   5.672   6.705   7.239   9.545   9.901   8.856   6.368   5.231   6.418   6.571   5.823   4.034   2.943 
+  5.804   4.883   2.366   5.422   7.290   5.917   3.371   4.974   4.453   9.089   9.656   7.748  10.029   8.475   9.520   7.485   8.079  11.056  11.121  10.547   8.443   7.020   4.074   6.023   6.378   6.630   9.210   9.122   7.840   6.267   6.242   6.588   8.411   7.586   5.211   2.572 
+  5.763   5.672   3.405   5.576   7.280   5.893   5.886   6.859   5.782   8.453   9.241   7.809  10.262   8.646   9.708   8.026   8.827  10.925  10.992  10.515   8.501   7.304   4.901   6.467   6.328   6.972   8.453   8.814   7.970   6.535   6.432   6.718   8.567   7.857   4.755   2.765 
+  3.050   4.393   4.259   6.150   7.760   6.078   5.642   7.329   5.281   7.690   8.927   8.213  10.521   8.784   9.758   8.564   9.583  10.335  10.526  10.598   8.782   7.036   4.733   6.614   6.542   6.894   9.055   8.668   7.030   5.751   6.793   7.028   7.993   7.567   4.983   3.029 
+  4.977   4.561   2.344   6.414   7.988   6.438   5.705   7.712   6.238   7.664   9.035   7.925  10.612   9.187  10.111   9.024  10.235   9.878   9.889  10.215   9.078   7.721   5.931   5.848   6.899   7.731   8.556   8.486   7.385   5.890   5.637   7.106   7.397   6.821   4.566   2.688 
+  4.532   3.397   3.425   6.040   8.168   6.953   5.632   8.458   7.521   8.740   9.735   7.841  10.518   9.226   9.514   9.414  11.031   8.926   9.010  10.483   9.452   7.232   5.616   5.520   7.292   7.956   8.647   8.842   8.211   6.739   6.563   8.173   7.668   5.983   4.857   2.668 
+  1.787   2.237   2.497   5.704   7.925   6.851   6.621   9.112   8.023   8.611   9.619   6.991   9.872   9.157   9.036   9.182   9.970   8.815   9.775   9.634   9.470   7.868   6.609   6.263   7.137   8.544   9.450   9.247   6.845   6.316   5.873   8.249   8.262   5.668   4.169   3.065 
+  3.872   3.637   3.026   4.923   7.604   6.896   6.371   9.383   8.642   8.007   8.868   6.054   8.539   8.325   9.369   8.972   7.421   8.287   9.846  10.438  10.127   8.551   6.428   6.235   7.223   8.072   8.048   7.896   5.580   5.871   6.073   8.555   8.131   5.484   3.854   2.718 
+  3.125   3.885   3.159   5.652   7.516   6.262   6.663   9.381   8.560   7.576   7.147   6.661   9.282   8.092   9.619   8.986   8.815   9.080   9.879  10.831  10.227   7.943   5.981   5.571   7.288   7.578   7.270   7.265   6.414   6.119   6.629   8.692   7.904   5.447   4.463   2.162 
+  5.067   4.708   3.420   5.528   6.888   5.677   6.282   8.189   8.115   9.108   7.791   8.031  10.197   8.550   9.145   9.097   9.377  10.061   9.645   9.636   9.148   6.511   4.368   5.953   7.215   7.785   8.407   7.391   6.603   6.383   6.434   7.306   7.465   6.558   4.438   2.334 
+  5.867   5.791   3.792   5.238   6.264   6.380   6.271   7.538   8.318   9.492   8.654   8.041   9.358   8.728   8.354   7.979   9.075   9.492   8.945   8.583   8.270   7.294   5.001   4.820   5.214   6.060   8.567   8.374   6.813   6.074   5.631   6.189   7.071   7.003   4.791   3.016 
+  5.455   5.801   4.600   4.932   5.842   5.777   6.680   6.770   7.227   7.286   7.360   7.537   6.943   7.234   6.795   6.703   8.165   8.444   8.004   7.490   6.642   4.760   4.827   4.809   4.100   4.911   6.384   6.909   5.591   5.426   4.834   5.993   6.122   6.448   5.241   2.729 
+  5.010   5.225   4.583   5.235   6.277   6.376   6.265   7.735   7.859   7.466   7.414   6.957   7.553   7.599   7.471   6.640   6.656   7.790   8.436   7.780   5.360   4.182   4.034   5.187   4.927   4.908   6.230   6.227   5.404   4.840   4.010   5.333   5.111   5.058   5.024   3.416 
+  4.252   5.472   4.852   5.089   5.070   5.370   5.953   7.739   8.261   8.642   7.393   6.752   6.879   5.432   7.445   6.401   7.223   7.860   7.530   6.691   5.713   5.735   5.469   5.005   4.789   5.597   6.496   6.495   5.526   4.948   4.931   5.743   5.717   5.368   4.715   2.845 
+  6.303   5.209   4.134   5.041   5.398   4.884   4.135   7.833   8.797   8.074   6.978   6.604   6.128   4.919   7.210   5.815   7.080   8.314   8.078   6.195   4.451   5.023   4.071   4.271   4.446   5.514   6.468   6.104   4.585   4.963   4.345   4.409   5.312   4.471   4.393   3.230 
+  5.823   6.152   4.709   3.951   5.042   5.548   5.734   7.719   8.063   6.797   4.928   3.584   6.545   5.684   6.296   4.592   6.708   6.321   6.553   6.519   4.661   5.117   4.425   3.672   4.749   4.504   4.665   5.722   4.881   4.539   3.966   4.312   4.747   4.097   2.870   2.329 
+  5.976   6.179   4.895   4.599   4.106   5.568   5.229   4.794   5.104   6.489   6.017   6.597   7.259   8.114   8.031   8.273   7.621   7.348   5.943   5.904   6.717   6.263   6.083   6.068   6.851   8.190   7.842   6.984   7.280   6.504   6.560   5.341   5.374   6.041   5.999   6.135 
+  7.887   6.636   6.257   5.706   5.667   8.061   8.486   6.777   7.262   7.444   7.745   8.442   9.443  10.194  10.856  11.224  10.630   9.052   7.764   7.669   8.571   8.107   9.029   9.523  10.316  11.276  10.413  10.493   9.757   9.041   8.596   7.958   8.191   8.794   9.054   9.017 
+  6.578   6.744   7.606   7.256   7.494   9.626   8.966   7.445   6.857   8.385   9.473   9.232   8.309   9.398  11.525  10.595  10.936  10.343  10.514   8.999   8.768   9.038   9.866  10.642  11.446  12.032  10.843  11.591   9.758   9.125   8.525   8.618   9.159   8.790   9.297   8.996 
+  7.634   7.632   7.934   5.845   6.237   8.648   9.081   9.366   8.133   8.121   9.363   8.893   9.278  10.555  10.972  10.980  10.654  10.732  10.665   9.470   9.042   9.262  10.078  10.756  11.155  11.913  11.192  11.137   9.829  10.090   9.384   8.660   8.788   8.786   9.613   9.386 
+  9.074   8.631   7.673   7.433   8.843   8.393   8.079  10.004   9.459   7.555   8.271   8.558   8.532  11.086  11.719  10.956   9.452  10.640   9.558   8.008   7.848   8.546   9.218  10.190  10.873  11.340  10.476  10.116   9.626   9.865   9.127   9.213   8.505  10.137   9.954   9.230 
+  9.123   7.923   7.721   8.341  10.402  10.412   8.921   9.926   9.287   9.468   8.897   9.781   9.620  10.649  10.926  11.574  10.032  10.530   9.826   9.191   8.424   9.088   9.655   9.238  10.604  11.831  11.358  11.027   9.398  10.067   9.974   9.269   9.772   9.608   9.798   8.843 
+  8.600   9.193   9.052   7.661   8.776  10.140  10.061  10.085   9.583   9.023   7.864   9.226   9.031   9.006  11.249  11.397  11.276  11.047  11.745  10.085   9.094   9.182   9.510  10.689  11.245  11.250  11.063  10.913   9.922  10.242  10.808  10.321   9.897   9.362  10.151   9.426 
+  8.732  10.313   9.128   7.147   6.677   9.887   9.959   9.006   9.274   9.808   9.522   8.910   9.835  10.067  10.878  10.860  11.246  10.998  11.644  10.383   8.729   9.865   9.961  10.529  10.722  11.693  11.410  11.086  10.569  10.206   9.986   8.921   8.922   9.802  10.713   9.928 
+ 10.459  10.162   9.074   9.240   8.817  10.345  11.082  10.049  10.668  11.198   9.742   9.215   9.942  10.224   9.982  10.695  10.974  11.091  10.620   9.496   9.351   9.088   9.177  10.021  10.314  10.177  10.547   9.496  10.080   9.854   9.250   7.982   8.573   9.386   9.751   8.962 
+ 10.418   9.703   8.505   8.971  10.167  10.156   9.935   8.619   8.400   9.103   8.276   8.875   8.290  10.195  10.059   9.907   9.688   9.693   9.127   7.934   7.390   7.801   8.039   9.394   9.188   8.858   8.784   8.153   7.956   9.410   8.839   8.198   8.505   9.031   9.015   7.547 
+  8.899   7.308   7.335   7.199   6.759   8.734   9.435   8.912   8.646   8.271   7.929   8.167   8.051   8.990   9.579  10.085  10.188   8.184   9.137   8.522   6.843   8.221   8.071   7.293   8.671   9.018   8.018   8.895   8.431   8.558   9.208   8.286   8.099   8.295   8.393   6.460 
+  9.382   8.526   7.291   7.436   6.424   8.090   8.929   8.943   9.024   9.120   6.928   7.195   7.301   8.348   7.811   7.924   7.954   8.094   8.743   8.030   7.441   6.982   8.382   8.048   8.285   7.735   7.319   8.170   8.293   8.624   8.043   7.692   7.964   8.750   7.864   6.995 
+  8.135   7.953   7.243   6.838   5.806   6.759   7.122   6.732   7.568   8.235   6.854   7.488   5.815   6.338   6.685   7.220   7.141   7.267   7.566   6.793   6.023   6.815   7.137   6.402   6.842   6.931   6.428   7.280   7.221   8.480   8.430   6.887   6.923   7.217   6.730   6.283 
+  7.711   6.237   5.463   4.871   6.047   7.634   6.887   5.151   6.252   5.616   4.790   5.091   5.582   5.077   5.236   5.614   5.575   5.665   5.469   4.134   4.763   5.867   5.066   5.687   6.012   6.179   5.917   6.554   5.878   6.115   6.124   5.695   6.036   5.698   5.517   5.733 
+  5.039   4.768   4.074   4.197   5.560   6.301   6.360   4.892   5.423   4.896   3.938   4.432   4.168   4.049   3.686   4.601   5.477   6.074   5.569   4.690   4.003   3.454   3.995   4.521   5.702   5.878   5.969   5.497   6.487   7.115   6.294   6.470   6.432   5.122   4.937   4.547 
+  5.794   4.339   4.259   2.556   3.684   5.602   5.410   4.513   3.604   4.589   4.032   5.144   3.556   4.113   4.253   5.574   4.447   4.273   4.794   5.818   5.840   5.401   5.091   5.899   5.702   5.762   5.195   5.505   6.035   6.549   6.082   6.211   5.619   5.424   4.436   4.082 
+  6.307   5.309   5.364   6.016   5.607   5.050   4.985   4.719   4.907   4.985   3.907   4.487   3.906   4.377   5.317   3.943   5.514   5.484   4.540   5.038   5.077   4.279   5.358   4.820   5.827   5.396   4.730   5.880   6.026   5.259   5.445   6.185   5.550   4.454   4.039   4.454 
+  6.553   5.952   6.006   5.316   5.928   5.808   5.543   5.568   4.731   5.323   3.754   3.252   4.242   4.329   4.696   4.909   5.953   6.569   5.509   5.345   4.770   3.872   3.594   4.496   5.310   5.486   5.375   5.480   6.138   6.374   5.477   5.772   5.401   5.762   5.505   5.154 
+  6.120   5.966   5.309   4.999   4.520   3.623   3.495   4.421   6.247   5.445   4.734   5.150   4.033   5.478   5.507   5.871   5.915   6.013   5.666   6.033   5.252   4.208   3.766   5.370   5.475   5.931   6.314   5.895   6.447   7.067   6.539   5.786   6.078   6.585   5.645   4.665 
+  6.772   6.015   5.716   4.982   5.766   4.455   4.687   4.969   5.955   5.438   4.154   5.113   4.635   4.545   5.179   3.812   4.545   5.070   4.974   5.906   5.688   4.868   4.999   5.267   5.310   5.126   4.678   5.569   6.497   6.088   6.480   6.267   6.202   5.770   5.619   4.996 
+  5.699   4.189   4.396   5.327   6.967   5.864   6.670   5.943   7.322   6.793   4.119   3.909   4.265   4.902   4.518   3.713   3.802   5.861   5.538   5.439   5.414   4.498   5.409   5.177   5.943   5.595   4.694   5.518   6.456   6.225   6.355   6.604   6.356   5.991   5.418   4.804 
+  5.632   6.626   7.080   7.320   7.179   5.758   6.235   6.546   6.019   6.860   6.048   5.554   5.379   6.331   5.408   4.322   4.725   5.100   4.199   5.703   5.043   4.272   5.045   4.416   5.154   5.854   5.428   5.863   5.898   6.215   6.087   6.002   5.810   5.956   5.208   5.153 
+ 10.766  10.607  10.325   8.910   5.957   7.247   7.678   7.735   6.984   7.894   7.617   7.781   8.216   7.601   5.698   6.008   5.523   5.465   5.879   5.897   5.941   5.842   5.216   6.468   6.287   6.389   6.431   5.615   6.254   6.806   6.262   7.169   6.587   7.032   5.880   5.893 
+  9.584   8.324   7.963   8.164   7.164   6.093   7.277   7.696   7.870   6.765   5.784   5.422   5.832   5.178   4.719   5.020   5.469   5.241   3.668   4.741   5.738   5.283   4.856   4.095   5.010   5.835   5.846   5.992   6.439   5.960   6.768   6.865   6.899   6.984   5.782   4.294 
+  4.680   5.433   6.236   5.301   5.491   6.276   8.292   8.124   6.872   7.500   7.071   6.189   5.614   4.774   5.559   4.414   4.558   3.823   3.451   4.930   5.964   5.691   6.208   5.473   4.960   5.479   5.660   5.603   6.536   6.547   7.032   6.719   6.185   5.651   5.548   5.066 
+  7.113   5.579   7.163   6.698   6.197   6.039   7.031   8.078   7.200   6.499   5.264   6.505   6.208   4.890   3.820   4.702   5.909   5.283   5.309   4.964   5.471   5.038   5.701   5.920   5.992   6.376   5.636   5.558   6.350   6.820   6.917   7.414   6.465   6.261   5.491   5.376 
+  8.327   6.764   6.624   7.305   6.195   6.447   6.329   6.973   6.141   6.875   5.798   5.813   5.533   5.547   5.077   4.983   4.797   3.950   4.862   4.996   4.533   4.429   4.843   5.343   4.614   5.372   5.438   5.682   6.427   6.249   5.874   6.813   6.395   6.259   5.581   5.481 
+  8.172   7.986   8.148   7.353   7.361   6.249   7.406   6.776   6.067   7.128   6.129   5.826   4.870   4.800   4.393   5.052   5.264   5.117   4.772   4.523   5.927   5.611   5.441   5.324   4.768   5.485   6.792   6.415   6.564   6.205   5.808   6.487   6.832   6.310   5.378   4.883 
+ 10.504   9.883   8.639   8.306   8.376   8.794   7.868   8.485   7.689   6.375   5.865   4.776   4.540   2.388   3.997   5.617   6.308   6.387   5.182   3.715   4.593   5.075   5.216   5.441   5.484   5.848   5.714   6.061   6.698   6.032   6.156   6.193   6.066   6.557   5.759   5.051 
+  7.223   8.386   8.334   8.172   8.182   8.573   7.991   7.270   5.973   5.080   4.644   5.579   6.100   4.280   5.902   6.179   6.838   6.364   4.732   2.985   4.217   4.768   5.762   5.754   5.227   5.383   5.151   4.541   5.547   5.651   5.383   5.831   5.894   5.509   5.676   4.421 
+  6.032   7.924   8.872   7.621   8.008   8.996   8.433   9.045   8.672   8.734   8.607   8.809   8.839   8.612   8.574   8.583   8.762   8.900   8.847   8.776   8.979   8.030   6.712   6.924   7.225   6.725   6.726   6.397   5.791   6.628   7.477   7.363   7.137   7.269   7.446   7.260 
+  8.932   8.647   9.757   9.044   9.031   9.299   9.145   9.330   9.300   9.309   9.251   9.490   9.428   9.319   9.294   9.377   9.427   9.532   9.577   9.815   9.874   8.794   7.154   6.983   7.846   7.274   7.489   6.836   6.406   7.348   7.791   7.010   7.841   7.756   8.030   8.000 
+  7.306   7.965   8.054   8.403   7.408   6.666   6.809   6.734   5.740   5.661   5.324   4.395   4.250   3.887   4.630   4.896   5.065   4.722   3.802   4.515   4.455   4.406   4.684   6.287   5.417   4.749   5.186   5.152   5.794   6.008   5.921   6.032   6.349   5.837   5.834   5.221 
+  6.972   8.049   8.142   7.552   7.417   6.124   6.071   6.342   5.811   4.862   4.767   6.087   4.968   5.395   5.120   5.251   4.765   5.045   4.112   3.880   4.912   4.363   4.711   4.693   4.368   4.872   5.233   6.160   4.836   5.058   5.265   5.821   6.466   6.143   5.487   4.349 
+  7.733   8.979   8.520   6.655   6.398   5.895   4.870   6.060   6.699   6.122   6.423   5.601   4.799   6.309   6.021   4.106   4.688   4.417   4.917   3.403   5.056   3.815   4.314   4.587   4.565   5.267   5.081   5.157   4.809   5.379   5.803   6.226   6.708   5.680   6.532   5.050 
+  7.094   7.338   6.082   6.038   6.909   6.584   6.912   5.974   7.364   6.699   5.948   5.289   4.791   4.781   5.514   5.509   4.151   4.720   4.636   4.943   4.904   5.303   5.250   5.721   5.530   5.511   5.225   5.042   5.335   5.736   5.629   6.152   6.168   5.828   5.900   5.194 
+  6.759   7.766   6.344   6.754   7.568   7.189   6.802   5.115   6.547   6.881   7.361   7.134   6.904   6.856   7.091   6.901   6.526   6.484   6.597   6.864   6.686   6.517   6.449   6.918   6.617   6.232   6.672   6.194   6.885   7.237   7.485   7.838   7.926   7.772   7.236   6.783 
+  6.179   6.448   4.745   6.561   6.789   5.956   5.433   5.844   5.417   4.432   3.960   4.676   5.144   4.514   5.104   4.730   4.677   5.024   4.984   5.444   4.824   4.059   5.047   5.013   4.686   4.819   5.198   5.090   3.797   4.094   4.633   5.148   4.925   4.899   4.689   4.567 
+  6.790   6.565   6.768   5.896   3.534   4.657   4.782   4.928   4.794   4.185   3.856   4.852   4.247   4.508   4.234   3.190   4.716   4.803   4.665   4.643   5.143   4.962   4.460   4.766   4.228   4.781   4.415   4.397   4.580   4.607   4.651   4.681   4.424   4.782   4.639   3.021 
+  6.476   6.541   6.463   6.088   5.827   6.121   6.511   4.932   4.963   5.681   5.193   4.802   4.341   4.025   4.309   3.995   5.630   3.811   4.356   4.627   4.400   4.535   3.997   4.235   3.929   4.640   4.017   4.135   3.950   4.716   4.921   4.528   4.270   4.205   4.585   3.890 
+  6.764   5.606   6.375   5.937   5.273   5.505   5.322   4.142   4.879   4.901   4.629   4.950   5.087   4.329   4.584   3.872   5.261   5.083   3.584   5.196   5.473   4.259   4.779   4.380   4.604   4.490   4.068   3.764   3.555   4.877   5.152   4.869   4.621   4.153   3.842   3.734 
+  3.476   6.030   5.919   5.139   6.694   7.125   6.565   6.042   5.591   5.907   4.004   5.459   5.788   5.839   4.844   4.402   5.078   4.343   3.850   4.387   4.262   4.151   5.191   4.830   4.384   5.068   5.180   5.438   4.306   4.737   5.644   5.018   4.847   5.241   4.214   4.155 
+  2.444   5.577   6.492   5.129   5.584   6.054   5.865   6.192   5.231   4.940   4.357   4.349   3.751   4.705   4.077   4.043   5.266   4.114   4.608   4.693   4.489   4.555   4.399   4.134   4.120   3.820   4.835   5.382   3.610   4.409   5.175   4.668   4.178   5.218   3.993   2.985 
+  6.282   5.874   6.009   4.739   3.378   6.243   6.874   5.452   4.093   4.984   5.241   5.363   5.845   5.247   4.554   4.484   4.692   3.918   4.038   4.247   4.502   4.296   4.790   4.680   5.070   4.800   5.386   5.010   3.943   4.645   4.020   3.860   4.892   4.974   4.556   4.060 
+  6.205   5.154   4.697   5.647   6.139   6.866   5.080   4.683   4.020   5.474   5.819   5.203   5.093   4.201   4.638   3.510   4.207   4.294   3.495   5.066   5.306   3.845   4.940   4.711   5.237   5.502   4.973   4.332   4.801   4.369   4.162   4.370   5.309   4.799   4.009   3.482 
+  5.751   5.637   5.868   4.845   5.533   6.443   6.712   6.734   6.022   6.244   5.599   5.623   5.635   3.811   4.356   5.047   4.731   4.491   4.298   4.547   4.580   3.842   5.589   5.618   5.031   4.631   5.327   5.051   5.550   5.369   5.095   4.442   4.576   5.074   4.654   4.723 
+  3.998   5.224   5.489   6.206   6.687   7.169   7.131   6.673   6.210   6.014   5.904   5.128   5.483   6.280   6.336   6.576   6.419   6.608   6.825   6.342   6.618   7.130   6.896   6.917   6.970   7.377   7.652   7.509   7.743   7.932   7.928   8.143   8.070   8.030   7.900   7.245 
+  5.701   5.408   5.596   6.537   8.074   7.607   6.371   6.152   6.212   6.650   5.846   6.037   6.304   5.055   5.000   5.492   4.992   5.167   5.086   4.681   4.887   5.765   5.591   5.495   5.502   6.034   6.263   6.368   6.272   6.260   6.227   6.476   6.647   6.596   6.561   6.116 
+  7.158   5.765   4.678   6.877   7.936   7.104   7.029   6.753   5.700   4.508   6.036   5.725   5.009   4.679   4.422   4.026   3.922   4.455   4.219   5.237   5.236   5.137   4.689   5.740   4.926   5.308   5.136   4.993   5.453   4.944   4.201   3.501   3.866   4.145   3.812   4.157 
+  6.891   5.328   6.457   7.318   7.524   6.623   5.976   5.542   5.291   4.458   6.154   5.950   5.058   4.190   4.562   4.792   4.412   4.022   4.269   4.233   3.874   4.749   4.855   4.447   4.519   4.105   4.625   3.843   4.770   4.493   4.141   3.683   5.220   5.166   4.259   4.263 
+  6.620   5.833   5.655   5.824   5.746   5.212   5.321   5.440   5.123   4.648   5.809   6.716   4.864   4.556   4.844   4.900   5.588   4.666   4.727   4.709   4.418   4.706   4.872   5.571   5.248   5.509   5.672   5.634   5.431   4.303   4.640   4.648   4.602   4.995   4.923   4.136 
+  4.762   5.715   6.074   5.664   6.177   6.684   5.140   5.508   5.754   4.867   4.375   5.326   3.599   5.144   5.049   5.765   4.757   3.589   4.268   3.659   3.368   5.219   5.939   4.866   4.325   5.117   5.063   5.136   4.609   3.419   5.283   5.229   5.154   5.207   4.948   4.124 
+  4.325   3.482   5.018   5.073   6.137   5.464   5.434   3.735   4.282   4.006   5.023   3.956   2.780   4.246   4.526   4.077   4.217   4.020   3.278   4.225   4.203   4.675   4.937   4.304   3.862   4.463   4.837   4.603   3.186   2.550   3.153   3.360   4.095   3.926   4.000   3.827 
+  3.764   4.034   4.971   4.378   3.455   4.023   4.780   4.922   4.623   4.127   4.634   4.248   3.950   3.512   4.196   4.130   4.625   4.218   2.921   4.263   4.562   5.940   4.803   4.324   4.306   4.248   4.221   4.265   4.049   4.378   3.438   4.601   4.792   3.887   3.645   2.687 
+  4.684   4.091   4.132   3.735   4.716   4.691   5.247   4.415   2.943   3.627   3.666   4.770   3.754   4.532   3.429   3.976   4.250   4.393   4.142   4.617   4.713   5.170   4.152   5.104   4.683   4.233   4.208   3.844   3.684   4.195   3.907   3.729   4.199   4.236   3.775   2.988 
+  2.818   5.334   6.112   4.758   4.923   4.305   4.735   4.767   4.411   5.567   5.101   4.303   4.139   4.540   4.102   3.520   3.961   4.385   5.029   4.920   4.615   5.434   5.559   4.961   4.350   4.238   3.923   3.661   3.121   4.248   4.650   3.436   4.181   3.638   3.017   2.522 
+  3.698   5.977   6.366   4.672   5.425   5.218   4.533   3.088   4.330   3.992   3.447   3.527   3.901   4.379   3.559   4.392   2.440   4.199   3.640   3.953   4.668   4.794   4.661   4.711   4.334   3.728   4.320   3.904   3.576   4.404   3.893   3.315   3.158   3.258   3.226   2.519 
+  4.380   5.806   5.336   4.252   3.829   4.483   3.236   3.424   3.349   4.070   5.053   4.499   3.859   3.494   2.362   4.145   3.599   4.623   4.212   4.867   4.958   4.930   4.913   4.227   4.947   3.790   3.471   3.367   3.706   3.661   3.024   2.918   2.818   3.534   3.480   2.781 
+  5.192   5.089   5.829   4.135   3.081   2.487   2.642   3.804   4.526   4.931   4.219   3.638   4.408   5.501   3.930   2.820   3.182   3.874   4.847   3.620   5.269   5.088   5.997   4.673   4.677   4.278   4.147   3.879   3.325   3.237   3.108   2.993   3.285   4.074   3.400   3.170 
+  4.175   5.164   5.148   4.423   4.501   4.353   5.273   5.593   5.220   4.135   5.010   4.715   4.469   4.961   4.856   4.647   3.629   4.186   4.326   3.556   4.701   4.922   3.634   4.262   4.507   4.164   4.181   3.947   3.160   3.404   3.556   3.951   3.339   2.829   2.782   2.268 
+  5.478   4.523   5.149   4.930   4.964   4.252   4.339   3.748   5.053   3.950   4.693   4.377   3.911   4.517   4.265   4.590   3.730   3.722   4.545   4.148   4.385   3.271   4.100   4.483   4.396   4.840   4.257   4.132   3.772   3.387   2.900   3.689   2.767   2.439   3.184   2.901 
+  4.773   4.128   5.266   5.192   5.521   4.974   3.009   4.783   4.824   4.420   5.500   4.596   3.978   4.517   4.420   4.149   3.739   4.035   4.010   4.756   4.844   4.071   4.902   3.699   4.143   3.951   3.863   4.402   4.181   3.997   4.509   5.768   5.763   5.677   5.471   4.709 
+  5.771   5.664   5.615   5.137   5.121   4.239   4.860   5.675   5.626   4.629   3.566   5.330   5.341   4.075   5.040   4.974   4.629   4.136   3.208   4.329   4.660   4.325   4.770   3.912   2.997   2.982   4.403   4.446   3.973   4.516   5.004   5.298   5.423   5.320   5.060   4.141 
+  5.034   6.215   5.576   4.103   4.538   4.991   6.164   5.789   5.066   4.759   5.751   5.078   3.690   4.570   4.800   5.447   3.355   4.887   4.599   4.201   4.814   5.054   3.885   4.678   4.702   4.907   4.529   4.711   3.985   4.393   4.109   3.786   4.135   3.409   2.587   3.248 
+  4.377   5.335   5.661   5.502   5.051   4.571   4.166   3.910   4.763   5.282   6.159   4.933   4.655   4.786   4.814   5.180   3.516   3.658   3.475   5.122   4.510   4.766   4.286   5.185   4.825   3.991   4.779   4.342   4.769   4.617   3.987   3.416   3.952   3.692   3.472   3.565 
+  5.149   6.250   5.634   4.661   4.814   4.575   5.101   5.712   5.730   5.667   5.409   4.918   4.295   3.864   4.465   4.394   3.910   2.833   3.097   3.674   4.374   4.925   5.028   3.122   3.645   4.531   4.666   3.981   4.402   4.095   3.983   3.661   3.451   2.979   3.460   2.828 
+  3.926   4.104   4.137   4.355   5.279   5.518   5.006   5.769   5.083   5.533   4.821   3.473   3.201   2.891   3.308   3.864   4.817   4.532   4.744   4.828   3.838   4.934   5.154   3.986   4.147   4.762   4.505   3.679   4.248   4.413   3.220   3.984   3.893   4.583   3.896   3.508 
+  5.567   5.924   6.302   6.132   4.965   4.410   5.655   5.092   6.279   7.140   4.994   3.200   3.924   3.879   4.441   3.636   3.745   4.308   4.322   3.901   5.763   5.397   4.968   4.276   3.599   5.165   5.619   4.420   4.316   4.795   3.806   4.570   4.057   5.059   4.776   3.826 
+  5.456   6.556   6.441   6.698   6.849   5.489   6.202   6.211   5.891   5.957   6.216   6.214   5.903   5.664   5.165   4.791   3.969   4.761   4.426   4.195   5.465   5.196   5.756   5.137   4.546   4.049   4.615   4.643   5.324   4.410   3.916   4.408   3.543   4.047   4.609   3.699 
+  3.317   5.245   5.391   5.182   5.706   6.243   6.617   6.826   6.580   5.946   6.212   6.387   5.257   4.499   5.141   3.998   3.598   3.684   4.807   4.742   5.070   4.833   5.399   5.298   5.850   5.320   4.802   5.121   5.164   4.216   3.669   4.291   5.177   4.917   4.861   3.734 
+  4.547   5.332   5.745   6.300   6.751   5.247   5.142   5.701   6.528   6.287   5.632   6.358   4.646   4.897   4.930   4.288   3.766   3.194   4.134   3.722   4.214   5.221   5.637   5.609   6.294   5.553   5.188   4.693   4.956   4.718   4.055   4.232   4.790   4.828   4.309   3.460 
+  6.221   5.204   5.270   5.613   6.187   5.850   6.831   6.075   5.159   5.758   5.874   5.431   5.263   5.620   5.617   5.719   4.936   3.843   5.348   4.805   4.357   5.634   5.352   5.022   5.098   4.512   5.207   4.109   4.078   3.578   3.935   4.002   2.935   3.397   3.279   1.602 
+  5.726   4.992   6.197   6.566   6.582   5.134   5.618   5.212   5.214   5.440   5.709   4.191   5.069   3.725   3.655   4.193   4.435   4.324   4.974   4.435   2.505   4.009   3.399   5.086   5.080   4.850   3.954   4.310   3.996   3.782   3.340   3.577   3.084   3.847   3.553   2.220 
+  4.555   6.269   6.866   4.992   5.283   5.647   6.692   6.753   5.524   5.257   5.566   6.045   5.418   5.672   5.284   4.600   5.748   4.882   4.000   4.785   4.495   4.148   4.998   5.707   5.107   4.101   4.190   4.377   3.248   3.591   3.397   3.254   3.327   4.150   3.641   2.215 
+  5.029   6.758   6.727   6.473   5.537   4.695   5.551   5.653   5.617   5.656   5.555   6.982   6.409   5.206   4.559   2.684   4.510   4.824   4.557   4.034   4.684   4.100   4.160   4.478   4.507   4.891   5.161   3.538   3.032   3.919   3.354   3.639   3.943   2.986   3.045   2.809 
+  5.998   4.337   5.177   5.996   5.795   6.453   5.656   5.549   5.909   5.930   6.471   5.536   4.889   4.625   4.639   4.819   3.667   4.712   4.671   3.539   4.254   4.375   4.759   4.795   4.821   4.592   5.109   3.586   3.361   4.402   3.597   3.971   3.815   3.538   2.577   2.811 
+  6.444   5.128   5.580   6.238   6.757   6.928   5.789   6.673   6.222   7.403   7.843   6.638   5.300   5.163   5.769   5.185   4.717   5.066   4.809   5.004   3.669   4.445   4.630   5.278   5.226   4.356   4.821   4.546   4.310   3.817   3.341   3.311   3.226   3.300   2.964   2.992 
+  5.862   7.122   7.051   7.193   7.291   5.589   6.537   6.518   4.934   6.599   6.334   4.551   5.470   6.458   6.097   4.894   4.205   4.450   4.776   4.408   4.031   5.277   5.915   5.446   6.005   6.495   4.621   4.127   3.384   3.315   3.437   3.619   4.137   3.138   2.890   2.397 
+  6.556   6.729   5.255   6.161   7.350   7.079   5.228   5.104   6.613   5.655   4.840   4.940   4.248   4.713   4.740   3.074   3.362   3.707   4.639   4.598   3.876   4.758   5.625   5.694   5.687   5.498   4.397   4.376   3.260   4.038   4.467   4.244   4.587   3.904   3.625   1.784 
+  6.277   6.791   5.203   7.313   8.550   7.126   4.879   6.843   7.077   6.018   5.455   5.435   6.220   5.519   4.002   3.640   4.198   4.776   4.911   4.366   3.629   3.400   3.956   4.882   6.684   6.754   4.119   4.763   3.955   3.633   3.933   3.634   3.601   3.110   2.744   2.263 
+  6.528   6.487   3.463   4.727   7.900   7.217   5.799   5.076   4.918   4.894   5.698   5.922   5.799   4.429   2.357   3.324   3.697   4.902   4.362   5.838   5.463   5.689   5.969   5.291   5.740   5.991   4.201   5.050   4.059   4.343   3.358   2.923   3.014   3.308   2.870   2.447 
+  7.674   7.690   5.706   5.742   8.678   8.225   5.748   6.947   6.091   3.669   5.821   5.375   5.284   3.974   6.394   6.409   4.544   5.113   5.049   5.590   5.299   5.863   6.098   4.586   4.918   5.145   4.782   5.074   3.685   3.258   3.323   3.894   4.513   3.999   3.609   3.270 
+  7.457   7.746   6.051   7.517   9.488   8.506   5.202   7.661   7.307   4.768   4.593   3.550   3.920   5.443   7.804   7.386   3.692   4.571   4.746   5.993   5.616   4.802   4.894   4.136   5.910   6.597   6.459   4.899   4.219   4.606   4.355   4.475   4.229   4.847   4.397   4.073 
+  7.136   7.255   5.089   6.882   9.532   8.625   5.896   8.684   7.894   4.781   5.740   4.999   5.374   5.080   7.772   7.494   4.609   3.971   4.865   6.354   6.281   5.987   5.647   4.662   6.641   7.548   6.197   4.338   3.648   5.101   5.769   5.083   4.419   5.501   4.946   3.722 
+  7.140   7.364   4.906   6.500   9.634   8.995   5.049   8.674   8.195   5.148   6.079   4.900   5.368   4.394   7.549   7.656   3.955   3.516   4.608   5.632   5.656   5.334   5.390   5.797   6.219   7.061   5.917   3.850   3.962   4.987   6.034   4.507   4.769   5.895   4.069   3.145 
+  7.292   7.697   5.893   7.347  10.060   9.360   5.654   8.573   7.939   5.371   6.746   5.632   3.701   4.959   7.644   7.835   4.262   3.055   4.007   4.318   4.497   4.655   5.037   6.168   6.913   6.653   5.760   3.283   4.290   5.506   5.036   3.987   4.502   5.846   3.555   2.427 
+  7.462   7.636   5.497   7.322  10.238   9.488   5.235   8.561   8.321   5.338   6.558   5.127   4.084   5.134   7.882   7.773   3.445   3.592   4.876   4.112   4.566   4.602   5.322   5.709   6.635   7.518   5.812   3.514   4.245   5.789   6.132   4.542   4.970   5.925   3.727   2.270 
+  7.620   7.900   6.558   7.977  10.400   9.601   6.076   8.729   8.020   4.438   6.375   5.669   4.691   3.511   8.319   8.299   3.531   3.127   3.629   4.063   4.732   5.253   5.556   5.764   6.228   6.965   4.673   3.975   4.484   5.599   6.125   4.695   5.225   6.722   4.035   3.054 
+  6.798   7.442   5.851   7.941  10.363   9.281   5.553   8.246   7.855   5.469   7.277   6.343   4.926   5.225   8.946   8.546   4.816   3.747   4.913   5.947   5.627   5.283   6.252   5.817   6.803   7.688   6.036   4.136   3.990   4.852   5.328   4.894   5.732   6.203   3.983   2.606 
+  8.295   8.130   5.688   8.677  10.567   9.144   4.780   7.213   5.831   5.314   6.516   6.155   6.967   5.996   8.684   7.987   4.720   4.415   5.414   6.445   6.225   6.351   5.256   5.241   6.072   6.280   5.393   4.894   4.714   4.961   5.492   4.794   5.516   6.130   4.282   3.489 
+  7.565   8.266   6.336   7.885   9.955   9.143   6.488   7.474   6.228   4.125   5.008   4.888   5.876   5.568   7.384   6.369   4.517   4.719   3.710   4.950   5.285   5.983   5.554   5.478   5.629   5.978   4.684   4.395   4.488   5.864   6.453   4.478   5.133   4.999   3.685   3.233 
+  9.202   9.771  10.051   9.099   8.004   7.708   6.375   6.653   7.398   7.994   8.616   7.647   5.621   5.842   6.487   6.297   5.108   4.881   4.091   5.522   6.009   6.199   4.938   5.180   5.471   5.748   4.866   4.528   3.987   5.320   5.739   5.272   4.538   5.288   5.395   4.498 
+ 10.423  10.510  10.508  10.089  10.004   8.467   6.205   6.926   6.960   6.615   7.874   6.426   4.846   4.155   5.964   6.043   4.764   3.672   4.770   4.766   5.191   4.975   4.962   5.256   5.823   6.054   5.119   5.360   4.899   5.311   5.546   5.378   5.337   5.271   4.917   4.281 
+  8.856   7.722   6.303   6.417   9.149   8.449   7.667   6.932   5.967   6.532   6.579   6.391   5.207   5.287   5.343   5.796   5.303   4.425   4.421   4.510   4.752   5.052   4.654   5.570   5.770   5.703   5.747   4.810   5.022   4.996   5.509   4.740   4.497   4.621   4.686   4.278 
+  6.519   6.890   6.378   6.754   8.491   7.778   6.627   6.062   3.947   4.537   5.607   4.244   3.801   5.853   5.300   4.908   4.928   5.137   5.343   6.031   5.072   5.160   5.983   6.133   5.936   5.466   5.374   4.916   5.010   5.099   5.418   5.225   4.988   5.484   4.726   3.598 
+  6.012   5.921   4.820   7.000   8.862   8.231   6.613   5.709   4.692   4.948   5.176   3.612   5.398   6.115   4.846   5.703   5.943   5.751   5.034   6.019   6.806   6.106   6.551   6.683   7.876   7.439   5.731   5.440   5.143   5.767   5.725   5.291   5.512   5.611   5.623   5.521 
+  8.612   8.097   7.296   7.162   8.973   9.545   7.801   8.607   7.815   7.801   5.612   6.485   6.431   5.935   6.245   7.175   7.247   6.116   5.343   5.764   7.245   7.718   7.061   8.394   9.186   9.453   7.403   6.435   6.777   6.851   6.482   7.356   6.620   6.894   6.362   5.702 
+ 12.430  11.259   9.238   9.899  11.099  11.762  11.518  11.058  10.602   9.828   8.953   7.932   7.293   7.724   8.355   9.275   9.435   8.313   6.249   7.021   7.408   8.325   8.284   7.418   9.520  10.168   9.319   8.826   9.372   8.771   8.334   9.478   8.595   7.766   7.932   6.200 
+ 11.049   9.739   9.307   9.397   9.465   8.800   8.823   7.773   7.334   7.748   6.923   6.344   5.584   6.583   6.712   6.282   6.781   6.403   5.436   6.009   7.202   7.938   8.638   8.296  10.160  10.351   9.274   6.601   6.714   6.963   6.587   6.871   7.431   7.355   7.162   5.696 
+ 11.803  12.089  10.696  11.567  10.864   9.602  10.616   9.639   9.123   9.676   9.267   9.197   9.137   8.804   8.919   8.441   8.092   8.044   7.899   7.330   7.184   8.833   9.339   8.710   9.602  10.089   8.818   8.066   7.699   7.080   8.098   8.035   8.128   8.672   7.950   5.586 
+ 13.393  13.055  12.316  12.188  11.168  10.650  10.840  10.115   9.039   9.816  10.156  10.299   9.887   9.959   9.791   9.267   8.535   7.483   7.508   7.621   7.519   8.215   8.382   9.417   9.818  10.838  10.012   8.723   7.908   7.571   8.273   8.399   7.700   8.663   8.065   6.426 
+ 11.110   9.655   7.014   9.325   8.760   6.907   7.190   6.904   7.228   7.681   7.207   6.624   6.366   6.575   6.130   6.199   4.113   4.903   5.401   5.601   5.568   6.166   7.839   8.410   9.445  10.266   8.599   6.166   5.660   5.763   6.427   6.978   7.687   8.156   7.809   5.429 
+  7.222   7.236   6.545   7.622   8.703   8.419   9.538   8.320   6.313   6.992   6.878   7.080   6.176   5.165   6.713   6.556   4.196   5.271   5.007   4.777   5.248   5.376   7.144   8.598   9.818   9.963   8.861   6.801   5.657   6.308   5.505   6.454   6.831   7.352   7.482   5.486 
+  7.623   6.033   5.166   7.951   8.844   8.011   9.384   7.510   6.172   6.342   5.844   5.110   5.392   5.493   6.261   5.346   4.630   5.090   4.852   5.094   4.994   5.651   6.462   8.123   8.724  10.297   9.352   6.904   4.919   4.822   5.179   5.604   7.213   7.845   7.542   5.487 
+  7.472   6.806   6.747   9.836   9.759   8.973   9.263   6.209   6.933   6.116   5.603   4.599   4.855   5.287   5.399   5.221   5.278   4.193   4.736   4.847   5.311   5.813   6.871   8.398   9.387  10.772   9.216   6.907   5.875   6.114   6.417   6.056   6.765   7.206   6.546   5.458 
+  5.553   6.123   7.275  10.415   9.793   8.613   9.607   7.146   6.427   5.780   5.789   5.505   2.288   5.597   6.807   6.627   6.157   4.718   6.006   5.958   5.967   5.689   7.413   9.716  10.540  11.061  10.186   7.564   6.438   6.900   7.337   7.214   7.669   7.252   7.739   6.303 
+  4.225   4.559   8.711  10.759   9.744   8.968   8.744   7.297   6.474   6.259   5.109   5.613   4.720   5.174   5.896   5.564   4.650   4.667   4.119   4.906   5.757   6.045   7.563  10.334  10.688  10.801  10.233   7.995   5.891   6.039   6.756   6.148   6.975   7.661   7.749   5.714 
+  6.147   4.971   8.296  10.129   9.137   8.388   6.947   8.621   9.006   6.627   5.753   6.208   5.027   5.378   4.433   4.658   4.646   4.309   4.301   4.853   5.647   6.863   8.686  10.422  10.703  11.281  10.153   8.000   6.362   5.850   6.712   6.802   7.931   8.784   8.097   5.932 
+  3.478   5.322   6.140   7.602   8.580   9.047   7.668   9.742   9.762   7.045   6.031   4.288   4.010   5.566   4.682   4.492   3.300   3.551   4.854   5.056   5.462   6.586   9.353  10.872  11.184  11.091  10.031   8.142   5.906   6.081   6.849   6.969   7.435   8.737   8.291   6.508 
+  3.468   5.664   6.255   5.622   7.187   9.172   7.875   9.006   8.651   7.438   6.792   6.209   4.566   4.931   6.085   5.089   4.224   4.381   4.787   5.716   5.114   5.452   9.254  10.619  10.350  10.925  10.260   7.839   5.906   5.898   5.811   6.968   6.763   7.977   8.291   6.651 
+  3.395   4.983   5.575   7.086   7.581   9.214   7.785   8.994   8.519   7.194   6.223   4.931   5.747   5.452   5.603   5.768   3.953   5.102   5.535   4.713   5.931   5.129   9.184  10.998  10.529  10.824   9.702   7.719   6.378   5.958   6.247   5.779   6.009   7.914   8.025   5.843 
+  4.571   4.843   7.424   8.092   7.683   9.256   8.124   8.617   7.761   7.404   6.883   4.491   4.487   4.793   4.496   3.676   3.835   5.260   6.593   5.747   5.497   5.528   7.888   9.632  10.145   9.729   7.919   7.151   5.857   4.585   5.761   5.908   7.497   7.853   7.368   6.176 
+  4.795   4.614   6.527   8.084   6.994   7.351   6.728   7.438   6.290   4.931   6.174   5.836   4.188   4.293   5.389   4.120   3.324   3.794   3.905   3.668   4.803   4.737   6.420   9.019   9.698   9.593   8.198   6.611   5.298   5.393   5.263   5.238   6.550   7.643   7.602   5.183 
+  7.428   6.671   7.307   7.479   6.818   7.285   6.755   7.670   7.580   6.919   6.514   4.229   3.350   4.753   4.578   3.876   4.805   4.779   4.462   4.415   5.702   6.116   6.001   8.142   9.179   9.336   6.507   5.924   5.169   5.314   5.476   5.893   6.303   6.849   6.549   4.208 
+  8.778   7.207   7.883   7.146   6.894   6.657   7.081   6.925   6.157   5.744   5.864   5.073   4.845   5.157   5.331   4.683   4.434   4.556   5.350   5.433   6.092   6.480   6.147   6.818   7.862   8.055   6.064   6.200   6.566   5.880   4.455   5.380   6.266   6.570   6.754   5.500 
+  8.521   7.707   6.865   7.062   7.178   7.286   5.903   6.095   6.258   5.911   5.019   5.335   3.848   4.798   5.794   4.942   4.773   5.024   5.763   5.762   5.718   5.413   6.984   7.171   7.085   6.165   5.981   5.566   5.889   5.660   5.194   5.625   6.281   7.356   6.630   5.551 
+  6.472   5.815   6.479   6.358   6.082   7.771   6.612   6.205   5.702   5.804   4.108   4.990   5.342   4.009   5.256   5.009   3.880   4.874   4.852   4.880   5.521   6.320   6.290   5.998   5.739   4.624   5.961   5.820   5.906   5.534   5.206   5.180   5.152   5.857   6.053   4.544 
+  7.465   7.806   6.971   6.810   7.708   7.498   6.977   6.427   5.172   6.195   6.225   5.390   4.886   4.620   4.730   5.466   4.393   5.129   5.377   5.014   5.208   5.427   5.786   7.326   6.735   6.864   6.445   5.632   5.260   4.867   4.627   4.764   5.077   5.173   5.287   3.765 
+  9.557   9.265   7.950   7.692   7.952   8.080   7.723   5.844   5.894   5.309   6.229   5.076   4.526   5.340   4.977   5.808   6.223   5.050   4.774   5.288   5.722   5.095   5.190   6.793   6.048   6.007   5.772   6.342   5.047   5.912   6.007   6.337   6.440   5.904   5.319   3.876 
+  7.839   7.437   6.519   6.245   5.589   6.751   7.024   6.351   5.247   5.668   6.183   6.384   5.479   5.663   6.335   5.122   5.949   6.038   4.661   4.456   4.214   5.394   5.773   6.444   6.891   6.723   6.440   6.676   6.226   5.881   5.168   5.585   6.641   6.142   6.651   4.931 
+  6.727   6.904   7.857   8.086   6.922   7.226   7.057   6.417   6.852   7.611   5.750   5.297   5.045   6.019   5.823   5.181   5.089   5.145   4.608   5.277   6.028   5.689   5.740   7.690   8.748   8.898   7.592   6.135   5.543   6.062   5.447   5.468   6.272   6.729   6.196   5.522 
+  5.836   7.208   8.004   6.755   7.451   8.750   6.896   5.895   5.976   6.972   5.021   4.528   3.479   5.433   5.366   5.032   5.001   4.303   4.900   4.849   6.390   6.137   5.720   9.197   8.925   9.618   8.017   6.854   6.099   5.871   5.783   5.552   6.431   6.933   7.217   5.733 
+  5.688   6.642   7.165   6.693   8.094   9.566   7.838   7.564   6.869   6.030   5.212   4.206   3.924   4.684   5.835   5.018   4.936   3.625   3.971   4.850   5.015   5.635   7.356   9.333   9.206   8.647   9.123   7.854   6.546   5.377   6.687   6.681   6.726   7.613   7.341   5.275 
+  7.135   6.762   7.090   7.429   8.680   8.997   8.275   9.119   8.204   6.939   5.897   3.844   3.943   5.674   5.847   5.152   4.219   4.157   3.802   6.567   6.934   7.068   9.024   9.600   9.157   9.103   9.252   8.040   7.601   6.425   6.929   6.504   6.846   7.296   7.680   5.752 
+  5.273   5.932   6.816   7.400   7.660   6.891   7.819   8.068   7.216   7.428   5.990   5.873   5.859   6.421   6.143   4.713   4.094   6.223   5.921   7.388   7.808   8.039   9.209   8.378   8.693   9.095   9.215   7.620   6.540   6.021   6.789   6.148   7.299   7.493   7.904   5.824 
+  6.212   5.601   6.839   6.415   4.956   4.659   6.447   6.244   7.995   7.491   4.569   5.906   6.200   5.650   6.402   5.543   4.190   5.425   5.575   7.131   8.119   9.248   8.562   7.515   8.345   8.824   8.685   6.776   6.276   6.182   5.960   6.160   8.267   7.938   7.435   5.470 
+  6.330   6.408   7.313   6.121   6.803   6.196   6.070   6.173   8.353   7.704   4.992   4.119   5.276   6.044   6.155   5.848   4.695   5.816   6.328   6.937   8.531   9.297   6.980   6.940   7.616   8.669   8.109   7.089   6.251   6.080   5.985   6.196   7.697   7.969   7.219   6.104 
+  6.325   6.462   7.800   7.098   7.242   7.048   8.119   6.878   7.260   6.737   5.876   4.177   4.927   7.134   5.826   5.551   5.433   6.113   6.518   8.316   8.893   8.271   7.864   8.030   7.444   8.300   8.624   7.283   5.839   5.481   5.826   6.019   7.053   7.597   7.807   5.845 
+  6.526   6.529   5.862   6.232   6.006   6.698   8.155   7.021   7.270   7.426   7.532   5.028   5.901   6.699   6.445   5.280   5.264   6.479   6.036   9.490   9.584   8.102   6.609   7.116   7.342   8.339   8.498   7.206   4.808   5.137   6.110   6.491   7.361   7.753   7.505   5.500 
+  3.993   5.303   4.408   5.841   6.210   6.231   6.710   7.384   8.111   8.784   8.033   7.521   6.357   6.501   7.101   5.281   5.402   7.069   7.361   9.963   9.900   8.114   6.036   6.504   6.661   7.429   7.692   6.504   4.988   4.709   4.832   6.335   7.430   7.278   7.376   4.190 
+ 12.027  12.296  12.049  12.092  12.148  12.246  12.185  12.001  10.603  10.613  10.671  11.058  10.633   9.528   9.681   9.592   9.746   9.362   8.840  10.096  10.040   8.433   7.402   8.169   7.332   8.566   7.996   7.706   6.446   6.453   5.730   6.984   7.247   7.221   7.077   5.612 
+ 14.514  13.391  12.764  11.981  12.837  12.662  13.078  12.950  11.241   9.299  11.198  11.883  10.970   9.050   9.808   9.666  10.117   9.610   8.815  10.155  10.343   9.374   8.219   8.845   8.475   9.403   8.336   7.893   6.848   7.066   7.048   7.514   7.784   6.599   7.071   6.628 
+ 12.232  10.779   8.778   9.806   9.153   9.607   8.896   8.104   9.558   9.626   8.488   8.073   8.040   7.124   6.935   6.300   5.531   6.744   7.285   9.986   9.990   8.083   6.075   6.807   6.479   7.067   7.761   6.946   5.895   4.647   5.510   5.694   6.150   6.183   6.607   4.725 
+ 10.314   6.655   6.638   5.835   6.693   6.013   6.368   8.220   8.477   8.652   7.515   6.950   6.974   5.654   5.260   4.441   5.747   6.392   7.801   9.017   8.948   6.114   4.764   6.252   6.309   6.988   8.537   7.176   5.036   5.546   5.408   6.482   7.220   6.596   6.872   5.240 
+  6.967   6.097   6.114   6.203   6.966   6.013   4.404   6.800   8.957   8.614   6.101   7.182   6.354   5.723   6.115   3.977   4.302   6.969   8.003   9.819   9.816   6.895   6.252   5.450   6.409   6.336   7.711   7.590   6.324   5.540   5.439   6.505   7.279   6.201   6.173   4.597 
+  5.123   5.667   5.841   6.185   7.078   6.802   6.107   7.113   8.007   9.195   6.887   6.411   7.122   6.365   6.680   5.074   5.549   6.123   6.941   9.684   9.318   7.466   6.073   5.862   6.774   6.284   7.730   7.145   5.363   5.119   5.370   6.281   7.065   6.223   5.608   3.594 
+  7.376   6.858   7.019   7.501   6.874   7.278   6.607   7.896   8.331   9.236   7.398   6.776   6.010   6.948   5.951   5.009   5.843   7.421   8.088  10.077   9.146   7.240   5.484   5.009   5.850   6.484   7.335   7.039   5.768   5.728   5.131   5.360   5.222   5.792   6.177   3.613 
+  7.965   8.882   9.194   9.687   9.657  10.493  10.932  10.204  10.223  10.622   9.682   9.690   9.213   8.969   8.883   8.192   8.599   7.845   7.936   8.002   8.460   7.993   7.971   8.142   8.988   8.053   7.878   7.744   7.067   7.179   7.715   8.865   9.665   8.188   8.703   7.583 
+ 11.469   9.487   8.315   9.343   9.064  10.264  10.781  10.443   9.734  10.143   9.597   9.298   8.437   7.431   7.962   7.643   8.092   7.990   7.471   7.275   8.408   8.769   8.474   9.724  10.272   9.129   9.163   8.644   7.683   8.153   8.786   9.369   9.872   9.315   8.792   7.745 
+ 11.094  10.656  10.531  10.753  10.552  10.255   9.994  10.713  10.265  10.119   9.683   8.607   8.592   8.532   7.655   8.041   8.562   8.999   9.318   8.646   8.732   8.702   9.625  10.653  11.227  10.869   9.780   8.508   9.901  10.557  11.013  11.539  11.729  11.343  10.492   8.641 
+ 12.155   9.570   8.450   9.035   7.872   7.601   8.804   9.130   7.976   7.017   6.921   5.569   5.331   5.041   5.011   5.007   5.987   6.566   6.602   7.297   7.347   7.274   6.245   7.390   7.620   7.401   6.430   6.507   6.412   6.621   6.905   7.629   7.710   7.305   7.019   5.636 
+  8.859   8.193   8.415   9.588   8.212   6.147   7.169   8.767   8.995   8.651   7.056   5.391   5.762   6.217   5.559   4.897   4.360   5.489   6.264   6.650   6.483   7.154   6.263   6.402   5.464   6.182   6.199   6.422   5.810   5.899   6.493   6.516   6.262   5.550   6.382   5.781 
+  7.678   7.490   7.139   8.102   7.915   7.498   6.673   5.881   6.304   6.997   6.456   5.609   5.219   5.778   6.267   4.212   4.956   5.378   5.649   7.324   7.092   5.657   5.651   6.602   5.295   5.699   5.605   5.917   5.348   4.876   5.461   6.407   5.873   6.102   5.662   5.199 
+  8.048   7.805   7.583   7.748   8.675   7.286   6.573   7.025   7.907   8.213   7.422   6.586   6.652   6.272   5.857   5.876   4.687   4.192   6.143   6.387   6.916   7.036   5.851   6.030   5.564   5.888   6.034   6.135   5.891   5.455   4.407   5.350   5.226   5.724   5.500   5.984 
+  9.106   8.969   8.577   8.961   9.045   8.360   7.609   6.774   6.866   6.805   6.220   6.534   5.195   6.427   6.457   5.068   4.172   4.298   4.976   6.450   6.166   5.835   5.715   6.345   6.071   6.407   5.756   6.046   5.753   5.760   5.359   6.122   6.061   6.306   5.126   5.365 
+  6.773   7.916   7.545   9.689   9.507   6.585   6.986   6.952   5.262   6.377   6.990   5.423   4.704   6.825   7.110   6.374   3.823   3.828   4.688   5.940   5.499   6.078   5.123   6.389   5.679   5.163   5.820   5.933   6.279   5.813   5.847   6.248   6.359   6.049   5.185   4.351 
+  6.681   5.279   6.396   8.536   8.333   7.508   7.151   6.873   6.649   6.290   5.672   5.864   5.712   5.372   5.429   5.063   4.842   4.441   4.642   5.932   5.939   6.599   5.611   6.401   5.741   5.630   5.125   4.933   5.209   4.843   4.812   5.117   5.403   5.941   5.741   4.900 
+  6.094   5.468   5.909   6.632   6.697   6.862   7.213   6.268   5.547   5.037   6.300   5.526   3.547   2.992   4.421   4.916   4.751   5.123   4.360   4.601   6.251   6.069   5.520   5.988   6.601   5.359   5.096   4.892   5.173   5.614   4.769   4.529   5.483   5.445   4.597   4.094 
+  5.624   5.314   6.519   7.402   6.569   6.411   5.805   5.666   6.581   6.278   6.231   5.576   4.177   3.696   4.927   4.579   4.093   4.879   4.585   5.152   6.050   6.281   6.794   5.471   6.016   5.311   4.450   4.597   4.712   4.436   5.039   4.545   4.960   5.364   4.974   3.886 
+  7.354   6.500   5.898   7.948   8.422   7.849   7.636   7.510   6.604   6.875   5.950   5.291   7.467   6.900   5.971   5.503   4.196   5.380   4.519   5.504   5.293   5.560   5.792   5.738   5.094   5.145   5.509   5.193   4.792   5.163   5.872   5.516   5.679   5.545   5.930   4.058 
+  5.384   6.927   6.860   7.089   7.242   6.679   6.834   6.044   5.632   5.916   7.369   7.889   7.624   6.213   6.377   6.159   3.929   4.841   5.166   5.494   5.258   6.331   6.091   4.921   4.673   4.808   5.427   5.177   3.864   3.216   4.497   4.752   5.171   4.868   4.532   3.305 
+  8.453   6.737   7.186   7.283   6.064   6.558   8.195   8.090   6.929   7.430   8.030   6.829   5.769   6.662   6.483   6.506   6.022   4.965   5.266   5.311   5.164   5.375   7.485   6.736   5.241   5.888   5.025   4.397   4.609   4.742   4.273   4.985   4.998   4.877   4.876   3.417 
+ 10.774  10.633   9.958   8.669   7.829   7.240   7.054   8.472   8.558   7.330   7.732   7.176   6.776   7.313   7.318   6.431   6.206   5.311   3.815   5.145   5.684   5.782   6.029   5.991   5.763   5.342   5.029   4.616   4.416   5.340   4.927   4.813   4.807   5.012   5.370   5.057 
+  8.997   9.143   7.638   6.807   6.958   7.621   7.843   7.183   7.633   6.163   6.635   7.909   6.494   7.475   7.001   5.414   5.570   6.382   5.726   5.561   5.534   5.520   5.895   6.124   5.492   5.673   5.319   4.414   5.151   5.183   5.142   5.650   5.764   5.172   5.386   5.138 
+  6.008   6.296   7.542   6.724   6.555   6.071   6.920   6.662   7.324   6.648   6.758   6.400   6.141   6.162   5.321   5.335   5.220   4.762   4.930   5.691   5.748   6.136   5.713   4.769   5.328   5.265   5.126   5.118   5.490   5.622   4.996   4.921   5.712   6.450   5.184   5.044 
+  6.514   5.635   5.780   6.786   7.404   5.219   5.054   6.091   6.761   6.468   6.911   6.540   6.774   5.506   4.483   4.901   5.514   4.031   4.208   5.874   6.234   5.433   6.091   5.657   4.567   5.813   5.319   4.805   5.076   5.385   5.184   4.800   4.932   4.464   4.646   4.897 
+  5.520   6.878   6.889   7.174   6.048   5.167   4.494   6.717   7.150   5.292   6.445   7.076   5.482   3.858   5.360   4.458   5.880   6.241   4.964   5.265   5.848   5.547   5.185   5.231   5.768   5.214   4.768   4.337   4.623   5.318   5.351   5.245   4.429   4.662   5.212   4.346 
+  5.937   5.961   5.289   7.248   7.153   6.160   6.225   5.131   5.734   5.740   6.750   7.334   5.683   5.784   6.034   5.664   5.490   5.971   5.848   5.816   5.863   5.664   5.662   5.511   5.648   5.017   4.499   5.665   5.071   5.267   5.185   5.855   5.890   5.077   5.366   4.166 
+  6.192   6.049   6.024   6.312   6.500   5.785   6.970   6.534   6.066   6.082   7.261   6.801   3.933   5.701   5.501   5.557   5.627   6.182   5.615   5.476   5.654   5.865   5.628   5.800   5.026   6.067   5.690   5.527   5.594   5.447   5.813   5.874   5.930   4.971   5.695   5.187 
+  5.509   4.231   4.607   6.548   5.501   5.430   6.303   6.755   6.535   7.271   6.728   6.208   6.701   6.803   6.753   6.104   6.054   6.480   6.262   6.197   6.316   5.875   5.945   4.972   4.684   6.079   6.016   5.429   5.259   5.371   5.898   5.859   7.208   6.990   6.873   6.546 
+  7.202   5.450   5.258   6.357   6.729   5.476   6.363   6.074   5.784   6.571   6.045   5.335   6.095   5.746   4.450   4.780   4.886   5.265   4.727   5.347   5.920   4.904   5.581   5.232   5.865   5.315   5.582   5.683   5.123   5.455   6.153   5.934   6.402   6.045   6.442   5.874 
+  6.889   5.715   4.415   5.497   5.298   5.368   5.769   5.593   6.488   6.640   6.749   5.687   4.998   5.192   4.802   4.633   4.584   4.783   4.956   5.481   5.180   4.382   5.215   4.555   5.672   5.205   4.772   5.411   5.794   5.331   5.773   5.482   5.550   6.187   5.544   5.705 
+  4.459   6.796   6.717   6.666   6.458   5.233   5.008   4.656   6.666   6.135   6.036   6.416   6.442   7.136   6.209   5.018   5.113   5.630   5.037   4.651   5.107   5.151   5.540   5.207   5.378   5.479   4.802   5.258   4.957   5.219   5.648   5.895   5.617   5.444   5.386   4.966 
+  5.960   6.547   6.363   5.079   3.008   5.327   6.499   5.626   6.213   5.470   5.355   5.125   4.612   5.792   4.823   5.278   6.066   4.977   4.803   3.436   4.693   5.750   5.528   5.533   5.389   5.638   5.200   5.144   5.044   4.949   5.848   6.491   5.388   5.602   5.753   4.751 
+  5.059   6.064   6.700   5.591   4.958   5.496   5.055   4.304   5.612   4.912   4.947   3.363   4.413   4.770   3.372   3.550   5.156   4.205   3.421   3.620   5.165   5.704   5.073   4.366   5.019   5.776   4.410   4.320   4.819   4.623   5.245   5.330   4.380   4.615   4.220   3.544 
+  5.677   6.817   6.409   5.517   5.891   6.825   6.829   5.981   6.034   5.774   5.426   4.930   4.886   4.832   4.328   4.374   4.942   5.481   4.188   4.731   5.209   3.855   3.877   5.342   5.730   5.728   5.462   4.360   5.722   5.839   5.874   5.321   5.122   5.015   5.332   3.909 
+  5.702   6.022   5.579   5.200   5.186   7.317   6.772   5.787   6.090   5.653   5.887   5.724   5.071   6.113   5.581   5.013   4.745   4.507   4.061   4.992   4.732   5.365   5.787   5.661   4.937   4.900   4.892   5.034   4.821   5.428   5.092   4.463   5.192   4.909   5.102   4.296 
+  3.519   2.844   4.820   6.471   5.921   4.854   5.722   5.754   6.037   6.124   5.175   6.366   5.424   5.602   6.415   5.110   6.266   5.465   4.437   4.257   5.363   5.245   5.310   4.231   5.000   5.611   4.522   4.765   4.268   5.490   5.163   5.033   4.738   4.981   4.725   3.359 
+  3.782   2.892   4.659   6.414   5.882   5.220   4.793   5.054   5.962   5.828   5.130   5.158   5.160   3.986   4.699   5.522   5.502   5.520   4.672   4.632   5.961   4.925   5.470   5.137   5.243   4.825   4.626   4.688   4.526   4.919   4.528   4.716   4.327   4.192   3.999   3.326 
+  4.614   5.713   6.477   4.829   5.580   5.471   4.833   3.550   5.724   5.500   4.538   5.247   5.833   5.271   5.082   5.552   5.389   5.278   5.362   4.741   5.096   5.306   6.516   5.680   5.680   5.036   4.954   4.954   4.359   5.087   3.984   4.005   4.286   4.047   3.686   3.043 
+  3.922   4.720   6.278   5.631   5.995   6.364   5.874   4.360   4.171   3.442   5.591   5.558   4.687   4.142   4.378   4.471   5.484   5.035   4.684   4.736   5.874   6.027   5.158   5.095   4.614   5.074   5.197   4.849   5.356   5.010   4.409   3.683   3.884   3.914   3.669   2.701 
+  6.222   6.539   5.107   2.327   3.514   4.335   5.489   5.698   3.595   4.468   5.374   4.108   3.151   3.862   3.521   4.112   4.550   4.884   4.475   4.019   4.265   4.861   5.565   5.289   4.781   4.182   3.828   3.900   3.871   3.875   3.913   2.750   3.419   3.554   3.332   2.578 
+  6.666   5.691   5.541   4.465   3.839   3.423   4.658   4.606   3.937   6.253   5.648   5.220   4.883   3.935   3.648   3.376   3.991   4.640   4.335   4.827   5.350   4.954   4.688   4.782   5.187   3.826   3.816   3.418   3.968   4.312   3.116   3.390   2.903   3.527   3.264   1.950 
+  4.245   5.905   6.384   5.465   3.707   3.828   3.649   3.247   3.153   6.382   6.215   4.768   4.405   4.511   4.564   3.751   4.305   4.529   5.474   4.983   5.473   5.659   5.651   5.680   5.609   4.121   3.753   3.896   3.823   3.841   3.253   3.580   3.688   3.559   2.862   3.088 
+  5.366   5.580   5.036   5.091   4.557   3.945   3.880   4.513   4.608   5.821   5.056   4.755   4.796   5.368   4.543   4.693   4.688   4.992   3.867   4.539   4.586   5.838   5.359   5.424   5.015   5.085   3.725   3.375   3.887   3.883   3.268   3.648   3.140   4.064   3.804   2.750 
+  3.878   4.642   5.553   3.645   5.849   5.627   4.717   3.819   4.280   4.215   5.612   5.403   4.718   4.802   4.820   4.220   3.615   3.561   3.297   3.855   5.483   5.885   5.163   3.624   4.415   5.034   4.706   3.818   3.846   4.461   3.493   4.096   3.536   3.105   3.149   2.251 
+  4.072   6.140   6.532   6.531   5.842   5.762   5.121   3.531   4.077   4.155   6.317   5.484   4.577   5.507   5.064   3.298   3.362   4.539   4.330   4.765   5.056   5.066   5.526   4.583   4.400   5.036   4.386   3.442   2.892   3.212   3.772   3.549   3.050   3.016   3.309   2.169 
+  4.705   5.969   5.727   6.299   5.671   4.074   4.613   4.761   4.411   3.985   4.873   3.638   4.739   5.042   4.216   4.312   4.541   3.991   4.133   4.378   4.820   5.292   5.233   4.253   3.796   3.720   5.161   3.860   3.482   3.864   3.588   3.447   3.370   3.804   3.283   2.152 
+  3.667   4.552   4.887   5.473   5.657   3.742   3.671   3.679   2.419   3.105   3.496   2.979   3.589   5.126   4.660   3.564   3.148   3.434   3.530   4.976   4.845   5.402   5.223   5.781   5.743   3.712   4.080   4.137   3.873   3.514   3.381   3.600   3.948   3.787   4.034   3.612 
+  3.866   5.882   5.179   3.401   4.228   4.511   4.677   4.439   4.296   5.467   4.427   3.641   3.832   4.523   3.650   2.819   3.947   4.596   4.787   3.802   3.905   5.616   5.347   5.381   5.566   4.413   4.433   4.621   4.670   4.699   4.388   4.236   4.946   4.677   4.291   3.673 
+  5.966   5.606   5.716   5.962   4.452   4.130   5.914   6.161   4.974   6.187   6.029   4.939   3.487   4.380   4.367   4.248   4.708   5.352   4.872   4.443   4.340   4.636   5.290   5.227   4.718   4.567   4.989   4.156   4.481   4.260   3.904   4.559   5.522   5.087   3.920   2.820 
+  6.886   6.729   5.910   5.913   6.380   5.107   5.574   6.764   5.676   6.099   5.369   4.184   4.905   5.695   5.815   3.966   3.431   4.183   4.108   4.529   5.278   4.469   5.418   5.339   4.922   5.007   4.774   4.745   5.068   5.067   3.956   3.760   4.303   4.019   3.648   2.606 
+  7.424   8.777   8.085   6.922   6.801   7.750   7.935   5.935   6.202   7.038   5.788   5.355   5.360   5.612   4.723   4.217   4.278   4.010   4.508   4.942   4.973   5.922   6.548   6.978   6.372   6.193   6.858   6.179   5.840   5.393   5.818   5.813   6.408   5.012   4.701   4.481 
+  7.376   7.557   7.608   5.741   6.603   6.896   7.689   7.133   5.804   4.624   5.955   5.273   3.822   4.718   5.024   4.572   5.147   4.792   4.335   5.689   5.331   5.954   7.490   7.502   7.233   6.798   7.228   7.078   5.760   5.490   5.408   4.556   5.618   5.455   4.862   3.654 
+  7.474   8.188   7.432   5.470   6.234   8.039   8.456   6.177   4.585   4.529   5.960   5.374   4.011   4.896   4.758   5.495   5.023   4.918   4.221   6.080   5.824   6.694   8.168   7.956   7.783   7.658   8.050   8.241   6.819   5.966   5.447   6.023   6.086   5.305   4.633   4.141 
+  6.552   6.885   7.415   7.870   7.940   6.803   8.738   8.067   6.310   6.982   5.399   5.229   5.156   5.192   5.731   5.785   4.878   4.936   5.556   5.893   5.576   7.045   8.799   7.534   7.070   7.059   7.037   7.627   7.106   5.239   6.319   6.477   6.518   5.716   4.939   4.450 
+ 10.008  10.007   9.580   7.858   6.862   7.897   8.357   7.077   8.445   8.684   6.478   6.137   5.661   4.822   5.381   5.101   5.339   4.972   6.310   5.720   5.543   7.696   8.745   8.083   7.649   7.401   7.965   8.633   6.828   5.065   6.147   6.692   6.387   6.193   5.888   5.895 
+ 11.724  11.304  10.849  10.076  10.424  10.586  10.232   9.185   7.338   7.621   8.367   8.092   7.773   7.350   6.805   5.789   4.956   5.191   5.544   5.333   5.801   6.015   7.201   6.630   7.230   7.370   7.309   7.739   6.854   5.586   5.735   5.437   6.052   5.905   6.577   5.553 
+ 10.531  11.283  10.551   9.711   9.970  10.457  10.689   8.299   8.250   8.646   8.055   8.189   7.926   7.815   7.216   6.560   6.350   6.813   6.982   6.068   5.947   7.624   7.678   6.568   8.147   8.644   7.839   8.325   7.100   6.170   7.153   7.422   7.816   5.971   6.317   5.287 
+ 10.889  10.396  10.294   9.891  11.003  11.424  10.218   8.736   7.495   8.839   8.770   7.669   8.438   8.144   7.484   7.826   7.915   8.560   8.647   7.689   6.794   7.793   7.425   7.638   8.407   8.850   7.741   6.935   6.305   6.663   6.532   7.183   7.348   7.079   6.898   5.702 
+ 11.832  12.124  11.879  11.965  11.922  12.010  11.077   8.666   7.981   8.540   9.212   7.734   8.694   8.536   8.545   8.505   8.572   8.774   8.323   7.104   7.442   7.901   7.168   8.044   9.087   8.506   7.563   6.453   6.256   7.051   7.460   7.936   7.720   7.228   6.423   6.202 
+  7.760   8.036   8.071   9.205   8.531   9.756   9.264   6.908   7.144   7.226   7.435   5.962   5.551   5.955   6.025   6.651   6.049   6.670   8.263   8.439   7.466   6.592   6.473   7.310   7.768   7.431   6.671   7.544   6.918   7.594   7.052   7.099   7.469   7.506   7.333   6.587 
+  8.788   7.901   6.998   8.087   8.460   8.650   8.115   7.943   7.676   7.895   7.916   6.900   6.972   7.248   7.494   7.787   8.152   7.536   7.509   8.461   8.883   8.253   8.345   9.529  10.143   9.411   7.936   8.176   7.905   7.832   8.935   8.857   9.594   9.651   9.399   8.492 
+  8.056   7.809   8.516   7.506   6.981   9.095   8.158   7.423   7.752   7.364   6.394   6.170   6.089   6.451   5.887   6.261   7.204   7.024   6.943   7.187   7.718   6.916   6.723   8.285   8.777   8.303   7.235   7.177   7.284   8.012   8.321   7.466   8.343   8.832   8.500   7.399 
+  7.925   8.077   8.279   7.561   7.742   9.590   8.523   4.107   4.283   4.787   5.477   6.032   5.663   5.128   5.344   5.800   6.350   6.119   7.352   7.611   6.478   6.630   6.173   7.030   6.982   7.106   7.471   7.344   8.099   7.616   8.153   8.519   8.415   8.446   7.715   6.562 
+  9.315   9.810   8.667   6.998   8.082   8.221   8.594   6.632   7.016   6.853   5.757   6.488   7.147   6.195   5.891   6.663   6.724   6.800   7.182   7.022   7.025   7.523   8.224   7.809   8.130   7.671   7.157   7.899   8.527   9.127   9.102   9.109   8.941   9.397   8.841   8.389 
+  7.652   9.943   9.971   7.951   7.586   8.102   7.064   7.116   7.454   8.022   6.714   6.015   6.466   6.036   5.585   6.052   6.561   6.240   5.976   6.395   7.222   6.424   6.165   6.582   6.744   7.424   6.925   6.386   7.669   9.172   8.439   8.383   8.762   8.209   7.854   7.729 
+  6.793   7.176   8.395   7.918   8.668   8.325   6.368   7.014   7.141   6.567   6.400   5.848   5.957   5.663   6.089   6.165   5.468   4.612   6.667   7.047   6.363   7.081   6.568   6.863   6.771   6.653   6.720   7.309   7.493   8.458   8.017   8.284   8.752   8.065   7.078   6.567 
+  6.809   7.227   7.700   8.238   7.263   6.002   6.688   5.757   4.459   5.424   5.219   6.334   6.231   5.349   4.813   5.186   5.403   4.612   5.905   5.551   5.875   5.991   6.849   6.532   6.056   6.787   7.027   6.259   6.424   6.773   7.266   7.318   7.836   7.416   7.083   5.978 
+  5.439   6.575   5.465   6.501   5.557   6.444   6.799   5.289   3.801   5.244   5.759   4.505   3.956   4.070   5.615   5.403   3.826   5.655   5.983   5.650   5.780   5.372   5.538   4.747   6.131   4.950   5.970   6.321   6.525   6.301   6.915   6.559   6.421   7.079   6.670   5.705 
+  9.316   8.989   8.036   6.732   7.179   5.184   4.863   4.181   4.352   5.123   5.354   5.957   5.887   5.758   6.428   6.168   5.161   5.489   6.451   6.280   5.429   4.454   4.628   4.910   5.864   5.106   6.058   6.475   6.404   6.936   6.190   6.431   6.401   7.057   6.782   5.927 
+  7.391   6.769   7.593   6.005   6.420   5.377   4.367   4.218   5.013   5.195   5.701   4.068   4.850   5.693   4.850   5.073   5.526   4.887   5.794   5.669   4.462   5.490   5.153   5.697   5.256   5.403   5.793   5.605   5.660   6.095   6.531   5.818   6.524   6.989   6.648   4.726 
+  4.031   5.789   6.997   6.449   5.388   3.159   3.262   4.915   4.034   5.466   5.376   4.480   4.199   4.006   4.788   5.098   5.858   4.790   5.808   5.146   4.460   5.481   6.059   5.713   5.548   5.630   5.857   5.809   5.752   5.985   6.334   5.481   5.983   6.384   6.405   5.151 
+  6.435   6.011   8.215   8.613   8.913   8.093   5.914   7.767   7.860   7.247   5.483   5.394   6.730   6.127   6.382   7.057   6.175   6.283   6.589   6.404   5.531   5.343   5.968   5.069   4.893   5.463   5.970   6.055   5.586   5.957   6.261   5.918   6.070   5.588   6.531   4.976 
+  9.863   9.533   9.416  10.138  10.056   9.640   9.470   9.180   8.853   7.651   4.689   6.476   6.708   6.199   5.576   6.649   6.017   5.536   5.863   5.604   4.636   4.709   4.335   4.885   4.863   4.773   5.279   5.526   4.859   4.803   5.470   5.703   5.139   5.350   6.569   4.600 
+  7.902   7.361   5.641   6.538   5.584   6.510   6.486   6.020   4.355   4.451   2.749   4.832   3.978   4.847   4.553   4.170   5.306   4.720   3.595   4.419   4.458   3.893   3.582   3.949   5.009   4.806   4.507   4.898   5.575   5.358   5.202   6.449   5.282   6.043   7.175   5.799 
+  4.452   4.684   3.017   4.100   5.379   6.291   5.452   5.444   5.789   4.882   3.190   5.221   4.183   5.506   5.812   4.426   3.923   4.853   3.889   4.327   4.331   5.546   4.229   3.557   5.255   5.276   4.483   5.247   5.868   4.769   4.720   5.258   5.504   5.397   6.003   4.774 
+  5.893   4.357   4.587   4.849   4.993   5.345   5.206   6.354   5.843   4.766   3.773   5.312   4.689   4.127   4.876   4.407   4.252   3.655   5.125   4.277   4.742   4.470   4.050   4.459   5.219   5.456   5.102   5.143   5.833   5.170   4.867   4.745   4.930   4.850   6.266   4.874 
+  5.405   4.372   3.720   3.360   3.373   4.933   5.374   4.775   3.678   4.535   2.799   2.685   3.566   4.636   4.576   4.112   4.584   3.633   4.441   4.469   4.477   4.535   4.796   4.193   4.110   4.439   4.204   4.128   3.877   4.784   4.504   4.055   5.009   4.511   5.139   4.338 
+  5.649   4.813   4.409   4.562   4.461   4.744   4.772   4.495   4.477   4.781   4.447   3.246   3.630   4.347   4.550   3.594   3.573   3.904   4.295   4.834   4.582   4.538   4.365   5.098   5.198   5.332   4.068   4.042   4.531   5.079   4.414   4.670   4.683   4.811   5.673   4.953 
+  5.134   4.596   3.999   5.054   5.706   4.701   4.670   3.202   3.945   4.140   3.535   3.162   3.338   4.555   4.769   3.927   4.058   4.327   4.814   4.430   5.217   4.535   4.310   5.643   5.156   5.147   4.351   4.564   4.554   5.300   4.897   4.420   5.216   4.042   5.500   5.172 
+  5.927   5.645   5.551   5.665   5.686   5.743   6.395   4.620   2.608   4.365   4.346   4.268   4.306   4.250   4.669   3.356   3.793   3.470   4.444   4.564   4.471   4.179   4.199   4.178   4.438   4.700   4.061   3.359   3.004   3.725   3.569   3.737   3.580   4.332   3.563   2.701 
+  3.006   5.559   6.110   4.834   3.549   5.200   5.127   4.234   4.363   3.973   3.073   4.622   4.357   4.235   4.874   4.763   4.082   2.939   3.445   4.459   4.781   4.357   4.157   4.260   3.857   4.090   5.320   5.006   3.713   4.169   3.930   3.956   3.545   3.936   3.720   3.120 
+  5.177   5.455   4.222   2.666   2.728   3.932   3.787   4.044   4.373   4.057   4.166   4.850   5.674   5.050   4.494   3.001   3.205   4.292   4.066   3.367   4.582   3.594   4.747   4.610   4.548   4.986   5.075   5.348   4.189   4.788   4.404   3.894   3.888   3.762   3.292   2.769 
+  4.136   4.084   4.067   3.893   3.861   4.938   5.694   5.374   4.694   4.021   4.155   3.619   4.422   5.434   4.332   4.270   4.810   4.579   5.182   4.768   5.327   4.962   5.353   5.108   4.667   5.484   5.154   4.656   4.237   4.389   4.696   4.319   4.187   3.330   4.083   3.786 
+  5.627   6.484   5.823   4.803   5.450   5.542   5.411   4.414   5.128   3.970   4.270   3.642   4.192   4.707   5.189   4.836   4.440   3.965   4.439   5.129   3.920   3.409   4.253   4.881   4.842   5.232   5.003   4.405   4.485   4.399   4.108   4.106   4.150   4.092   3.933   3.420 
+  4.629   4.280   3.623   4.455   3.495   5.157   4.449   4.024   3.538   4.299   4.045   4.607   4.355   4.503   3.531   3.619   2.612   2.963   3.157   4.762   4.603   2.870   3.398   4.080   3.865   3.760   3.790   3.705   4.141   3.626   2.899   2.901   3.476   3.794   3.718   2.939 
+  4.194   5.034   4.442   4.072   3.593   4.287   5.113   4.722   3.828   4.118   3.927   4.490   5.107   5.007   4.230   3.126   2.937   2.580   3.991   4.311   4.355   4.185   3.938   3.841   3.975   2.949   3.320   3.832   3.613   3.678   3.568   3.439   4.103   3.694   4.086   3.376 
+  5.319   3.861   3.424   2.013   3.073   4.435   4.075   3.582   3.187   4.277   4.688   4.590   2.955   3.589   3.781   3.200   3.671   3.167   3.935   5.498   5.053   4.339   3.743   2.699   3.916   4.236   4.341   4.245   4.162   4.396   5.032   4.568   4.484   4.419   4.819   3.918 
+  5.266   4.626   4.896   5.522   5.275   4.411   3.440   3.372   3.836   5.047   5.227   3.671   4.051   5.053   4.854   3.671   4.277   4.615   3.931   3.952   3.400   4.222   5.018   5.350   5.183   5.148   2.779   3.390   4.310   3.956   4.269   4.866   4.114   4.512   4.519   3.938 
+  4.231   5.244   4.583   5.164   5.327   5.163   5.086   3.770   3.404   4.074   5.441   4.655   5.030   5.436   5.839   4.125   3.715   3.151   3.548   2.959   3.194   4.080   4.405   4.706   4.990   5.044   3.471   4.352   4.693   4.433   4.511   4.701   4.784   4.714   4.303   4.309 
+  5.849   6.056   4.821   5.483   5.745   4.634   4.754   4.591   4.246   4.974   5.338   4.427   4.151   3.966   3.342   4.010   4.778   4.071   3.900   4.442   4.412   4.597   3.319   4.238   4.825   4.517   3.715   5.120   5.666   5.149   5.047   5.569   6.179   5.906   5.172   5.417 
+  5.580   4.367   5.236   5.956   5.115   4.652   4.946   4.553   2.858   4.000   4.334   3.693   3.051   2.987   4.234   4.050   3.681   3.829   5.348   5.515   4.385   4.283   3.937   3.972   4.649   4.141   4.553   5.148   5.234   5.160   5.901   5.624   5.615   5.902   5.916   5.456 
+  5.352   4.554   4.409   4.346   3.851   4.926   4.558   3.026   2.075   3.394   3.739   4.352   3.303   4.317   4.329   4.120   4.883   4.563   5.113   4.751   3.810   4.357   4.391   3.523   4.715   4.773   3.988   4.352   5.349   6.098   5.963   6.238   5.656   6.073   6.118   4.982 
+  4.234   5.731   5.914   5.230   5.026   5.597   5.048   2.226   2.254   3.522   4.184   4.531   3.420   4.048   4.088   3.717   4.143   5.147   5.205   4.407   3.877   3.599   5.060   5.648   5.800   5.194   4.320   4.717   5.014   6.163   6.972   6.173   5.900   5.878   5.571   4.943 
+  6.391   5.238   4.708   3.803   3.526   5.172   5.649   4.743   4.906   3.147   3.829   3.482   4.466   4.842   4.832   3.863   4.175   5.001   4.281   4.031   4.694   5.213   4.514   5.661   5.648   5.298   4.594   4.872   6.257   5.239   6.420   6.358   6.616   5.727   5.275   4.582 
+  6.778   6.265   5.490   4.788   3.957   4.333   5.389   5.077   4.422   4.614   5.388   4.537   3.818   4.507   4.833   4.671   4.575   5.463   4.565   4.079   5.109   5.422   5.368   6.002   5.968   5.403   6.907   6.015   6.204   5.840   6.147   6.712   6.994   6.800   7.045   6.188 
+  5.052   4.315   4.233   5.017   5.745   4.761   5.746   4.697   3.964   4.052   3.961   4.884   5.347   5.385   4.722   5.054   5.675   5.580   5.221   4.206   5.486   6.050   6.628   5.815   5.396   5.537   6.091   6.698   6.855   6.425   5.961   6.426   7.103   7.608   7.282   6.553 
+  5.252   5.971   5.768   5.694   5.921   5.793   4.868   4.139   4.424   5.332   5.774   4.939   3.634   4.362   4.478   5.226   5.752   4.266   3.445   4.068   5.551   5.339   5.543   5.420   5.770   5.078   5.412   5.726   6.471   6.301   5.277   5.280   5.427   5.845   5.426   4.499 
+  3.097   4.880   5.200   5.368   4.829   3.775   3.583   2.967   4.146   4.259   5.571   3.785   3.215   4.220   3.856   4.736   4.712   3.866   4.283   4.524   4.346   4.888   4.667   5.772   5.247   5.039   5.520   5.535   5.746   5.022   5.634   5.117   5.456   5.517   5.365   4.593 
+  5.382   3.616   3.841   4.340   5.355   4.941   6.483   6.246   5.771   5.448   5.085   4.411   3.834   3.374   3.929   3.911   4.568   3.216   4.043   5.664   5.597   5.040   4.430   5.269   5.554   5.379   5.812   5.625   5.753   4.787   5.643   5.326   5.288   5.802   4.592   3.729 
+  6.034   5.305   6.253   5.482   5.981   5.886   6.460   5.665   3.993   5.380   5.950   6.122   3.848   2.489   2.788   2.596   2.862   3.808   4.109   4.029   4.886   3.178   4.153   4.973   3.959   3.003   4.208   3.568   3.662   4.009   4.393   3.993   4.497   4.107   3.856   3.167 
+  5.519   6.075   5.715   5.449   4.385   4.772   4.971   3.879   3.510   3.720   5.268   4.559   4.046   4.193   3.062   2.761   3.569   4.129   4.590   3.025   4.406   3.845   4.748   4.367   4.329   3.912   5.118   4.785   5.578   5.923   4.979   5.354   5.464   3.913   4.102   4.386 
+  7.333   7.153   6.429   6.447   5.701   6.067   6.897   6.576   5.977   5.803   4.172   5.053   5.435   4.766   4.831   3.908   3.916   3.872   4.144   3.684   4.490   3.234   3.618   4.206   4.491   4.695   5.729   5.131   6.183   5.697   4.890   5.187   4.983   3.905   4.173   3.562 
+  8.548   8.845   7.040   6.106   6.273   6.108   7.242   6.835   6.710   6.377   5.797   6.445   6.022   5.500   4.844   3.977   4.477   3.649   4.208   4.089   3.861   4.096   3.517   4.739   4.309   4.221   5.083   5.478   5.761   5.335   3.803   4.754   5.480   4.446   4.851   4.294 
+  8.923   9.104   7.229   6.903   6.934   6.757   7.029   7.648   6.815   5.644   6.616   6.673   6.171   5.667   3.924   3.881   4.365   4.964   4.622   4.386   4.595   5.255   4.841   5.013   5.533   5.526   5.139   4.880   5.418   4.780   5.182   5.165   5.441   5.951   4.598   3.714 
+  8.302   8.264   8.167   7.235   6.903   6.633   6.761   8.019   7.429   7.265   7.202   6.817   6.330   6.929   6.322   5.639   4.574   4.592   4.751   4.762   4.929   5.443   5.774   4.547   6.080   5.836   5.650   6.683   6.400   6.075   6.033   5.605   5.946   5.684   5.206   4.896 
+  8.959   9.461   8.027   8.541   8.436   8.588   8.363   7.629   6.818   7.458   7.176   6.886   5.699   6.630   6.789   6.533   5.146   5.645   5.570   4.826   6.230   5.914   6.265   6.032   7.825   7.230   7.643   6.859   6.729   6.282   6.262   6.513   6.071   5.983   6.997   5.397 
+  9.265   8.239   8.692   7.397   8.834   8.976   8.811   7.252   7.799   7.363   7.304   7.683   6.443   6.822   7.218   7.740   6.756   6.664   6.865   6.084   6.853   7.068   6.832   7.781   7.671   7.152   7.937   7.863   6.858   7.005   6.775   6.538   6.558   6.705   7.621   6.114 
+  8.608   8.740   7.746   7.509   8.216   6.832   7.508   8.239   6.892   7.276   7.734   7.612   6.973   7.060   6.141   6.427   6.215   6.285   6.095   6.291   6.718   5.219   6.204   6.553   6.265   7.019   7.427   6.953   7.499   7.230   7.123   7.178   7.391   7.343   6.926   6.185 
+  8.993   8.544   7.197   6.679   7.716   6.835   7.099   8.138   7.457   7.306   7.499   7.771   7.201   7.446   6.260   6.148   5.938   6.270   7.223   6.396   6.353   4.347   5.147   5.358   6.698   7.933   7.541   6.098   6.750   7.383   6.678   6.722   6.998   6.604   6.384   5.191 
+  8.670   8.653   7.965   6.786   7.380   8.414   7.578   7.486   7.843   7.205   7.164   7.402   7.435   7.637   6.751   6.004   6.163   6.666   6.475   6.688   7.022   5.968   5.557   5.861   7.054   7.544   6.977   6.577   6.767   6.555   6.525   6.545   6.794   6.026   5.562   4.311 
+  9.616   8.527   8.117   9.265   8.937   7.743   7.605   7.111   7.807   6.513   7.658   7.179   6.963   7.680   7.003   6.791   5.827   6.866   5.453   5.234   6.914   6.580   5.752   7.300   7.642   7.823   7.241   6.488   6.565   6.515   6.136   7.069   7.079   6.928   6.815   5.163 
+  7.855   8.386   6.809   7.867   7.951   6.612   7.642   8.503   7.830   5.364   5.337   3.811   4.392   6.009   5.719   4.796   5.216   6.141   6.567   6.648   6.513   6.339   5.293   7.086   7.634   6.745   7.252   6.603   6.957   7.121   6.756   6.875   6.272   6.824   6.845   4.660 
+  7.299   6.643   4.635   4.744   5.818   8.627   9.773   9.015   8.137   6.518   5.727   4.998   6.535   6.966   5.552   4.452   6.319   7.362   7.907   7.343   6.681   7.134   6.410   8.474   9.027   8.103   8.645   7.887   7.617   8.787   8.453   9.444   8.635   8.649   8.930   7.877 
+  9.234   9.175   8.196   7.153   6.124   8.940   9.318   7.960   7.986   8.464   6.849   7.287   6.769   6.842   7.033   6.853   6.604   7.487   7.764   5.896   7.498   7.765   7.773   8.020   8.359   8.090   8.193   8.167   9.155   9.879   8.897   9.036   9.354   8.492   8.925   8.125 
+  8.018   9.105   8.175   7.402   9.770  10.092   8.350   8.214   7.651   8.037   6.556   6.708   7.106   6.692   7.038   7.433   5.953   7.245   6.580   7.623   7.678   8.004   7.873   7.939   8.677   8.789   8.122   8.443   8.983   9.099   9.064   8.037   8.849   8.718   8.590   7.873 
+  8.847   7.954   7.213   7.089   9.175   9.221   8.177   8.567   6.758   6.614   6.468   6.081   6.856   8.001   7.077   7.979   7.748   7.273   6.389   7.408   8.237   8.102   8.186   8.491   9.302   9.352   9.402  10.033   9.482   9.030   8.361   8.456   9.149   9.057   9.241   8.255 
+  8.260   8.109   7.236   6.503   5.922   8.811   9.133   8.056   7.682   7.208   5.742   6.928   8.054   6.660   7.481   8.155   6.343   7.629   7.796   7.410   7.587   7.779   8.280   9.141   9.373   9.296   9.464   9.844   9.231   9.401   8.593   8.792   8.404   8.821   9.174   7.431 
+  5.489   6.662   7.200   6.504   6.584   9.192   9.094   7.608   7.843   7.084   7.061   6.792   7.039   7.446   7.025   7.603   6.839   6.590   6.693   6.251   5.831   6.627   9.419   8.573   8.634   8.877   9.356   8.820   8.169   9.242   9.329   8.581   8.113   8.503   8.323   8.337 
+  7.491   6.626   6.926   7.561   8.687   8.470   8.438   7.827   7.538   6.972   6.886   6.904   7.057   7.573   7.087   8.049   7.712   7.239   7.419   7.155   6.924   8.187   8.945   8.421   8.894  10.304  10.536   9.274   8.596   8.639   8.605   9.251   8.638   8.263   8.614   7.819 
+  6.243   6.602   6.277   6.840   8.746  10.098   9.219   7.808   8.230   7.245   7.706   7.487   7.707   6.548   5.978   6.814   7.645   6.591   6.796   7.908   7.831   8.446   9.229   8.523   9.021  10.308  10.573   9.527   9.737   7.931   8.420   8.393   8.874   9.103   8.362   8.605 
+  5.780   4.649   5.548   5.707   7.132   7.940   7.980   8.923   7.473   6.102   6.331   7.215   7.313   6.142   6.318   6.769   7.048   6.268   6.367   6.055   7.756   8.335   9.088   8.191   9.317  10.063  10.331   8.771   9.403   8.001   7.579   7.767   8.274   7.902   8.110   7.706 
+  6.069   6.694   7.342   6.841   6.200   6.166   8.024   7.691   6.354   6.146   5.747   7.083   7.144   6.211   7.099   6.976   7.191   7.011   6.092   4.617   6.513   8.212   8.013   9.167   8.667   8.581   9.430   8.215   8.447   7.950   7.405   6.787   7.876   8.711   8.873   8.459 
+  6.959   5.402   6.067   5.941   6.008   7.675   7.097   6.792   5.970   6.439   6.367   6.398   6.578   6.613   6.299   6.822   6.647   5.940   6.318   7.029   7.253   8.964   8.502   8.918   8.746   8.788   9.305   8.730   8.027   7.268   6.925   7.520   7.715   8.113   8.728   7.919 
+  5.021   4.290   4.981   5.438   6.827   7.597   6.874   6.749   5.062   6.206   6.804   6.280   6.349   6.832   6.768   7.123   5.338   6.869   6.704   7.398   7.263   8.303   9.613   9.920   9.458  10.196   9.914   9.680   8.977   8.095   7.251   7.739   8.129   8.516   8.949   8.644 
+  2.948   3.060   3.337   4.767   5.314   6.192   7.190   6.208   5.223   4.518   3.777   5.291   5.733   6.817   6.847   7.189   7.082   6.704   8.156   7.602   7.625   8.203   8.007   9.546   7.952   8.175   9.598   9.757   8.690   7.360   6.861   8.219   8.819   8.766   8.191   8.466 
+  4.081   4.121   5.334   6.201   5.388   7.044   7.048   6.994   5.989   4.382   4.109   5.398   6.050   6.529   6.856   6.634   7.364   6.247   7.677   7.441   6.831   7.271   8.553   7.873   7.733   8.053   9.150   8.817   8.543   7.160   7.129   7.948   8.250   8.027   7.348   6.740 
+  4.523   4.933   4.984   5.615   6.932   7.302   5.526   4.937   5.243   3.126   2.818   5.617   5.634   6.904   7.459   6.809   7.165   6.445   5.236   6.787   7.010   6.294   7.516   7.175   8.146   8.433   7.987   7.634   7.676   6.662   7.346   7.374   7.529   7.286   6.669   6.240 
+  5.593   5.532   5.498   5.284   6.075   6.191   7.663   7.568   6.549   6.906   6.879   6.586   6.685   5.332   5.331   4.831   6.152   6.094   5.455   5.651   6.212   5.765   6.435   6.240   6.847   7.308   7.315   7.507   6.272   6.608   5.844   6.333   6.767   5.489   5.766   5.827 
+  5.663   5.978   5.181   6.451   5.836   6.698   7.001   6.732   6.450   6.397   6.350   6.168   6.286   4.821   5.321   5.133   4.208   3.592   4.665   3.867   3.607   4.161   5.343   5.256   6.525   5.784   5.497   6.362   6.229   5.864   5.491   5.609   5.971   5.424   5.231   5.028 
+  5.954   6.895   6.178   8.317   8.740   8.554   8.544   6.998   6.280   6.305   6.339   5.192   4.458   6.313   5.665   5.879   5.243   4.577   5.912   5.126   4.707   3.904   4.282   4.462   4.293   4.438   4.210   4.960   4.848   4.752   4.007   4.784   4.460   4.619   3.785   3.006 
+  8.037   7.778   7.275   8.320  10.508   9.835   9.920   9.204   8.513   7.605   7.856   8.056   7.580   7.763   7.482   7.649   8.622   8.369   7.092   6.049   5.903   5.439   5.897   5.965   6.322   7.693   7.118   5.898   7.064   6.481   4.562   4.573   4.559   4.273   4.330   2.538 
+  7.898   8.447   7.556   8.400  11.012  10.734  10.813   9.741   9.240   7.961   8.478   8.533   8.476   8.273   8.063   8.792  10.107   9.807   7.681   6.450   6.269   6.140   6.394   6.985   7.877   8.966   8.069   6.910   7.946   7.619   4.902   4.667   4.541   3.822   3.467   2.250 
+  8.234   8.775   7.678   8.473  11.039  10.673  10.827   9.932   9.551   7.814   8.419   8.746   8.645   8.332   8.102   9.362  10.375   9.866   7.959   6.076   5.886   6.347   6.105   7.259   8.193   9.254   8.237   7.362   8.098   7.605   5.587   6.087   5.825   3.952   4.392   3.732 
+  8.387   8.945   7.729   8.526  11.073  10.582  10.695   9.790   9.376   7.648   8.046   8.639   8.548   8.095   7.846   9.499  10.065   9.199   7.489   6.204   5.977   5.503   5.910   7.206   8.250   9.256   8.009   7.463   7.973   6.602   4.850   5.135   4.772   3.612   3.625   3.228 
+  8.506   9.037   7.627   8.527  11.190  10.862  10.611   9.477   9.023   7.027   7.533   8.464   8.394   7.686   7.265   9.479   9.909   8.599   6.786   5.755   5.797   5.419   5.899   6.947   7.933   8.663   7.367   7.359   7.790   5.095   3.800   4.557   4.653   3.376   3.396   3.049 
+  8.852   8.922   7.896   8.672  11.072  10.540   9.664   8.927   8.335   6.673   6.821   8.344   8.025   7.203   6.700   9.313   9.593   7.796   6.149   5.390   5.788   5.860   5.841   6.775   7.235   7.648   6.829   6.834   7.239   4.805   4.071   4.705   5.066   3.765   4.046   2.929 
+  8.723   8.718   7.741   9.095  10.822   9.825   7.914   8.421   7.481   5.922   6.753   7.860   7.240   7.393   6.893   8.714   9.062   6.896   6.728   6.389   5.363   4.902   5.515   6.708   7.417   7.664   6.622   6.068   6.936   4.696   3.675   4.869   5.166   3.652   3.686   2.776 
+  8.517   8.643   8.069   8.816   9.867   8.376   7.604   5.594   6.488   6.922   7.112   6.851   5.658   6.720   5.549   6.714   7.245   6.588   6.420   5.020   4.149   5.130   5.278   5.983   7.347   6.975   5.125   5.034   5.058   4.307   3.662   3.524   3.482   3.302   3.982   3.026 
+  8.482   7.989   7.592   7.947   7.843   6.286   7.803   6.988   4.974   5.258   5.791   6.346   5.636   5.616   6.045   5.590   6.253   6.512   5.401   5.608   4.742   4.414   4.190   4.852   6.152   6.641   4.731   5.345   4.988   4.253   3.630   3.657   4.198   3.116   3.865   3.218 
+  8.150   7.139   5.979   6.604   8.008   8.707   9.219   7.727   5.104   5.639   6.277   5.567   4.702   5.604   5.527   5.459   6.018   5.711   5.905   4.793   3.335   4.541   4.415   2.786   3.721   4.473   4.472   4.518   4.662   4.024   3.750   4.274   4.442   2.913   4.029   3.984 
+  8.062   7.152   5.779   6.701   7.761   7.730   8.823   6.634   5.242   4.062   4.861   5.054   3.487   3.203   3.831   4.997   5.820   5.469   4.620   4.909   4.141   4.230   3.893   3.214   4.852   4.363   4.173   4.646   4.428   3.605   3.214   3.458   3.977   2.737   3.598   3.447 
+  7.323   6.638   6.360   5.753   6.379   8.417   8.938   6.724   4.635   3.319   3.902   5.165   3.973   3.943   4.251   5.192   5.378   4.235   4.140   4.420   4.433   4.898   4.541   2.862   4.337   3.900   4.239   4.090   3.201   4.010   3.476   3.638   4.297   3.198   3.414   2.904 
+  6.987   6.160   5.821   5.557   6.044   5.589   7.275   6.164   5.021   3.511   4.389   5.229   4.987   4.702   5.468   5.584   5.346   5.542   4.295   4.458   3.954   3.763   3.698   4.227   4.106   3.694   4.364   4.315   4.205   3.964   3.370   3.756   3.832   2.219   2.951   2.585 
+  7.230   6.570   6.042   5.284   6.579   7.373   7.644   6.551   5.717   4.800   4.882   4.106   4.930   5.169   4.822   4.376   5.147   5.108   4.071   4.032   3.512   3.431   3.264   3.121   3.870   4.336   3.979   4.998   4.402   4.497   3.620   3.613   3.536   2.510   2.638   2.740 
+  7.836   7.552   6.377   6.157   6.988   5.754   6.666   6.672   5.268   5.048   5.576   5.392   5.317   5.709   5.733   5.311   5.609   5.724   4.744   3.156   4.132   3.956   3.449   3.399   4.043   4.852   4.082   3.932   4.098   4.000   3.796   3.461   3.076   2.522   3.326   2.985 
+  8.844   8.266   6.130   5.345   6.971   7.162   8.014   7.635   6.819   6.524   6.364   6.860   6.528   7.288   6.141   6.066   6.516   6.129   4.669   3.020   4.586   4.922   5.012   4.020   4.727   3.896   4.206   3.896   4.302   4.290   4.324   4.390   4.607   3.677   3.674   3.809 
+  9.214   9.022   7.508   6.006   6.395   6.702   7.775   8.260   7.805   7.332   7.457   7.658   7.573   7.460   6.657   6.658   7.706   7.691   5.816   4.298   4.901   5.727   5.360   4.101   5.552   4.925   3.916   3.840   3.842   4.173   4.074   4.035   4.232   3.673   4.199   2.886 
+  8.955   8.817   7.732   6.799   5.689   6.460   7.407   8.752   8.384   8.092   7.733   7.651   8.043   8.281   7.675   7.766   8.520   8.060   5.486   3.842   5.278   6.416   6.195   5.089   5.887   5.418   3.838   3.050   3.503   4.439   3.379   3.845   4.242   3.407   3.442   2.239 
+  8.709   8.498   8.084   7.524   5.708   7.331   8.078   8.499   8.169   8.155   7.991   7.981   8.021   8.216   8.182   8.128   9.069   8.541   6.489   5.523   5.515   5.555   5.683   4.911   6.219   6.102   3.126   3.610   4.163   4.534   3.078   4.012   4.008   2.803   2.898   1.818 
+  8.628   8.021   7.816   6.920   6.501   7.546   8.325   8.714   8.443   8.426   7.817   7.663   8.059   8.188   7.701   7.351   8.188   7.937   6.378   4.466   4.143   5.598   6.236   4.851   6.224   6.204   3.187   3.690   4.616   5.052   4.220   3.704   4.260   3.217   3.023   2.126 
+  8.308   7.365   7.103   5.854   6.332   6.612   8.555   8.690   7.513   7.462   6.413   7.395   6.899   6.896   6.755   6.742   7.619   6.931   5.954   5.530   5.310   5.326   5.585   4.482   6.439   5.789   3.254   2.982   4.796   5.108   3.843   4.091   4.721   3.851   3.073   2.527 
+  8.243   7.139   5.983   6.225   6.225   7.184   8.425   7.966   7.219   6.340   5.141   6.627   6.107   6.109   6.509   5.960   6.372   6.580   5.643   6.057   5.564   5.602   5.251   5.240   6.379   5.978   4.681   3.540   5.128   5.365   3.741   3.938   3.343   2.556   3.098   2.794 
+  8.054   8.233   6.981   4.201   5.750   6.697   7.361   7.549   7.184   5.511   3.734   5.416   5.438   6.037   5.838   5.230   5.949   5.198   5.406   3.451   4.720   5.783   5.129   4.896   6.852   6.410   3.681   3.847   5.081   5.290   3.969   3.653   3.072   2.790   2.852   2.611 
+  4.943   6.733   6.298   4.206   5.316   6.014   5.532   6.074   6.267   4.844   4.978   4.887   3.711   4.967   4.771   4.369   5.103   4.039   3.680   3.052   4.289   4.645   4.749   4.119   4.956   4.434   4.179   3.393   3.062   3.435   3.495   3.041   3.140   2.615   1.632   1.747 
+  7.092   7.032   6.053   2.892   5.254   6.087   5.385   6.114   4.277   4.311   5.893   4.574   4.599   5.887   5.550   4.328   4.590   4.423   4.278   4.581   4.008   4.937   4.722   5.165   5.432   4.722   4.124   3.836   3.660   3.276   3.279   3.230   3.321   3.257   2.292   2.229 
+  7.454   7.782   6.591   4.476   3.948   4.772   5.409   5.582   4.260   2.684   4.557   4.282   2.562   3.642   4.069   3.129   2.257   5.412   5.146   3.968   3.184   3.584   3.644   4.180   3.176   3.753   2.858   3.612   3.020   2.769   2.581   2.649   2.639   3.036   3.181   1.452 
+  6.037   6.232   5.465   3.801   3.962   4.044   4.527   4.175   4.165   2.879   3.743   3.941   2.986   4.556   4.707   4.777   4.166   5.474   5.021   4.492   4.286   2.379   3.189   3.981   3.239   2.884   3.616   4.212   2.992   3.331   2.483   2.924   2.806   2.604   2.025   1.201 
+  2.001   4.344   5.473   4.530   4.396   4.937   4.203   5.436   4.447   2.586   4.311   4.337   3.177   4.918   5.045   3.502   3.931   4.462   4.268   4.103   3.756   3.367   3.608   3.898   3.180   3.224   3.211   3.564   4.107   3.702   2.463   2.640   2.587   2.419   1.973   2.010 
+  4.398   4.535   4.856   4.598   4.900   4.619   4.481   5.300   3.139   2.775   3.714   1.763   2.486   3.379   3.327   2.909   3.532   3.597   3.840   3.993   4.087   3.592   3.196   3.510   3.907   3.402   3.606   3.883   3.437   3.648   2.821   2.947   1.563   2.116   2.272   1.997 
+  5.797   6.748   6.682   4.823   4.525   6.039   5.778   4.038   3.190   2.243   2.886   2.847   3.430   3.830   3.530   3.833   3.880   4.095   1.813   2.613   3.916   4.087   4.131   4.224   3.316   3.039   2.813   3.417   3.258   2.869   2.825   2.299   2.448   3.122   2.658   1.727 
+  5.226   5.756   5.858   2.992   3.585   6.135   5.955   4.271   3.641   3.985   4.080   3.226   3.337   3.238   4.812   4.555   4.887   4.796   3.756   3.842   3.463   4.135   2.789   3.832   3.888   2.919   2.156   2.455   2.439   3.071   2.482   2.526   2.367   2.512   2.157   1.821 
+  8.581   8.247   7.839   7.473   7.547   7.119   5.610   4.396   5.340   5.392   3.870   4.217   4.348   4.960   5.452   5.662   4.854   4.602   5.031   5.094   3.518   4.538   4.777   5.889   6.252   5.925   5.708   5.788   6.124   5.608   6.203   5.204   3.600   4.591   5.464   5.801 
+  9.025   9.453   8.407   8.021   8.605   8.067   6.943   6.627   6.371   7.145   5.572   6.345   6.159   6.159   8.601   9.492   8.570   8.625   8.350   6.756   5.577   6.645   8.139   7.895   7.892   8.000   7.815   8.074   8.938   8.919   8.340   7.673   6.329   6.210   7.738   7.804 
+  8.220   5.999   5.724   4.800   4.135   4.553   5.615   6.548   5.863   5.420   4.087   4.468   4.515   4.572   7.286   8.057   7.581   6.936   6.136   4.064   4.144   5.792   6.614   5.451   6.377   5.510   6.450   6.591   7.013   7.134   5.682   4.716   4.559   5.038   5.178   5.201 
+  6.181   5.424   4.856   2.985   3.035   3.871   4.575   3.940   3.570   3.495   2.341   3.874   3.727   4.088   3.961   3.909   4.093   4.465   3.407   3.440   4.156   3.442   4.020   4.181   4.010   3.926   3.684   3.855   4.317   4.510   4.369   3.409   3.488   3.034   3.515   2.840 
+  4.878   5.128   5.029   5.607   5.360   4.366   4.655   5.727   3.796   2.560   3.341   4.936   5.311   5.172   5.269   4.606   4.581   4.377   4.289   3.635   3.792   4.241   4.454   4.783   5.217   4.319   4.224   4.098   5.107   4.834   4.866   4.997   5.356   5.026   5.252   4.808 
+  5.238   5.036   4.404   5.295   5.214   4.993   4.454   4.164   3.251   2.855   4.931   4.971   3.940   4.872   5.140   4.918   4.716   5.261   5.663   4.860   5.483   5.338   4.928   4.885   5.307   5.307   4.796   4.560   5.184   4.767   4.680   4.661   5.307   4.890   5.161   4.627 
+  6.242   5.633   2.899   4.376   4.925   5.295   5.371   4.758   5.043   4.679   5.578   4.370   4.117   5.235   6.019   6.359   6.302   5.282   5.072   5.337   5.309   5.996   6.827   7.144   7.766   7.846   7.770   7.549   6.954   6.485   5.996   6.125   6.720   7.094   7.246   6.737 
+  6.167   5.383   5.535   6.143   5.539   5.714   6.628   6.494   5.387   5.831   6.293   5.485   5.106   5.982   7.219   6.735   5.607   5.410   4.807   4.231   5.368   6.298   7.771   7.310   8.451   8.543   8.346   8.052   7.603   6.915   6.902   6.576   6.941   6.889   6.730   5.738 
+  5.337   5.481   5.044   2.974   4.567   4.457   5.169   5.489   5.696   4.819   3.861   4.420   5.680   6.440   6.554   5.799   7.269   6.308   5.051   5.654   7.133   6.460   7.475   7.370   8.655   9.013   8.685   8.853   8.521   7.944   8.591   7.585   7.900   7.166   7.698   5.860 
+  6.736   7.076   6.412   5.289   5.934   5.448   5.511   5.892   5.151   4.253   4.746   5.209   5.620   5.341   5.356   6.539   6.748   5.381   4.753   4.966   5.637   6.515   7.156   7.403   6.783   6.575   6.306   6.527   6.759   6.546   6.927   6.396   6.212   5.818   6.142   5.563 
+  7.148   6.694   7.025   6.651   7.669   7.350   7.848   6.509   5.494   5.229   5.166   3.772   5.585   6.420   6.046   7.351   7.924   6.498   5.794   4.796   5.406   5.946   7.050   7.055   6.835   6.287   6.116   5.975   5.684   4.835   6.451   6.717   6.882   5.550   6.487   6.108 
+  8.421   7.759   6.223   5.244   6.492   7.533   8.068   6.390   5.120   6.393   5.969   4.412   5.141   4.412   4.903   5.006   5.546   5.748   4.089   4.883   5.149   5.753   5.699   5.050   5.743   6.523   6.555   6.832   6.918   5.369   5.680   6.664   6.364   5.486   6.274   6.555 
+  8.721   6.818   6.382   7.375   7.742   7.497   6.837   6.768   4.953   4.914   5.479   5.623   4.572   4.148   4.834   5.389   5.611   5.841   4.202   4.731   5.521   5.548   5.166   5.636   4.845   5.509   5.853   5.501   5.241   5.405   5.257   5.459   4.847   5.423   5.274   5.505 
+  4.588   6.066   5.989   5.835   6.129   5.954   5.229   4.989   5.066   4.519   4.556   4.703   6.405   5.256   4.857   4.991   6.142   5.765   6.148   4.804   4.987   5.508   4.877   5.388   4.904   6.361   5.642   5.745   5.556   5.074   4.736   5.051   4.660   3.808   4.458   5.189 
+  4.961   5.731   6.531   6.539   6.060   5.548   5.232   5.274   5.738   5.557   4.975   4.391   5.412   5.436   5.877   4.543   4.693   5.871   5.659   4.440   4.099   5.615   5.947   5.904   5.100   6.537   5.336   5.312   5.184   5.742   5.344   6.003   4.824   4.558   5.269   5.018 
+  5.599   5.229   6.609   7.117   6.260   5.141   4.946   5.455   5.976   6.337   5.432   3.757   5.278   5.784   5.186   4.755   5.052   4.875   4.201   4.094   4.938   4.966   4.926   5.266   5.045   5.615   4.621   5.427   5.029   4.421   4.311   4.221   4.656   4.837   5.231   4.614 
+  5.979   4.092   5.406   6.652   6.030   5.345   5.964   5.653   5.099   5.197   4.602   5.635   5.174   5.504   5.135   4.586   3.136   4.959   5.091   3.479   4.385   5.240   5.291   5.502   5.075   5.592   5.633   5.532   4.383   4.816   5.120   4.525   5.198   5.583   5.156   4.366 
+  7.132   5.920   5.122   5.108   5.814   5.330   5.023   5.700   4.763   4.378   3.695   4.788   4.477   5.247   5.097   4.453   4.942   4.746   4.901   4.299   3.727   4.232   4.644   4.629   3.887   4.827   3.995   3.477   4.291   4.568   4.110   3.864   3.652   3.664   3.881   3.473 
+  4.237   3.973   5.643   6.498   5.266   5.278   5.305   5.622   5.539   4.889   4.533   3.953   4.641   5.645   5.533   3.520   3.268   2.466   4.585   3.841   3.587   4.045   3.255   2.800   4.122   4.259   3.412   3.885   4.217   3.107   3.905   4.049   3.167   3.512   2.998   2.773 
+  4.810   2.923   3.053   4.593   5.792   6.109   4.968   3.811   4.713   5.128   4.456   4.368   4.629   5.064   5.111   3.380   4.997   4.842   4.690   4.697   5.060   4.224   3.803   4.218   5.657   5.839   5.314   5.806   5.748   5.362   4.893   4.459   4.718   4.042   3.960   3.348 
+  5.867   5.111   4.019   4.560   4.517   5.064   5.034   5.311   4.886   5.582   4.510   5.255   4.837   6.301   5.669   5.164   5.122   5.060   5.097   4.371   4.521   5.171   5.408   5.739   6.183   5.793   6.049   6.378   5.327   5.727   5.141   4.675   5.422   4.992   5.559   4.872 
+  6.152   6.283   5.807   4.517   5.244   5.772   5.364   5.703   5.813   4.135   5.309   6.587   5.977   6.065   5.352   4.436   4.902   5.756   5.077   3.993   2.904   4.122   5.643   5.338   4.579   5.926   5.991   5.519   5.721   5.320   4.908   5.027   5.805   5.433   5.286   4.566 
+  4.173   5.974   5.899   4.869   4.907   4.687   6.089   5.369   3.963   3.139   3.699   4.573   4.245   5.626   5.844   6.487   5.841   5.874   5.692   5.263   6.121   5.844   5.339   7.193   6.497   6.482   6.610   7.365   6.979   7.757   6.959   7.572   7.393   6.663   7.181   6.728 
+  5.749   4.904   4.550   4.875   4.492   5.362   6.527   5.943   5.062   4.159   4.985   4.666   4.069   4.637   5.148   5.632   5.614   5.043   4.715   4.329   5.652   5.029   5.223   5.792   5.758   6.222   6.385   6.088   5.902   6.377   5.912   6.138   6.566   5.667   6.085   5.520 
+  5.292   6.676   7.288   7.964   8.393   8.768   8.591   7.896   6.945   5.551   6.298   6.487   5.715   5.243   4.848   4.194   4.556   4.995   4.552   5.320   4.630   4.277   5.964   5.295   5.077   5.362   4.487   5.354   6.422   6.316   5.646   5.465   6.174   6.148   5.277   4.089 
+  6.187   5.527   5.682   6.731   6.433   7.764   7.216   5.812   5.028   4.984   4.670   3.051   4.804   5.983   5.035   4.498   5.505   5.465   4.860   5.265   4.635   6.117   6.185   6.257   6.355   5.627   5.937   6.159   4.650   4.852   5.180   6.299   6.204   5.806   5.549   4.482 
+  6.247   6.938   5.584   6.251   8.710   8.824   7.995   8.884   7.296   6.087   6.968   6.389   6.032   6.368   5.639   6.429   5.871   6.226   6.715   5.903   6.337   7.517   9.006   8.745   8.650   7.057   7.343   7.459   6.862   7.812   7.982   7.678   7.130   6.966   6.835   6.839 
+  6.631   6.170   5.946   6.847   9.264   8.360   7.126   9.382   8.999   5.845   6.860   6.499   5.661   5.224   6.128   6.150   6.091   5.928   6.198   5.404   5.606   6.237   8.808   8.969   8.910   8.199   8.581   8.464   7.604   8.129   7.819   6.740   7.440   7.513   6.510   6.741 
+  5.662   5.942   4.482   7.280   9.407   8.437   6.652   9.393   8.845   5.088   4.270   4.493   5.235   5.718   4.782   4.759   5.095   3.934   5.380   5.348   5.630   7.038   9.167   8.574   8.028   8.471   8.890   9.280   8.115   7.233   5.732   7.404   6.978   5.462   5.053   4.187 
+  5.777   5.176   4.605   6.542   8.566   7.716   7.075   9.233   8.214   5.581   6.569   5.629   5.452   4.535   4.414   4.127   4.197   3.802   5.562   5.488   6.236   7.407   9.051   8.032   7.798   7.626   8.239   8.528   7.783   7.147   6.448   8.038   7.063   5.140   4.520   3.607 
+  5.107   4.771   4.224   6.759   7.203   4.918   4.884   6.482   6.575   4.339   4.681   3.941   4.177   5.217   4.861   4.217   5.005   4.972   4.817   4.910   5.653   6.734   6.600   5.847   5.971   6.532   6.596   5.996   5.615   5.415   6.076   6.520   6.517   4.448   4.027   3.231 
+  4.421   4.681   3.644   6.116   6.638   7.043   6.115   5.199   5.551   5.581   4.778   3.706   3.668   3.564   3.601   3.405   4.078   4.238   4.091   4.142   4.107   5.241   6.132   5.816   5.683   5.498   5.347   5.523   5.222   4.130   5.506   5.832   6.255   4.559   4.350   3.538 
+  6.711   6.029   3.443   6.484   8.495   7.553   5.836   5.573   5.661   4.431   4.075   3.661   4.243   4.328   4.068   3.508   2.986   4.007   3.984   3.713   3.955   5.159   6.008   5.520   4.995   5.159   5.514   5.405   5.608   5.020   5.087   5.382   5.202   5.207   5.159   4.787 
+  6.471   6.850   5.595   6.503   8.153   7.267   4.842   5.281   5.058   4.683   5.751   5.115   4.289   4.891   4.392   3.290   3.417   3.610   3.947   4.341   3.972   5.128   5.197   4.985   4.833   4.593   4.873   5.200   5.962   4.894   4.690   4.409   4.667   3.751   3.035   3.042 
+  4.436   5.783   5.029   6.605   6.499   5.967   4.141   4.522   4.068   3.973   6.026   5.067   3.404   3.142   3.571   3.313   4.187   4.259   4.748   4.322   3.595   3.716   5.159   5.445   4.852   4.378   4.920   4.890   4.486   3.258   4.161   4.891   4.575   4.690   4.220   3.265 
+  5.507   4.385   4.922   6.490   7.721   6.677   6.002   6.663   5.495   4.587   6.001   5.880   5.439   4.666   4.806   3.352   4.538   5.790   4.314   3.427   5.127   5.043   4.507   5.587   6.158   5.456   5.707   5.719   4.802   4.257   4.908   5.488   5.288   4.716   5.346   4.467 
+  5.024   4.562   3.596   4.326   6.749   7.367   6.387   5.327   4.697   3.957   3.851   4.305   4.964   5.127   5.059   3.184   3.543   4.403   3.719   4.731   5.837   4.851   5.216   4.904   5.006   5.062   7.681   7.376   5.331   5.029   6.017   5.242   5.192   5.158   5.645   5.863 
+  4.797   4.706   4.168   4.934   8.253  10.081   9.139   6.112   5.637   4.264   4.481   4.903   4.338   5.278   4.974   4.611   4.443   5.744   7.149   8.243   7.369   6.131   5.859   6.405   7.040   7.455   7.934   7.312   6.085   5.516   5.531   4.849   5.177   4.726   5.483   5.345 
+  3.090   2.734   3.226   4.576  10.213  11.424   9.580   6.834   6.932   5.931   5.538   6.175   4.785   6.919   5.873   5.901   5.514   7.949   8.383  10.081   7.996   7.761   5.761   7.653   7.939   8.662   9.543   9.439   6.899   6.908   6.478   5.752   6.751   6.143   5.460   5.035 
+  4.329   5.224   5.384   5.398  10.392  11.458   9.089   7.271   8.592   7.593   6.291   6.629   4.987   7.551   6.509   6.428   5.991   8.740   9.321  10.809   7.976   7.459   5.449   7.478   8.302   9.183  10.097  10.566   7.553   7.013   7.178   7.930   8.559   7.095   5.126   5.216 
+  4.317   4.342   5.566   4.764  10.105  11.007   8.542   8.629  10.592   9.010   5.618   7.083   5.009   7.297   6.347   7.093   6.471   9.258   9.270  10.722   8.017   7.774   4.767   7.546   8.228   9.268  10.286  10.786   7.825   7.153   7.610   8.582   9.173   6.985   5.084   4.762 
+  5.100   5.400   4.946   4.612   9.596   9.981   5.996   9.059  11.327   9.703   6.487   7.313   5.098   6.918   5.952   7.192   6.697   9.959   9.141   9.688   7.676   7.504   4.613   7.844   8.155   9.257  10.414  10.975   7.344   6.850   7.544   9.258   9.776   6.755   4.495   5.541 
+  6.525   6.150   5.364   5.954   9.971  10.308   7.315  10.111  11.886   9.962   6.906   7.336   4.906   6.727   5.566   6.887   7.196  10.497   9.349   9.050   7.076   6.673   5.459   7.620   8.563   8.973   9.848  10.353   7.449   6.903   6.397   9.614   9.836   5.662   4.871   5.332 
+  4.746   4.012   5.622   6.209  10.004   9.808   7.210  11.012  12.154   9.774   7.551   7.710   6.697   7.369   5.729   6.973   7.330   9.788   9.227   9.188   6.152   5.425   5.833   6.672   7.665   8.654   9.907   9.373   7.213   6.013   6.673   8.434   8.712   5.992   4.926   5.040 
+  6.887   7.245   5.946   7.291  10.165   9.808   7.796  11.483  11.653   8.869   6.639   6.189   6.584   8.036   6.302   5.889   5.946   7.328   8.177   7.454   7.036   5.368   5.541   5.461   5.470   7.481   9.066   8.596   7.641   7.553   7.264   8.283   8.671   7.048   6.939   6.062 
+  5.656   6.346   6.183   7.579   8.625   9.276   8.859  10.975   9.706   6.971   6.343   5.835   6.859   7.641   5.749   5.545   7.962   8.595   8.523   7.276   6.914   6.552   4.737   5.603   5.888   6.712   8.723   8.413   6.248   5.802   6.149   8.127   8.368   5.933   4.829   4.384 
+  7.166   6.174   5.793   6.396   8.670   8.576   8.229   9.318   8.776   7.516   6.788   6.845   5.836   6.403   6.604   6.923   7.440   7.390   7.013   6.542   5.539   5.602   5.275   6.136   5.254   5.848   7.553   7.836   5.497   5.656   5.600   6.163   6.342   5.104   4.875   4.459 
+  6.350   6.719   5.131   6.324   7.115   6.423   6.784   8.557   7.828   6.766   7.970   7.035   4.994   5.074   5.018   6.270   6.756   7.639   6.253   7.002   5.217   5.261   4.746   4.994   4.828   5.548   6.862   6.640   4.423   4.333   5.369   6.115   5.665   3.803   4.492   3.723 
+  6.862   7.242   5.693   7.020   8.451   7.927   7.865   8.654   8.970   7.331   6.297   5.594   5.324   5.866   5.232   5.767   5.725   6.196   5.218   5.519   4.876   4.692   5.292   5.788   5.746   6.117   6.362   5.619   4.397   3.528   5.155   6.143   6.005   3.804   3.581   3.798 
+  5.221   6.062   5.903   7.874   8.938   7.144   6.523   6.532   7.903   6.143   5.437   5.909   6.598   6.310   5.503   6.374   6.649   4.121   5.350   5.967   5.121   5.177   5.461   5.900   4.867   5.311   4.887   5.716   4.483   3.827   4.263   5.472   5.207   3.798   3.467   3.905 
+  2.856   3.963   5.165   6.977   8.508   7.051   6.185   8.274   8.346   5.618   5.566   5.373   6.756   5.452   5.323   6.838   6.955   5.620   5.755   5.544   5.114   4.686   6.192   5.666   4.954   4.980   4.479   4.617   3.744   4.040   3.714   4.542   4.342   4.395   3.854   3.555 
+  5.055   3.729   5.029   6.142   7.269   6.404   7.549   8.446   6.902   5.770   6.527   5.912   6.150   5.195   5.656   6.167   6.162   5.441   5.333   4.685   4.674   4.127   5.253   6.311   5.204   4.918   5.789   5.331   4.772   4.267   4.839   5.366   4.492   3.863   3.921   4.206 
+  3.630   4.024   4.464   7.121   8.000   6.468   7.732   8.874   6.687   5.689   6.028   5.747   6.733   6.126   7.221   6.228   5.265   7.051   5.957   5.056   4.136   4.689   6.221   6.177   5.845   5.500   5.579   5.450   4.600   4.607   4.645   5.022   4.814   4.182   4.015   3.308 
+  5.370   4.929   5.180   7.317   8.468   6.294   7.476   8.886   6.857   5.910   5.881   5.640   6.155   5.511   5.801   5.772   6.027   6.768   5.753   5.899   5.341   4.663   5.089   6.379   5.346   5.305   5.760   5.748   4.953   4.050   4.271   5.384   5.776   5.182   4.961   4.566 
+  7.201   6.278   6.053   7.863   8.378   6.116   7.055   7.827   5.840   6.087   6.093   6.807   7.239   4.121   4.610   6.854   6.284   5.993   5.706   5.668   5.675   5.175   5.823   6.090   4.988   5.164   6.154   6.049   4.442   4.806   5.428   6.095   6.114   5.641   5.094   4.119 
+  6.842   5.814   5.734   7.648   8.888   7.274   6.428   6.901   5.318   6.123   4.312   7.660   7.992   5.699   4.701   7.175   6.759   6.213   6.283   5.291   5.709   5.086   6.226   6.312   5.133   5.554   7.014   6.360   5.094   5.105   4.058   6.280   6.028   5.201   4.698   4.742 
+  6.859   5.544   6.152   8.237   9.084   6.978   7.899   8.956   6.972   6.549   5.584   8.229   8.116   5.474   5.510   7.242   6.266   6.469   5.488   5.066   4.486   4.693   5.831   5.233   5.106   4.935   5.290   5.272   5.325   4.933   5.188   5.271   5.973   5.991   6.253   4.660 
+  5.963   6.391   5.885   8.619   9.244   7.076   9.052   9.199   6.766   7.052   5.660   8.301   7.598   4.315   5.437   6.837   5.204   5.759   5.434   4.602   3.325   4.393   4.607   5.169   5.325   4.499   5.008   5.613   5.320   4.275   5.210   5.264   5.091   4.650   4.935   3.942 
+  7.746   6.152   4.489   8.540   9.234   7.385   9.324   9.450   6.698   7.311   7.151   7.678   8.016   6.519   6.861   7.246   6.936   7.456   7.120   7.264   7.457   7.401   7.662   7.988   7.798   7.995   7.885   7.700   7.549   7.331   7.876   8.211   8.424   8.433   8.140   7.446 
+  4.877   3.257   3.789   7.466   8.465   7.454   9.252   8.398   7.297   7.783   7.917   8.543   7.024   5.969   6.161   6.381   5.445   6.182   5.983   5.684   6.236   6.008   6.567   6.511   6.646   6.821   6.490   6.444   6.610   6.071   6.620   7.039   7.126   6.990   6.640   6.087 
+  6.165   5.932   5.951   8.384   8.687   7.373   7.501   5.951   7.713   8.382   7.796   8.464   7.568   6.704   6.711   6.517   5.507   6.212   5.634   4.250   4.755   5.348   4.430   3.515   3.960   4.239   5.058   6.423   6.814   5.765   5.987   5.279   5.181   4.215   4.392   3.653 
+  6.268   6.234   5.795   7.702   8.575   7.695   7.057   8.483   8.167   8.342   8.073   7.512   7.295   5.847   6.470   7.455   5.562   5.206   5.282   6.044   4.280   4.458   5.090   4.529   4.224   4.280   4.826   5.793   6.108   5.120   5.126   4.988   5.114   5.100   4.449   2.979 
+  6.322   5.453   4.938   7.284   7.832   7.551   8.458   8.905   8.367   8.275   7.777   8.102   7.528   7.251   7.733   9.150   6.979   6.088   5.750   5.282   5.299   4.802   5.019   4.265   4.309   4.248   4.965   5.243   5.224   4.765   5.958   5.606   5.187   4.608   3.784   2.987 
+  6.013   6.777   5.822   7.481   7.406   7.762   8.891   8.840   8.310   8.436   8.750   8.391   8.634   7.303   7.545  10.688  10.050   7.727   6.378   5.991   5.838   5.502   4.923   4.981   4.122   4.527   6.206   6.405   6.110   4.376   6.650   5.894   5.586   4.013   3.835   2.540 
+  4.327   6.084   6.152   7.026   7.117   6.207   7.359   6.438   8.866   9.055   7.977   8.749   6.407   8.021   7.953   9.216   9.253   8.247   7.556   6.760   6.467   6.137   5.629   5.549   5.650   5.858   7.278   7.530   6.713   6.655   6.289   6.051   6.130   4.980   3.934   2.807 
+  5.893   5.157   3.588   6.471   5.767   6.906   8.816   7.484   9.318   9.952   9.116  10.174   8.275   6.786   7.615   7.472   7.826   9.062   9.518   8.004   7.177   6.724   6.676   6.797   6.676   7.207   8.759   8.883   7.350   7.536   7.261   7.042   6.386   5.982   4.569   3.269 
+  5.884   5.186   5.349   6.867   6.325   7.562   9.592   8.364   9.731  10.145   8.927   9.778   6.941   7.752   7.031   7.509   8.214   8.782   9.877  10.282   9.198   7.013   6.957   7.180   7.331   7.948   9.207   9.291   7.953   7.686   7.003   7.504   6.946   6.307   4.243   3.415 
+  5.910   6.195   4.840   5.366   6.044   7.458   9.416   8.236  10.066  10.667   8.597   9.633   7.726   7.927   6.587   7.184   7.925   8.233   9.179  10.806  10.364   7.570   8.273   7.881   8.076   9.122   8.771   9.207   8.170   7.810   8.282   8.357   7.870   7.340   4.254   3.812 
+  4.368   4.383   4.350   6.378   6.541   6.415   8.727   7.475  10.335  10.682   7.549   8.197   6.181   7.010   6.730   7.558   6.441   6.980   7.725   9.142   9.019   9.093   9.363   8.172   8.906   9.902   8.841   8.706   6.646   8.008   8.602   7.276   7.642   6.985   5.061   4.519 
+  5.612   5.941   5.457   6.974   6.409   6.833   8.949   7.689   9.746  10.041   6.883   7.949   6.131   6.928   5.917   6.898   7.316   6.408   6.854   8.637   8.409   8.423   9.894   8.871   9.602  10.020   8.994   7.645   6.127   7.367   9.005   7.335   7.752   7.304   5.112   4.296 
+  5.970   3.646   3.700   7.139   7.359   7.436   9.024   7.515   8.436   8.788   6.043   7.372   6.392   6.600   5.928   6.130   4.861   5.047   6.404   8.803   8.510   7.783   8.566  10.019   9.675   9.216   9.043   7.925   7.092   6.848   9.072   7.410   7.237   6.576   4.913   5.218 
+  5.290   5.089   4.681   6.539   5.820   5.927   7.633   7.119   7.195   6.912   5.780   6.148   5.626   6.730   4.863   4.750   4.323   5.064   5.617   7.934   7.690   7.818   8.071   9.709   9.026   9.546   8.608   7.063   6.857   6.625   7.545   6.334   6.691   6.741   5.837   5.278 
+  5.802   4.680   3.826   6.267   5.640   6.591   6.269   4.547   5.385   5.948   5.471   6.239   5.241   6.518   5.811   5.563   6.180   5.668   4.127   6.336   6.955   6.752   6.655   8.217   8.492   7.916   6.931   7.226   5.678   5.513   5.721   6.272   5.403   5.344   5.458   4.098 
+  4.869   6.142   6.667   6.267   6.959   6.915   6.908   5.749   6.151   5.753   6.168   6.436   3.995   5.416   4.937   5.245   6.669   6.216   5.987   6.996   6.437   6.154   6.020   7.063   7.472   7.411   7.084   6.437   7.169   6.902   7.211   7.115   5.920   5.750   6.440   6.453 
+  6.102   6.335   6.130   7.713   6.889   6.636   6.973   6.520   5.883   5.343   6.080   6.297   5.349   5.308   5.603   5.794   6.761   6.847   6.148   6.802   6.413   5.825   4.937   6.071   6.616   7.006   6.803   5.970   6.841   7.380   6.606   7.325   6.741   7.111   7.247   6.537 
+  5.663   6.861   7.585   8.723   8.687   8.818   8.716   6.792   6.861   6.037   6.614   6.966   5.873   5.564   6.477   8.320   8.713   7.218   7.453   8.279   7.661   7.774   7.963   8.572   7.394   8.444   8.673   9.509   8.915   8.970   8.713   8.338   8.517   8.335   7.894   7.770 
+  7.342   7.574   7.532   8.277   8.175   7.436   8.552   7.036   5.373   6.341   6.511   5.270   7.502   7.180   7.337   8.392   8.577   7.772   7.943   8.839   8.884   8.898   8.191   9.177   8.413   9.520   9.789   9.969  10.175   9.783   9.347   8.695   9.650   9.708   8.819   8.279 
+  7.813   7.165   6.854   7.458   7.220   7.443   8.369   7.403   7.813   6.823   7.187   6.268   5.725   8.103   7.724   8.416   8.393   8.102   7.867   8.198   8.250   8.392   7.396   8.456   7.885   7.786   8.078   7.910   9.120   9.097   8.450   7.530   8.024   8.335   8.702   7.786 
+  6.254   7.118   7.123   7.969   7.269   8.388   8.530   7.289   7.303   8.794   8.898   6.553   6.803   8.874   8.177   8.344   9.033   7.912   7.694   7.234   6.063   7.949   7.949   8.510   8.905   8.023   6.961   8.445   8.310   8.362   7.596   7.321   7.491   8.246   8.074   7.794 
+  5.994   5.782   6.799   6.443   6.266   7.165   7.630   7.211   7.305   8.241   7.885   7.559   7.368   7.191   6.479   7.209   7.979   5.929   6.269   6.454   6.316   6.626   7.976   8.489   8.497   7.516   6.858   8.185   8.434   7.653   6.740   6.553   6.397   6.614   5.487   4.802 
+  4.087   4.999   5.496   7.118   7.796   8.091   8.976   8.576   6.535   6.315   5.898   6.050   7.517   7.386   7.446   6.914   6.282   7.223   6.548   7.429   7.642   7.753   8.536   7.362   7.898   8.623   8.718   8.310   7.688   6.613   6.470   7.854   7.313   5.546   6.167   6.053 
+  7.378   8.055   7.765   6.688   7.012   9.561  10.062   9.092   8.038   8.403   7.663   6.820   7.175   7.836   8.067   8.754   8.845   8.628   7.477   9.633   9.246   8.813   8.991   8.510   9.863  10.179   9.862   9.552   8.905   8.991   8.580   8.622   8.497   8.144   7.216   7.138 
+  7.083   7.121   4.751   5.345   7.494   7.173   6.811   7.767   6.786   5.241   6.399   6.492   6.540   6.399   6.595   7.522   6.922   5.703   5.061   8.203   7.751   7.499   8.133   7.549   7.644   8.050   7.541   7.355   8.022   7.765   8.137   7.974   7.929   7.073   6.177   5.526 
+  6.101   6.527   4.988   6.652   7.054   6.073   7.213   7.936   5.477   4.125   5.566   5.871   5.764   5.763   6.015   7.144   6.352   4.066   5.078   5.483   6.399   6.726   7.034   7.263   7.221   6.508   6.896   6.540   6.298   6.300   6.392   6.385   6.147   5.475   5.477   4.775 
+  5.864   6.216   4.910   6.861   5.646   5.665   8.433   8.626   6.806   5.854   5.406   6.416   5.185   6.577   5.965   5.918   5.102   5.371   5.996   6.290   6.812   7.587   8.589   9.430   8.304   8.274   8.668   8.503   8.330   8.614   7.161   7.605   6.844   5.640   5.733   5.048 
+  6.187   6.318   5.572   6.693   6.619   7.507   9.126   7.798   5.183   5.505   5.986   5.913   6.214   5.485   7.109   6.652   6.031   4.714   6.729   7.419   6.834   7.533   8.099   7.842   7.603   8.532   8.081   7.987   8.536   7.937   7.435   7.466   7.221   6.076   5.224   4.771 
+  4.000   5.050   6.847   6.624   6.130   6.805   8.415   8.356   7.137   6.462   6.280   5.802   6.117   6.513   7.190   8.022   7.385   6.891   5.941   7.021   6.967   7.721   8.255   8.598   8.783   8.900   8.404   7.228   7.315   7.790   7.450   7.273   7.140   7.244   6.453   4.605 
+  4.449   4.978   7.167   9.258   8.649   6.638   7.629   6.251   5.107   5.805   6.389   5.888   5.982   6.187   7.167   7.296   6.972   5.729   6.194   6.873   6.039   6.713   7.515   9.597   9.934   8.107   8.232   7.745   6.905   7.356   7.130   7.496   6.897   7.474   6.946   4.394 
+  5.838   5.719   7.543   9.591   8.499   7.486   7.474   5.505   6.273   6.680   5.075   6.323   6.673   7.169   8.515   6.563   7.840   7.122   7.208   7.934   8.067   7.902   7.399   8.752   9.439   8.279   9.115   8.429   7.271   7.762   8.800   8.682   7.218   7.707   7.342   6.244 
+  6.165   5.667   8.339   9.362   7.529   7.383   5.615   5.234   6.852   6.825   5.885   5.214   5.890   5.611   7.640   7.370   5.872   5.565   7.069   8.005   8.044   8.304   7.896   8.023   8.474   8.365   8.652   8.126   7.966   7.467   8.075   7.931   7.423   7.606   7.402   6.967 
+  6.151   5.584   8.297   9.423   7.666   6.809   7.964   6.286   6.106   5.887   5.885   5.501   5.853   5.785   6.948   6.579   5.070   5.824   6.151   5.378   6.049   6.129   6.245   8.230   8.486   8.006   8.561   7.162   6.706   7.724   7.759   8.075   7.147   7.572   7.356   5.865 
+  7.059   6.236   7.981   8.646   6.586   7.659   7.852   6.059   5.718   5.715   6.246   3.937   4.161   4.773   6.000   6.059   4.292   4.963   5.287   3.820   5.068   5.897   5.628   8.043   9.500   8.437   8.065   7.131   6.485   7.174   7.810   7.391   6.870   7.892   6.849   4.849 
+  5.683   4.347   8.019   8.885   7.142   6.268   4.877   5.043   5.390   5.222   6.858   4.977   4.569   6.000   5.759   4.858   4.494   4.965   4.574   4.754   4.491   4.934   5.508   8.052   9.782   8.767   7.557   5.507   5.975   6.183   7.854   7.826   6.136   7.874   7.551   5.067 
+  7.032   6.473   8.417   9.474   7.729   6.435   5.500   4.817   6.306   6.464   6.910   4.814   4.938   4.599   4.851   4.434   3.570   4.068   4.831   4.687   3.781   5.747   6.475   7.699   9.985   8.457   7.405   6.429   5.356   6.539   7.477   7.276   6.672   7.651   6.940   4.969 
+  7.205   7.870   8.697   8.342   8.926   8.997   8.688   7.512   8.318   8.447   6.624   6.453   7.169   8.136   6.902   5.942   5.912   6.712   6.559   7.223   5.739   6.017   7.779   8.287  10.137   9.673   8.523   7.014   7.138   7.802   8.383   7.693   7.309   7.481   7.052   5.256 
+  6.400   6.890   7.953   9.055   9.696  10.687   9.336   8.523   7.447   8.611   8.091   7.978   8.423   8.320   8.057   6.385   7.234   6.630   6.042   6.034   6.772   6.166   6.902   6.847   8.606   8.530   8.072   7.546   8.345   7.833   8.399   7.705   7.278   8.199   7.521   6.685 
+  6.683   6.496   8.058   7.958   8.852  10.082   9.646   7.724   7.457   7.737   7.512   8.291   7.819   7.275   7.134   7.519   7.310   6.414   5.579   5.744   6.581   6.161   5.861   8.021   7.897   8.234   8.587   7.816   7.876   7.005   7.475   7.292   7.329   7.704   5.997   5.235 
+  5.143   4.998   7.393   7.720   6.450   7.484   7.989   7.129   6.485   6.004   4.935   6.081   6.565   6.110   5.699   6.003   5.904   4.356   4.549   5.241   4.812   4.989   6.138   6.249   6.603   6.635   6.756   7.474   7.025   6.970   6.359   6.257   6.000   5.531   5.558   5.314 
+  5.598   5.232   6.586   7.011   8.260   9.156   8.790   7.122   5.630   4.980   4.469   5.590   5.803   6.388   5.810   6.102   4.660   5.408   5.431   5.796   4.637   5.342   6.363   5.901   7.258   6.980   7.201   7.634   7.038   7.556   5.777   5.747   6.600   7.238   5.981   5.256 
+  6.163   4.805   5.410   5.143   6.478   7.420   7.400   7.740   7.668   5.294   5.086   5.659   6.171   6.071   6.759   6.473   4.946   6.457   6.006   6.391   5.716   5.296   6.172   6.129   8.363   8.188   7.250   7.470   7.101   6.633   6.326   6.054   6.271   5.762   4.604   4.407 
+  5.449   3.641   4.619   6.233   5.193   4.951   5.364   7.076   6.268   6.060   4.620   4.810   6.899   7.534   7.038   6.866   6.127   5.811   6.471   5.556   5.655   6.454   6.869   7.382   8.587   8.722   7.566   7.016   7.396   7.686   6.982   6.298   6.674   5.990   5.263   4.457 
+  3.585   2.650   4.075   6.359   6.394   6.746   7.012   6.757   6.218   5.228   5.501   4.855   4.616   5.669   6.177   6.354   5.992   6.457   7.063   6.202   5.213   6.442   6.640   7.998   7.906   7.952   8.007   7.389   8.037   8.437   7.972   6.970   6.617   6.704   5.603   5.002 
+  4.185   4.391   6.228   6.950   7.941   9.037   8.788   8.023   6.422   5.277   6.036   4.922   3.741   4.896   4.679   5.479   5.764   6.368   6.543   5.341   5.494   5.678   6.495   7.141   7.147   6.400   6.973   6.236   6.456   6.790   5.210   4.706   4.854   5.928   5.284   3.850 
+  3.029   3.719   5.706   5.233   4.677   6.369   5.998   4.549   4.694   3.600   4.748   4.626   3.231   3.712   4.176   3.836   4.160   4.541   4.526   4.510   4.232   3.884   4.324   5.262   6.187   4.842   5.361   5.040   4.779   4.461   3.580   3.749   3.775   3.832   3.170   1.987 
+  6.001   4.680   4.395   5.138   4.769   5.408   4.834   3.897   3.596   3.563   3.363   3.767   2.835   3.232   3.035   2.828   3.600   3.838   4.193   4.330   3.565   3.337   4.228   4.732   4.787   4.703   4.351   3.559   3.369   3.274   3.554   3.952   2.880   3.351   2.086   2.044 
+  5.316   5.288   4.476   4.683   4.297   4.711   4.822   4.164   4.479   4.376   3.907   3.384   4.260   4.035   4.099   2.508   3.037   3.617   3.933   3.809   3.965   3.873   3.696   3.885   3.516   4.555   4.843   3.902   2.862   3.036   3.433   3.044   3.080   3.038   2.172   1.932 
+  4.159   3.959   5.539   5.737   4.206   3.894   2.977   3.614   3.605   4.058   4.060   2.080   3.628   3.420   4.100   4.039   4.286   4.416   4.440   2.987   3.604   4.020   3.663   3.127   2.540   3.570   3.985   4.009   4.061   3.217   3.201   2.855   2.540   3.655   2.911   2.656 
+  3.604   4.109   5.885   5.488   2.752   3.249   2.762   3.845   2.771   3.197   4.343   3.276   2.444   5.063   4.804   4.156   5.036   5.143   2.982   3.477   4.159   3.640   3.150   2.909   4.028   3.912   3.645   3.859   3.929   2.426   3.009   3.477   3.066   3.394   2.607   1.598 
+  4.908   5.016   5.143   4.094   4.845   5.896   5.832   6.049   5.223   4.826   4.023   3.919   3.820   5.538   5.718   5.482   5.683   5.245   5.117   4.633   4.105   4.152   3.952   3.715   3.868   3.916   3.780   3.944   3.821   4.623   4.793   4.072   3.998   3.805   2.875   2.131 
+  5.003   4.801   5.570   6.856   5.958   7.925   9.768   9.390   8.304   7.517   6.707   6.986   5.966   6.653   8.084   7.913   8.610   9.330   7.654   6.741   5.828   5.495   4.622   5.927   6.382   6.841   6.782   5.897   5.766   8.088   7.969   6.943   5.764   5.140   3.327   2.141 
+  3.456   4.737   5.859   8.030   7.158   8.324  10.353   9.386   8.791   9.264   8.131   8.596   6.869   6.725   8.036   8.359   9.062  10.043   8.685   8.333   7.307   5.252   4.709   5.780   6.900   7.666   8.125   6.932   6.943   9.077   8.916   8.135   6.503   6.284   4.815   2.536 
+  3.088   3.996   6.163   8.532   7.611   8.001   9.710   7.794   9.724   9.622   7.772   7.503   7.163   7.205   9.199   8.037   8.773  10.543   9.775   8.620   7.598   6.165   4.479   6.185   7.106   8.864   9.377   7.392   7.458   9.808   9.760   8.629   7.088   6.136   4.765   3.150 
+  3.171   2.652   6.397   8.696   7.649   8.359   9.453   7.125   9.296   8.923   7.046   7.448   7.406   7.452   9.919   8.851   8.947  10.437   9.899   9.313   7.644   6.340   4.841   6.191   8.046   8.800   9.176   8.001   7.901   9.596   9.446   8.702   7.407   6.055   4.206   3.099 
+  4.401   4.507   6.191   8.806   7.804   8.235   9.615   7.535   9.461  10.025   8.940   8.666   7.539   7.750   9.507   8.907   8.466   8.953   9.947  10.199   6.981   6.178   5.993   6.146   7.525   8.404   8.596   8.412   8.190   9.115  10.116   8.548   7.562   5.959   4.083   2.301 
+  4.915   4.573   6.876   8.941   7.845   8.511   9.915   7.869   9.620   9.726   8.579   8.740   7.682   7.961   9.759   8.837   8.424   8.978  10.488  11.161   7.202   6.095   5.322   6.052   6.663   8.615   9.980   8.281   6.762   9.130   9.965   8.214   7.582   6.033   4.104   2.441 
+  2.660   2.303   6.003   8.698   7.675   8.646  10.026   8.256   9.064   9.298   9.077   8.725   7.318   7.229   9.698   8.672   8.496   7.779  11.270  11.961   8.719   6.724   5.873   6.310   6.578   7.690   9.605   9.349   7.153   8.753   9.946   8.769   8.242   6.642   4.760   3.541 
+  3.467   5.006   6.978   8.615   7.334   7.879   9.200   7.948  11.093  10.674   8.407   7.100   7.026   7.429   9.603   8.277   8.229   9.550  10.076  10.987  10.762   7.480   6.732   7.104   7.972   8.838   9.649   9.328   8.306   8.248  10.459   9.616   9.238   7.986   5.692   3.321 
+  3.495   4.579   6.359   8.048   6.911   6.899   8.267   9.391  11.872  10.979   9.517   8.566   7.597   7.431   8.774   7.334   7.056   8.622   8.539  11.032  11.244   7.584   6.723   6.954   7.725   9.410  10.045   9.471   7.599   7.414   9.095   8.424   7.903   7.298   4.705   3.576 
+  3.857   3.749   6.223   6.557   5.028   7.523   9.223   9.069  10.958   9.564   9.153   9.143   6.797   5.868   7.459   7.146   6.704   8.087   9.213  10.500  10.764   6.646   5.905   6.421   7.267   8.250   9.595   8.737   7.099   6.891   8.778   8.012   7.051   6.457   4.578   2.831 
+  4.072   4.439   6.082   5.393   5.478   7.230   8.656   8.895   9.266   9.111   6.927   6.490   6.437   5.712   7.635   6.026   5.682   7.558   9.076   9.563   9.783   7.820   5.222   5.252   6.912   7.749   8.204   7.256   6.308   6.596   8.364   7.765   6.824   5.464   4.436   3.326 
+  3.978   4.159   5.836   6.015   6.629   7.955   6.853   8.332  10.542   9.821   5.747   5.100   4.238   5.461   7.307   6.398   4.992   5.668   7.054   7.814   9.563   8.506   5.923   5.193   6.462   7.551   8.098   7.618   6.521   6.179   6.969   6.405   7.367   6.000   3.053   2.568 
+  4.798   5.422   5.199   4.635   5.137   8.442   9.902   9.074   9.981   8.861   6.225   5.609   5.292   5.167   6.378   6.166   5.950   7.023   7.111   7.942   9.648   8.013   6.250   6.355   6.153   7.138   6.972   7.320   7.472   6.538   7.009   5.505   6.018   5.334   3.997   2.457 
+  4.240   4.623   5.689   6.443   5.516   8.585  10.103   8.687   9.493   8.320   7.026   6.791   5.074   4.719   5.606   5.316   6.242   7.794   7.278   7.736   8.486   7.282   5.852   5.812   5.532   6.113   8.358   8.147   6.518   6.860   6.954   5.471   5.346   4.962   3.018   1.818 
+  4.736   3.622   2.786   6.171   6.838   8.722   9.010   7.758   8.415   7.143   5.714   6.288   5.663   5.064   6.440   5.434   5.951   7.709   7.437   7.469   8.600   7.279   6.520   6.074   5.650   6.553   9.236   8.868   6.701   6.963   6.642   6.220   5.255   4.554   3.456   2.502 
+  4.850   4.118   4.059   5.997   7.926   9.006   8.320   6.582   8.199   7.247   6.070   5.417   5.136   5.758   6.563   5.707   5.186   7.452   7.394   7.214   7.846   7.302   5.611   5.840   5.816   6.850   7.474   6.963   6.302   6.437   5.753   4.647   4.585   4.404   2.816   1.850 
+  5.747   5.243   4.550   3.923   7.452   8.406   7.951   7.185   8.006   6.210   5.256   5.369   5.060   5.290   5.728   4.491   5.792   6.782   6.577   7.168   6.926   5.929   5.077   4.190   4.997   6.552   7.524   6.742   5.644   5.235   5.649   4.246   5.142   4.824   3.507   2.650 
+  4.910   4.105   5.752   5.725   6.683   8.362   8.414   6.459   6.495   5.852   4.244   4.051   4.484   5.390   5.323   5.260   5.502   5.595   5.246   6.826   7.041   5.735   4.576   4.295   3.967   5.354   6.641   6.012   6.063   5.527   4.813   4.695   4.809   4.083   3.216   3.132 
+  5.198   4.881   4.429   5.586   5.984   5.774   6.166   5.037   6.774   6.367   5.557   4.262   3.946   4.359   4.394   4.794   4.010   6.027   5.406   5.928   6.090   4.788   4.161   4.649   4.523   5.285   5.872   5.540   4.868   5.109   4.953   5.017   4.255   3.568   2.851   2.587 
+  6.006   5.085   4.035   5.963   5.949   5.863   6.899   6.323   6.452   5.225   4.526   4.909   4.490   4.275   4.555   3.513   4.573   5.277   4.501   5.728   5.780   4.779   5.133   4.140   4.422   4.677   4.661   4.217   4.005   4.461   4.561   3.774   4.296   3.690   2.502   2.157 
+  3.545   3.141   3.986   4.364   5.158   6.091   6.825   5.275   5.489   5.449   4.305   4.020   2.629   5.115   5.474   4.191   3.893   5.411   5.124   5.256   5.525   4.484   4.785   4.170   3.312   4.133   3.978   3.815   3.933   4.524   5.676   4.274   4.148   3.058   2.986   1.621 
+  6.062   5.869   5.704   4.719   4.167   4.360   5.100   3.635   5.170   5.371   3.887   3.540   3.028   5.120   5.573   4.256   4.539   5.020   5.414   5.615   6.261   4.358   4.843   4.446   3.860   4.580   5.451   4.146   3.782   3.535   3.817   3.768   4.362   3.975   3.156   1.868 
+  4.516   5.166   5.894   5.467   4.128   4.443   6.054   4.872   5.560   5.199   3.386   2.910   3.049   5.218   5.110   3.664   4.284   4.501   4.755   4.844   5.194   3.671   3.705   4.112   4.142   4.157   4.545   4.362   4.306   4.787   3.905   3.712   3.297   2.257   2.240   0.751 
+  5.007   5.156   4.994   5.304   3.457   5.799   6.586   4.494   4.201   3.833   4.306   4.101   3.816   4.536   4.924   4.420   3.630   5.176   5.461   5.274   4.528   4.559   3.911   2.780   4.436   4.857   4.408   4.401   4.726   4.125   4.408   3.946   3.045   2.874   2.198   1.328 
+  4.142   5.329   4.515   2.875   3.036   4.940   5.503   2.677   4.236   4.017   4.336   4.643   3.681   4.837   5.233   3.397   3.067   4.701   4.548   4.926   4.679   3.425   3.193   3.183   4.109   4.362   4.611   3.640   4.344   4.516   3.826   3.228   2.638   2.752   2.853   1.337 
+  3.326   3.980   3.418   2.483   3.585   4.828   3.936   3.430   4.273   3.680   3.564   2.260   2.667   5.268   4.641   3.648   4.463   5.448   4.335   4.151   5.297   3.899   3.619   3.980   3.928   3.777   4.822   3.949   3.869   3.790   3.413   3.021   2.279   3.149   2.525   1.159 
+  5.402   4.402   2.863   2.439   1.889   3.277   4.377   4.556   4.314   3.246   3.096   3.636   3.007   4.499   4.957   3.018   4.352   5.198   5.228   5.129   4.930   4.474   3.721   4.177   4.287   4.489   4.118   4.133   3.529   2.791   2.761   2.501   2.083   2.573   1.815   1.905 
+  4.940   4.448   4.861   4.584   3.694   3.320   2.996   4.198   4.950   3.401   1.891   3.985   3.456   5.303   5.438   3.396   4.383   4.775   5.114   5.314   4.408   3.873   3.945   4.011   3.517   3.231   3.552   4.059   4.126   3.583   3.015   2.498   2.532   1.618   1.624   1.516 
+  5.607   5.463   5.005   3.524   4.095   4.916   4.270   4.799   3.906   3.067   2.871   3.443   3.112   5.009   4.816   2.706   3.297   6.262   5.711   4.649   4.002   3.304   3.227   3.517   3.750   4.287   3.143   3.483   3.006   2.354   2.626   2.984   3.138   2.411   2.814   1.821 
+  4.495   4.229   3.686   2.674   2.144   3.209   3.928   3.906   3.586   3.345   4.360   3.639   3.297   4.937   4.089   3.719   3.113   5.604   4.995   5.248   3.286   2.558   3.641   3.427   3.537   3.011   3.816   3.408   3.437   2.893   1.917   2.316   2.685   2.395   2.610   1.605 
+  5.145   5.213   3.782   2.921   3.059   5.254   5.049   3.296   4.279   3.039   3.975   3.918   3.194   3.143   3.367   3.765   3.635   4.399   4.430   3.888   1.830   2.736   2.150   2.125   3.192   3.601   3.723   3.376   3.134   2.898   3.448   2.813   2.732   2.568   2.186   1.214 
+  4.020   3.805   3.442   3.954   3.049   5.231   4.745   3.541   5.288   4.572   3.510   3.385   4.049   3.444   3.149   3.838   2.510   2.772   3.415   3.942   2.854   3.492   3.904   3.759   2.232   3.026   3.643   3.940   2.882   2.971   2.453   1.940   2.442   2.537   2.538   1.395 
+  3.869   2.728   3.260   2.579   1.205   3.626   3.563   3.341   4.442   2.710   2.699   3.575   3.370   3.952   4.206   4.636   3.640   4.374   4.178   3.769   3.896   3.694   4.111   3.620   2.431   3.517   3.861   2.598   3.385   3.184   2.638   2.411   2.448   2.617   2.802   1.335 
+  4.107   3.499   4.038   4.380   3.111   3.396   4.216   3.126   4.270   3.969   2.175   4.391   3.819   4.242   4.670   4.406   4.567   4.896   4.907   5.080   3.756   3.812   4.589   3.615   2.468   3.237   3.257   3.289   3.602   2.865   3.012   2.859   2.249   2.716   2.683   1.221 
+  4.747   3.921   3.997   4.459   3.537   3.139   4.150   5.095   3.341   2.296   1.116   4.058   4.327   5.565   5.393   3.901   3.650   3.907   4.327   4.398   2.869   3.052   3.157   3.706   2.919   2.593   2.612   3.601   2.989   2.222   2.678   2.566   1.843   2.539   3.067   2.535 
+  5.112   5.258   4.081   3.379   3.810   4.927   5.466   3.383   2.332   3.192   2.768   2.914   4.135   4.587   4.175   3.680   2.888   5.332   5.119   3.422   3.036   2.797   1.961   3.986   3.758   3.094   2.776   3.274   2.613   2.465   2.669   2.805   2.421   2.712   3.056   1.796 
+  3.470   5.158   5.200   4.387   3.038   5.121   4.976   3.697   3.685   4.482   4.625   3.135   3.121   5.048   4.236   3.127   3.232   3.273   3.364   2.979   3.673   3.618   2.788   2.892   3.547   2.885   3.578   3.723   2.983   2.223   3.030   2.562   1.829   2.511   2.761   1.751 
+  3.000   3.675   4.947   4.167   2.338   3.988   4.769   5.142   3.565   3.477   3.110   2.262   3.240   4.193   4.479   3.332   4.744   4.157   4.967   4.268   4.100   2.855   4.222   4.903   3.716   3.112   3.237   3.267   2.640   2.631   2.783   2.671   2.563   2.250   2.559   1.657 
+  4.644   3.184   3.166   3.078   1.876   3.333   4.090   3.315   3.295   4.182   4.669   3.356   2.875   3.382   3.285   3.562   4.305   3.982   4.686   3.745   3.536   3.094   3.272   4.193   3.602   3.632   2.732   2.219   2.396   2.437   3.139   2.612   2.559   2.286   2.539   1.824 
+  3.751   3.549   3.341   4.137   3.874   3.709   3.921   3.387   3.657   3.366   2.492   3.157   3.425   4.604   4.322   3.807   3.076   3.869   4.349   3.982   2.717   3.215   4.081   3.142   3.295   3.206   2.584   2.812   2.733   3.539   3.799   3.432   2.583   2.325   2.636   0.951 
+  5.245   3.390   3.253   3.642   3.336   4.463   4.740   3.931   4.065   2.410   2.387   3.771   3.198   4.596   4.452   3.612   4.139   3.911   3.891   3.371   4.061   3.428   4.190   3.912   4.176   3.898   3.116   3.311   2.936   2.832   3.076   2.072   3.375   3.394   2.626   0.979 
+  4.727   4.589   3.440   2.689   1.404   4.326   4.666   3.186   3.828   1.563   1.331   2.329   3.297   4.331   4.416   3.676   3.883   4.388   4.644   2.433   2.520   2.360   3.908   3.898   3.593   3.344   3.408   3.756   2.684   2.730   2.772   2.007   3.335   3.297   2.351   0.922 
+  4.462   5.089   3.721   3.695   4.005   4.495   5.000   3.814   3.816   3.094   0.727   2.740   3.964   4.774   5.009   3.764   3.061   4.379   4.227   4.111   3.291   2.962   4.332   3.525   3.141   4.501   3.534   3.932   3.064   2.943   3.145   2.754   2.978   2.254   1.741   1.586 
+  3.689   4.806   3.239   3.064   3.709   4.603   4.881   4.929   3.182   3.066   4.061   3.064   3.739   4.537   4.601   3.840   3.125   3.936   3.347   4.549   4.042   3.283   3.676   2.872   3.796   4.081   3.650   4.228   3.622   2.862   2.706   2.840   2.449   2.692   2.213   2.208 
+  4.492   3.102   3.434   1.314   3.527   5.269   5.383   3.734   3.670   3.709   4.463   3.141   3.371   5.053   4.952   3.870   3.259   2.988   3.802   3.525   2.825   3.815   4.191   3.038   3.206   4.383   3.348   3.873   3.116   2.935   2.665   2.293   2.355   2.909   2.134   2.073 
+  4.991   3.650   4.448   4.252   4.171   5.191   4.626   3.559   2.538   3.999   3.166   2.436   2.106   4.334   4.308   4.188   3.808   4.083   3.400   2.936   3.155   3.339   2.676   2.425   2.897   3.334   3.330   3.765   3.797   3.878   3.254   2.555   2.383   2.589   2.383   2.095 
+  2.726   3.333   3.802   3.444   3.269   3.412   3.831   3.674   3.304   3.155   2.758   3.043   1.247   3.298   4.015   3.947   3.398   3.079   3.471   3.752   3.311   2.928   3.298   3.736   3.437   3.292   3.704   3.207   3.512   3.347   2.906   2.209   2.729   2.167   2.525   1.522 
+  3.226   3.094   2.274   2.678   1.923   3.585   3.594   3.175   2.682   3.402   3.699   2.644   3.444   3.546   3.852   4.166   3.609   5.300   5.191   4.558   4.238   3.732   3.304   2.941   2.354   3.660   2.799   2.586   2.971   2.683   2.220   2.434   2.365   2.264   2.361   1.401 
+  3.673   3.541   4.484   3.794   3.337   4.461   3.485   3.391   2.824   2.904   2.428   1.495   3.349   4.492   3.149   4.358   4.073   5.358   3.687   3.099   3.712   2.653   2.533   3.215   2.973   3.966   2.686   2.460   3.107   3.631   2.655   2.154   2.080   2.050   2.364   0.995 
+  4.214   4.247   3.716   3.742   3.817   4.140   4.420   4.479   3.877   3.518   3.300   1.877   2.953   4.823   3.818   3.032   3.747   4.390   3.383   2.414   2.433   2.225   1.195   2.799   3.221   3.167   3.164   3.222   2.979   2.995   2.273   1.641   1.737   1.853   2.686   1.790 
+  3.303   3.244   3.323   3.637   3.462   4.931   5.299   4.214   4.673   3.416   3.239   2.013   2.976   4.058   4.220   3.721   4.468   5.015   3.861   2.974   3.247   3.474   3.015   2.929   1.981   2.588   3.148   2.800   2.930   2.610   2.467   1.614   1.977   1.686   2.235   1.552 
+  3.836   3.966   1.384   0.979   2.850   3.695   4.011   4.175   3.017   2.963   3.686   2.715   3.061   5.054   4.836   1.795   2.857   2.373   2.164   2.876   2.663   3.334   3.737   3.415   2.743   2.941   3.557   3.773   3.927   3.261   3.117   2.786   2.658   2.279   2.166   1.423 
+  5.620   4.078   2.160   2.636   2.231   4.250   4.558   3.988   3.389   2.853   2.432   4.091   4.508   5.637   5.451   2.832   4.048   3.249   3.043   3.177   3.082   3.777   3.092   2.906   2.996   2.712   2.342   2.765   2.446   2.893   2.547   2.814   2.512   2.602   2.352   2.052 
+  3.363   2.688   2.003   3.957   4.690   5.197   5.049   3.709   4.574   3.413   3.841   3.981   3.946   4.650   4.502   1.920   3.501   3.825   4.020   3.861   2.534   2.544   2.381   2.897   3.751   3.888   3.407   3.271   3.125   3.665   2.830   2.614   2.528   2.703   2.248   1.402 
+  4.655   5.006   4.542   3.164   3.384   4.681   4.556   3.463   5.163   4.360   3.760   3.199   2.486   3.750   4.181   4.123   3.547   4.112   3.930   3.084   3.564   2.549   2.719   3.005   3.470   4.864   3.450   3.026   2.210   2.515   1.861   2.662   3.028   2.391   2.742   1.740 
+  2.502   4.141   3.251   3.107   2.964   4.637   4.661   4.643   4.000   2.474   2.349   2.600   3.941   3.199   3.477   3.282   3.585   4.971   4.092   2.544   2.745   2.436   3.428   1.910   2.661   3.854   3.152   3.342   3.725   2.890   1.749   1.543   2.391   2.276   2.117   1.425 
+  5.662   5.072   4.283   2.947   3.891   4.726   4.968   3.411   2.870   2.091   1.233   1.972   2.383   4.197   4.473   4.196   4.119   4.529   4.602   3.477   3.154   2.545   3.772   3.692   3.383   3.911   3.510   3.781   3.003   2.191   2.943   2.197   2.387   2.759   1.723   1.197 
+  4.130   3.635   3.244   2.901   2.944   3.710   3.436   2.471   2.394   2.801   2.060   2.136   3.277   3.882   3.468   3.782   4.258   4.678   3.971   3.518   2.672   3.240   4.475   3.615   1.790   3.353   3.019   3.642   3.106   1.915   3.047   2.838   2.989   2.363   1.789   1.970 
+  5.270   4.135   2.662   4.408   5.602   5.140   4.775   3.010   3.096   3.362   3.246   3.586   4.229   4.101   3.418   4.244   4.493   3.269   2.951   3.933   3.991   4.025   3.642   3.382   4.123   3.201   2.653   3.542   3.075   3.072   2.525   2.465   2.357   2.641   1.964   2.129 
+  4.698   5.294   4.321   5.214   6.153   6.093   5.922   3.835   3.984   3.595   3.677   2.491   2.774   4.666   4.602   4.098   4.091   3.613   4.306   4.070   3.202   3.476   4.323   3.248   2.991   4.288   3.369   3.803   3.016   3.469   2.732   2.858   1.942   3.068   2.833   2.521 
+  2.538   3.794   3.180   3.850   4.317   3.908   4.752   3.920   3.760   4.091   4.849   4.033   2.257   4.113   4.319   3.734   4.513   4.126   3.786   5.130   4.069   3.756   3.615   3.989   4.051   3.565   4.736   4.609   4.114   2.802   3.084   3.851   2.790   2.792   2.654   2.290 
+  2.100   3.650   4.061   3.038   2.967   3.850   4.508   5.090   4.507   2.145   2.458   2.647   2.263   5.134   4.460   3.124   2.896   3.791   4.326   3.994   3.502   3.536   3.987   4.425   4.554   4.217   4.697   3.925   3.418   3.227   2.813   3.078   3.020   3.027   2.834   2.185 
+  1.966   2.823   3.611   3.029   3.196   4.836   4.538   3.413   3.923   3.823   3.303   3.111   3.019   5.074   5.142   3.548   2.808   3.846   3.395   3.096   3.478   3.378   3.407   3.407   3.601   3.769   3.617   3.255   3.394   3.762   3.240   3.281   3.273   2.609   2.620   1.872 
+  5.561   5.000   3.313   4.507   4.170   3.430   3.660   3.715   2.719   2.817   4.532   4.355   3.550   3.212   3.025   2.775   4.380   3.739   3.804   4.050   3.927   2.980   3.868   4.192   3.416   3.642   3.226   3.678   2.261   3.901   3.078   3.379   2.901   2.793   1.998   1.342 
+  3.892   5.168   4.116   3.942   3.059   3.262   2.855   3.894   3.563   3.638   4.063   3.735   2.982   3.758   3.984   3.690   4.072   4.376   3.542   4.271   3.556   3.735   4.345   3.798   3.266   3.697   3.043   4.102   3.116   2.383   2.351   2.807   3.432   3.303   2.739   2.134 
+  5.623   5.981   5.047   3.760   3.343   4.609   5.075   4.683   2.828   1.181   3.269   3.415   2.768   3.662   4.292   3.747   3.006   4.099   3.147   2.289   2.055   3.165   3.181   3.738   3.716   4.180   3.283   3.439   3.262   2.684   2.021   2.238   2.232   3.246   2.387   1.707 
+  5.538   5.411   3.816   2.484   3.265   4.582   4.163   3.659   3.871   3.101   3.343   3.678   3.603   4.219   4.045   3.403   4.180   4.428   3.858   2.989   2.622   3.148   4.285   3.483   1.937   3.599   3.254   2.789   2.315   2.375   2.286   1.959   2.331   2.961   1.955   1.280 
+  5.658   4.404   2.562   2.892   3.490   4.292   4.773   5.088   4.206   3.195   4.031   3.261   2.828   4.681   5.342   4.786   5.475   4.740   3.450   3.124   3.323   4.283   4.391   3.941   4.205   4.374   3.862   3.356   2.450   3.909   3.290   1.742   2.229   3.148   2.868   2.121 
+  3.334   4.297   3.897   2.602   3.061   4.570   4.661   4.471   2.693   1.961   3.317   3.313   2.552   4.453   5.340   4.811   4.852   5.013   2.976   3.194   3.541   4.524   4.127   3.502   3.218   3.192   4.003   4.228   4.028   3.361   2.314   1.373   2.698   3.075   2.735   1.983 
+  5.241   4.826   4.286   3.293   3.643   4.595   4.198   4.428   2.969   2.931   4.304   3.377   3.837   4.675   4.262   3.681   4.729   3.442   3.217   3.271   3.281   3.561   4.236   2.990   3.675   3.508   3.418   3.680   3.964   3.505   3.127   1.623   2.366   2.905   2.701   1.706 
+  3.298   4.703   4.097   4.397   3.148   3.621   3.544   4.205   2.408   2.819   4.401   4.474   4.474   5.129   4.829   3.798   5.741   4.644   3.821   3.803   3.216   3.607   3.063   3.505   4.020   3.787   2.610   2.536   3.122   3.240   3.047   2.251   1.855   2.184   2.473   1.718 
+  4.139   4.659   4.022   4.120   3.242   2.697   3.388   3.872   2.629   2.310   3.782   3.528   3.519   4.891   4.471   3.169   5.433   5.473   3.999   3.983   3.260   3.963   3.430   3.399   3.828   4.245   3.192   3.418   3.202   2.487   2.973   3.495   3.213   3.414   2.224   1.972 
+  4.224   4.843   3.790   1.872   3.550   4.605   4.844   3.629   3.234   3.049   4.190   4.339   2.605   5.306   4.947   3.291   3.974   4.524   5.044   4.226   3.305   4.786   4.524   3.771   4.129   4.116   3.212   4.024   3.664   2.484   3.086   3.243   3.855   2.956   3.336   2.610 
+  3.912   2.948   2.916   4.119   3.455   1.817   2.245   2.834   3.042   2.971   4.763   4.287   3.424   4.763   4.697   4.324   4.375   4.182   4.135   4.451   3.294   3.752   4.865   4.365   4.103   4.882   4.313   3.323   3.873   3.286   3.295   4.207   4.165   3.720   4.038   3.597 
+  3.843   4.073   3.003   2.925   2.596   2.768   2.926   4.822   3.824   1.828   2.630   3.590   4.639   4.877   3.900   4.762   5.321   4.692   4.175   3.421   3.656   4.353   5.409   5.222   4.778   4.623   4.977   4.106   4.401   4.556   4.285   5.374   4.811   3.735   4.854   4.231 
+  4.671   3.843   2.957   1.311   2.660   2.691   4.334   4.123   4.101   3.927   4.245   4.132   3.815   3.302   3.671   4.123   3.966   4.335   3.003   3.012   4.018   5.417   6.956   6.050   5.880   5.157   4.407   4.620   5.533   6.114   5.739   5.972   5.711   5.363   5.367   4.145 
+  4.979   4.677   4.720   2.708   4.340   4.947   3.845   4.791   4.624   4.527   4.851   4.855   4.376   4.733   4.289   4.417   5.389   4.930   3.244   3.978   5.251   6.024   5.681   5.833   6.110   5.579   5.077   5.446   6.451   6.119   6.615   6.630   6.316   5.964   5.592   4.680 
+  3.053   3.918   4.359   3.564   4.877   5.155   5.079   4.658   4.313   3.746   4.716   5.462   4.695   4.381   5.165   5.973   6.172   5.027   4.620   5.123   4.035   5.906   6.494   6.540   5.700   5.778   6.206   6.525   5.551   5.587   6.721   7.557   7.066   6.466   6.274   5.573 
+  3.860   3.319   4.266   5.108   4.150   3.667   4.057   5.304   4.203   3.516   5.422   5.306   4.700   4.974   4.625   5.096   5.039   5.342   4.866   5.462   4.396   5.486   6.434   6.385   6.364   6.871   7.223   7.391   7.083   6.511   6.173   7.669   7.646   7.385   7.563   6.956 
+  4.314   4.159   5.094   4.634   3.583   4.870   4.923   4.996   3.160   3.472   3.908   5.319   4.726   3.510   5.648   5.974   5.576   6.528   6.500   6.393   5.670   6.485   6.436   6.576   7.619   6.576   6.736   6.900   7.224   7.732   7.982   7.571   8.174   8.232   7.601   6.359 
+  3.992   5.302   4.457   2.971   2.173   3.625   4.328   4.762   4.080   4.280   2.669   4.527   5.349   4.202   4.952   6.674   6.691   5.604   6.027   7.139   5.758   6.777   7.623   6.443   6.322   6.599   6.269   7.318   7.011   7.612   7.970   7.831   8.045   7.130   7.301   6.891 
+  4.988   5.071   4.343   3.759   5.229   5.543   5.510   5.838   4.452   2.121   2.857   3.977   4.701   4.469   4.377   6.725   6.793   6.330   6.887   7.041   6.587   6.267   7.549   7.434   7.493   7.641   7.168   6.976   7.951   8.137   8.493   8.372   8.226   6.523   7.591   7.348 
+  4.238   3.737   3.150   4.180   4.504   4.089   4.528   5.455   5.179   4.276   4.449   5.150   4.959   5.828   5.776   6.925   6.092   5.058   5.742   5.784   6.242   7.198   7.368   8.911   8.453   8.122   6.916   7.048   7.135   7.066   7.235   8.908   9.100   7.786   8.328   7.998 
+  3.664   4.846   4.401   3.118   4.525   4.454   3.979   2.996   4.294   5.049   5.839   6.135   4.193   6.596   5.909   7.152   7.150   6.135   6.879   6.420   7.036   7.998   8.318   8.268   7.913   6.693   6.161   6.990   7.211   6.560   7.096   8.063   7.603   7.989   7.702   6.707 
+  2.729   4.218   4.449   3.409   4.643   4.073   3.182   4.100   4.499   4.483   5.456   5.769   5.006   5.556   6.177   6.511   6.607   6.799   6.138   6.414   6.542   7.605   7.772   7.212   7.479   7.666   6.656   7.219   7.539   8.057   7.287   8.055   8.058   7.563   8.006   6.610 
+  4.908   4.829   3.733   4.451   3.974   4.326   4.434   4.405   2.672   3.385   4.953   5.567   5.586   5.106   5.220   5.095   5.427   6.564   6.433   6.149   6.718   6.680   8.106   7.763   6.732   6.549   5.850   6.612   7.973   7.842   6.904   7.039   7.739   6.638   7.426   6.461 
+  5.565   5.015   2.831   3.403   3.868   4.358   4.113   2.822   3.262   4.186   4.050   4.263   4.546   4.779   4.543   4.872   6.038   5.631   5.853   5.420   6.318   6.747   7.771   7.526   7.341   6.941   6.493   7.729   8.196   8.018   7.299   7.253   7.340   7.607   8.090   6.621 
+  4.044   3.643   3.873   1.141   3.134   4.542   3.935   3.630   3.924   5.381   4.803   4.270   3.567   4.393   4.094   4.290   5.843   5.027   6.745   6.086   5.202   6.349   7.181   6.425   6.797   6.408   6.372   6.385   7.026   5.423   6.816   7.283   7.745   7.198   7.586   6.879 
+  3.834   4.439   4.308   3.585   3.920   5.630   4.975   3.608   3.784   4.899   5.376   4.221   4.662   5.431   5.290   5.202   6.868   5.468   5.502   6.014   5.646   6.568   6.918   6.500   7.091   6.722   6.715   6.774   7.006   7.175   7.253   7.706   7.831   6.909   6.788   6.262 
+  4.079   4.496   4.783   3.527   3.800   5.227   5.089   3.806   4.533   4.404   4.722   5.116   4.571   6.204   6.372   6.253   5.568   4.160   5.463   5.667   5.956   7.032   7.968   7.686   7.919   7.436   6.382   6.643   6.007   6.575   6.880   8.516   7.708   6.931   6.939   6.588 
+  4.101   4.440   4.441   4.245   3.291   4.584   5.608   3.970   4.075   4.186   3.546   4.852   4.848   5.442   5.586   6.064   4.358   4.952   5.666   4.538   5.376   6.254   7.509   7.626   6.613   5.923   6.148   5.952   6.671   5.674   5.997   7.163   6.884   5.123   7.010   5.948 
+  6.319   5.754   4.558   3.516   4.120   6.265   5.734   2.665   3.500   4.453   4.729   5.217   4.784   5.681   5.547   5.505   4.694   4.561   4.638   5.469   5.375   4.810   6.156   5.880   4.787   4.758   5.675   5.505   5.397   5.617   6.186   6.784   6.553   6.078   5.929   5.028 
+  5.030   4.822   5.486   5.239   3.252   5.687   5.539   3.849   3.224   2.791   4.344   4.017   3.860   5.493   6.161   6.091   6.055   6.779   6.910   6.606   5.663   6.055   6.586   6.482   6.179   6.553   6.926   7.277   6.696   6.212   5.739   6.139   6.106   4.946   5.827   5.109 
+  4.622   4.112   4.492   3.405   3.812   5.213   5.371   4.875   3.664   3.830   4.182   3.184   3.237   5.719   5.555   5.197   6.256   7.143   6.816   6.704   5.116   5.760   6.113   6.464   5.740   6.177   6.732   7.279   6.361   5.958   5.781   5.989   6.643   5.121   5.093   4.418 
+  4.709   4.756   5.548   4.194   1.744   4.327   5.356   4.516   3.894   4.318   3.249   2.091   3.345   5.340   5.372   4.069   4.468   5.630   4.809   3.656   3.876   4.617   3.749   4.389   4.177   4.480   4.144   4.548   3.628   3.819   3.872   4.063   4.355   3.540   3.990   3.002 
+  4.658   6.104   5.959   4.436   3.197   3.659   3.879   3.774   3.785   4.145   3.494   2.960   3.070   4.572   4.496   3.077   3.749   4.574   4.035   2.727   3.206   4.263   3.850   3.152   3.619   3.224   3.438   3.435   3.444   3.609   3.925   3.086   3.648   2.779   2.537   2.439 
+  5.432   5.673   6.130   5.276   5.053   5.839   6.435   5.112   2.537   3.374   4.420   4.017   3.251   5.924   5.018   4.542   4.735   5.281   5.184   5.282   5.809   6.016   7.180   7.847   7.245   6.214   5.067   4.532   5.532   6.968   6.819   7.061   7.471   6.564   7.735   9.337 
+  6.257   4.545   4.825   5.166   4.411   4.683   4.933   4.760   2.889   2.298   3.909   2.679   2.400   5.150   5.093   3.931   4.770   5.043   4.941   4.841   4.923   5.133   6.935   7.852   6.950   6.170   5.985   4.336   6.415   7.361   6.337   6.531   7.052   5.809   7.337   9.283 
+  5.739   3.643   3.875   3.296   4.033   3.916   4.429   2.502   3.089   2.115   2.786   3.949   3.968   4.954   5.443   4.673   2.826   3.164   4.134   3.659   2.457   2.322   2.928   3.509   3.983   4.860   4.456   3.204   3.200   2.278   3.081   3.503   3.610   3.599   3.332   3.302 
+  3.681   2.814   2.842   4.816   4.682   4.784   5.040   3.003   3.047   3.224   2.927   3.757   2.562   5.618   5.988   4.035   3.241   4.625   4.013   4.358   3.402   2.678   3.453   4.551   4.666   4.059   3.667   4.730   4.607   4.421   4.366   5.219   5.503   5.664   5.678   4.667 
+  5.352   4.978   3.762   4.302   3.992   3.991   5.150   3.864   1.885   3.321   2.207   2.028   2.861   5.840   4.754   4.222   4.595   5.058   3.934   3.753   3.602   2.598   3.190   3.252   4.782   4.124   4.600   5.295   5.533   6.097   6.230   6.436   5.641   5.591   5.268   4.314 
+  4.539   5.376   5.919   5.405   3.824   5.282   5.657   5.021   3.995   3.098   3.773   3.468   3.889   4.800   4.672   3.637   3.773   4.221   3.994   3.942   4.088   4.194   2.921   2.619   4.174   4.317   3.434   2.868   3.472   3.514   3.564   4.111   4.096   4.354   4.182   2.827 
+  5.133   4.272   4.513   5.171   3.585   5.791   5.639   4.699   4.057   3.209   3.060   3.914   3.462   4.661   4.002   3.035   3.790   4.223   3.925   3.843   4.005   4.177   3.580   2.974   4.313   4.643   4.532   3.791   3.450   3.597   3.873   3.283   2.973   3.139   3.190   2.061 
+  5.705   6.762   5.874   5.449   5.746   5.949   6.114   6.302   5.640   4.838   3.613   4.747   5.088   5.181   4.841   4.443   5.035   4.828   5.074   4.722   5.684   4.909   5.630   4.628   4.936   6.818   6.581   6.753   6.052   4.884   5.858   6.825   6.257   4.590   3.611   4.788 
+ 12.098  12.198  11.531  11.730  10.731  10.528  10.736  10.771   9.186   9.257   7.014   8.372   9.322   8.270   7.428   8.196   8.635   9.164   8.079  10.042  10.183  10.225   9.530   9.148   8.321  10.850  12.033  11.625  10.037   9.489  11.096  12.243  10.888  10.188  11.077  11.925 
+ 13.155  14.207  14.783  14.489  14.862  13.704  12.332  12.302  10.997  10.361  10.717   9.590   9.995  10.414  10.309  10.818  11.203  11.526  11.037  12.930  14.713  13.635  12.369  11.984  11.891  12.856  14.562  13.593  12.300  12.848  14.132  15.089  13.514  11.737  12.525  13.796 
+ 12.907  15.093  16.341  14.919  16.178  15.731  14.422  13.920  11.849  11.545  12.389  11.705  12.121  11.797  12.125  12.227  12.385  12.799  13.195  14.862  17.142  16.185  14.545  14.259  14.138  15.063  16.493  15.647  14.560  14.917  16.668  17.686  15.830  12.423  12.142  11.938 
+ 13.515  15.299  16.873  15.514  17.156  17.029  14.793  14.805  13.192  13.175  12.235  12.351  13.297  12.350  12.444  12.677  13.059  13.101  14.128  15.335  18.074  17.495  15.493  15.222  15.103  15.664  17.466  16.799  15.820  16.126  18.032  18.778  17.235  13.430  11.899  12.993 
+ 13.491  15.281  16.941  15.741  17.551  17.517  14.661  14.796  13.424  13.570  12.098  12.193  13.306  12.543  12.506  12.643  13.179  13.164  14.099  15.579  18.325  18.304  15.342  15.247  15.009  16.007  17.750  17.390  16.151  16.458  18.270  19.076  17.712  14.363  11.799  12.463 
+ 13.344  15.397  16.944  15.709  17.719  17.555  14.556  14.608  13.289  13.425  11.686  11.889  13.093  12.348  12.328  12.430  13.033  13.046  14.107  15.410  18.345  18.288  15.774  15.461  15.173  16.158  17.855  17.582  16.195  16.348  18.167  18.975  17.758  15.191  12.358  12.423 
+ 13.154  15.495  16.908  15.650  17.602  17.225  14.410  14.411  13.275  13.253  11.454  11.582  12.859  12.284  12.223  12.305  12.900  12.814  13.954  15.011  17.894  17.572  15.643  15.267  14.906  15.794  17.466  17.262  15.759  15.871  17.596  18.625  17.631  15.387  11.977  11.819 
+ 13.135  15.416  16.370  15.214  16.783  15.982  14.056  13.306  12.726  12.311  10.978  11.725  11.750  11.909  11.715  11.906  12.364  12.678  13.550  14.627  17.037  16.365  14.739  14.244  14.056  15.245  16.790  16.414  14.694  14.774  16.393  18.021  16.867  14.402  11.730  11.093 
+ 12.189  13.844  13.692  14.251  14.284  12.958  13.543  13.095  12.327  12.124  12.520  12.501  11.132  10.964  11.049  10.648  10.132  11.552  11.913  12.926  14.664  13.740  13.086  12.852  12.697  13.410  14.702  13.526  12.341  12.579  14.133  16.174  14.847  12.443  11.489  11.035 
+ 11.423  13.730  13.842  11.299  10.201   9.923   9.048   9.588   8.874   9.330   8.028   7.846   7.855   7.879   7.236   6.659   7.097   7.482   8.598   9.418   8.853   8.627   8.753   9.047   8.658   8.892   8.943   9.014   7.651   8.088  10.035  11.365  10.559   9.092   7.985   7.520 
+ 10.714  13.362  12.980   9.174   9.372   8.639   7.994   7.466   6.846   7.350   6.689   5.915   5.803   5.394   5.504   5.152   5.579   5.741   7.887   8.412   9.083   8.249   6.947   6.152   5.801   7.355   8.255   7.533   6.164   6.357   8.400   9.745   9.332   7.507   5.048   4.377 
+ 11.160  13.621  13.323   9.960   8.440   8.512   8.656   8.493   6.791   6.868   4.951   4.972   4.798   5.321   4.874   4.485   5.136   4.708   6.630   8.321   8.551   8.209   6.018   5.424   6.193   7.270   8.026   7.103   6.187   5.602   7.930   8.597   8.404   5.575   4.599   4.458 
+ 11.004  13.271  12.459   9.233   9.031   8.361   7.806   8.667   6.655   5.599   6.447   5.465   4.884   5.054   4.691   4.384   4.157   5.525   6.700   7.563   8.331   7.995   5.757   5.078   5.596   7.062   6.859   6.475   5.651   5.612   7.230   7.812   7.711   6.523   3.834   2.816 
+ 10.693  13.205  12.726   9.608  10.384   9.770   8.109   7.245   5.796   5.661   6.924   5.292   6.777   7.516   7.660   7.827   7.779   6.998   7.328   8.305   9.083   7.900   6.816   6.893   7.712   8.797   8.821   7.474   5.966   6.160   7.440   8.743   8.960   8.175   8.093   8.002 
+ 11.064  13.305  14.120  13.143  12.847  11.323  11.405  10.687  10.010  10.490  10.499  10.051   9.501  10.815  11.168  10.771  10.828  10.743  10.644  12.022  13.846  13.002   9.522  10.971  11.851  13.181  12.949  11.672  11.986  11.379  12.011  13.627  12.862  12.728  13.229  12.814 
+ 11.146  13.909  14.377  12.256  13.433  11.679  12.933  11.690  10.568  10.368  10.754  10.828  10.362  10.682  10.825  10.527  11.087  11.861  11.759  12.750  15.241  14.955  12.261  11.986  12.702  13.510  13.855  13.093  13.537  13.334  14.024  14.728  14.041  14.383  14.569  14.131 
+ 11.624  14.819  15.484  14.044  15.336  13.924  13.706  12.221  11.523  11.782  11.244  11.905  11.206  11.174  11.665  11.154  11.614  12.513  12.479  13.836  16.397  16.137  14.081  13.311  13.170  14.443  15.532  14.171  13.345  12.903  14.058  15.912  14.288  13.896  13.058  12.050 
+ 12.683  14.982  16.220  14.822  16.339  15.493  13.915  13.490  12.653  11.975  10.864  11.214  11.895  12.046  11.979  12.144  12.459  12.475  13.038  13.754  16.358  17.447  15.463  14.229  13.661  14.533  15.968  15.284  13.632  13.407  14.899  16.382  15.017  13.101  13.490  12.566 
+ 12.997  14.999  16.393  15.008  16.612  16.136  13.800  13.864  12.860  12.747  11.204  11.092  11.957  11.984  11.815  11.940  12.596  12.581  12.954  13.837  15.921  17.384  15.917  14.344  13.644  14.453  16.133  15.581  13.776  13.575  14.846  16.202  14.406  12.553  12.656  11.324 
+ 12.968  14.848  16.469  15.247  16.434  16.327  13.885  14.170  13.063  13.392  11.662  11.653  12.071  12.125  12.250  11.973  12.604  12.864  12.969  13.886  16.187  16.585  15.586  14.695  13.895  14.649  16.406  16.096  14.290  13.884  14.380  15.794  14.535  12.235  12.955  10.282 
+ 12.776  14.627  16.277  15.100  15.840  15.870  13.375  13.623  12.628  13.044  11.548  11.526  11.279  11.789  12.205  12.041  12.190  12.723  12.922  13.515  16.256  16.647  14.484  14.138  13.320  14.328  15.593  15.393  13.610  13.247  13.758  15.132  14.171  11.118  11.954   9.392 
+ 12.219  14.315  15.334  13.981  14.731  14.410  12.174  11.757  11.404  11.652  11.353  10.616  10.688  10.956  11.309  11.181  11.181  11.702  12.167  12.917  15.796  15.556  13.256  12.792  12.076  12.901  14.559  13.904  11.927  11.351  12.239  14.277  13.352  11.367  10.819   9.785 
+ 11.070  13.011  12.102  11.988  12.073  10.745  10.309  10.115   9.374   8.381   8.542   8.683   9.111   8.174   8.111   8.022   8.993   9.644   9.721  10.813  13.196  12.381  10.584   9.537   9.464  10.316  11.625  10.374   8.682   8.504   9.422  11.981  11.203   9.100   9.026   7.626 
+ 11.056  13.056  12.721  10.608   8.384   7.448   7.862   7.759   7.240   7.504   5.843   5.126   6.104   5.866   4.682   3.765   4.759   5.988   6.323   7.501   9.264   9.332   6.052   6.343   6.329   7.302   7.016   6.252   5.810   5.556   6.231   7.090   6.973   6.413   6.259   6.273 
+ 10.695  12.110  11.237   9.805   7.163   6.380   5.893   6.408   7.935   7.677   8.119   7.198   6.883   5.884   5.829   5.140   5.557   5.049   6.307   6.686   7.746   8.177   6.640   7.364   6.482   6.391   6.414   6.405   6.390   6.542   6.659   7.091   7.162   6.449   5.965   5.707 
+ 10.143  11.324  11.667   9.810   8.545   7.633   7.234   7.180   7.922   7.157   7.046   6.883   5.602   5.566   4.678   4.457   5.112   4.986   5.819   6.337   6.930   7.262   6.101   5.321   5.345   5.496   6.999   6.277   5.387   6.448   7.169   7.349   7.303   6.598   6.564   6.810 
+  8.823   8.693  10.126   9.476   7.934   7.294   7.067   6.740   7.593   6.117   4.490   6.381   5.568   5.762   5.246   4.510   5.341   6.242   5.282   4.940   5.041   6.515   6.058   4.784   5.099   5.552   6.889   5.054   5.055   6.051   5.708   6.419   7.204   5.615   7.309   8.404 
+  9.191   9.703  10.806   9.137   8.577   8.148   5.315   5.314   6.195   4.318   4.667   5.663   4.345   4.713   5.019   4.707   4.656   4.631   4.100   4.836   5.729   6.837   6.325   5.539   5.182   5.844   6.758   6.074   5.740   6.014   6.320   6.893   6.552   6.348   8.671   9.090 
+  9.074  10.122  10.065   7.807   8.316   7.548   4.482   3.528   6.354   6.205   5.792   5.648   3.750   4.687   4.084   5.888   4.867   2.680   3.796   5.237   6.517   6.719   5.741   5.126   5.108   5.221   6.728   6.787   6.194   7.066   7.920   8.081   7.333   5.859   7.787   8.177 
+ 10.107  11.014  10.609   8.792   8.785   7.994   8.447   8.512   8.537   8.861   8.770   8.230   8.093   7.891   8.062   8.516   8.295   8.067   7.412   7.020   7.627   8.326   8.541   8.071   8.258   8.118   9.582  10.424   9.900   9.824   9.223  10.992  11.084  10.513  10.597   9.248 
+ 11.854  11.443  12.324  11.376  11.398  11.124  10.001  10.427  10.150  10.098   9.791   9.898   9.296   9.115   9.660   9.685   9.402   9.351   9.085   9.080  10.074  10.867  10.226   9.390  10.138  10.668  11.849  12.192  11.440  12.228  11.126  13.601  13.169  12.487  12.796  12.145 
+ 10.686  12.934  13.894  12.290  13.078  12.441  12.270  11.080  10.223  10.532  11.061   9.926   9.215  10.104   9.600   9.038   9.521   9.460  10.358  11.723  14.292  14.058  12.135  11.814  10.798  11.557  14.515  13.703  12.596  13.353  12.908  14.453  14.135  13.411  14.602  13.961 
+ 12.031  14.210  15.426  14.282  14.897  13.917  13.542  13.245  11.436  11.025  11.414  10.990  11.339  10.744  11.078  11.437  11.899  12.169  12.568  13.512  15.754  16.220  13.290  13.008  12.839  13.557  14.772  14.523  13.573  12.610  13.348  14.621  13.638  14.127  14.727  13.414 
+ 12.882  14.663  16.004  14.338  16.041  15.710  14.235  13.776  12.703  11.907  12.173  12.234  12.803  12.206  12.098  12.229  12.172  12.330  13.162  13.604  16.134  16.808  15.190  14.219  13.669  14.423  15.928  15.664  14.376  14.198  15.322  16.513  14.615  13.260  13.464  11.513 
+ 13.096  15.013  16.383  15.079  16.964  16.563  14.378  14.261  12.805  12.455  12.128  12.163  12.971  12.187  12.291  12.451  12.683  13.056  13.939  14.511  16.647  16.865  15.759  14.845  14.473  15.562  16.985  16.082  14.782  14.578  15.909  17.273  15.226  13.406  12.986  10.086 
+ 13.105  15.146  16.451  15.186  17.405  16.888  14.702  14.315  13.264  12.782  12.740  12.589  13.350  12.500  12.578  12.830  12.954  13.380  14.269  15.006  17.341  17.419  16.089  15.253  14.721  16.073  17.370  16.045  14.880  14.697  15.965  17.424  15.508  13.137  13.116  10.374 
+ 12.980  15.125  16.463  15.368  17.593  17.085  14.825  14.443  13.295  13.033  12.971  12.730  13.490  12.523  12.735  12.911  12.973  13.445  14.192  15.077  17.545  17.026  15.941  15.147  14.890  16.132  17.701  16.060  14.679  14.376  15.486  17.205  15.597  12.954  13.033  11.676 
+ 13.133  15.059  16.258  15.353  17.392  16.692  14.056  14.174  12.759  12.204  12.786  12.307  12.958  12.237  12.281  12.692  12.848  13.574  14.090  15.856  17.852  16.529  14.946  14.278  14.183  15.896  17.041  14.897  13.780  13.700  14.736  16.649  15.495  12.625  12.842  10.652 
+ 12.935  14.859  15.697  14.775  16.472  15.160  14.221  13.736  11.184  11.111  12.978  11.691  12.084  10.990  11.413  11.669  12.095  13.145  13.803  16.085  17.212  15.034  13.478  13.239  13.232  15.592  15.852  13.886  13.059  13.249  14.491  16.321  15.264  12.825  12.710  11.897 
+ 12.448  14.300  14.821  13.482  15.038  13.507  13.627  12.706  11.582  12.548  13.488  12.200  10.799   9.748  10.651  10.422  10.878  11.969  13.323  14.831  14.545  13.166  12.820  12.136  12.371  14.102  13.522  12.425  13.069  13.515  13.603  14.833  14.450  12.623  12.070  10.295 
+ 12.241  14.096  15.490  14.689  15.473  14.709  13.545  13.351  11.914  10.417  12.457  11.317  10.778  10.509  10.959  11.403  11.634  11.855  13.609  15.418  14.111  13.368  12.694  12.264  13.109  14.599  14.032  12.757  13.607  14.162  14.596  14.368  14.299  14.128  12.770   9.945 
+ 12.774  14.531  15.959  14.384  15.417  14.917  14.171  13.896  10.131   8.795  12.284  11.814  11.988  11.367  11.257  11.537  11.968  12.509  13.599  15.903  15.415  13.938  12.999  13.192  14.045  15.551  14.633  12.844  13.037  13.798  14.501  14.801  14.373  13.338  13.163  11.101 
+ 13.113  14.689  16.244  14.902  15.476  15.416  14.443  14.610  11.641  10.430  12.115  11.776  12.211  11.139  11.129  11.768  11.962  12.841  13.825  15.906  15.834  14.182  13.850  13.882  14.386  16.073  15.640  12.725  13.067  12.937  14.229  15.079  13.573  11.774  10.989  10.616 
+ 13.274  14.535  16.440  15.351  15.475  15.856  14.325  15.011  12.277  11.189  12.593  12.837  12.815  12.046  11.915  12.628  12.211  12.896  13.819  15.969  16.883  14.448  13.985  13.899  14.007  15.750  15.601  14.179  13.908  13.676  14.574  15.476  13.796  11.208  10.637  10.487 
+ 13.505  14.305  16.604  16.048  15.599  16.379  14.274  15.174  13.346  12.170  11.995  13.007  12.628  12.804  12.411  12.731  12.728  13.151  13.925  15.680  17.674  16.006  14.309  13.690  14.518  16.627  16.631  14.631  13.691  13.990  15.460  16.130  14.067  10.692  10.640   9.863 
+ 13.431  14.135  16.613  16.137  15.150  16.196  14.141  15.004  13.683  13.078  11.903  12.270  12.213  12.851  12.190  12.672  12.916  13.303  13.912  15.793  17.522  16.408  14.197  14.120  14.168  16.424  16.634  14.488  13.804  13.873  14.663  15.523  14.142  11.090   9.741   8.228 
+ 13.336  14.255  16.526  15.994  14.140  15.252  13.579  14.524  13.219  13.372  11.902  11.087  11.273  12.052  11.626  12.215  12.677  13.301  13.920  16.027  16.027  15.322  13.710  13.988  14.523  16.057  16.010  13.670  13.153  13.743  14.667  14.713  13.316  11.315   9.850   6.847 
+ 12.194  14.097  15.502  15.052  13.585  12.850  12.560  12.737  12.163  12.897  11.945  11.204  10.667  11.210  10.596  11.345  11.818  12.112  13.813  15.438  14.080  13.110  12.553  12.919  14.160  14.250  13.653  12.417  12.761  12.026  11.762  12.080  11.211   9.453   8.112   5.869 
+  9.686  12.484  13.343  12.086  11.311   8.936   7.746   8.919   9.536   9.827   9.600   8.829   8.904   8.710   8.688   9.628  10.579   9.402   9.887  10.015   9.172  10.005   9.907   9.389   8.603   8.029   8.212   8.039   6.911   6.571   7.498   8.135   7.157   5.216   5.366   4.209 
+  9.769  10.790  12.628  11.680   8.401   8.364   6.391   6.964   6.310   7.022   6.046   4.910   4.594   5.637   6.300   7.362   7.726   7.093   7.619   9.133   8.163   7.511   6.464   6.299   6.282   5.901   6.570   5.480   4.804   5.505   5.814   6.477   5.652   4.333   4.429   3.704 
+ 11.336  11.168  11.835  11.535   9.388   8.753   6.491   6.373   6.707   7.265   6.927   5.610   5.316   6.679   6.848   7.590   7.564   7.079   7.317   8.270   8.466   6.852   6.157   4.990   5.771   6.964   6.767   4.615   4.283   3.828   5.270   6.109   5.300   4.917   4.165   3.413 
+ 10.294  11.153  11.693   9.472   8.540   8.668   5.660   5.783   5.668   6.752   6.106   4.410   3.983   4.988   5.866   6.746   6.661   5.672   5.928   7.068   7.252   7.121   6.251   5.365   5.303   5.531   5.612   4.375   3.926   4.134   4.939   6.014   5.614   4.328   4.005   3.879 
+  9.389   9.676  10.333   8.675   8.985   8.811   6.222   4.835   4.825   6.345   5.954   4.250   5.404   5.388   5.766   5.881   6.285   6.826   7.327   6.913   7.912   7.495   6.545   5.373   5.606   6.133   6.330   6.370   4.818   5.176   5.007   5.241   5.543   5.586   4.880   3.257 
+  9.123   9.690   9.002   7.973   6.088   6.551   6.345   5.866   6.499   7.330   7.072   6.663   5.772   5.799   6.197   6.513   6.428   6.581   6.600   6.800   6.876   6.861   6.923   6.905   7.115   6.650   6.058   5.889   5.690   5.589   4.437   5.390   6.037   5.837   4.730   3.694 
+  8.551   9.322  10.529  10.188   8.373   7.983   8.384   8.478   9.560  10.406  10.803  10.174   8.698   7.530   9.020   9.506   9.793  10.031   9.688   9.653   9.391   9.596  10.011  10.394  10.530   9.895   8.914   8.371   8.696   8.560   6.867   7.219   8.251   7.951   7.214   5.971 
+  7.950   8.993   9.591   7.939   7.183   6.561   5.899   7.013   6.745   7.873   8.581   7.731   5.198   5.510   6.645   6.252   6.458   7.364   6.270   6.350   6.451   6.406   6.613   7.263   7.396   6.653   5.938   5.376   5.918   5.617   4.733   5.336   5.411   5.216   4.735   3.773 
+  7.910   8.725   7.230   5.818   5.675   6.755   5.973   6.589   4.726   4.425   3.036   3.335   4.036   5.235   4.951   3.955   3.553   3.649   5.063   4.679   5.566   4.735   4.765   5.148   4.020   4.672   4.911   4.095   4.315   4.343   3.632   4.866   4.170   4.763   3.748   2.902 
+  6.532   6.577   5.107   5.080   5.932   6.336   5.078   5.612   3.789   5.445   5.942   4.369   3.103   4.190   4.543   4.339   4.254   4.263   4.828   5.266   5.778   5.188   5.087   5.218   3.715   3.790   3.818   4.213   4.714   4.062   4.375   4.731   3.614   2.818   2.964   1.977 
+  4.341   4.349   5.362   5.360   5.652   6.073   4.325   4.230   3.348   4.697   4.424   3.288   3.930   4.644   4.806   4.674   4.155   4.359   4.762   4.707   5.802   5.162   5.211   4.388   3.828   3.963   4.546   4.064   3.694   4.100   3.563   3.646   3.495   3.445   3.759   2.501 
+  3.688   3.960   6.181   5.987   4.198   4.871   5.254   3.967   3.608   4.528   4.262   3.291   3.028   4.129   3.791   2.955   3.627   3.763   3.923   5.148   5.893   3.871   4.844   5.351   4.475   3.607   3.539   3.564   3.389   3.643   3.556   3.953   3.767   3.160   3.734   2.390 
+  4.292   4.632   5.914   5.455   3.753   4.260   4.255   3.704   4.155   3.746   2.439   3.596   3.505   5.809   5.359   3.225   4.574   4.391   4.407   4.752   6.169   5.506   5.257   4.664   5.545   4.053   3.382   4.390   3.398   3.402   3.448   4.035   3.833   3.112   3.078   2.125 
+  5.459   5.007   4.894   4.755   4.105   5.444   5.131   4.599   3.250   3.350   4.640   3.810   4.181   4.958   5.144   2.771   4.139   5.127   5.002   5.357   5.846   5.522   4.620   4.413   5.528   4.404   3.683   3.847   3.407   3.799   3.494   4.051   3.565   3.496   2.660   1.923 
+  5.053   4.510   4.524   5.548   4.929   4.566   5.113   5.059   3.618   3.568   4.016   3.540   2.873   5.103   4.619   1.769   2.985   4.491   4.647   3.818   4.696   4.438   3.563   3.491   4.380   3.267   4.675   4.888   3.645   3.719   3.682   2.353   2.704   3.031   2.627   1.648 
+  5.866   5.252   4.268   4.330   3.109   3.746   4.717   5.001   4.492   3.101   2.709   3.807   3.534   5.841   4.886   2.086   2.800   4.368   3.690   4.628   4.412   4.550   4.923   3.540   3.106   2.870   3.809   4.663   3.612   3.245   3.576   3.644   3.047   2.749   2.086   1.579 
+  6.106   5.331   3.787   4.017   3.283   4.268   4.174   4.432   4.374   3.460   2.925   3.945   3.396   4.177   3.801   2.935   4.165   4.018   4.356   4.363   4.228   3.750   4.365   4.570   3.889   3.270   2.594   4.299   3.918   3.318   2.894   3.892   3.214   3.383   2.781   1.365 
+  3.496   4.374   4.536   4.065   5.102   4.996   3.929   2.501   3.208   2.749   4.070   5.197   4.576   5.268   5.200   3.865   4.003   4.017   4.262   4.735   4.794   4.558   4.112   4.153   4.044   3.359   3.791   4.110   3.561   3.643   3.240   3.403   2.959   3.342   2.979   2.418 
+  4.191   4.824   3.464   3.832   5.222   5.007   4.988   3.640   3.116   4.032   3.450   3.769   4.014   4.696   4.290   4.185   3.357   4.081   4.415   4.265   5.287   4.697   4.196   3.859   3.773   4.097   3.937   2.876   2.920   3.142   3.046   3.362   2.761   2.571   2.293   2.094 
+  3.432   4.808   4.179   3.583   3.676   4.702   4.700   4.196   3.906   3.374   3.418   4.289   5.019   4.156   4.924   5.054   5.081   5.093   4.414   4.377   4.105   4.113   4.866   3.374   4.384   3.506   3.672   3.427   2.820   2.751   2.212   2.920   3.110   2.738   2.162   1.405 
+  5.308   5.604   5.832   4.544   4.302   4.533   4.311   3.048   2.862   3.299   4.159   4.124   3.939   4.839   4.635   4.402   3.632   3.761   4.682   4.564   3.517   5.231   4.953   4.104   4.428   3.583   3.187   3.792   3.680   3.327   2.263   2.724   3.512   3.257   2.779   2.598 
+  5.547   4.235   3.791   3.210   3.462   5.084   4.521   4.190   3.748   3.490   3.367   2.766   2.561   4.464   4.117   3.846   3.359   4.224   4.294   3.693   3.225   4.334   4.572   3.516   3.491   3.487   2.663   3.065   2.966   2.975   3.377   3.544   3.536   3.159   2.132   1.959 
+  6.209   5.291   3.207   4.250   4.004   4.514   4.841   3.692   3.263   2.367   2.892   2.419   3.654   4.652   4.644   4.685   4.333   3.718   3.975   3.330   3.735   4.282   3.519   2.751   2.883   2.682   2.946   3.736   3.104   2.094   3.388   3.102   3.684   3.475   2.682   1.848 
+  6.274   6.381   4.881   3.621   3.368   4.512   4.832   3.738   2.246   1.433   2.920   3.637   3.115   5.188   5.675   4.528   3.695   3.964   3.558   3.675   4.996   4.388   3.989   4.442   3.694   3.088   4.367   3.438   2.429   2.651   3.863   2.987   3.539   3.632   3.137   2.295 
+  5.439   7.015   7.640   9.019   9.944  10.860  10.858   9.698   8.679   8.534   8.367   8.486   7.850   7.240   9.560  10.879  10.568   8.723   8.942   8.480   8.157   8.152   7.895   7.812   8.173   7.818   8.279   8.023   7.529   7.251   8.652   7.362   6.703   6.139   7.122   5.807 
+  5.546   6.484   6.978   8.322  10.270  11.895  12.610  11.609   9.479   7.731   7.631   7.634   6.872   6.459   9.449  11.453  11.931   9.861   8.433   7.693   7.233   7.347   6.955   7.157   7.457   7.051   8.531   7.782   6.889   6.958   9.404   7.620   5.972   5.632   7.593   6.638 
+  4.520   4.155   4.291   4.806   5.151   7.468   9.991  11.415  10.968   8.523   4.664   4.896   4.395   4.187   4.361   6.712   9.059   8.583   5.066   4.737   7.309   7.581   7.459   8.189   6.964   7.323   7.507   6.558   6.234   7.498   8.008   7.364   4.973   8.028   9.274   7.946 
+  5.311   3.758   5.072   5.880   4.771   5.218   8.018   8.142   9.570   9.175   7.395   7.988   6.707   7.011   7.616   8.875   9.256   8.278   8.397   7.388   7.167   7.521   7.395   6.937   6.019   6.196   6.709   6.523   6.209   6.160   7.141   7.036   5.747   6.417   7.480   5.650 
+  5.122   7.022   6.893   6.604   6.402   9.221  10.466  11.423  11.546  10.923  12.023  11.068  11.478  11.739  12.239  13.296  13.623  11.825  11.479  11.443  10.656  10.012   9.852  11.166  10.137   9.139   7.628   8.052   8.480   9.058   9.613   9.248   8.006   7.130   6.242   6.328 
+ 11.067  11.645  11.470  11.366  12.152  13.047  13.600  13.695  14.856  16.142  16.441  16.202  15.558  14.962  15.153  15.879  16.678  15.585  14.001  12.677  12.321  12.018  11.790  12.044  11.002   8.726   9.452   9.609   9.829   9.918  12.431  13.069  11.704   8.580   7.413   7.251 
+ 10.889  12.568  12.195  12.080  11.811  13.268  14.024  13.984  14.927  16.991  17.092  17.499  16.469  15.040  15.034  16.125  17.549  16.989  15.014  13.841  13.246  12.972  13.313  13.789  12.789  11.301  10.980  10.569  10.159  10.378  12.443  12.874  11.711   9.724   7.596   6.068 
+ 10.803  12.889  12.792  11.841  12.086  13.511  13.771  14.645  15.625  17.035  16.878  17.132  15.627  14.596  14.929  15.817  16.691  17.431  16.416  15.256  14.372  13.779  13.925  15.025  15.330  14.298  13.002  11.529  10.300  12.001  13.494  13.211  11.568   9.905   8.664   6.882 
+ 11.156  13.346  13.301  12.513  13.009  13.666  14.412  15.524  15.935  17.394  16.633  16.961  15.596  14.971  15.296  15.793  16.026  16.908  16.571  15.534  14.861  14.022  14.322  15.237  15.351  13.841  12.659  11.717  11.523  11.169  12.857  12.857  11.333   9.470   9.311   8.034 
+ 11.642  13.647  13.887  12.652  13.698  13.965  15.032  16.109  16.744  17.797  17.090  16.458  15.657  15.081  14.901  15.225  15.828  16.718  17.727  17.318  16.173  15.619  15.684  16.236  16.327  15.006  13.917  13.315  12.182  12.203  13.594  13.644  12.418  11.720  11.426   8.678 
+ 12.019  13.647  14.420  12.666  14.449  14.514  16.257  16.341  17.210  16.732  16.297  15.277  15.052  14.546  14.307  14.130  14.494  15.386  16.675  17.224  16.839  15.573  15.276  15.311  15.424  14.606  13.129  12.731  11.750  11.441  12.078  13.211  12.710  12.364  10.918   7.702 
+ 12.863  13.480  14.834  13.814  15.526  15.580  17.082  16.565  16.197  15.848  14.877  14.519  14.732  13.915  13.694  13.627  14.284  14.923  15.998  17.271  17.418  16.243  15.549  15.473  15.724  14.395  13.783  13.264  11.693  11.840  12.793  13.646  13.649  13.078   9.941   6.075 
+ 13.081  12.785  14.780  14.065  16.002  15.836  16.084  16.257  13.866  14.612  13.245  13.550  13.243  13.439  12.721  12.284  13.444  13.864  14.887  16.658  17.259  15.167  14.795  14.800  15.427  14.266  14.145  12.799  10.842  10.482  11.672  13.029  13.275  12.367   8.690   5.440 
+ 13.986  12.395  14.922  14.999  15.149  16.322  14.441  13.289  13.025  13.784  13.016  12.684  12.632  13.253  12.163  12.140  12.725  13.422  14.298  15.935  16.126  14.740  13.983  13.972  15.105  15.541  14.812  12.484  10.287  10.060  11.295  12.706  13.252  11.669   8.147   6.330 
+ 14.399  12.307  14.794  16.250  14.939  16.456  16.234  13.441  14.274  12.930  13.014  11.946  12.882  12.402  12.636  12.026  12.750  13.095  14.094  15.395  16.177  15.440  13.558  13.650  14.613  16.137  15.204  11.723   9.788   9.958  11.080  12.692  12.670  11.599   8.461   6.607 
+ 14.860  13.466  14.070  16.948  16.414  15.177  16.680  15.065  14.130  14.225  12.317  13.092  12.586  13.276  12.714  12.671  13.479  13.418  14.153  15.329  16.624  16.528  15.506  14.732  15.161  16.137  15.735  12.693  11.961  11.462  11.982  13.433  13.719  12.474   8.882   7.753 
+ 14.908  14.140  12.673  17.189  17.360  14.382  16.470  16.123  13.660  15.083  13.108  13.363  12.620  13.450  12.774  13.021  13.089  13.700  14.008  15.263  16.715  17.828  16.457  15.343  16.015  16.646  15.632  13.422  12.823  12.001  12.477  13.624  14.205  13.121   8.803   8.205 
+ 14.812  14.350  12.427  17.058  17.671  14.928  15.535  16.131  13.332  14.694  13.696  12.625  12.892  12.602  12.981  12.423  12.477  13.860  13.502  14.049  15.773  17.714  16.870  15.761  15.544  16.101  15.542  13.964  13.700  12.707  12.733  13.718  14.182  13.022   8.940   8.417 
+ 15.103  14.888  12.464  15.621  17.353  16.002  13.980  15.877  14.567  12.556  13.552  11.514  12.407  11.333  12.147  11.568  12.702  12.827  13.326  13.602  15.188  16.775  17.397  15.827  15.474  15.904  15.623  14.515  14.308  13.183  13.143  14.189  14.717  13.981   9.476   8.484 
+ 15.187  15.157  12.335  14.509  16.546  15.305  12.473  15.160  14.100  12.928  14.503  12.331  11.821  10.757  11.806  11.033  12.167  11.443  12.274  12.584  14.147  15.174  16.761  15.358  14.609  15.112  14.965  13.780  13.701  12.482  12.488  13.468  13.952  12.915   9.201   8.212 
+ 15.240  15.129  12.134  13.628  15.326  13.897  11.666  14.410  13.918  12.005  14.225  12.813  11.063  10.726  10.887  10.599  11.311  10.461  11.030  11.208  12.865  14.477  15.397  14.444  14.036  13.514  13.334  12.641  11.963  11.098  11.169  12.444  13.137  10.362   9.417   8.786 
+ 15.580  16.000  14.078  12.377  14.196  13.021  10.465  12.371  12.010  10.281  13.239  11.902   9.057   9.652  10.383  10.446  10.562  10.197   9.865  10.124  11.111  13.127  12.106  12.394  12.721  11.218  10.262  10.239   9.625   8.837   9.338  11.382  12.525  10.109   9.145   8.592 
+ 15.764  16.184  13.889  11.198  14.240  13.573   9.559  12.373  11.823  10.426  13.216  11.809   8.455   8.328  10.035  10.236  10.856  10.351   9.956   9.491  10.099  11.933  10.595  12.204  12.675  11.397   9.578   8.115   6.745   6.876   8.222  11.142  12.103  10.073   9.458   8.692 
+ 15.793  15.978  13.430  12.202  14.597  13.592  10.148  12.562  11.562  11.375  13.362  11.429   9.356   8.534  10.221   9.731  11.119  10.287  10.511  10.089  10.769  11.924  10.618  12.700  12.761  12.043   8.696   7.785   7.677   8.064   8.517  11.783  13.586  10.267   9.552   9.616 
+ 15.718  15.630  12.730  13.106  14.878  13.282  10.481  12.544  10.925  12.288  13.127  10.055   9.845   8.171  10.046   9.440  10.752  10.356  10.591  10.454  10.970  11.284  11.331  12.896  13.265  12.133   9.442   8.542   8.067   8.900   9.297  12.542  13.383  10.035   9.822  10.520 
+ 15.581  15.217  11.982  13.821  15.038  12.951  11.895  12.817  10.149  12.867  12.569   9.069   9.795   8.925   9.383   9.925   9.955  10.491   9.785   9.917  10.515  11.320  12.395  13.213  14.346  13.049  12.127  11.544  10.878  11.043  11.503  13.157  13.792  11.209  10.571  10.646 
+ 15.224  14.621  12.261  13.785  14.693  12.507  13.505  13.649  12.663  13.654  11.664  10.244   9.618  10.277   9.642  10.256  10.008  10.737   9.381   8.876   9.292  11.004  13.889  14.858  14.274  14.297  13.582  13.913  12.478  12.155  12.654  14.167  14.319  11.444  10.762  10.597 
+ 14.806  13.494  12.078  14.813  14.119  12.256  14.213  12.979  13.102  13.399  11.239  11.894   9.641   9.995  10.086  10.028  10.758  10.011   8.879   8.215   9.076  11.254  13.907  15.088  13.831  13.570  13.931  14.696  13.882  13.022  13.471  15.078  14.308  10.572   9.348   9.226 
+ 14.567  12.916  12.938  15.014  13.801  13.089  13.968  11.523  13.167  12.378  11.882  11.794   9.284   9.064  10.210   9.631   9.800   9.813   8.587   7.954   8.759  10.697  13.214  14.461  13.791  12.826  13.612  15.001  14.378  13.472  13.910  15.149  13.989  11.052  10.621   9.688 
+ 14.420  12.547  13.623  15.033  13.323  13.511  13.541  11.339  12.868  11.175  12.099  10.905   9.056   8.888   9.673   9.452   9.107   9.516   8.382   7.886   8.588  10.989  12.654  13.959  13.311  12.510  13.233  14.517  14.288  13.361  14.210  15.377  13.662  10.919  10.655   9.811 
+ 14.155  11.990  14.086  14.942  12.747  13.749  13.084  11.730  12.429  10.684  11.601   9.354   9.065   9.439   9.276   9.426   9.023   8.862   7.951   7.944   9.167  10.737  12.230  14.206  13.240  12.406  13.520  14.245  13.973  13.397  14.403  15.771  13.452  11.117  11.242  10.402 
+ 13.947  11.781  14.446  14.948  12.668  14.057  12.860  12.213  12.308  11.149  11.513   9.559   9.369   9.449   9.020   8.894   9.035   8.365   8.336   8.805   9.964  11.422  13.555  14.866  13.430  13.270  13.839  13.837  13.050  12.756  14.391  15.185  13.489  10.733  11.198  10.499 
+ 13.796  12.333  14.842  14.876  13.038  14.485  12.935  12.605  12.131  11.718  11.401  10.428   9.822   9.497   9.336   9.282   9.404   9.570   9.880  10.532  11.486  13.299  15.060  15.222  13.921  12.246  12.296  11.599  10.817  11.218  12.998  13.500  11.899   9.791  10.977  10.235 
+ 13.362  12.637  15.069  14.636  13.455  14.696  12.560  12.583  11.487  11.780  10.636  10.623   9.459   9.208  10.111   9.818  10.086  10.851  11.052  11.676  12.428  13.242  13.652  14.270  12.629   9.383   9.298   8.912   9.271   9.890  12.737  12.812  10.929   9.103  11.255   9.906 
+ 13.125  13.169  15.226  14.362  13.945  14.584  12.338  12.190  10.857  11.471   9.489   9.831   9.180   9.506  10.698  10.332  10.686  11.406  12.047  12.080  11.881  11.968  12.537  13.318  11.429   8.644   8.252   7.421   7.852   8.373  11.251  10.846   9.120   8.308  10.472   8.585 
+ 12.759  14.011  15.374  13.827  14.429  14.012  12.706  12.215  11.848  11.534  11.330  10.437  10.456   9.726   9.912   9.972  10.693  11.816  12.683  12.781  11.565  11.457  12.138  13.168  11.398   8.768   8.092   8.032   8.304   8.803  10.098   9.401   8.887   8.393   8.931   7.067 
+ 12.301  14.583  15.429  13.591  14.730  13.658  13.637  12.248  12.311  11.782  12.187  11.056  10.711   9.529   9.264  10.376  10.991  11.518  12.183  12.738  12.184  11.707  12.695  13.042  11.466   9.525   8.999   8.108   9.595  10.714  12.121  11.221   9.902   9.423  11.356   9.568 
+ 12.271  14.979  15.145  13.743  14.619  14.040  14.427  12.516  12.379  12.653  11.798  11.000  10.378   9.951  10.057  10.776  11.050  10.999  11.527  12.898  13.668  13.459  13.517  14.034  13.399  10.266   9.174   8.687   9.405  10.402  12.124  11.327   9.988   8.950  10.300   8.500 
+ 12.914  15.255  14.871  13.990  14.086  15.067  14.754  12.493  12.623  12.970  11.806  11.165  10.305   9.859  10.580  10.382  11.026  10.766  11.790  13.048  14.991  15.368  14.579  14.807  14.418  12.961  10.916  10.865  10.661  10.789  12.777  11.544  11.227  10.220  10.224   9.022 
+ 13.740  15.329  14.368  13.541  13.558  14.736  14.018  12.646  12.372  12.238  12.247  11.452   9.778   9.816  10.051   9.674  10.396  10.318  10.839  11.835  14.001  14.552  13.605  13.658  13.881  13.960  11.637  10.784  10.902  11.202  13.126  12.921  12.598   9.101   9.761   9.375 
+ 14.402  15.630  14.522  13.423  12.974  13.361  11.033  11.100  10.784  10.750  10.936   9.557   8.895   7.655   8.674   8.616  10.286  10.223   9.834  10.274  11.073  11.170   9.609  10.290  11.563  11.770   9.854   8.335   8.258   8.191   9.569  11.508  12.141   9.184   8.448   8.780 
+ 14.734  15.721  14.222  13.024  13.314  13.207  11.270  10.579  10.339  11.106   9.625   9.122   9.501   7.085   7.825   8.079   9.564  10.102   9.810  10.127  11.712  11.114   8.190   9.076  10.322  11.962  10.819   7.971   9.249   8.966   6.895  10.480  11.400   9.220   9.682  10.020 
+ 14.884  15.455  14.009  13.290  13.636  12.870  11.496  10.402  10.412  11.087  10.317  10.833  10.301   7.699   8.082   8.524   9.463   9.621   9.451   9.743  10.823  10.645   8.073   9.109  10.340  11.017  10.579   7.575   8.743   9.106   7.282  10.196  10.909   9.063  10.034  10.114 
+ 14.713  14.922  13.711  13.223  13.302  12.039  11.426  10.273  10.699  10.901  10.369  10.431   8.810   7.121   8.410   8.731   8.518   8.398   7.976   8.432  10.334  10.432   8.574   9.492  10.713  10.856  10.363   7.801   8.366   8.799   8.264  10.823  11.451  10.402   9.813   9.564 
+ 14.118  13.773  13.200  12.701  12.068  10.351  11.222  10.879  11.311  10.811  10.168  10.205   8.497   6.133   7.629   7.766   7.636   8.601   8.319   8.510   9.832   9.856   9.288   9.599   9.954   9.955   9.400   7.373   7.047   8.110   7.962   7.909   9.899  10.129   9.300   8.795 
+ 12.934  12.076  12.474  10.788   9.795   9.369   9.058   8.709   9.884   9.574  10.004   8.715   7.955   7.014   8.274   8.274   8.283   8.310   7.760   7.726   8.512   8.822   8.670   8.982   8.969   8.717   8.348   7.457   6.970   6.832   6.254   6.377   7.363   8.571   8.432   7.000 
+ 11.105  11.274   9.942   9.711   8.443   7.712   7.145   8.470   8.540   8.944   8.697   6.853   5.678   5.443   5.265   5.935   6.430   7.724   6.362   5.498   7.212   7.266   6.615   6.936   7.517   7.186   6.895   5.850   5.327   5.077   5.317   5.492   6.194   6.570   6.349   6.108 
+  7.297   9.011   9.140   7.189   5.026   6.245   6.327   6.389   8.272   9.491   9.198   6.969   5.717   5.048   4.412   5.242   5.779   6.763   7.051   6.058   5.755   6.112   6.334   7.163   7.264   6.683   6.195   5.692   4.238   4.313   4.776   5.187   5.930   6.333   5.688   5.252 
+  6.278   6.421   7.526   6.757   6.210   6.611   5.086   5.489   6.898   8.639   8.624   6.490   4.680   5.799   4.338   4.133   4.826   5.191   5.522   4.943   4.566   5.365   5.031   5.883   5.836   6.003   5.623   4.744   3.918   4.475   4.594   5.445   5.208   5.602   4.870   4.178 
+  8.112   8.565   8.510   8.954   9.166   9.271   9.125   9.193   9.198   9.277   9.189   9.294   8.960   9.197   9.061   9.090   9.328   9.566   9.479   9.791   9.731  10.027  10.198  10.314  10.334  10.306  11.469  12.848  13.125  12.463  11.602  11.350  10.360  10.061   9.750   8.910 
+  9.002  10.184   9.681  11.169  10.769  11.600  11.091  11.363  10.991  10.807  10.964  10.770  10.668  10.926  11.270  11.512  11.951  12.075  12.166  11.802  11.154  12.408  12.505  12.704  12.604  13.369  15.282  15.747  15.822  14.352  14.471  14.684  15.509  15.474  13.763  13.727 
+ 10.259   9.269  10.064  10.735  10.004  10.799  10.985  10.242  10.162  10.462   9.654  10.029   9.322  10.007  10.407  10.564  11.507  11.290  11.552  11.850  11.549  13.483  12.994  13.273  13.229  15.149  17.175  16.159  17.573  17.941  17.279  17.460  17.029  17.186  17.533  16.858 
+  9.530  10.315   8.965   8.095   9.896  10.366   9.430   8.729  10.956  10.710   8.254   9.232   9.895  10.233  10.485   9.978  10.753  10.597  10.333  10.477  11.867  13.233  13.002  14.605  14.890  17.964  18.343  17.670  18.955  18.882  17.744  18.080  18.054  17.786  18.615  18.165 
+  9.625  10.483  10.375   9.958   9.916  11.291  10.047   7.873  10.552   9.985  10.544  10.422   9.940  10.701  10.785   9.395  10.233  11.702  11.153   9.919  13.404  15.110  13.972  14.860  16.551  18.101  18.006  18.169  19.100  18.190  18.264  18.171  17.670  17.254  18.264  18.286 
+ 10.440  10.031  10.961  10.582  10.679  10.695   9.656   9.106  11.024  10.587   9.052   8.908  10.127  11.516  10.845  10.779  10.622  10.456  10.476  12.047  13.262  14.519  14.667  15.114  16.254  18.185  17.912  17.319  18.632  18.616  16.964  16.856  17.170  17.693  17.361  16.905 
+ 12.049  10.407  10.723  10.003  10.161   8.820   9.088   9.941  10.422  10.116   8.788   9.244  10.403  10.517  10.272   9.696  10.501  11.365  10.875  13.116  14.718  16.035  14.005  15.003  15.866  16.976  17.266  16.694  17.773  17.296  16.685  16.451  17.063  16.504  17.024  16.755 
+ 13.858  12.483  10.798  10.573  11.072  11.175  11.629  10.512  10.498  10.115  10.018  10.630  10.508   9.755   9.946   9.776   9.724  10.781  11.244  12.838  14.439  16.170  14.102  14.777  16.509  17.859  17.449  15.977  18.027  17.731  16.869  16.549  16.469  16.968  16.953  16.640 
+ 12.279  10.489   9.820  11.338  10.975  10.824  10.587  11.105   9.876  10.186  10.210   9.837   9.933  10.305   9.405   8.913   8.563  10.171  12.176  12.617  14.905  14.744  12.618  14.485  16.770  18.870  17.140  15.789  16.836  16.812  16.030  16.250  14.383  15.761  15.100  14.658 
+ 12.883  11.196  11.111  10.814  10.380   8.492  10.170  10.977   9.273   8.323   8.996   9.674   8.279   8.739   8.416   8.690   8.034   9.623  10.039  11.331  12.661  13.106  12.801  13.392  15.068  16.929  15.198  14.438  14.380  13.736  13.651  13.857  12.919  12.553  12.382  11.719 
+ 13.722  13.759  13.765  13.739  15.048  15.255  15.404  15.523  14.429  13.529  13.368  13.485  12.977  11.896  11.906  12.208  12.798  12.935  13.359  14.112  14.906  15.129  13.887  13.636  14.400  14.648  13.680  13.181  12.992  11.800  10.619  11.205  12.079  12.182  11.891  10.126 
+ 13.392  14.434  15.223  13.496  15.972  16.533  17.753  18.279  16.744  15.488  15.606  14.987  14.937  14.660  14.268  14.344  14.720  15.037  15.746  17.032  18.177  17.706  16.186  16.140  16.624  16.618  15.706  14.810  13.815  11.955  13.266  14.338  13.940  12.807  12.672  11.174 
+ 12.339  14.126  14.891  13.996  15.103  15.837  18.637  18.544  18.445  17.176  16.116  15.433  14.746  14.748  14.596  14.759  14.856  15.207  16.184  17.690  19.062  18.204  16.793  16.701  17.159  17.394  16.221  15.652  14.951  13.729  16.173  16.566  15.483  14.615  13.378  12.184 
+ 11.511  14.142  14.152  14.341  15.274  16.265  17.405  18.684  19.524  17.308  15.556  15.966  15.748  14.961  14.817  15.155  15.466  15.411  16.691  18.194  19.570  18.639  16.664  16.715  16.343  16.960  15.916  15.387  14.591  14.694  16.688  16.706  15.812  15.049  12.756  10.623 
+ 11.406  14.130  13.450  14.467  14.422  15.032  15.936  18.912  19.147  18.660  16.515  15.997  15.643  15.157  14.736  15.272  15.377  15.365  16.681  18.194  19.243  18.325  16.883  16.896  16.775  16.121  15.123  14.911  13.846  15.190  16.942  17.550  16.918  16.272  13.334  11.372 
+ 11.718  13.719  13.139  14.046  13.611  14.757  16.220  17.678  18.641  18.857  15.772  15.062  14.693  14.847  14.798  14.736  14.737  15.571  16.282  18.037  18.875  17.672  17.053  16.563  16.497  15.610  14.901  14.386  13.210  15.588  16.516  17.295  16.715  15.957  13.271  11.742 
+ 11.600  13.565  12.733  13.965  13.769  14.734  16.321  16.954  18.940  18.267  15.156  15.249  14.722  14.509  14.429  14.305  14.571  15.308  15.672  17.515  18.535  17.716  16.952  16.386  16.360  15.042  14.308  13.929  13.138  15.094  16.042  16.398  16.376  15.793  12.953  11.639 
+ 12.112  13.567  12.900  13.955  13.823  15.055  16.779  17.135  18.393  17.082  14.377  13.927  13.992  13.913  13.491  13.412  14.140  14.093  14.959  16.084  17.691  17.389  16.037  15.729  15.641  14.260  13.299  12.931  12.506  13.461  14.494  15.059  15.152  15.035  13.040  11.320 
+ 12.089  13.464  12.890  13.471  13.977  15.117  16.744  16.888  16.822  15.242  14.635  12.416  12.637  12.200  11.720  11.416  12.609  12.084  12.910  13.990  15.196  16.466  15.271  14.949  14.796  14.134  13.036  12.537  12.051  10.318  13.009  13.893  13.859  14.252  13.079  10.950 
+ 10.583  11.536  11.330  11.286  12.872  14.729  15.301  14.107  12.714  12.861  11.749   9.530   9.937  10.114   9.888   8.601  10.051   9.701  10.274  11.783  12.717  13.575  14.284  13.941  13.635  13.251  11.726  11.454  10.519  10.059  11.192  11.316  12.406  12.757  11.890  10.476 
+  9.274   9.754   9.094   6.583   8.461   9.397  10.736  11.683  12.597  11.675   9.635   8.263   7.651   8.422   8.959   7.475   7.754   8.021   9.111   9.588  10.679  10.939  11.577  11.002   9.518   9.340   8.551   8.386   7.162   7.759   9.291   8.392   8.727   8.384   7.550   7.565 
+  5.714   7.673   7.253   7.478   8.163   8.912  10.836  11.917  11.896  11.081   8.544   5.959   7.190   6.395   6.802   5.277   5.157   5.056   7.731   9.668  10.492   9.991   8.655   7.556   7.842   7.907   7.911   7.385   7.202   7.828   8.011   8.233   7.254   7.490   6.219   5.330 
+  6.021   7.615   6.634   5.891   7.131   8.349   9.321  10.296  10.621   9.542   6.574   6.007   6.368   6.164   5.533   4.740   5.655   4.905   7.264   9.451  10.090   9.733   8.543   7.957   7.880   6.736   6.540   6.043   6.424   6.986   7.572   7.705   7.183   7.017   6.706   5.640 
+  5.254   6.583   6.562   6.951   6.818   7.869   9.102   8.170   8.639   8.410   5.615   5.296   5.633   4.985   5.773   5.873   6.907   7.416   7.840   8.430  10.556  10.102   8.554   8.025   9.359   9.716  10.694  11.118  11.213  11.252  11.161  10.251   9.064   8.172   7.975   7.611 
+  6.250   5.094   6.992   7.025   5.686   6.689   8.743   8.590  10.125   9.086   6.054   5.844   5.497   5.765   7.015   7.889   7.992   8.385   8.665   8.508   9.894   9.225   8.820   7.968   9.799   9.942  11.078  11.500  11.620  11.617  11.463  10.453   9.116   8.284   8.586   8.337 
+  4.369   5.562   5.502   5.429   6.218   7.235   7.854   9.234  10.088   8.721   6.491   4.416   5.500   4.707   4.679   5.033   6.167   6.975   6.841   7.337   8.223   7.364   6.533   6.270   6.678   6.470   5.272   5.785   6.202   5.867   6.023   6.979   6.785   4.808   5.431   5.270 
+  4.568   4.638   5.534   3.791   4.196   5.534   7.972   8.147   9.620   9.598   7.450   5.653   4.929   4.259   5.127   4.858   6.009   6.193   6.119   7.072   7.661   7.527   4.903   6.177   6.125   6.078   5.365   4.199   5.776   6.018   7.319   7.341   5.833   5.531   5.628   4.871 
+  4.529   4.981   4.461   5.337   6.266   6.712   7.420   8.266   9.358   9.025   5.757   5.602   4.554   4.316   4.828   4.266   5.453   5.885   6.848   8.195   9.010   8.176   5.633   5.759   5.539   5.228   4.170   4.797   5.315   5.454   6.961   6.906   6.917   5.952   5.305   3.813 
+  7.692   7.681   7.637   8.701   8.885   9.123   9.518   8.451   8.872   8.897   9.599   9.484   9.435   9.075   9.107   9.579  10.078  10.985  11.547  11.702  11.545  10.705  10.060  10.168  10.708  11.706  12.597  12.998  12.345  13.166  14.366  14.356  13.291  12.962  13.591  12.807 
+  8.570   6.668   6.418   8.805   9.701  10.018  10.690  10.023   9.306  10.378  10.295  10.234  10.384  10.518  10.167  10.860  10.961  11.762  12.275  12.279  12.078  11.693  11.171  11.071  11.680  12.486  13.345  13.830  13.457  14.540  15.394  15.433  14.456  14.203  14.463  13.656 
+  5.144   5.720   4.895   4.393   6.614   7.471   6.488   6.056   7.394   7.463   7.573   7.240   7.036   7.178   7.440   7.204   7.387   7.756   8.230   8.338   8.100   8.292   7.639   7.311   7.984   9.001   9.915  10.043  10.548  12.272  12.928  12.488  12.909  12.697  11.952  11.891 
+  6.069   7.927   8.728   8.445   7.716   9.084   8.890   8.691   8.313   8.540   8.817   8.016   7.725   8.084   7.688   7.926   8.194   7.820   7.871   7.700   7.866   7.826   7.234   7.193   7.956   8.887   9.794  10.276  11.306  13.064  14.263  14.364  13.549  13.417  13.268  12.941 
+ 10.487  11.605  11.491  12.327  12.523  12.415  11.339   9.981   9.331  10.069   9.659   8.506   8.837   8.621   8.514   9.174   8.691   7.927   8.594   8.686   9.393  10.378   9.564   9.294   9.121   9.999  11.505  11.981  12.314  12.850  13.288  13.879  13.726  13.241  13.937  13.338 
+ 12.446  12.596  13.062  13.760  14.714  15.051  13.503  12.215  11.493  11.292  10.311   9.450   9.023   9.370   9.288   9.353   9.403   9.629  10.049  11.125  13.044  14.085  12.566  11.006  10.942  11.563  10.634  12.075  12.467  12.276  14.935  16.220  15.286  14.278  11.377   9.764 
+ 12.705  12.847  13.423  14.011  15.159  15.762  15.778  13.982  12.480  12.427  11.872  11.524  10.927  10.604  10.905  10.617  10.927  11.429  11.585  12.907  14.890  15.087  13.077  11.864  12.215  12.941  11.631  12.034  13.031  12.741  14.178  15.324  14.096  13.659  11.800  10.398 
+ 12.826  12.920  13.622  13.636  14.226  16.722  16.692  14.892  13.794  13.999  13.497  12.423  11.462  11.754  11.235  11.415  11.736  11.788  12.625  13.608  15.138  14.934  13.468  12.538  13.269  13.019  13.162  13.756  13.333  12.881  14.783  15.682  14.366  12.819  11.797  10.797 
+ 12.723  12.710  13.495  13.196  13.924  16.116  16.737  16.993  14.332  13.606  13.488  12.948  12.328  12.477  12.150  12.388  12.880  12.637  14.162  15.337  16.771  15.353  13.744  13.107  13.246  12.468  13.801  14.296  13.117  12.442  14.422  15.814  14.968  14.111  11.031   8.339 
+ 12.546  12.518  13.354  12.913  13.570  14.738  17.222  17.213  15.330  15.020  14.465  13.317  12.123  12.710  12.451  12.492  13.357  13.165  14.859  16.408  17.278  15.031  13.595  13.259  12.387  12.714  14.153  14.299  12.609  12.023  14.460  15.908  15.049  14.513  11.850   8.688 
+ 12.453  12.355  13.140  12.550  13.589  14.608  17.008  17.100  16.063  15.056  14.328  12.970  12.486  12.769  12.315  12.817  13.183  13.849  15.738  16.736  15.941  14.460  13.542  12.521  11.841  13.185  14.295  13.689  12.239  11.559  14.800  16.126  14.976  14.017  11.230   9.833 
+ 12.560  12.625  12.997  12.579  13.664  15.142  16.649  16.996  16.408  15.034  13.834  12.558  12.676  12.739  12.380  13.005  13.127  14.760  15.897  15.611  13.884  12.547  11.863  11.608  11.882  14.276  14.962  13.182  11.880  10.091  13.900  15.882  14.931  13.674  11.213   9.931 
+ 12.348  12.622  12.028  11.668  13.155  13.516  14.729  16.243  14.285  13.871  13.764  13.083  11.658  11.165  12.027  11.949  13.990  14.830  14.452  13.688  12.789  11.383  10.953  12.150  12.670  14.844  14.108  12.251  11.062  10.654  12.665  15.197  14.515  12.713  12.713  11.605 
+ 10.490  10.508  11.081  11.893  12.237  10.592  13.681  14.749  14.141  14.776  13.498  12.243  12.321  11.021  11.458  11.847  13.346  14.353  14.785  13.102  11.883  10.886  10.641  10.717  11.971  14.223  12.461  11.071  10.622  11.496  13.855  14.152  13.293  11.895  12.463  11.990 
+ 10.136  10.940   9.863   8.188  10.338  10.066  10.058  11.296  10.645  12.109  11.437  10.533   9.244   8.880   9.824  10.464  10.633  11.237  12.437  11.719  10.183  10.379   9.851  10.442  11.607  12.154  11.492  12.211  13.698  14.376  15.499  15.155  14.409  16.566  16.663  14.618 
+ 10.558   9.932   8.671   9.470   9.550   8.901   9.159   8.828   8.777  10.266   9.619   9.971   9.484   9.979   9.627  10.519  10.128   9.771  10.700  10.428  10.716   9.681   9.317  10.668  11.553  11.896  12.206  12.535  14.812  14.981  16.603  15.929  15.186  18.467  19.114  17.364 
+  9.870   8.821   8.514   7.938   8.835   9.196   8.234   9.047   9.063   9.200   8.866  10.300   9.311   8.535   8.010   9.171   8.381   7.675   9.948   9.789   9.355   7.429   8.877   9.754  10.217  12.550  11.727  12.550  13.730  14.840  15.540  15.826  16.407  18.221  18.111  17.312 
+  7.463   8.209   9.009   7.723   9.819  10.195   9.419   9.318   8.341   8.260   8.998   9.273   8.685   9.253   8.094   8.619   7.999   9.153  10.337   9.329   8.742   9.172   9.653   9.392   9.834  11.936  11.538  12.130  12.905  14.373  15.528  16.470  17.099  18.441  17.849  16.454 
+  7.803   8.132   8.786   8.567   9.342   8.611   7.962   9.574   9.565   9.560   8.672   7.330   7.631   8.166   8.226   7.965   7.470   8.049   9.404   9.579  10.285   9.544   9.724   9.672  10.407  11.530  11.266  11.390  12.639  13.904  14.606  15.472  16.614  17.358  16.754  16.609 
+  6.942   6.199   6.885   6.901   6.971   7.354   8.779   9.260   6.916   6.618   6.545   7.420   8.243   7.657   6.953   8.054   7.839   8.477   7.413   8.512   8.858   8.809   8.808   9.380   9.243   8.853  10.481  11.159  11.893  12.192  13.739  13.546  14.968  15.766  15.696  14.297 
+  3.356   5.162   6.111   7.746   9.528   8.896   9.409   8.990   6.679   7.134   8.189   7.190   7.314   7.125   8.084   6.847   5.766   6.894   7.555   7.616   7.781   7.587   6.012   7.480   7.460   8.991   8.606   9.423   9.906  10.494  11.774  11.598  12.651  12.890  13.518  11.986 
+  5.118   5.138   5.763   9.111  10.205   8.539   6.733   6.591   6.163   9.307   9.368   5.937   5.424   8.820   9.195   6.536   6.514   8.870   7.766   7.130   7.581   7.423   7.354   7.712   8.079   8.781   9.052  10.475  10.230  11.279  12.394  12.781  12.681  11.214  11.147  10.038 
+  3.735   6.243   8.025   9.540   9.760   8.364   7.523   7.914   7.122   9.179   8.705   6.869   7.966   8.036   7.887   8.232   8.179   8.361   7.373   8.418   8.603   8.245   8.605   8.329  10.068  10.063  10.962  11.916  13.891  14.129  13.752  14.925  13.744  12.635  13.027  12.049 
+  5.998   8.389   9.120   8.121   8.747   7.519   8.358   8.524   7.464   8.446   7.340   8.060   8.149   6.900   6.433   8.049   8.277   7.931   7.713   9.390   9.335   9.845   9.922  11.636  12.826  13.772  14.405  13.931  16.056  16.796  16.409  15.862  15.740  15.069  14.456  13.856 
+  8.243   9.434  10.175  10.051  11.243  10.671  10.436  11.041  11.802  11.558  11.303  11.350  11.446  11.035  11.182  11.179  10.625  10.370  10.407  11.341  11.662  12.074  12.159  13.044  14.521  14.883  16.113  15.808  17.466  17.175  17.216  17.206  16.553  16.188  16.370  15.434 
+ 10.031   8.419  11.041  11.759  11.918  12.449  12.944  11.987  12.348  12.232  12.599  12.378  12.419  11.835  12.143  12.132  11.384  11.768  11.773  12.280  13.417  13.072  12.984  13.193  14.640  16.540  16.324  16.025  16.936  16.504  17.045  15.928  16.315  15.514  15.292  14.789 
+ 12.755  13.319  12.328  13.390  14.383  14.703  13.048  12.844  12.548  12.304  11.288  10.106  11.040  10.750  10.822  10.437  11.237  11.919  12.882  13.553  12.393  11.947  12.128  11.558  14.826  15.137  14.412  13.511  13.112  13.075  14.454  13.715  13.054  13.256  12.645  12.641 
+ 13.236  13.363  13.907  14.586  15.653  16.246  14.369  13.263  13.200  13.152  11.742  11.396  11.376  11.035  11.379  11.495  12.138  12.574  14.358  14.909  13.807  12.768  12.852  12.755  13.214  12.308  10.138   9.401  10.784  10.930  13.180  12.776  12.604  11.162  10.211   7.395 
+ 13.975  13.231  13.221  14.066  15.316  16.283  14.315  12.565  13.113  12.829  11.405  11.434  10.956  10.821  11.268  10.937  11.606  12.981  14.792  15.305  14.179  13.261  13.452  12.133  10.494  11.300   9.744  10.505  11.369  12.700  14.015  14.248  13.430  10.946   7.813   6.411 
+ 13.350  13.227  12.850  13.537  14.969  15.449  12.811  12.650  11.969  10.288  10.812  10.872   9.674  10.593  10.360  11.025  11.521  12.521  14.461  14.683  13.030  12.407  12.126  12.173  12.449  12.818  11.747  10.239  11.386  12.521  12.621  12.822  11.898   9.214   8.196   7.353 
+ 11.346  11.602  12.030  11.938  12.964  13.218  11.645   9.826   9.597   8.596   7.824   8.608   8.232   8.264   8.629   9.053   9.644  10.862  13.509  13.612  11.091  10.688  11.278  11.137  10.916  10.480   9.544   8.039   9.108   9.864  10.308  10.303   9.026   7.850   7.272   6.573 
+ 11.516  10.990  10.540   9.370   8.916   8.863   7.393   8.012   7.185   5.650   7.733   7.454   5.375   5.974   5.576   5.730   7.719   8.449  10.052   9.677   8.461   7.334   8.307   8.540   9.740   9.153   7.885   6.259   8.123   7.616   9.664   8.081   6.681   6.754   6.969   6.500 
+ 11.366  11.244  11.354  10.520   8.803   6.614   5.526   5.910   5.562   5.985   6.158   5.814   4.854   4.691   5.456   6.706   6.193   7.379   8.206   8.897   8.947   7.662   8.624   8.995   9.796   9.146   7.561   7.760   7.450   8.379   8.688   7.385   7.066   7.237   8.060   7.630 
+ 11.067  10.398  10.398  10.532   8.248   9.007   7.979   7.557   8.295   7.668   7.393   7.018   6.900   7.276   7.529   7.616   7.780   8.976  10.503   9.511   8.677   8.596   8.560  10.113  10.104  10.162   9.949   9.456   9.210   8.794   8.633   8.013   7.712   7.477   7.258   6.076 
+ 13.030  12.430  12.651  12.655  14.110  15.101  14.441  12.199  12.143  12.670  12.167  10.582  10.908  12.041  11.772  10.997  12.484  12.882  14.558  15.444  14.808  13.540  13.285  13.675  13.783  14.119  13.850  13.521  12.850  13.488  13.598  13.639  12.897  12.159   9.759   7.687 
+ 13.179  12.503  12.858  12.744  14.109  16.394  15.487  14.952  14.861  13.535  11.626  12.601  11.859  11.843  12.257  12.106  12.989  13.270  15.200  16.530  16.265  14.039  13.518  14.035  14.521  13.548  12.479  11.554  10.895  13.142  13.079  14.063  13.366  12.831  11.691  10.037 
+ 13.040  12.264  12.835  12.456  14.233  15.964  16.743  16.109  14.683  13.917  11.809  12.297  12.077  11.804  12.351  12.396  13.040  13.511  14.939  17.048  16.715  14.250  13.807  14.082  14.523  13.703  12.446  10.975  10.037  11.636  12.267  13.946  13.770  13.267  11.274  10.159 
+ 13.051  12.366  12.987  12.885  14.404  15.982  17.307  16.724  14.971  14.320  12.792  12.588  12.466  12.058  12.478  12.686  13.264  13.660  14.661  16.482  17.158  15.207  14.385  14.362  14.822  14.193  12.796  11.593  10.700  11.847  12.549  14.083  13.830  13.071  10.628  10.363 
+ 13.103  12.970  13.078  12.678  14.619  16.108  17.208  15.962  14.905  14.355  12.774  12.278  12.392  11.874  12.330  12.196  12.944  12.998  14.156  15.860  17.206  15.742  14.810  14.658  15.245  14.698  13.067  11.899  11.960  13.775  13.835  13.590  13.918  13.582  11.505  11.039 
+ 13.095  13.068  13.189  12.385  14.767  15.768  16.830  15.338  14.166  13.796  12.490  11.759  11.957  11.389  11.544  11.241  12.343  12.818  13.358  14.701  16.561  16.396  15.138  14.612  14.518  13.632  11.819  12.154  12.786  13.305  14.751  14.481  13.069  12.206  10.295  10.081 
+ 13.092  12.995  13.127  11.963  15.066  15.763  16.138  14.716  13.756  13.181  11.829  11.523  11.533  10.824  11.523  11.241  12.229  12.561  13.528  14.230  15.838  15.920  14.805  14.876  14.888  13.576  12.691  11.952  12.128  13.171  14.272  14.089  13.316  13.003  10.876   9.692 
+ 13.009  12.701  13.064  11.634  15.357  16.063  15.415  13.977  13.417  12.900  11.524  11.153  11.364  10.663  11.273  11.001  11.946  12.179  12.976  13.689  15.387  16.037  15.415  15.224  14.344  12.853  12.078  11.162  11.795  12.581  13.947  14.332  13.047  12.921  10.305   8.072 
+ 12.862  12.490  13.032  12.173  15.491  16.016  14.528  13.567  13.022  12.684  11.453  10.910  11.084  10.721  11.067  10.962  11.841  12.051  13.061  13.769  15.691  16.339  15.946  15.488  13.431  11.712  11.017  10.023  11.578  12.431  13.653  14.181  12.891  13.166  10.579   8.066 
+ 12.855  12.811  13.309  13.911  15.759  15.805  13.403  13.092  12.782  12.418  11.206  10.975  10.900  10.677  11.175  11.362  12.042  12.108  14.010  15.003  14.775  15.221  15.473  14.089  12.130  11.269   9.435   9.518  10.085  11.092  13.195  14.447  13.594  13.905  11.689   8.550 
+ 12.961  13.206  13.769  14.662  15.799  15.501  12.586  12.422  12.653  12.316  11.406  11.504  11.202  11.151  12.194  13.261  13.131  12.525  12.208  12.025  11.787  12.948  13.751  12.971  11.286  10.874   8.563   8.081   9.045   9.845  11.397  12.814  11.840  11.820   9.737   8.100 
+ 12.843  13.023  13.186  14.233  14.895  14.871  12.075  12.048  12.432  11.747  11.331  12.158  12.741  13.270  12.085  10.896  10.711  10.298  10.693  10.877   9.330  10.742  11.951  10.989   9.498  10.079   7.348   7.377   7.248   8.718   9.693  11.609  10.892  11.178   8.749   7.392 
+ 12.623  12.359  12.530  14.248  14.376  14.358  11.825  12.412  12.423  11.542  12.029  12.514  12.405  12.133  10.985   9.752   8.224   9.102   9.400   9.821   7.573   9.485  10.926  10.679   9.120   9.419   6.697   6.964   7.649   8.164   9.010  11.267  10.790  10.869   8.778   7.092 
+ 12.625  12.102  12.939  14.371  14.380  14.469  11.918  12.590  12.518  12.052  12.132  12.825  12.663  11.130  10.254   9.397   8.717   9.193   9.143   8.904   8.435   9.697  11.266  10.845   8.538   8.555   6.500   6.869   8.084   8.500   9.401  11.235  10.733  10.847   8.509   6.543 
+ 12.402  12.082  12.837  14.515  15.023  15.108  12.652  12.946  12.791  12.710  12.565  13.919  13.388  11.430  10.427   9.210   9.299   9.472   9.436   8.826   9.239  10.319  11.992  11.207   8.536   8.399   7.460   7.417   8.820   9.586  10.323  11.611  10.893  11.038   8.251   6.561 
+ 12.341  12.510  13.122  14.230  15.377  16.085  14.103  13.462  13.465  13.327  12.701  13.805  14.409  13.465  11.663  10.583   9.825   9.600   9.500   9.381   9.599  10.966  12.461  11.437   9.155   7.856   7.174   7.444   8.982   8.739  11.203  11.441  11.282  10.917   8.294   5.926 
+ 13.001  13.117  13.657  13.842  15.147  16.833  15.592  14.036  14.354  13.925  12.520  13.436  14.512  14.094  13.737  11.782  11.055  11.021  11.270  10.810  10.503  11.771  13.488  12.484   9.897   8.757   8.787   9.274  10.238   9.568  11.822  11.762  11.992  11.328   9.105   6.945 
+ 13.166  12.936  12.993  12.338  15.055  16.724  15.672  15.909  15.261  14.397  12.624  13.634  14.080  15.055  15.461  13.695  12.310  11.514  11.664  11.119  11.224  11.964  13.451  12.935  11.099  10.319   8.698   9.900  10.299   9.649  11.847  11.536  10.978  10.928   9.577   7.486 
+ 12.834  12.549  12.682  12.841  14.559  15.715  16.844  16.307  15.610  15.000  13.468  13.753  14.024  14.754  16.381  14.904  14.358  12.909  12.429  11.948  11.866  12.130  13.693  13.808  11.586  10.949  10.508  10.974  10.669  10.969  12.421  11.441  10.787  10.885   9.890   8.807 
+ 12.747  12.485  13.206  12.174  14.000  15.014  17.081  17.697  16.836  15.112  13.433  13.970  13.856  14.032  15.562  16.590  15.817  13.430  12.763  11.894  11.898  12.834  14.574  14.597  12.675  11.545  11.404  11.827  11.149  11.306  12.917  11.361  11.192  11.184  10.250  10.090 
+ 12.831  12.497  13.186  12.653  13.859  14.774  16.145  17.554  17.422  15.069  13.431  13.893  13.753  13.733  14.496  16.402  17.263  14.902  13.248  12.216  12.297  13.312  14.994  15.696  14.024  12.415  12.221  12.766  11.338  12.170  12.991  11.401  12.026  11.623  10.169  10.365 
+ 12.563  12.553  12.392  12.451  13.843  14.615  15.444  17.676  17.322  15.797  15.011  14.702  14.007  13.993  14.269  15.323  16.643  15.627  14.358  13.486  13.160  13.321  14.196  15.655  15.306  13.498  12.773  12.736  11.202  12.282  12.951  12.018  12.720  11.917   9.589   9.929 
+ 12.663  12.690  12.709  12.738  13.871  14.520  15.443  17.528  16.619  15.853  14.826  14.415  13.459  13.786  13.906  15.077  16.036  16.434  14.874  13.694  13.003  12.948  13.212  14.872  15.749  14.744  13.453  13.291  12.469  13.976  14.190  13.359  13.770  12.075   8.883   9.029 
+ 12.681  12.525  12.734  12.269  13.644  14.579  15.439  17.410  16.154  14.793  14.301  14.115  13.058  13.399  13.414  14.603  15.902  16.059  14.142  13.267  12.695  12.639  12.832  14.044  15.415  14.570  12.773  12.305  12.151  13.307  13.730  12.992  13.539  12.043   9.431   8.877 
+ 12.459  11.954  12.307  11.785  13.572  14.433  16.245  17.340  15.674  14.283  13.164  13.168  12.438  12.709  12.777  14.259  16.272  16.049  13.485  12.485  11.965  11.942  12.286  13.530  15.441  14.447  12.046  11.341  12.111  13.448  13.534  13.150  13.709  11.953   8.615   7.408 
+ 12.230  11.766  11.821  12.348  13.977  15.312  15.470  15.752  14.419  12.463  11.664  12.001  11.429  11.990  12.556  14.508  15.512  14.792  12.114  11.567  11.119  11.424  12.018  13.534  15.291  13.905  11.350  10.510  12.328  14.048  13.981  13.302  14.091  11.999   8.236   6.502 
+ 11.989  11.717  11.739  12.813  13.854  14.078  13.561  12.482  11.602  11.551  11.354  10.818  10.840  11.021  12.054  13.503  13.780  12.010  11.025  10.329  10.516  10.831  11.034  12.377  13.199  11.764  10.467   9.680  11.355  12.777  12.563  11.782  12.848  10.677   7.532   7.535 
+ 11.970  11.904  12.245  12.727  14.010  14.035  13.867  13.184  11.308  11.540  11.998  11.269  11.162  11.144  12.424  13.567  14.245  12.916  12.233  11.480  11.038  10.408  10.620  12.263  13.612  12.198  11.045  10.761  12.189  13.376  13.085  12.283  13.555  11.178   8.334   6.305 
+ 12.271  12.324  12.492  12.619  14.217  14.815  15.012  14.703  13.436  11.749  12.455  12.119  11.391  12.046  12.395  13.848  15.009  15.296  12.751  12.086  11.543  11.185  11.531  12.600  14.940  14.123  12.078  11.250  12.989  14.325  13.766  12.912  14.181  11.926   8.704   6.892 
+ 12.574  12.000  12.492  12.369  14.272  15.317  16.184  15.085  14.203  13.222  11.708  12.425  11.728  12.062  12.385  13.392  15.412  16.176  13.538  12.802  11.859  11.868  12.172  12.785  15.250  14.974  12.041  11.341  13.408  14.572  14.035  13.780  14.878  12.595   8.959   7.386 
+ 12.669  12.000  12.278  12.646  14.085  15.457  16.703  16.096  14.562  13.696  12.041  12.536  11.881  12.077  12.402  13.412  15.323  16.592  14.789  12.995  12.231  12.264  12.626  13.529  15.175  14.657  12.342  11.817  13.341  14.582  13.686  14.375  14.835  12.553   9.480   8.664 
+ 12.595  12.197  12.487  13.003  14.298  15.762  16.709  15.846  14.829  14.012  12.512  12.669  11.771  11.911  12.223  13.389  15.242  16.588  15.460  13.609  12.908  12.887  13.664  15.427  14.838  13.410  12.879  12.964  12.369  14.023  12.856  13.698  13.716  11.740   9.791   8.827 
+ 12.856  12.554  12.791  13.268  14.668  15.604  16.394  15.139  14.768  13.872  12.480  12.747  12.347  12.368  12.719  13.911  15.667  16.410  15.439  14.009  14.275  14.919  14.567  13.289  12.312  11.303  11.573  11.284  11.298  13.183  12.027  13.124  13.060  11.501  10.156   8.796 
+ 12.716  12.695  12.843  13.117  14.806  15.350  16.139  14.626  14.330  13.733  12.480  12.751  12.726  12.632  13.695  14.836  15.876  15.695  15.830  15.330  14.757  12.979  12.166  10.271   9.673   9.821  10.360  10.859   9.810  11.574  10.164  11.754  12.108  11.034   9.643   7.354 
+ 12.528  12.381  12.626  13.009  14.871  15.361  15.800  13.950  13.213  13.051  12.209  11.837  12.375  12.354  13.837  14.624  15.525  14.733  14.972  14.661  13.183  10.754   9.965   9.005   8.814   8.543   9.510   9.610   8.306   9.846   8.493  10.883  11.122  10.350   8.731   6.455 
+ 12.231  12.010  12.140  12.745  15.020  15.446  15.287  13.417  12.969  12.727  11.987  11.766  12.015  12.605  14.338  14.853  14.341  14.119  15.116  13.431  10.884   9.184   9.449   8.472   8.835   7.775   8.357   8.260   7.247   8.374   6.698   9.889  10.149   8.954   8.005   6.578 
+ 12.189  12.056  12.278  13.207  14.994  15.430  15.038  13.568  13.182  12.874  12.096  12.161  12.603  13.940  15.061  14.005  12.849  13.469  14.382  12.810   8.991   8.473   8.653   7.589   7.645   7.496   7.729   8.067   6.906   7.581   6.154   8.069   8.648   7.581   6.692   5.538 
+ 11.981  12.512  12.690  13.553  15.154  15.523  15.145  14.052  13.537  13.363  12.987  12.972  13.840  14.745  14.920  13.843  12.647  12.896  13.991  13.503   9.842   9.312   8.663   8.213   7.102   7.525   7.683   7.628   6.329   6.725   6.477   7.243   7.837   7.731   6.695   5.724 
+ 11.776  12.523  12.785  13.370  14.168  15.908  15.179  13.620  12.905  12.872  12.772  13.006  13.962  14.667  14.160  13.296  12.280  12.039  12.956  13.327  11.208   9.377   8.532   8.617   6.795   7.244   7.335   7.151   6.985   7.248   6.712   7.817   8.386   8.727   7.662   5.667 
+ 10.721  11.803  11.341  11.975  14.788  15.567  14.624  12.897  11.978  12.051  12.114  11.994  13.130  14.632  13.651  12.405  11.751  10.936  12.132  13.385  11.808   9.061   8.922   7.386   6.801   6.724   7.490   8.228   6.952   6.914   6.526   8.313   8.207   8.601   8.355   6.793 
+ 11.389  11.755  12.322  13.109  15.072  15.758  15.035  13.877  13.067  12.967  12.912  13.009  14.019  15.249  14.777  13.318  12.551  11.569  12.121  13.620  13.709  10.275   9.509   8.832   8.080   6.554   7.205   7.467   6.325   6.363   6.599   9.412   9.245  10.092  10.036   8.036 
+ 11.405  12.411  12.821  12.972  14.281  14.874  15.350  14.088  12.594  12.538  13.048  12.862  13.015  14.507  14.852  13.392  12.653  11.584  11.554  12.210  13.249  12.484   9.278   9.010   7.656   6.949   7.419   7.651   6.805   8.604   8.211   8.827   9.435  10.506  10.372   8.895 
+ 10.445  11.776  11.583  12.081  14.246  15.800  14.597  13.205  12.377  12.468  11.963  11.935  12.460  13.523  14.863  14.096  11.994  11.504  10.730  11.250  12.839  12.634  10.044   8.520   7.137   6.828   7.298   8.126   6.790   7.581   7.399   7.708   8.239  10.052  10.248   7.978 
+ 11.206  12.077  11.971  12.808  14.833  16.431  15.992  14.122  13.429  13.146  12.508  12.478  12.836  13.373  15.038  15.667  13.843  12.342  11.629  11.852  13.106  13.922  12.166   9.417   8.008   7.578   8.539   8.883   6.995   7.089   7.199   6.882   8.616  10.466  10.010   7.476 
+ 12.148  12.719  12.841  13.102  14.468  16.332  16.284  14.355  13.791  13.343  12.395  12.332  12.401  12.682  13.782  14.701  14.746  13.076  12.226  11.976  12.615  13.561  13.875  11.857   9.236   8.469   9.962  10.094   8.172   8.249   8.911   7.936   8.493   9.772  10.126   7.807 
+ 12.380  12.500  12.808  13.106  14.888  15.460  16.203  14.232  13.667  12.980  12.229  12.612  12.128  12.518  13.103  14.510  15.536  14.150  13.496  12.262  11.918  12.702  13.253  13.078  11.782  10.622  11.219  11.338   9.427   9.118  10.128   9.473  10.166  10.500  10.268   7.678 
+ 12.554  12.061  12.349  12.618  15.017  15.724  16.071  14.419  13.616  12.390  12.089  12.119  11.382  12.373  12.470  14.125  15.172  15.266  13.578  12.776  12.097  12.211  12.840  13.752  13.552  12.234  11.525  11.849  10.953  12.304  13.124  12.091  12.179  12.025  10.470   7.766 
+ 12.810  11.936  12.480  12.744  14.818  16.071  16.067  14.141  13.515  13.209  12.832  11.747  11.623  11.973  12.569  13.578  14.863  15.486  14.251  12.642  11.933  11.939  12.431  13.756  14.313  12.751  11.626  12.051  11.727  13.117  14.184  12.687  12.984  13.306  10.993   7.645 
+ 13.031  12.848  11.691  13.391  14.256  13.846  14.992  13.762  11.863  13.501  12.330  11.613  11.371  11.464  12.237  12.524  14.613  14.996  14.127  11.366  11.057  11.298  11.770  12.868  14.582  13.426  11.160  11.011  12.097  12.411  13.807  12.827  12.717  13.016  10.544   8.655 
+ 11.749  11.426  12.738  13.093  13.379  13.484  12.870  12.042  11.961  11.444  11.779  10.543  10.174  10.256  10.439  11.289  12.447  13.412  12.276  12.950  11.732   9.933   9.091  10.051  12.137  11.848  11.916  10.711  12.164  13.851  15.011  14.498  13.690  13.271  12.469  11.632 
+ 10.241  10.020  11.322  11.210  11.546  11.880  10.484   9.224   9.806   8.142   8.850   9.003   8.743   8.745   8.386   9.227  11.116  11.958  11.665  12.106  10.715  10.181   9.914   9.554  11.048  11.085  10.946  11.356  13.576  13.002  14.799  16.807  16.713  15.528  14.933  13.965 
+ 10.475   8.804   9.664  11.127  11.632  11.491   8.774   9.454   8.685   8.087   7.482   8.729   7.577   7.364   8.120   8.386   8.786   9.502  11.063  10.687   8.859   9.213   8.559   9.721  11.172  11.594  11.063  12.289  13.050  14.280  15.456  16.918  16.732  16.981  15.562  14.734 
+  9.348   9.638   9.105  10.114  11.585  11.004   9.887   9.630   8.696   8.412   8.404   7.446   7.812   7.978   9.019   8.214   8.211   9.631  10.371   9.951   9.095   8.928   9.154   9.808  10.125  10.902  11.394  12.370  14.095  15.343  15.018  16.139  17.863  17.428  16.359  14.894 
+ 11.297  10.564  10.542  10.559  10.799  11.074   9.806  10.289  10.710  10.622  10.272   9.096   8.693   8.455   9.221   9.290   9.741  10.915  11.789  10.283   9.347   9.104   9.528   8.837  10.038  12.144  11.437  13.034  14.444  15.394  15.740  17.029  17.356  16.064  15.441  14.420 
+ 11.503  10.835   7.894  10.076  11.627  11.631  10.357  10.364   9.715   8.210   8.735   9.541   9.024   8.288   7.973   8.978   9.806  11.228  11.632  10.438   9.560   9.595   8.087   9.650  10.520  11.516  12.134  14.577  15.267  15.057  16.713  16.407  15.606  14.755  13.796  12.166 
+ 12.300  11.170   8.236   9.654  11.089  11.516  11.241   9.106  10.212   8.500   8.236   8.643   7.420   7.461   6.541   7.791   8.900  10.742  10.653  10.562   9.412   8.338   8.937   8.918  10.611  11.158  12.459  14.294  13.367  12.253  12.873  11.736  11.305  11.441  11.378  10.437 
+ 12.320  11.266  10.626  10.936  10.265  12.120  11.457  10.726  10.890  10.497  10.154  10.041   8.538   6.957   7.579   7.742   9.007  10.390   9.378   8.777   7.568   8.161   8.932   8.795   8.303   9.937   9.521   8.569   8.071   9.363   8.795   8.747   9.806   9.708   9.182   8.161 
+ 12.946  13.224  12.395  11.660  10.492  11.331  10.948   8.580   7.886   9.517  10.446   9.666   6.669   7.268   7.588   8.528   9.332  10.081  10.209   9.658   9.045   9.503   9.539   8.254   7.569   8.182   8.672   8.499   7.627   7.905   8.366   8.022   8.467   9.975   9.678   9.253 
+ 13.830  13.738  12.127  12.312  12.335  11.010  10.456  10.415   9.374  10.689  10.160   9.404   8.271   7.750   8.812  10.125   9.881   9.485   9.993   9.534   9.360   9.585  10.639   9.709   8.096   8.075   8.737   8.902   7.034   7.230   7.992   8.402   8.107  10.464   9.811   8.506 
+ 14.355  13.896  12.463  11.919  11.484  11.529  11.364  10.172  10.449  10.199  10.118   9.486   7.800   7.317  10.516  10.235  10.721  10.468  10.133  10.068   9.852   9.959  11.750  10.576   9.056   7.394   9.354  10.623   8.032   8.590   8.988   9.342   9.751  10.546  10.416   9.028 
+ 14.392  13.956  13.338  12.138  11.955  12.740  11.261  10.615  11.068   9.929  10.080  10.233   8.366   9.004  10.228  11.075  10.416  11.653  11.271  11.772  11.403  12.021  13.076  11.800  10.371   8.595   8.480  10.519   8.718   7.268   8.360   8.925  10.209   9.519   9.508   9.315 
+ 14.121  13.519  13.659  11.672  11.966  12.223   9.960   9.986  10.266   9.565   8.819   8.476   8.830   9.757   9.855  10.634  10.086  10.940  10.522  10.514  10.857  11.954  12.980  12.710  10.653   8.836   7.851   9.550   9.589   7.332  10.091  11.355  12.369  11.270  10.291   8.931 
+ 13.950  13.137  13.619  11.554  11.930  12.763  10.649  10.025  10.262   9.685   8.864   9.832   9.888  10.019   9.622   9.976   9.668  10.442   9.951   9.793  10.042  11.397  12.707  12.183  10.012   8.396   6.719   8.771   9.117   6.907   9.970  10.967  12.058  11.339   9.999   9.496 
+ 13.849  13.180  13.608  12.092  12.577  13.982  13.218  11.810  12.425  12.169  10.087  10.673  11.139  11.339  11.774  11.475  11.768  10.856  10.484  10.260  10.239  11.032  12.616  11.304  10.223   7.908   7.628   7.783   9.356   9.016   9.549  10.347  11.506  10.375   9.853  10.452 
+ 13.428  12.911  13.485  11.392  13.938  15.293  14.839  13.576  12.897  12.622  11.172  11.399  11.402  11.858  12.244  13.321  12.673  11.643  11.315  10.836  10.818  11.712  13.154  12.455  10.114   7.434   7.593   7.876   9.268   9.246  10.741  11.400  11.322  10.734  10.733   8.463 
+ 13.646  13.527  13.688  12.063  14.433  15.147  14.620  14.090  13.347  12.593  10.987  11.580  11.554  12.101  12.195  13.994  13.683  12.295  11.683  10.921  10.730  11.448  12.876  12.176  10.267   8.125   7.367   7.836   9.096   9.743  12.427  12.804  12.124  11.561  11.359   9.100 
+ 13.665  13.608  13.660  12.451  14.813  15.054  14.168  13.971  13.543  12.519  10.670  11.521  11.023  11.941  11.934  14.058  14.009  12.929  12.137  11.098  11.143  12.221  13.689  12.742  11.023   8.917   7.688   6.671   9.088  10.309  12.730  13.490  10.944  10.431  11.293   9.539 
+ 13.657  13.469  13.652  12.591  14.999  15.404  13.411  13.757  13.653  12.578  11.141  11.867  10.876  12.261  12.172  14.082  14.293  13.223  12.610  11.793  11.707  12.657  14.162  13.340  11.259   9.053   8.387   8.557   9.791  11.057  12.484  13.371  11.826  11.302  11.440   9.421 
+ 13.511  13.015  13.434  12.657  14.926  15.582  13.213  13.436  13.282  12.058  11.200  11.543  10.523  11.931  11.937  13.787  13.729  13.303  11.910  11.354  11.282  12.176  13.947  13.372  10.652   9.076   8.295   8.047   9.015  10.079  11.971  12.885  11.838  11.600  10.863   9.166 
+ 13.387  12.668  13.196  13.191  15.067  15.619  12.986  13.234  12.867  12.143  11.106  11.520  10.589  11.709  11.899  13.722  13.986  13.585  11.940  11.557  11.507  12.303  13.955  13.255  10.555   8.524   7.536   7.868   8.476   9.109  11.281  12.211  11.641  11.789  10.249   8.832 
+ 13.260  12.710  13.213  13.983  15.126  15.501  13.142  12.941  12.507  11.247  11.049  11.377  10.664  11.654  12.167  13.744  14.393  13.749  12.239  11.810  11.860  12.809  14.201  13.600  10.746   8.309   8.244   8.580   8.244   8.970  10.938  11.954  10.956  10.823  10.133   8.789 
+ 12.859  12.703  13.055  14.050  15.273  15.488  13.099  13.011  12.263  11.569  11.627  11.751  11.343  11.877  12.629  14.096  14.666  14.030  12.280  11.592  11.344  12.543  14.332  13.851  10.999   8.723   8.590   9.328   9.363   9.375  12.105  12.351   9.899   9.616  10.296   9.300 
+ 13.516  13.682  13.456  13.770  14.746  14.877  12.695  13.022  11.706  11.692  12.026  11.173  11.599  11.368  12.411  13.421  14.113  13.033  12.685  11.286  11.395  12.399  13.653  12.547  10.713   9.479   9.049   7.902   8.459  10.027  11.995  12.097  11.305  10.134   9.404   7.918 
+ 14.085  12.886  13.230  13.930  13.644  13.386  13.065  11.873  11.338  12.233  11.056  10.874  10.956  11.210  11.632  13.434  13.424  13.011  11.860  10.687  11.236  11.333  13.382  12.671  10.636   8.865   9.328   9.405   9.204  10.092  11.361  11.689  11.085   9.954  10.303   9.297 
+ 13.862  12.642  10.847  12.668  12.923  13.353  13.068  11.065  11.786  11.590  10.726  10.646  10.269  10.966  11.337  12.928  13.009  12.094  10.611  10.226  10.822  11.236  13.157  11.909   9.775   8.135   9.192   8.409   8.663   9.676  11.318  11.152  11.041   9.854   9.272   8.252 
+ 10.828  11.129  11.793  12.154  12.907  13.339  12.957  12.259  12.185  10.921  10.218  10.195   9.866  10.489  11.380  12.715  12.810  12.155  11.108  10.734   9.957  11.890  13.262  12.123   9.473   8.752   8.781   8.142   9.081  10.659  12.424  11.886  11.474   9.670   9.277   8.181 
+ 11.772  11.209  11.470  12.100  12.166  12.619  12.080  12.068  12.408  11.534  11.319  10.362   9.647  10.259  11.035  11.738  12.747  13.278  12.428  11.543  11.069  11.705  13.288  12.073  10.143   8.525   8.415   8.676   8.709  10.121  11.976  11.341  10.505   8.648   9.067   8.061 
+ 12.208  11.690  11.777  12.872  12.917  12.888  13.230  12.837  13.018  12.552  11.298  11.867  10.951  11.670  11.639  12.512  13.129  13.464  13.136  12.177  11.628  12.613  13.553  12.782  11.439   9.369   9.624   9.057  10.645  11.978  13.206  12.423  11.660  10.024   9.155   7.880 
+ 11.640  10.439  11.359  12.154  13.102  13.653  13.806  14.223  13.139  12.566  12.809  11.925  11.106  11.657  11.706  12.715  13.583  14.373  14.273  13.094  12.575  13.530  14.606  13.688  11.660   9.088   9.128   9.639  10.569  12.371  13.830  12.697  12.260  10.520   9.336   8.310 
+ 12.531  12.707  12.430  11.030  13.363  14.578  15.385  15.301  14.306  13.675  12.063  11.963  11.748  11.477  11.943  12.530  13.672  15.272  15.659  13.596  13.368  13.967  15.447  14.741  12.195  10.804   9.518   9.629  11.278  12.972  14.440  13.053  12.817  10.938   9.783   9.140 
+ 12.300  12.253  12.626  10.939  13.105  14.517  15.855  16.348  15.684  14.477  11.889  12.070  12.249  11.596  12.237  12.041  13.131  14.319  15.995  16.030  14.706  14.418  15.548  15.589  13.824  11.725  10.108   9.670  11.570  12.882  13.691  12.711  11.129   9.957  10.944  10.788 
+ 13.300  13.428  13.630  12.410  13.440  14.508  15.812  15.987  16.489  15.506  13.271  12.034  12.583  11.805  12.654  12.271  13.207  14.021  15.985  17.152  15.823  15.176  15.763  15.994  15.194  11.915  10.430  10.070  13.239  14.274  14.506  13.377  12.137  10.807  11.777  12.103 
+ 13.470  13.468  13.584  11.700  12.923  13.951  14.993  16.214  16.489  14.576  12.226  12.924  12.351  12.157  12.717  12.332  13.151  13.457  14.906  16.313  16.709  15.251  15.126  15.825  15.114  13.281  11.215  11.049  12.268  13.933  14.744  12.908  11.093  10.197   9.452  10.095 
+ 13.412  13.204  13.575  11.370  11.476  13.104  14.411  16.301  16.097  13.911  12.554  13.153  12.092  11.858  12.316  11.818  12.513  12.283  13.257  15.459  16.515  15.823  15.237  15.836  15.986  13.853  11.937  11.242  12.201  13.537  14.320  13.380  11.603   9.145   7.697   8.350 
+ 13.380  12.914  13.452  11.167  11.888  12.608  14.141  16.271  15.731  13.509  12.977  13.190  11.151  11.642  11.611  11.707  11.742  11.601  12.085  13.945  15.724  15.701  15.170  15.803  15.998  13.936  11.378  10.593  11.933  13.248  14.243  13.692  12.064  10.085   8.254   8.694 
+ 13.513  13.048  13.387  11.516  11.783  13.007  14.197  15.948  15.198  13.334  13.186  13.181  11.102  11.170  11.509  11.591  11.352  11.190  11.433  12.486  14.604  15.838  15.285  15.557  15.871  14.041  10.964  10.336   9.683  12.212  13.344  13.213  12.321  10.169   7.664   6.858 
+ 13.689  13.440  13.170  11.831  11.508  12.812  13.841  14.850  13.958  12.189  13.505  12.851  11.441  10.787  11.265  11.597  11.463  11.463  10.521   9.864  12.155  14.392  14.904  14.740  14.933  13.150  10.165   9.733   9.671  10.961  11.942  12.351  12.580  10.787   8.943   7.922 
+ 13.737  13.136  12.211  11.983  11.657  12.465  13.602  12.861  12.092  12.893  13.127  12.096  11.559   9.737  10.649  10.655  10.939  11.113  10.852  11.019  10.353  10.603  12.990  13.087  13.251  11.807   9.533   8.855   8.989  10.081  11.668  12.537  12.987  11.910  10.273   8.795 
+ 13.410  11.773  11.220  11.786  10.869  12.331  12.406  13.200  12.834  10.989  12.418  11.879  11.118   9.827   9.870  10.457  10.356  11.040  11.211  11.018  11.191  11.299  11.960  11.556  10.720   9.515   7.835   7.477   8.248   7.741   9.859  11.358  11.536  11.238  10.651   8.432 
+ 11.967  12.621  11.794  10.865  10.390  10.574  11.248  11.884  11.233   8.951  10.757  11.238  10.970   8.464   8.465   9.302   9.161  10.312  10.827  10.056  10.784  11.256  11.404  10.471   9.883   9.197   7.800   6.808   7.116   7.521   8.341  11.001  11.186  10.163  10.485  10.131 
+  8.445  10.769  11.398  11.247   9.419   9.399   9.810   9.774   8.961   9.218   8.615   8.889   8.134   6.642   6.300   7.093   7.561   9.071   8.773   7.790   9.267  10.419  10.214  10.015  10.129   8.707   7.728   6.662   7.493   8.256   7.812  11.182  11.585  10.265  11.153  11.319 
+  9.141   8.697   9.010  10.469   9.182   9.101   8.782   9.907   9.286   7.751   6.805   8.018   6.971   4.842   4.598   5.482   5.698   7.574   7.354   7.312   8.574   9.900   9.140   8.159   9.041   8.742   7.540   7.548   7.342   9.092   8.911   8.502   7.892   6.666   6.588   6.329 
+  6.449   8.217   8.866  10.076   9.152   8.366   8.082   7.857   7.145   6.381   8.029   7.754   7.021   6.274   5.050   4.374   4.201   5.770   6.993   7.307   9.230   9.998   8.508   7.550   9.032   9.306   8.056   7.015   7.561   9.436   8.941   7.771   6.763   5.841   6.181   5.290 
+  6.467   8.876   8.868   8.674   7.752   8.882   7.971   6.263   6.838   6.454   7.183   6.928   5.879   5.635   6.363   5.442   5.018   5.952   5.807   7.407   9.128   9.684   7.354   7.398   9.814   9.661   7.771   6.994   7.388   9.474   8.620   7.619   6.588   5.361   5.634   5.061 
+  7.429   9.364   9.309   9.690   8.738   8.553   7.689   6.986   7.027   6.271   5.508   6.378   6.071   5.902   5.694   5.206   5.139   6.013   6.625   7.872   8.437   9.161   7.895   7.401   8.625   8.411   7.861   6.522   7.303   9.822   9.854   7.712   5.927   5.038   5.224   4.353 
+  7.143   8.323   7.635  10.455   9.878   9.033   8.395   7.043   6.425   5.881   5.619   5.265   4.781   6.145   5.300   4.153   5.385   6.432   6.974   9.109   9.182   8.039   7.038   6.550   8.819   9.243   7.018   6.122   6.639   9.214   8.779   7.358   5.248   4.626   5.085   4.894 
+  7.249   8.330   8.529  10.677   9.975   7.805   7.162   5.521   5.139   6.541   6.757   5.500   4.920   4.252   5.757   5.859   5.064   4.602   6.561   7.984   8.917   7.583   6.619   6.245   9.086   8.882   5.742   5.143   5.820   8.757   8.447   6.659   5.413   4.592   4.468   4.411 
+  7.199   8.365   7.659   9.930   9.965   7.418   5.714   6.032   5.735   5.407   5.380   5.316   4.148   4.317   4.715   5.063   5.187   5.717   6.554   7.144   7.306   7.172   6.018   5.940   6.947   7.264   6.441   5.124   5.117   7.261   7.563   5.609   4.723   4.265   4.178   4.491 
+  6.143   6.922   7.610   9.722   8.940   8.467   6.346   6.043   6.318   5.395   4.629   4.646   4.984   4.779   4.738   4.753   4.589   5.697   6.772   6.726   7.145   6.882   6.086   6.145   7.428   6.703   5.627   5.140   6.480   7.707   7.383   5.329   4.620   3.864   4.139   4.623 
+  6.862   8.287   8.063   8.635   7.955   8.224   6.523   6.701   6.729   5.483   5.821   5.955   5.804   4.849   4.670   5.360   5.607   6.135   8.304   7.774   7.705   7.270   5.356   5.783   7.896   7.326   5.620   5.110   5.827   7.982   6.811   4.702   5.053   4.122   4.597   3.622 
+  6.795   8.816   7.721   6.296   6.871   6.987   6.445   7.387   5.716   5.691   7.143   6.664   5.211   5.734   6.388   5.118   5.117   8.138   8.691   7.212   6.798   7.149   6.624   6.598   7.415   8.368   8.785   7.634   7.896   8.013   6.945   6.305   6.058   5.467   5.027   4.902 
+  7.275   8.654   7.645   7.367   7.264   7.977   7.835   8.185   5.889   6.289   6.086   6.877   4.651   5.736   5.453   5.922   6.155   6.837   8.389   7.614   6.398   6.801   6.396   6.472   6.992   8.135   8.748   7.552   7.490   7.881   6.866   6.105   5.443   5.865   4.967   5.048 
+  7.235   8.342   8.086   9.269   9.059   9.239   8.187   7.475   5.864   6.928   7.146   7.024   5.346   5.679   4.598   6.066   5.571   6.954   7.104   6.893   6.629   6.295   5.197   5.288   6.489   6.689   6.305   5.607   7.753   7.901   6.773   4.986   4.565   5.679   4.967   4.655 
+  7.662   8.352   8.632  10.194  10.036  10.289   8.328   7.394   6.761   7.771   7.419   7.065   4.602   6.424   5.555   6.561   6.611   8.643   7.908   7.513   7.056   5.821   4.876   6.256   6.443   7.495   6.557   5.903   6.988   6.755   6.022   4.208   3.775   5.306   4.487   4.448 
+  6.602   7.694   8.890  10.239  10.412  10.679   7.653   6.754   7.146   7.011   7.012   7.011   4.802   5.645   5.483   5.892   8.521   9.650   8.692   6.907   6.492   5.993   5.517   4.733   4.967   6.084   6.212   6.060   6.342   6.284   5.927   3.608   3.722   4.035   2.984   3.116 
+  6.290   7.193   8.447   9.470  10.860  11.034   7.329   6.070   6.543   5.994   6.255   5.974   6.063   6.061   6.151   7.638   8.553   9.004   7.907   8.204   6.593   7.761   6.721   4.519   5.823   6.648   5.613   5.122   5.581   6.471   6.975   4.121   4.381   5.401   3.752   2.761 
+  5.948   6.257   6.893   7.495  11.069  11.130   7.746   6.999   6.850   7.483   6.953   5.234   6.753   7.519   6.850   8.821   8.650   8.336   7.386   6.899   6.803   6.526   5.551   5.433   5.990   6.446   5.490   4.574   5.728   6.093   6.870   5.546   4.991   5.005   3.727   3.204 
+  6.011   5.454   6.554   7.551  10.750  10.667   7.311   6.823   6.803   7.710   8.055   7.585   7.953   7.921   6.581   7.431   6.902   7.169   6.566   6.423   6.192   6.293   5.847   5.199   5.035   5.202   4.817   4.595   6.227   6.706   6.463   6.236   5.205   5.356   3.472   3.758 
+  6.482   6.968   8.241   8.693   9.365   9.554   6.512   6.250   5.980   6.104   7.781   7.296   7.388   6.994   6.463   6.472   6.373   6.384   5.919   5.510   6.433   6.724   6.312   5.873   5.978   5.896   5.162   5.627   5.654   6.928   7.573   7.833   7.378   5.233   4.366   3.663 
+  7.513   8.040   8.766   8.704   8.979   9.438   7.288   6.179   7.027   8.183   8.162   7.389   6.259   5.370   5.940   6.074   5.408   5.605   6.466   5.420   7.259   8.095   6.738   5.838   5.979   4.976   5.207   5.754   6.176   7.454   6.953   7.046   7.221   6.136   4.504   3.288 
+  7.430   7.954   8.945   8.581   9.302   8.578   7.981   6.324   7.269   7.778   8.140   8.911   7.671   6.307   5.997   5.531   5.679   6.443   5.988   5.462   7.332   7.605   6.392   5.596   5.959   5.502   4.563   5.129   6.128   6.710   6.727   6.740   6.805   6.156   5.238   3.719 
+  7.284   7.594   9.463   8.933   8.314   8.113   8.171   6.544   7.421   7.300   8.191   9.082   6.452   6.681   7.083   6.302   5.583   5.993   5.382   5.229   6.031   7.204   5.857   6.451   6.425   6.063   5.466   6.244   6.243   6.583   7.210   7.845   7.765   6.516   5.870   4.270 
+  6.907   7.412   9.343   8.945   9.037   8.407   7.575   5.158   6.501   6.754   8.019   9.496   8.490   7.051   5.789   5.886   5.489   5.221   4.797   5.312   7.163   8.260   6.466   6.519   6.831   6.505   5.871   5.986   5.986   7.044   7.097   7.559   7.657   6.145   5.870   4.943 
+  6.666   7.191   8.922   8.691   9.504   8.892   8.842   7.006   7.263   7.000   7.017   9.194   9.286   8.253   6.595   5.075   5.484   5.494   5.906   4.952   7.466   8.094   6.891   6.636   7.314   6.753   5.791   6.472   6.732   7.851   7.864   7.541   7.704   6.020   5.808   5.222 
+  7.398   7.256   8.620   8.059   7.375   8.705   9.379   7.967   8.326   8.473   7.228   7.483   9.710   9.810   8.235   6.499   5.717   5.890   5.627   6.020   7.685   7.211   5.936   6.075   6.917   5.613   5.977   5.870   6.943   6.967   7.512   8.078   7.692   6.419   6.231   5.743 
+  7.664   7.712   8.415   8.107   8.909   8.533   8.092   9.386  10.091   8.644   7.454   7.407   8.398   8.745   9.314   7.488   6.703   6.214   6.354   6.691   7.337   7.350   7.014   6.625   7.052   6.873   6.183   7.080   6.984   7.109   7.385   7.679   7.998   6.174   5.607   5.740 
+  8.236   8.369   7.869   8.091   9.331   8.969   9.142   8.504   9.468   8.811   7.293   8.445   8.215   8.635   9.992   8.574   7.230   5.475   6.629   6.644   7.559   7.826   7.320   5.968   7.158   6.299   5.222   6.549   7.180   7.463   8.678   6.537   7.978   7.163   6.387   5.853 
+  7.523   7.194   7.822   7.111   7.358   8.289   9.907  11.155  11.052   9.011   6.327   7.383   7.262   8.528   9.637   8.972   7.478   6.307   6.647   7.324   8.182   8.671   6.875   6.042   7.921   7.466   6.722   6.897   7.536   7.213   8.570   7.986   7.633   6.408   5.495   5.287 
+  5.018   6.806   8.415   7.853   8.231   8.469   8.290  10.149  10.220   7.995   6.123   7.728   7.363   6.325   6.984   8.670   7.142   6.724   6.192   7.587   8.394   8.280   6.241   6.766   7.890   7.128   6.226   5.950   7.037   7.730   8.352   8.123   8.152   6.360   5.638   5.465 
+  6.384   6.529   7.677   6.489   7.192   6.891   7.354   8.940   8.125   8.286   6.741   7.720   6.911   7.038   7.904   7.735   7.367   6.620   6.297   7.893   9.054   8.942   7.368   7.139   7.110   6.432   6.673   6.164   7.019   7.534   9.023   8.196   7.988   7.338   5.963   5.468 
+  6.551   6.467   7.932   7.387   5.746   6.246   6.346   8.742   8.953   7.108   6.017   5.841   5.765   6.475   6.266   7.273   6.540   7.206   6.079   7.052   7.659   7.909   7.560   6.747   6.645   6.330   6.503   7.007   6.677   7.580   8.660   7.540   8.511   7.643   6.595   6.393 
+  7.583   7.162   6.847   7.221   7.058   8.863   8.769   9.019   9.229   7.950   6.826   7.760   7.404   5.583   6.802   8.119   6.413   5.499   6.714   7.295   9.065   9.965   7.498   6.329   8.504   7.194   7.059   8.854   8.096   7.629   9.117   8.534   8.444   7.213   6.386   5.713 
+  7.435   6.905   6.940   6.152   6.804   8.266   8.237   9.012  10.730   8.876   7.361   7.618   7.226   6.059   7.014   8.959   8.378   7.149   7.090   7.122   9.509  10.621   8.447   5.978   8.000   8.294   7.106   7.731   7.582   8.611   8.781   8.538   8.857   7.087   7.231   5.838 
+  7.092   7.148   7.188   6.674   6.579   6.352   8.995  10.350  11.187   9.507   8.121   8.086   7.786   6.901   7.165   9.324   9.136   7.844   7.297   7.200   7.985   8.842   8.532   7.039   8.111   7.928   7.656   8.140   7.841   9.072   8.998   8.763   8.354   7.455   6.653   6.401 
+  6.355   5.857   5.933   5.669   5.128   6.251   8.448  10.367  11.485   9.946   8.082   8.701   8.422   6.997   6.890   8.533   7.906   7.896   7.783   6.821   8.291   8.830   7.775   6.569   7.791   7.975   7.998   8.934   8.214   8.061   8.940   8.489   7.989   7.737   6.502   6.045 
+  5.306   6.332   7.218   5.775   6.275   7.756   8.421  10.109  11.653  10.164   7.629   8.974   8.923   7.673   7.458   8.674   8.146   7.628   8.166   7.313   9.409   9.194   7.739   6.370   6.839   8.662   7.342   8.018   8.738   8.666   7.407   8.600   9.562   7.772   6.787   5.916 
+  5.477   6.710   8.062   7.027   6.635   7.212   7.950   9.772  11.298   9.741   8.521   8.676   8.905   7.857   7.063   6.966   7.829   8.935   9.692   8.689   8.652   9.022   7.185   7.340   8.071   7.910   7.794   7.890   8.607   8.788   8.791   8.837   9.333   8.034   6.948   6.288 
+  6.699   7.271   8.126   6.939   5.636   7.957   7.720   9.178  10.624   9.499   8.602   8.165   6.271   7.096   5.824   6.997   8.703   9.418   9.537   9.417   9.173   8.052   6.428   7.325   8.145   8.146   8.357   8.913   7.972   8.290   8.813   8.532   8.752   7.653   7.054   5.975 
+  7.834   7.869   8.275   7.555   5.708   7.695   7.981   8.681   9.252   8.321   8.570   6.908   7.056   6.004   6.461   5.834   8.554   9.207   8.366   8.966  10.636   9.692   6.895   6.006   8.130   8.226   7.516   8.136   8.423   8.814   8.914   8.460   9.090   7.781   6.833   6.028 
+  7.887   7.943   8.064   7.082   5.534   6.522   7.554   8.175   9.267   8.565   7.723   6.444   6.832   6.666   5.683   5.958   7.369   7.834   9.210   9.939   8.991   8.670   8.744   7.455   7.604   8.030   7.590   8.403   8.460   8.453   9.820   8.885   9.036   7.910   6.832   6.151 
+  7.477   7.963   7.594   7.225   6.671   6.560   9.000  10.595  10.371   8.779   7.838   7.668   7.661   7.067   4.216   5.751   6.903   8.468   9.345   9.436   9.508   7.847   6.974   7.222   7.643   8.393   8.096   7.703   7.314   8.228   9.254   9.134   8.918   7.896   6.964   6.618 
+  6.411   7.828   7.212   5.799   6.795   6.934   8.234  10.186   9.949   7.947   5.968   7.127   7.536   5.769   4.572   6.130   6.440   7.447   7.877   9.382  10.011   8.860   6.991   7.947   6.902   7.973   8.402   7.683   7.242   8.053   9.316   9.027   8.682   7.405   7.715   6.654 
+  6.114   5.916   5.873   4.982   6.081   6.496   6.476   6.878   8.103   7.231   6.741   5.881   6.615   4.251   4.988   5.980   6.406   7.354   7.016   8.823   9.684   9.565   8.050   7.546   7.730   8.000   7.372   8.193   7.983   8.053   9.089   7.662   9.022   7.764   7.076   6.300 
+  4.515   5.657   5.758   6.167   5.722   5.860   7.527   8.785   7.754   6.400   5.462   5.565   5.157   5.606   5.721   6.631   6.988   7.637   7.438   9.417   9.193   9.679   8.194   8.016   8.059   7.086   6.868   7.381   6.929   7.713   8.934   7.914   8.093   7.352   6.473   6.233 
+  5.834   5.500   5.956   5.849   5.660   5.187   7.252   8.909   7.455   4.179   4.705   4.283   4.753   6.308   6.563   6.559   7.144   7.026   7.883   8.971   9.950   9.839   7.314   7.550   7.190   7.064   7.099   7.392   7.507   7.684   8.616   8.960   8.162   7.625   7.138   7.341 
+  4.520   5.369   6.034   4.743   4.535   6.159   7.061   7.920   6.138   5.610   5.367   6.184   4.906   5.432   6.882   7.126   6.877   7.475   7.562   7.450   9.002   8.452   8.159   7.483   6.932   6.449   7.060   8.510   8.609   8.381   8.734   8.092   7.898   8.022   7.966   6.988 
+  3.344   4.474   3.939   3.980   4.713   5.743   7.582   8.974   8.066   5.897   4.957   5.417   4.613   5.570   5.681   6.121   6.521   6.917   7.790   7.732   9.278   8.124   7.293   6.350   7.802   7.257   6.567   8.388   8.965   8.420   8.460   8.572   8.441   7.979   7.422   6.903 
+  5.765   6.192   5.317   5.381   5.551   5.170   5.103   8.116   7.751   5.033   5.039   5.853   4.985   6.476   6.373   5.410   5.889   5.394   6.843   8.546   9.590   8.622   7.004   7.631   8.163   6.745   6.575   7.917   8.638   8.976   8.416   8.645   8.434   8.184   7.705   8.071 
+  4.679   5.783   5.002   4.076   2.892   5.277   6.311   6.321   6.225   4.535   3.825   4.759   4.628   5.862   6.416   5.023   4.251   6.005   6.438   6.566   7.803   7.884   7.842   7.541   7.034   6.822   7.123   8.015   8.272   8.074   8.787   8.304   8.559   7.447   7.546   7.097 
+  5.281   5.638   3.961   3.572   4.056   5.659   6.071   5.289   6.711   5.426   4.315   5.223   4.708   5.006   5.433   5.609   5.348   5.877   6.265   8.709  10.078   9.098   7.480   7.285   8.081   7.656   6.974   7.751   7.799   7.932   8.999   8.412   8.125   7.902   7.716   7.011 
+  5.126   6.292   5.863   4.822   1.822   5.889   7.136   6.264   6.756   6.177   5.740   5.324   3.600   4.852   5.855   5.470   5.019   6.626   7.281   9.100  10.170   9.203   7.414   7.021   7.676   6.248   7.305   7.640   8.343   8.670   9.041   8.112   8.281   7.528   8.236   7.955 
+  2.377   4.791   5.944   5.209   4.221   4.941   5.544   6.400   6.737   4.739   6.323   6.137   5.252   6.029   6.045   5.371   6.181   6.156   6.663   8.192  10.180   9.077   6.704   7.580   6.413   6.821   6.833   7.357   7.890   8.260   8.982   7.849   8.016   7.520   7.056   6.164 
+  4.025   4.771   4.138   3.333   4.316   5.556   6.150   6.534   5.345   5.699   5.900   5.216   6.294   6.397   5.476   5.556   6.049   6.807   6.584   8.502   9.858   8.419   5.864   7.027   7.643   7.320   6.664   7.333   8.054   9.138   7.555   8.474   8.722   7.098   6.987   6.033 
+  4.384   4.481   3.085   3.613   5.310   6.114   6.717   4.545   5.607   5.554   5.211   5.156   5.018   4.653   5.432   6.313   6.389   6.274   6.809   8.924   9.833   7.600   7.277   7.816   8.295   6.677   6.601   7.637   8.564   7.930   7.904   7.805   7.631   7.472   6.910   6.369 
+  4.842   5.094   5.348   5.318   6.372   7.329   7.124   5.565   7.739   7.887   6.104   4.226   5.517   5.871   6.829   5.600   6.453   5.875   7.326   8.579  10.453   8.216   7.350   7.613   6.453   6.057   7.055   7.280   7.630   7.687   8.830   7.409   7.126   7.108   6.893   5.674 
+  7.135   7.274   5.781   6.882   8.798   9.569   9.374   7.265   7.214   6.396   7.316   6.463   6.643   6.957   6.668   5.839   8.413   8.563   8.297   7.635   9.695   8.569   7.369   7.546   6.260   6.918   7.104   7.618   8.257   7.456   8.639   8.251   7.087   6.758   6.963   6.541 
+  6.577   7.635   7.207   6.091   9.559   9.924  10.353   9.474   8.501   7.669   8.015   8.339   7.845   7.195   8.235   8.000  10.376   9.926   7.631   7.021   8.702   7.794   7.495   7.066   6.395   7.527   7.189   8.115   7.737   7.359   9.215   8.607   7.379   7.074   7.758   6.806 
+  5.633   6.658   6.375   6.444   9.529   9.778   9.571  10.517  10.793   9.552   9.065   8.114   7.080   8.260   8.933   8.003  10.234  10.337   9.065   9.273   9.712   8.682   6.520   7.439   6.563   6.343   6.982   7.361   8.352   7.156   8.935   7.898   7.065   7.199   7.024   5.959 
+  5.887   6.774   6.076   7.001   9.843  11.053  10.344  11.000  11.387   9.251   8.671   7.027   6.089   8.081   8.640   9.081   9.991   9.502   8.551   8.432   8.618   8.878   7.869   7.224   7.772   6.953   7.432   7.300   9.200   8.099   8.273   7.470   6.493   6.387   6.818   6.366 
+  6.979   7.955   7.823   6.961   9.293  10.680  10.829  11.367  10.563   9.989   8.365   7.545   7.957   8.579   9.302   9.218  10.044   9.354   8.597   8.402   8.458   7.446   8.204   6.963   7.502   7.874   7.000   7.747   8.838   7.746   7.679   7.315   7.158   6.152   7.129   6.497 
+  7.338   8.041   7.469   6.422   9.003  10.263  10.526  10.799  10.594   9.341   8.375   7.667   8.325   8.235   9.143   9.457  10.267   9.658   8.534   8.890   9.551   9.022   9.019   7.802   7.852   8.153   7.981   8.010   8.540   8.499   8.066   8.072   7.953   7.313   6.898   6.012 
+  5.947   7.098   8.203   7.172  10.527  11.840  11.500  11.191   9.649   9.086   9.291   8.257   7.500   9.478   9.103   8.686  10.785  10.475   8.286   8.572   9.409   8.409   7.763   7.311   8.877   9.035   8.007   7.936   8.267   7.723   7.807   7.140   7.787   7.534   6.865   6.002 
+  4.726   7.475   8.689   8.265  11.360  12.194  11.142  11.429  10.331   8.791   9.286   7.865   6.791   8.725   9.675   9.849   9.646  10.677   9.652   9.636   9.913   8.101   6.771   6.895   8.530   8.318   7.959   8.261   8.367   8.219   8.526   8.094   7.265   6.662   6.820   6.413 
+  7.123   7.827   8.469   7.846  10.761  11.036  10.900  10.803  10.339   9.189   7.303   7.548   7.297   7.457   8.369   9.721   9.700   9.966   9.532   9.263  10.010   8.347   7.618   8.251   8.448   8.903   7.875   8.328   8.790   8.039   8.634   7.430   7.306   6.462   6.678   5.661 
+  7.723   7.896   8.663   8.881  10.756  11.212  10.480   9.624   9.235   8.548   8.158   7.264   6.680   7.618   8.273   9.795  10.784  10.152   9.126   9.008   8.911   9.594   8.494   8.089   8.742   8.553   8.299   7.895   8.170   8.261   8.267   7.594   7.308   6.552   6.143   5.583 
+  8.532   8.756   8.704   9.547  10.666  10.631  10.150  10.593   9.553   7.775   7.090   6.904   5.415   5.412   7.716   8.682   8.361   9.696   9.809   9.574   9.287   9.858   8.902   9.272   9.673   9.804   9.212   8.886   8.591   9.224   8.616   7.768   7.114   6.356   6.210   5.799 
+  8.543   8.445   7.597   7.230   9.801   9.991   9.374  10.616   9.208   7.459   7.115   6.553   6.219   7.969   7.843   8.187   8.343   9.049   9.063   8.660   9.027   8.488   7.790   7.736   8.673   9.566   9.233   9.806   8.885   9.246   8.633   7.601   6.769   6.460   6.132   5.440 
+  8.420   8.223   8.206   9.257   9.935  10.573  10.137  10.224   9.150   7.476   6.798   6.354   5.663   6.395   6.381   7.511   8.397   9.138   7.856   8.841   8.852   8.153   8.337   7.471   7.806   8.610   7.612   7.338   7.173   7.046   7.002   6.837   6.633   6.604   6.544   5.138 
+  8.350   8.120   6.135   6.565   6.984   8.924   8.393   8.006   7.718   7.092   6.685   5.452   5.403   4.924   7.132   8.426   8.794   8.534   7.627   8.027   8.255   7.735   7.257   6.513   7.505   7.707   7.187   7.647   7.011   7.110   8.017   6.918   6.330   5.661   5.715   5.033 
+  7.376   7.324   6.934   7.140   7.645   9.141   9.122   9.734   9.580   7.831   5.785   6.117   6.648   4.778   7.076   7.896   8.468   8.678   7.638   8.753   8.358   7.726   7.286   6.141   7.568   7.045   6.360   6.786   6.764   6.856   7.281   6.865   6.808   6.153   5.641   5.244 
+  5.432   6.562   7.518   7.479   8.261   8.770   8.224   8.321   8.301   5.899   5.886   7.042   5.981   6.001   5.053   8.463   9.603   8.775   8.073   7.267   8.069   6.828   6.358   7.508   7.936   7.293   6.144   5.941   7.003   6.859   7.724   6.792   6.598   5.950   5.314   4.758 
+  6.245   5.425   6.969   7.612   7.140   7.389   7.282   8.809   8.009   5.964   6.449   6.592   5.587   5.841   6.325   7.477   7.917   9.188   8.889   8.808   9.140   7.654   6.653   8.086   8.104   7.328   6.351   7.115   7.774   7.825   6.573   6.534   6.868   8.231   7.621   5.641 
+  4.954   5.454   7.029   8.017   9.277   9.337   7.917   8.394   7.723   6.112   7.008   6.421   5.653   6.397   6.064   5.554   7.038   9.136   9.146  10.092   9.584   8.480   7.093   6.770   7.703   7.379   7.579   7.115   8.010   8.427   7.194   6.608   6.922   8.634   9.095   7.154 
+  5.113   5.256   6.319   8.830   8.779   8.777   8.503   7.541   7.554   6.163   7.419   7.496   6.708   5.757   5.356   7.102   7.687   8.344   8.377   9.030   8.210   6.849   7.098   6.962   9.375   9.101   8.471   8.807   7.590   7.333   6.747   6.803   6.905   7.877   8.318   6.959 
+  6.671   6.533   4.196   8.821   9.806   8.574   7.421   5.943   7.327   5.500   5.311   5.837   5.706   4.436   6.010   6.779   6.982   8.503   8.374   9.002   8.707   8.832   7.384   7.455   8.555   9.349   9.855  10.152   8.605   7.475   7.501   7.393   7.549   7.486   6.680   5.620 
+  7.399   7.547   5.718   9.434  11.209  10.607   7.705   8.833   8.673   6.307   6.096   6.753   6.063   4.970   6.275   6.966   7.673   8.688   8.829   8.453   9.153   9.798   7.909   6.835   8.859   9.284  10.932  11.383   9.842   8.741   8.175   7.483   7.991   8.568   7.140   5.204 
+  7.684   7.716   5.656   6.968   9.507   9.158   8.085   9.298   8.123   6.737   5.931   5.502   5.904   5.865   5.606   5.878   6.076   8.219   9.098   9.282   9.908  10.256   6.948   7.602   9.206   9.539  11.174  11.063   9.643   9.061   7.876   7.952   8.270   8.511   6.828   5.555 
+  8.137   7.738   5.915   8.470   9.582   9.651   9.063   9.921   8.143   5.554   5.599   4.582   4.683   6.286   5.362   6.331   6.333   7.083   7.796   8.482  10.372   9.968   7.404   6.715   9.069   9.501  10.645  10.227   9.080   8.687   8.561   8.317   7.552   7.975   5.934   4.987 
+  7.058   6.954   5.058   8.675   9.240   9.265   9.701   9.804   6.883   5.511   5.365   5.548   5.189   5.887   6.509   6.316   6.382   6.791   8.678   8.622   9.738   9.425   8.474   7.763   8.400   8.792  10.638  10.937   9.464   9.273   8.652   7.998   8.030   8.070   6.863   4.119 
+  5.860   5.511   6.485   9.276  10.111   9.126   9.574   9.602   7.828   6.905   5.615   5.510   5.358   6.541   7.023   6.855   6.824   8.309   8.893   8.365   9.296   9.159   8.665   8.123   8.012   8.700  10.649  10.882   9.841   9.540   8.944   8.707   7.259   7.024   6.545   4.621 
+  3.110   5.665   6.612   9.647  10.359   8.368  10.300  11.016   8.642   8.062   7.301   5.637   6.214   6.751   6.158   6.424   6.638   6.951   8.464   8.747  10.573   9.509   8.380   7.637   8.705   9.152   9.770   9.711   9.167   9.342   9.003   8.133   8.014   7.776   6.685   4.132 
+  5.194   4.429   6.260   7.682   8.667   7.569   9.794  10.187   6.916   7.537   6.081   5.064   5.372   5.854   5.186   5.178   6.914   7.681   7.821   8.904   9.618   7.857   7.828   6.961   8.266   7.677   9.805   8.898   7.215   7.473   8.987   8.322   7.514   6.170   5.721   4.866 
+  5.787   5.844   7.922   9.586   9.012   7.710   8.334   9.216   7.794   6.550   7.247   6.326   5.951   6.413   5.791   6.401   6.422   8.220   8.410   8.922   8.613   7.754   6.975   6.291   7.017   7.251   8.527   8.385   6.548   6.828   8.371   8.525   7.366   6.261   5.151   4.866 
+  5.200   6.040   8.432   9.821   9.097   8.779   9.096   9.219   7.068   6.806   5.944   5.954   6.538   5.987   6.439   6.808   6.068   8.494   8.250   9.221   9.080   7.581   6.328   6.028   7.450   6.977   7.858   7.414   7.268   7.398   7.292   8.051   7.392   6.592   4.475   4.068 
+  4.984   7.175   8.028   9.822   9.856   8.476   7.162   7.788   6.473   6.492   5.230   5.496   5.911   6.837   5.626   5.565   6.511   7.557   8.473   9.355   8.775   7.165   6.245   6.521   7.932   6.748   8.207   7.962   7.378   7.294   7.628   7.518   6.190   5.937   5.447   3.996 
+  4.681   4.834   7.258   7.802   9.079   9.099   7.292   6.851   6.757   5.478   6.060   5.170   5.296   6.600   5.134   6.142   6.264   5.980   6.807   9.029   8.199   6.657   6.205   4.522   6.717   6.252   8.612   7.762   6.647   6.465   6.783   6.824   6.169   4.842   4.467   3.625 
+  6.241   6.426   6.497   7.583   9.198   8.909   8.780   5.925   6.663   6.713   6.433   5.809   4.805   6.296   5.978   5.999   6.895   7.472   8.182   7.668   7.542   6.038   5.514   4.722   6.746   6.647   6.692   6.770   5.838   6.298   5.971   5.659   5.711   5.863   4.588   3.239 
+  3.922   5.986   7.645   7.344   8.539   9.506   8.338   7.041   6.469   6.215   6.486   3.986   4.536   6.696   6.047   5.504   6.252   7.474   8.523   8.502   8.508   7.017   6.085   6.200   6.146   6.411   7.409   7.570   6.415   6.825   7.223   6.409   6.374   6.004   5.230   3.740 
+  4.612   5.886   6.895   8.104   9.097   8.685   7.740   6.574   5.942   6.582   5.488   5.960   5.092   5.730   5.648   5.489   5.410   6.583   7.441   7.986   7.503   6.413   6.141   6.429   6.298   6.853   7.292   6.412   6.477   6.258   6.039   5.958   6.683   6.554   4.569   3.213 
+  5.305   5.257   5.892   7.933   7.682   7.885   7.233   7.199   6.672   6.135   5.833   4.974   5.615   5.001   4.972   5.067   6.402   6.516   7.037   7.867   6.568   6.558   6.930   6.216   5.291   5.333   5.090   5.196   6.095   5.832   5.264   5.876   6.009   5.072   4.470   3.169 
+  5.438   4.701   5.378   8.185   8.032   6.440   6.771   6.483   6.367   6.197   4.712   5.320   5.131   5.171   5.446   4.802   4.002   5.916   7.397   8.154   7.562   5.613   5.943   5.662   4.854   5.218   5.772   5.654   5.336   5.227   4.694   5.281   5.918   6.199   4.118   2.927 
+  4.660   6.799   6.853   6.868   7.472   6.561   6.529   6.751   6.074   6.145   4.261   3.215   4.540   5.395   6.146   6.437   6.507   8.182   8.065   7.969   6.695   5.140   5.360   4.757   4.738   6.306   6.148   6.119   6.783   6.702   5.642   5.918   6.242   5.439   4.042   3.633 
+  4.556   5.406   6.164   6.821   6.662   6.541   7.345   6.602   5.070   4.133   4.337   5.619   5.473   6.434   6.277   5.355   6.256   8.379   8.419   9.135   7.602   5.447   5.024   4.647   6.563   7.233   5.973   5.919   6.568   6.694   5.925   6.001   5.943   5.670   4.590   3.512 
+  2.485   5.156   7.181   8.018   6.880   4.715   6.206   7.722   7.090   5.720   5.770   5.715   5.946   4.562   5.644   5.379   6.723   7.530   6.959   7.266   5.903   5.847   5.266   4.960   5.339   5.723   5.262   5.837   5.859   6.052   6.050   5.976   4.698   4.167   4.333   3.089 
+  4.736   5.597   6.664   7.318   6.596   5.499   6.366   6.947   7.321   7.460   5.939   4.990   5.703   5.258   5.579   5.574   8.196   8.141   5.877   6.514   6.589   5.281   4.339   5.205   5.344   6.632   5.855   6.367   6.029   6.748   5.602   5.261   5.583   3.951   3.510   3.206 
+  5.919   4.709   6.247   7.479   6.479   5.235   6.928   8.653   8.650   7.502   7.252   6.584   5.484   4.320   4.774   5.986   8.868   8.715   6.765   7.147   7.316   6.035   5.673   6.543   6.045   5.994   5.355   5.321   5.980   6.367   5.315   4.650   5.103   3.777   3.538   2.747 
+  6.023   4.726   3.878   7.517   7.475   4.642   6.683   7.326   8.821   8.409   6.343   6.015   4.494   6.431   7.112   7.167   9.979   9.245   6.571   7.418   6.428   6.157   4.994   4.386   6.152   6.380   5.439   5.672   6.237   7.213   6.076   4.814   5.030   3.952   3.620   2.828 
+  6.480   5.053   4.428   6.979   6.512   5.666   7.152   6.148   8.470   9.337   7.007   5.292   4.870   6.359   6.412   6.835  10.450  10.087   8.532   7.869   6.600   5.722   5.921   4.744   7.560   8.530   6.915   6.153   7.702   8.767   8.022   5.507   5.239   5.929   4.105   2.831 
+  7.013   6.239   4.685   5.651   6.680   6.069   8.054   7.993   7.817   8.905   6.300   6.366   5.935   5.233   6.660   7.313  10.897  11.005   8.758   7.829   6.397   6.258   6.046   5.763   7.487   8.764   7.270   6.138   7.915   9.359   8.880   5.855   5.307   6.435   4.346   2.375 
+  7.206   6.836   6.162   6.815   6.889   6.034   9.267   9.767   8.787   9.107   6.306   5.488   5.180   7.192   7.491   7.923   8.549  10.056   8.817   8.221   7.341   6.069   5.878   6.731   8.194   7.693   6.820   6.422   6.803   8.259   8.026   6.555   6.429   6.623   4.095   2.498 
+  7.095   6.422   5.809   7.987   7.194   6.124   8.833   8.931   8.683   8.595   5.388   4.180   5.364   5.962   5.817   5.355   8.709   9.402   8.551   7.679   6.584   5.429   5.616   6.561   7.429   6.484   6.033   5.167   5.892   6.755   6.778   6.235   5.641   4.757   2.734   2.194 
+  6.257   6.217   7.109   9.101   8.397   6.357   7.543   7.901   7.627   7.392   4.716   4.557   4.316   5.654   5.107   6.453   6.694   8.556   7.843   7.697   6.449   5.545   4.237   5.882   5.654   5.844   5.641   4.241   5.062   6.769   6.691   6.458   5.116   3.756   3.363   2.287 
+  3.719   3.308   7.286   8.692   7.761   7.152   7.930   7.584   7.509   8.172   4.876   5.186   4.810   4.924   4.815   6.042   6.461   7.878   6.641   6.215   5.332   6.139   4.495   4.955   4.781   5.505   4.801   4.205   3.596   5.509   5.683   5.299   5.235   3.972   3.638   2.390 
+  2.710   3.932   5.515   6.118   5.604   6.227   6.544   6.583   6.955   7.699   5.367   4.724   4.285   4.094   4.324   5.857   7.055   8.724   6.597   5.389   6.006   5.737   5.053   5.119   4.962   5.304   3.553   3.720   3.226   4.003   5.442   4.907   4.570   4.382   3.384   3.164 
+  5.689   5.066   6.011   6.482   5.286   5.359   7.398   6.729   5.748   7.157   5.696   4.604   4.998   5.548   5.164   4.839   6.751   8.047   6.038   4.903   4.834   4.689   4.931   5.296   6.034   4.663   3.546   3.629   3.649   3.942   4.527   4.411   4.623   4.611   4.343   3.645 
+  6.225   5.462   5.954   7.354   7.052   5.017   6.864   5.807   5.744   6.570   3.911   3.842   4.193   5.677   5.295   5.023   6.401   6.635   6.310   6.040   4.774   4.860   5.954   5.854   5.707   5.995   6.448   6.983   7.442   7.315   7.193   6.383   5.361   5.981   6.050   4.675 
+  4.839   5.712   5.292   7.655   7.433   3.822   6.347   6.093   5.595   6.014   4.292   3.057   4.324   5.566   5.302   4.212   4.724   4.574   5.462   5.010   4.623   4.869   5.020   4.959   5.783   5.237   5.563   5.485   5.975   5.573   5.568   5.302   4.271   4.824   5.364   4.142 
+  4.573   3.840   4.228   7.184   7.114   4.505   5.766   4.732   3.736   4.697   3.893   3.903   3.905   4.997   4.627   4.520   4.302   4.565   5.621   3.665   4.135   5.070   5.734   4.193   6.079   5.456   4.751   5.134   5.004   4.910   5.047   4.839   3.624   4.352   4.638   3.719 
+  5.616   4.657   4.942   5.963   6.416   4.787   6.267   5.902   3.865   4.069   3.984   3.722   3.038   5.062   4.907   4.263   4.852   5.396   5.585   4.987   4.707   5.788   5.270   5.087   6.075   6.142   6.461   5.878   4.995   5.729   5.884   5.235   4.450   4.156   4.399   3.558 
+  6.405   5.441   6.019   7.929   7.204   6.690   6.742   4.399   4.343   4.147   4.673   4.325   3.723   3.597   2.562   5.169   4.769   4.778   5.822   4.891   4.900   6.179   5.688   5.670   6.086   6.518   7.249   5.955   5.826   6.524   7.516   5.827   3.930   4.525   5.053   3.950 
+  5.299   4.328   5.014   7.880   7.369   5.438   5.211   4.142   3.994   3.686   4.507   3.787   3.939   3.991   3.961   5.101   6.291   6.147   5.398   5.583   6.859   6.716   5.675   5.670   6.226   6.608   6.040   5.175   5.161   6.427   7.192   5.828   3.552   4.206   4.560   3.828 
+  2.387   3.680   4.116   7.529   7.373   5.068   5.747   4.981   4.531   5.011   6.116   5.458   3.804   5.127   4.799   4.316   4.244   5.681   5.668   5.743   6.757   7.338   5.662   5.911   6.132   7.155   6.239   5.061   4.629   5.795   6.122   4.471   4.283   4.157   4.696   4.268 
+  3.761   4.878   5.037   6.786   7.126   5.266   4.777   3.744   5.040   5.273   5.846   5.756   5.383   5.323   4.251   4.854   5.960   5.949   5.752   5.671   6.865   7.402   5.955   5.973   6.661   7.361   6.640   6.701   5.127   5.344   6.366   4.855   2.981   3.633   4.533   4.479 
+  5.496   5.383   4.221   7.031   6.546   4.595   4.636   3.768   6.491   6.947   6.141   6.139   5.430   6.489   5.029   4.675   4.899   5.977   6.249   6.729   8.025   8.015   6.699   6.172   7.067   7.279   6.891   6.808   5.768   6.601   6.670   5.867   4.462   3.994   4.220   4.496 
+  4.364   4.460   7.017   8.287   6.850   3.206   4.369   5.346   6.499   6.782   6.011   5.889   4.812   6.116   5.564   5.837   5.311   5.856   6.337   6.677   7.954   8.558   7.970   6.699   6.875   7.261   7.705   7.362   5.869   6.695   6.708   6.318   4.365   3.951   3.996   4.445 
+  5.409   5.217   7.627   8.452   6.590   5.829   5.873   7.793   8.261   7.943   7.858   5.834   4.413   3.841   4.288   6.138   5.572   5.015   6.205   6.881   8.244   8.792   7.886   7.521   7.157   7.784   7.664   7.094   6.285   6.267   7.056   7.080   4.743   4.123   3.946   4.244 
+  5.185   4.172   7.195   7.321   5.242   6.827   7.189   8.790   8.632   8.298   6.870   5.966   5.657   7.025   6.125   6.864   6.418   6.985   6.802   6.847   8.686   9.299   7.699   7.919   6.937   7.530   8.066   7.480   6.761   6.958   7.198   7.124   5.007   4.062   3.674   3.456 
+  4.498   5.027   6.761   5.692   6.308   6.095   6.186   8.046   7.022   6.473   7.052   6.541   5.514   6.143   5.055   5.577   6.084   6.377   6.006   6.048   7.158   7.988   7.768   7.425   7.473   6.535   7.078   6.614   6.211   6.233   7.138   6.040   4.802   2.958   2.970   3.054 
+  3.024   5.197   7.244   7.044   5.417   5.532   6.103   8.402   8.077   7.752   7.521   6.384   5.738   6.129   5.095   4.855   5.251   6.349   6.223   6.688   7.391   7.861   7.928   8.075   7.836   7.818   8.233   7.376   6.919   7.173   7.365   6.171   5.477   4.307   3.869   3.075 
+  5.180   4.608   6.911   6.731   4.864   5.507   6.162   8.445   7.888   8.293   7.953   6.784   5.603   6.551   5.458   4.789   4.401   6.056   6.490   5.752   7.596   8.002   8.221   8.821   8.289   8.117   7.619   7.345   6.396   5.897   7.188   6.667   6.171   4.317   3.654   3.966 
+  6.038   4.630   7.192   7.812   6.047   6.844   6.162   8.853   8.836   8.422   7.438   7.693   7.068   5.453   4.332   3.605   5.212   5.665   4.253   6.368   6.820   7.701   8.403   7.854   7.595   8.046   8.265   7.934   6.535   6.375   7.739   7.352   6.231   4.806   3.602   3.180 
+  6.027   4.509   7.323   7.935   5.802   6.538   5.330   7.964   7.881   8.053   8.252   7.728   7.037   5.488   5.120   3.641   3.249   5.151   4.996   5.117   6.087   6.441   6.156   6.991   6.766   7.294   8.331   7.404   6.446   6.106   7.312   7.293   6.161   5.142   3.436   2.729 
+  5.846   5.450   6.403   6.847   5.247   6.822   6.099   7.927   7.655   6.325   6.772   5.156   5.040   4.791   4.811   3.767   4.494   4.610   5.090   4.526   5.179   6.426   6.029   7.843   7.115   7.574   7.246   6.494   6.092   5.681   6.750   6.769   5.556   4.934   3.955   3.106 
+  4.095   3.169   5.008   6.462   5.073   5.954   5.258   7.037   7.963   7.246   5.761   5.482   5.109   5.524   5.107   3.434   4.525   5.375   5.142   4.955   4.035   5.755   5.850   8.030   7.881   7.465   6.527   6.510   5.652   5.171   5.863   5.909   5.298   5.061   4.410   3.711 
+  5.242   4.516   5.820   6.332   4.557   5.802   5.638   5.732   6.962   6.263   5.915   5.841   5.493   5.864   5.012   4.921   5.097   4.807   4.937   4.563   4.916   6.453   5.695   6.216   6.604   5.873   5.267   6.142   5.134   4.760   5.989   5.841   4.478   4.209   3.811   3.336 
+  5.403   4.216   6.530   6.898   5.394   5.155   5.564   6.313   5.611   6.032   6.614   5.257   4.182   4.206   3.509   5.013   5.183   5.523   6.635   6.469   7.123   6.212   6.112   7.408   7.160   5.514   5.553   5.996   5.007   4.068   5.035   5.596   4.501   3.894   3.495   3.562 
+  6.784   5.593   5.505   5.863   4.152   4.594   5.366   3.893   4.351   5.607   5.893   6.032   6.064   5.599   5.887   5.701   6.461   5.788   8.333   7.864   7.245   7.519   6.841   7.666   7.612   6.638   6.672   6.584   5.841   6.127   6.024   6.126   5.915   5.722   5.412   4.839 
+  5.401   4.236   4.967   4.984   4.787   5.253   5.074   5.316   5.506   5.632   6.164   6.805   5.074   5.800   6.369   5.793   5.737   6.518   8.846   8.438   7.942   6.638   6.795   7.298   7.441   7.802   8.286   7.875   8.118   7.075   8.042   8.490   7.625   7.353   8.173   7.528 
+  3.519   4.409   4.317   5.756   6.267   6.484   4.957   4.493   4.637   5.300   5.440   6.327   5.493   5.773   5.829   6.820   7.668   6.905   8.043   7.664   8.012   7.550   7.751   8.044   9.639   9.543   9.687   9.164   8.622   7.593   9.819  10.004   8.665   7.803   9.095   8.813 
+  3.265   4.822   6.000   6.414   5.898   6.107   5.480   5.774   6.076   5.182   6.704   5.521   4.785   6.456   6.480   5.377   6.571   7.494   7.880   8.145   9.665   9.689   8.697   8.846  10.020   9.664  10.324   9.852   9.840   8.725   9.741  10.537   9.617   9.046   9.011   8.861 
+  4.473   5.410   5.834   5.236   5.460   6.309   6.653   6.858   6.738   6.263   7.430   6.400   6.880   5.966   5.591   5.471   8.642   8.524   8.509   8.095   9.188   8.947   8.667   7.732   8.693   9.199  10.537  11.058  10.287   9.281  10.390  10.634   9.391   9.438   9.757   9.902 
+  6.546   6.774   6.522   5.724   5.518   6.829   7.010   6.606   6.639   5.885   6.109   6.018   6.176   6.324   6.474   7.500   7.770   8.251   9.335   9.846   8.301  10.398  10.264   9.055   9.786   9.704  11.053  10.704  10.085   9.710   9.450  10.843  10.130  10.361  10.147  10.010 
+  5.499   5.660   6.177   6.570   7.227   7.290   6.259   6.838   6.063   5.939   7.535   8.093   7.250   5.803   6.002   7.408   7.548   8.401  10.732  10.625   9.117   9.492   9.391   9.935   9.744  10.338  11.344   9.920   8.767   9.270  10.305  10.686  10.497   9.468   9.728   9.477 
+  6.999   7.277   6.864   5.423   7.547   7.825   7.129   6.553   6.789   7.001   7.753   8.243   8.153   8.224   7.966   7.000   8.725   9.888  10.943  10.608   8.982   9.429   8.544   8.738   8.856   9.145  10.138   9.320   8.537   8.414  10.429  10.596  10.012   8.187   7.378   7.595 
+  9.122   8.530   7.645   7.257   6.781   8.196   6.854   7.436   7.632   7.446   6.989   7.911   8.018   7.771   7.579   7.562   7.924   9.833   9.537   8.855   7.666   8.563   7.588   7.587   7.213   8.301   8.906   7.218   6.280   6.546   8.160   8.951   8.823   6.412   7.130   7.403 
+ 12.404  12.395  11.403  11.345  12.612  12.576  12.566  13.151  11.827  10.113  10.284   8.335   8.486   7.318   8.118   7.971   8.821  10.447  10.813   9.617   7.850   8.087   8.302   8.446   8.255   9.546   9.645   8.325   6.635   7.605   9.654  10.424  10.293   8.983   7.517   7.736 
+ 13.270  12.958  12.717  12.379  13.408  14.727  15.368  15.699  13.961  12.282  11.631  11.376   9.848  10.633  10.436  11.211  11.794  13.378  12.814  11.092   9.949   9.498  10.109  10.239   9.143  11.253  11.392   9.860   9.029   9.467  12.205  12.651  12.274  11.131   8.829   8.424 
+ 12.590  12.675  12.763  12.657  13.656  14.928  16.053  16.862  15.567  13.539  12.483  12.086  11.371  11.686  11.994  12.450  13.563  15.222  14.210  12.437  11.347  10.819  10.879  10.112   9.261  11.176  11.265  10.444  10.333  10.582  13.660  13.911  13.516  12.364   8.647   7.006 
+ 12.593  12.329  11.975  12.442  12.955  13.731  15.251  16.395  14.650  14.062  12.480  10.050   8.742   8.300   9.985  11.016  12.597  14.806  13.453  12.023  11.042  10.576  10.169   8.548   7.906   9.456   9.355   9.538   9.900   9.775  11.253  11.545   9.878   9.050   7.487   6.410 
+ 12.685  12.081  12.209  12.442  12.631  13.311  15.110  15.124  15.165  12.952  12.005  10.778   9.318   8.947  10.286  10.819  12.552  14.503  12.790  11.612  11.247  11.152  10.947   9.462   9.805  10.439   9.600   8.509   9.691  10.834  11.786  12.060  10.538   8.932   7.304   6.438 
+ 12.606  11.700  11.908  11.919  12.190  12.873  14.094  15.435  14.939  13.804  12.138   9.925   9.460  10.319  10.942  11.719  13.480  14.213  12.206  11.319  10.940  10.942  10.891   8.980   8.840  10.013   9.613   8.915   9.669  10.206  11.174  11.472  10.696  10.274   8.059   6.729 
+ 12.710  11.658  11.858  11.765  11.888  12.650  14.325  15.548  15.366  14.083  12.255  10.825  10.210  10.861  11.446  12.146  14.071  14.610  12.391  11.493  10.961  10.974  11.288   9.682   8.618   9.596   9.833   9.153   9.857  10.354  11.602  11.788  11.071  10.816   7.687   7.151 
+ 12.769  11.970  12.029  11.963  11.976  13.032  14.256  15.964  16.073  14.740  13.413  11.483  11.582  11.403  12.067  13.012  14.738  14.833  12.792  11.931  11.168  11.339  11.772  10.409   9.589  10.074  10.246   9.363  10.298  10.964  12.324  12.426  11.349  10.862   7.896   7.251 
+ 12.860  12.381  12.281  12.172  12.384  13.282  14.502  16.264  16.271  15.315  14.109  12.057  12.292  12.030  12.791  13.935  15.309  14.977  13.144  12.327  11.698  11.886  12.081  11.815  11.579  10.569  10.174   9.946  10.139  10.560  12.722  12.894  12.973  12.176   8.230   7.216 
+ 12.927  12.444  12.272  12.047  12.495  13.301  14.243  16.190  16.202  15.256  14.476  12.218  12.348  12.126  13.170  14.555  15.928  14.836  13.193  12.256  11.713  11.617  12.153  12.842  12.313  10.905  10.734  11.206  11.006  10.747  12.597  12.939  12.896  12.184   8.673   8.576 
+ 12.931  12.382  12.292  11.922  12.624  13.282  14.049  16.179  16.325  15.112  14.647  12.456  12.369  12.451  13.593  14.742  15.616  14.715  12.995  12.207  11.639  11.723  12.816  13.740  12.840  10.524  10.979  11.332  10.408   9.559  12.200  12.722  12.442  11.774   8.839   8.175 
+ 12.843  11.953  12.008  11.629  12.456  13.026  13.307  16.243  16.250  14.973  14.389  11.913  12.323  12.348  13.379  14.468  15.503  13.970  12.131  11.652  11.208  11.693  12.571  13.183  12.112  10.160  10.726  10.971   9.957   8.280  12.357  12.679  12.252  11.704   8.585   8.534 
+ 12.783  11.699  11.992  11.520  12.169  13.012  13.341  16.065  16.151  14.765  14.179  11.736  12.228  12.322  13.424  14.570  14.867  13.382  11.790  11.452  11.050  11.457  12.397  12.982  11.943   9.917  10.427  11.509   9.610   8.206  12.321  12.647  12.233  11.903   8.397   9.188 
+ 12.791  12.002  12.067  11.743  12.129  13.141  13.829  16.130  16.217  14.843  14.210  11.989  12.373  12.526  13.739  15.261  14.800  13.056  11.864  11.445  10.961  11.311  12.333  13.280  12.345   9.920  10.520  11.852  10.037   8.579  11.583  11.955  12.112  11.696   8.414   9.291 
+ 12.829  12.333  12.212  11.878  12.349  13.255  14.095  16.102  15.995  14.791  14.215  12.010  12.474  12.632  14.233  15.381  14.382  12.905  12.131  11.529  11.040  11.496  12.454  13.075  12.044   9.790  10.286  11.896  10.439   8.714  11.376  11.909  11.646  11.246   7.650   7.213 
+ 13.064  12.568  12.351  11.948  12.393  13.301  14.268  15.984  15.820  14.615  14.115  11.918  12.576  12.844  14.340  14.559  13.960  12.475  11.728  10.971  11.161  11.592  12.274  13.170  12.681   9.806  10.914  11.986  10.245   8.730  11.224  12.197  11.913  11.513   7.984   7.475 
+ 13.070  12.514  12.273  11.612  12.189  13.004  14.369  15.675  15.617  14.404  13.969  12.191  13.129  13.611  14.529  14.081  12.552  11.786  11.214  10.971  11.079  11.458  12.334  13.199  12.624  10.370  10.408  11.350  10.469   7.220  10.135  11.529  11.501  11.104   8.607   6.755 
+ 13.116  12.062  11.831  11.274  12.018  12.742  14.391  15.241  15.213  14.329  13.652  12.474  13.159  13.886  14.625  12.930  11.605  11.074  10.354  10.412  10.433  10.750  11.370  12.563  12.884  11.330   9.371  10.929  10.381   7.322   9.422  11.135  11.099  10.731   9.623   7.988 
+ 12.878  11.833  10.920  11.590  11.072  12.877  14.365  14.810  14.369  14.120  13.132  13.942  13.374  14.272  12.781  11.527  10.603  10.202  10.139  10.625  10.545  10.746  11.101  12.012  12.942  11.592   8.737  10.751  10.283   7.244   8.635  10.990  10.649  10.252  10.100   9.499 
+ 12.461  11.987  11.926  10.500  11.039  12.461  13.032  13.925  14.341  13.730  13.955  14.101  14.046  13.141   9.538   6.825   8.432   9.780   9.766  10.391  10.289  10.337  10.470  10.461  11.565  11.240   8.195  10.699  10.297   6.407   6.669   8.986   9.044   9.089  10.583  11.107 
+ 11.698  11.835  11.957  10.857  10.322  11.304  11.558  12.072  12.234  12.445  12.553  12.003  11.434   9.360   7.764   6.757   6.724   8.731   9.095   8.517   8.327   8.445   8.506   9.649  10.150  10.771   9.870   8.500   8.680   6.590   7.687   8.913   9.218   9.565  11.087  11.345 
+ 10.325   9.321   9.395   9.249   8.618   8.789   8.531   9.761  10.462  10.272   8.037   8.284   9.246   7.863   7.076   8.208   7.516   8.146   8.879   8.635   8.887   8.663   9.253   9.677  10.342  10.760  10.077   7.249   7.896   7.789   7.717   9.250  10.181   9.282   9.947   9.524 
+  9.446   8.907   8.930   7.830   6.202   7.277   7.333   8.218   8.264   8.881   9.019   8.920   8.554   7.798   6.428   7.836   7.686   7.610   8.291   8.362   7.320   6.931   8.159   8.535   8.530   9.262   9.113   7.813   8.743   7.767   6.976   9.249  10.061   9.285   8.314   8.973 
+ 10.914   9.498   9.192   7.132   5.324   6.823   7.699   8.650   7.876   8.317   9.049   8.178   8.185   7.282   6.424   7.654   7.227   8.350   8.085   7.749   6.250   6.885   8.236   8.040   7.902   7.948   9.527   8.396   8.621   8.372   8.924   9.741  10.056   9.967   8.420   7.850 
+ 10.878  10.063   9.115   6.476   7.626   8.773   9.224   8.092   7.229   5.971   7.127   6.717   6.493   6.906   6.359   6.082   6.953   7.770   7.920   7.830   6.114   7.370   8.650   8.790   7.752   9.075   8.110   8.146   8.644   9.205   9.111   9.533  11.169  10.565   9.183   8.569 
+ 11.243   9.075   8.204   8.214   7.190   8.169   8.627   8.134   8.221   6.517   7.067   5.825   6.296   6.979   6.812   5.656   6.259   6.281   7.346   7.580   7.201   8.311   9.466   8.844   9.027   9.140   9.416   8.870   8.652   8.916   8.789  10.190  11.039  11.182  10.083   9.467 
+ 11.146   8.317   9.150   8.625   7.301   7.807   5.616   6.728   7.914   6.282   6.785   7.002   6.656   6.583   6.364   6.620   6.736   6.497   7.051   6.718   7.150   9.213   9.975   9.222   9.230   8.859   8.925   8.267   8.862   8.439   8.595  10.500  11.210  10.941  10.712  10.557 
+  9.944   8.905   8.426   7.824   7.529   6.282   7.586   7.806   6.933   7.401   6.749   6.742   6.716   6.045   5.480   6.576   7.166   6.619   7.105   7.304   6.213   7.993  10.260   9.711   8.827   8.919   8.305   8.290   8.393   8.001   8.715  10.449  11.129   9.925   9.584   9.712 
+ 10.560   8.969   6.357   6.909   7.463   6.995   6.553   7.272   6.817   5.508   5.265   6.137   5.999   5.458   5.917   5.140   5.734   6.230   6.931   6.478   6.517   7.933   7.892   9.945   9.754   9.675   9.193   8.928   8.223   8.713   9.250  10.142  10.459   9.821   9.717   8.394 
+ 10.275   9.561   8.692   8.662   7.478   7.736   7.544   7.506   7.849   6.981   7.492   7.577   5.322   5.472   5.511   6.224   5.909   6.740   6.678   6.100   6.122   8.019   8.940   9.184   9.285   8.922   8.395   8.056   8.998   9.097   9.181  10.132  10.761   9.926   9.658   8.973 
+  9.425  10.220   9.321   7.634   6.843   6.693   8.503   9.468   9.340   8.771   8.885   8.505   7.942   6.591   5.225   8.063   8.030   6.109   6.596   6.579   5.528   7.161   8.713   8.470   8.942   8.666   9.084   7.603   8.493   8.598   9.032   9.133  10.027   9.374   9.605   9.065 
+  9.314   9.333   8.078   7.630   7.012   6.597   9.407  10.249   9.038   8.841   9.467   8.157   7.723   7.634   7.549   8.295   7.759   6.812   6.218   6.393   5.666   7.125   8.461   9.002   8.620   7.360   8.170   7.940   8.074   7.642   8.314   8.673   9.240   9.072   9.383   9.134 
+  8.465   7.341   7.382   6.727   7.250   7.323   9.578  10.596  11.031  10.224  10.030  10.137   8.977   9.111   9.165  10.121   9.443   7.672   7.285   7.147   5.496   6.009   7.736   8.843   8.470   7.582   8.078   7.322   8.177   8.007   8.021   8.458   8.661   8.411   7.901   7.407 
+  9.680   8.772   6.338   7.990   8.004   8.697  10.475  11.764  12.413  10.942   9.901  10.304   8.322   8.518   8.721  11.047  10.670   9.037   8.050   7.718   6.208   7.764   7.718   8.486   7.863   8.177   8.293   7.611   7.882   7.570   7.111   8.770   9.001   7.753   7.252   7.251 
+  7.609   7.754   7.357   7.839   8.018   8.958  11.065  11.507  12.449  11.044  10.967  10.507   9.365   8.429   8.891  10.785  10.865   9.994   7.935   7.317   7.165   7.470   6.786   7.368   8.470   8.933   7.765   7.300   7.204   7.811   7.191   8.431   8.134   7.896   8.067   7.016 
+  8.826   8.709   7.424   7.584   7.224   7.972  11.466  11.628  11.797  11.157  11.113  10.154   9.652   8.906   9.367   8.846   9.409   9.924   8.474   7.503   6.775   6.179   6.333   7.403   8.991   8.667   8.189   7.462   6.929   7.478   7.386   8.311   8.589   7.423   6.767   6.434 
+  7.570   8.599   7.851   7.636   6.975   7.584  11.781  11.978  11.121  10.471  10.580   9.988   9.440   8.642   9.292   9.202   9.391   9.513   7.547   7.860   7.139   6.095   7.495   7.251   9.511   9.626   7.638   7.098   6.915   7.426   7.584   7.526   7.499   6.795   6.884   6.000 
+  8.559   8.879   7.598   7.952   7.701   8.994  11.854  11.956  11.507  10.172   9.597   9.316   9.131   8.807   9.023   9.172  10.666   9.795   7.835   6.733   6.505   7.811   7.392   6.589   9.350   9.520   7.933   7.591   6.054   8.011   8.195   7.883   7.908   6.600   6.623   5.979 
+  7.178   8.419   7.818   8.468   8.886   9.502  11.549  12.378  12.789  11.042   9.850   8.190   7.583   8.487   8.401  10.072  10.227   9.404   8.765   7.125   6.455   7.890   7.674   7.336   9.059   8.767   7.501   6.452   6.248   8.234   8.368   8.502   7.186   5.928   6.082   5.973 
+  7.584   8.049   7.493   7.465   8.677   9.539  10.226  11.803  12.743  10.740   9.770   8.513   7.075   7.708   8.732   9.734   8.822   8.750   8.196   6.828   6.199   6.593   6.542   7.122   8.813   9.185   7.506   7.269   6.292   7.372   7.862   8.346   6.766   5.719   6.768   5.968 
+  6.118   5.656   7.105   7.124   7.774   8.319  10.301   9.993  11.225  10.172   8.624   8.140   6.181   6.658   7.722   9.888   9.756   8.831   7.797   6.642   5.412   5.772   7.548   7.083   8.041   7.565   7.882   7.320   7.031   7.455   7.563   7.276   6.624   6.223   6.393   6.255 
+  6.888   7.301   6.252   5.958   6.522   7.880   8.022   8.324  10.204   9.659   8.939   8.524   7.826   6.753   6.863   9.690   8.386   7.924   6.269   5.998   5.159   6.085   6.791   7.305   7.520   7.314   7.121   6.938   6.436   6.435   6.766   6.637   6.832   6.792   6.459   5.525 
+  7.087   7.813   6.118   4.559   7.654   8.944   9.233   9.015  10.881   9.359   7.933   8.255   7.841   7.450   6.377   9.931   9.789   8.498   6.195   5.577   5.133   6.276   6.605   7.251   7.745   7.504   6.686   6.240   6.797   6.812   6.169   6.755   6.909   6.420   6.339   5.523 
+  8.297   8.514   7.188   6.258   7.012   9.349  10.248   9.169   9.904  10.035   9.453   8.426   7.482   8.076   8.561   9.728   8.422   8.060   7.107   5.202   5.637   7.308   6.946   6.878   6.753   6.568   7.283   6.619   6.645   7.381   6.022   7.066   6.956   6.264   6.888   5.659 
+  8.746   6.988   4.350   5.880   6.604   8.908   9.113   8.678   8.636   9.021   8.664   8.196   6.616   6.911   8.934   9.730   8.185   6.939   6.826   7.347   6.937   6.715   6.733   6.652   7.245   7.072   7.046   6.815   5.763   6.693   6.528   7.158   7.379   7.537   7.202   5.505 
+  7.166   8.059   7.679   7.417   7.674   8.774   8.129   8.459   8.810   8.717   6.793   8.186   7.801   6.894   8.808   9.469   8.231   7.173   6.708   7.080   6.652   6.552   6.723   6.382   7.115   7.723   6.499   7.283   6.174   6.332   6.650   7.376   7.796   7.001   6.795   5.894 
+  8.039   7.937   7.911   8.389   7.836   8.867   9.473   9.954   9.062   8.536   6.964   7.795   7.980   6.961   7.453   9.137   8.680   7.104   6.195   6.560   6.919   7.299   8.060   7.766   7.505   7.365   7.351   7.454   6.929   7.247   7.059   7.942   7.696   7.216   6.281   6.011 
+  8.376   8.154   6.180   8.028   9.395  10.458   9.201   8.867   8.786   7.854   7.531   7.062   7.274   6.661   6.908   9.088   8.579   7.694   6.692   5.939   6.879   7.851   7.732   8.502   8.891   8.057   7.457   7.927   7.685   7.058   8.139   9.449   9.414   8.410   7.009   6.037 
+  7.944   7.693   6.369   6.757  10.553  11.380   8.959   8.263   6.422   5.467   6.649   5.705   5.661   4.896   6.353   8.716   7.930   6.821   7.185   6.976   6.342   7.238   9.048  10.790  10.731   9.552   9.284   9.741   9.229   7.567   9.390  11.375  11.015   9.704   7.755   5.661 
+  7.136   7.596   5.332   4.560  11.293  13.121  11.725   8.758   9.024   7.134   6.241   6.594   6.160   5.688   6.417   8.076   7.274   6.683   7.473   6.195   6.488   6.754   9.565  10.891  11.391  10.336   9.780  10.127  10.098   7.511   9.672  11.139  10.955  10.127   7.816   5.356 
+  8.110   8.531   7.041   5.531  11.893  14.050  12.801   8.004   7.883   6.948   6.906   6.985   7.880   7.390   6.569   7.783   7.658   6.387   7.315   6.257   5.868   8.337   9.699  10.613  11.543  10.684  10.059  10.434  10.246   8.086  10.258  11.575  11.716  10.819   8.061   6.044 
+  7.682   9.281   8.051   6.767  12.049  14.324  12.965   9.669   8.933   8.760   8.243   7.077   6.998   8.065   7.868   8.468   7.692   6.721   7.614   7.006   6.894   9.165  10.117  11.252  12.089  11.185  10.759  10.819  10.492   8.740  10.123  11.755  11.523   9.999   8.086   5.825 
+  8.914   9.819   8.160   6.543  12.573  14.637  13.301   9.967   9.910   7.930   7.824   7.545   8.144   7.817   7.135   9.309   8.823   7.249   8.155   7.039   7.122  10.006  11.121  11.966  12.919  11.521  11.528  11.526  10.960  10.067  11.225  12.059  12.113  11.189   8.341   5.477 
+  7.222   9.476   8.216   5.086  12.696  14.589  12.868  10.962  10.678   8.359   8.525   7.651   7.902   7.789   7.863   8.212   8.571   8.111   8.139   7.517   7.263   9.843  11.161  11.851  12.719  10.819  10.833  11.126  10.953  10.088  11.335  12.516  12.607  11.731   9.092   6.260 
+  7.659   9.269   8.818   7.356  13.080  14.610  12.662  11.211  10.862   9.122   8.789   8.273   8.016   8.207   7.881   8.637   8.422   7.936   8.015   6.896   7.350   9.505  10.978  11.456  12.298  10.333  10.601  10.823  10.285   9.656  10.693  12.688  12.646  11.519   9.582   6.368 
diff --git a/test/regression/chan3-smoothspec.cepview b/test/regression/chan3-smoothspec.cepview
new file mode 100644 (file)
index 0000000..c21c5f1
--- /dev/null
@@ -0,0 +1,2190 @@
+  5.442   5.122   4.669   4.293   4.054   3.863   3.640   3.458   3.513   3.934   4.608   5.221   5.480   5.344   5.050   4.911   5.076   5.464   5.892   6.269   6.658   7.158   7.753   8.294   8.631   8.774   8.891   9.160   9.589   9.998  10.167  10.023   9.687   9.361   9.167   9.097 
+  3.675   4.033   4.542   4.922   4.991   4.750   4.350   3.986   3.809   3.892   4.223   4.701   5.150   5.391   5.348   5.130   4.994   5.176   5.717   6.415   6.979   7.252   7.333   7.487   7.921   8.616   9.354   9.904  10.191  10.300  10.344  10.323  10.141   9.744   9.247   8.896 
+  3.935   4.420   5.042   5.403   5.373   5.151   5.038   5.149   5.348   5.426   5.331   5.201   5.196   5.307   5.374   5.287   5.152   5.233   5.704   6.445   7.115   7.440   7.456   7.474   7.793   8.429   9.127   9.615   9.847   9.997  10.210  10.394  10.280   9.712   8.885   8.273 
+  4.063   4.221   4.519   4.886   5.182   5.271   5.120   4.855   4.684   4.747   5.018   5.347   5.594   5.747   5.891   6.086   6.274   6.328   6.200   6.031   6.088   6.568   7.429   8.397   9.162   9.582   9.749   9.860  10.027  10.188  10.187   9.921   9.436   8.888   8.444   8.204 
+  4.270   4.237   4.276   4.470   4.762   4.987   5.024   4.920   4.836   4.879   4.988   5.008   4.884   4.772   4.922   5.421   6.061   6.475   6.463   6.211   6.176   6.716   7.767   8.864   9.495   9.489   9.118   8.842   8.937   9.310   9.632   9.627   9.269   8.742   8.279   8.023 
+  2.996   3.751   4.778   5.463   5.491   5.032   4.556   4.447   4.718   5.047   5.090   4.786   4.415   4.361   4.792   5.513   6.130   6.374   6.329   6.361   6.827   7.770   8.865   9.638   9.799   9.433   8.918   8.659   8.820   9.264   9.688   9.839   9.655   9.255   8.841   8.588 
+  3.556   3.927   4.456   4.845   4.894   4.622   4.252   4.070   4.237   4.691   5.186   5.466   5.429   5.186   4.970   4.972   5.223   5.615   6.027   6.441   6.950   7.639   8.451   9.155   9.470   9.270   8.719   8.203   8.103   8.540   9.279   9.864   9.911   9.362   8.539   7.943 
+  3.544   4.215   5.071   5.513   5.278   4.594   3.941   3.660   3.727   3.865   3.859   3.757   3.813   4.224   4.931   5.653   6.110   6.242   6.233   6.348   6.726   7.302   7.882   8.286   8.450   8.426   8.322   8.251   8.293   8.469   8.720   8.923   8.955   8.780   8.497   8.285 
+  3.823   4.208   4.737   5.114   5.209   5.114   5.008   4.969   4.902   4.661   4.247   3.876   3.858   4.350   5.211   6.072   6.583   6.655   6.495   6.435   6.686   7.203   7.747   8.087   8.158   8.091   8.093   8.288   8.639   8.981   9.135   9.006   8.628   8.134   7.688   7.427 
+  4.078   3.944   3.829   3.899   4.181   4.528   4.728   4.668   4.401   4.099   3.935   4.011   4.354   4.947   5.720   6.529   7.168   7.465   7.407   7.181   7.068   7.244   7.650   8.038   8.175   8.031   7.796   7.730   7.956   8.372   8.746   8.881   8.742   8.439   8.134   7.951 
+  2.140   2.924   4.055   4.938   5.191   4.842   4.250   3.825   3.784   4.077   4.509   4.919   5.262   5.569   5.850   6.052   6.111   6.037   5.952   6.016   6.317   6.798   7.288   7.619   7.733   7.707   7.688   7.786   8.011   8.280   8.484   8.553   8.493   8.359   8.224   8.143 
+  5.319   4.917   4.379   4.054   4.146   4.586   5.101   5.394   5.324   4.956   4.498   4.176   4.129   4.370   4.799   5.260   5.619   5.819   5.915   6.023   6.236   6.546   6.844   7.008   7.011   6.957   7.006   7.250   7.631   7.982   8.152   8.113   7.961   7.825   7.766   7.761 
+  8.902   8.445   7.686   6.862   6.170   5.681   5.329   5.000   4.650   4.360   4.277   4.469   4.837   5.149   5.207   5.004   4.741   4.673   4.913   5.364   5.823   6.169   6.451   6.811   7.300   7.787   8.049   7.969   7.658   7.382   7.351   7.557   7.800   7.886   7.792   7.668 
+  7.922   7.524   6.768   5.815   4.987   4.612   4.781   5.232   5.512   5.327   4.782   4.286   4.201   4.536   4.956   5.101   4.911   4.660   4.687   5.079   5.606   5.945   5.980   5.882   5.914   6.171   6.498   6.660   6.581   6.404   6.334   6.434   6.573   6.580   6.435   6.283 
+  6.541   6.242   5.688   5.029   4.536   4.456   4.815   5.331   5.588   5.356   4.781   4.281   4.206   4.571   5.063   5.333   5.273   5.059   4.940   5.008   5.161   5.276   5.369   5.578   5.972   6.413   6.647   6.545   6.266   6.146   6.388   6.852   7.153   7.012   6.523   6.094 
+  5.167   4.957   4.762   4.784   4.968   5.029   4.731   4.153   3.666   3.626   4.056   4.618   4.907   4.800   4.530   4.444   4.671   5.020   5.193   5.090   4.923   5.015   5.479   6.098   6.490   6.435   6.049   5.678   5.611   5.879   6.273   6.545   6.583   6.443   6.262   6.146 
+  6.214   6.046   5.701   5.231   4.786   4.545   4.565   4.699   4.688   4.385   3.914   3.618   3.794   4.438   5.209   5.654   5.538   5.009   4.486   4.352   4.702   5.304   5.789   5.887   5.574   5.038   4.547   4.316   4.424   4.804   5.275   5.617   5.671   5.428   5.047   4.768 
+  4.294   4.591   5.002   5.302   5.383   5.291   5.126   4.914   4.574   4.039   3.394   2.896   2.826   3.268   4.017   4.688   4.975   4.848   4.553   4.410   4.564   4.893   5.118   5.025   4.634   4.178   3.933   4.037   4.409   4.821   5.051   5.004   4.732   4.373   4.063   3.890 
+  4.621   4.159   3.626   3.476   3.862   4.511   4.940   4.828   4.239   3.548   3.159   3.258   3.747   4.370   4.876   5.118   5.064   4.777   4.402   4.118   4.053   4.188   4.349   4.322   4.029   3.611   3.332   3.373   3.674   3.985   4.056   3.831   3.462   3.158   3.016   2.987 
+  3.222   3.249   3.488   4.061   4.799   5.271   5.102   4.304   3.328   2.761   2.916   3.631   4.431   4.891   4.898   4.644   4.399   4.296   4.292   4.283   4.219   4.123   4.031   3.939   3.838   3.753   3.748   3.844   3.964   3.961   3.743   3.366   3.007   2.823   2.826   2.891 
+  3.731   4.211   4.857   5.289   5.333   5.109   4.872   4.776   4.769   4.702   4.515   4.318   4.285   4.469   4.723   4.812   4.600   4.171   3.757   3.564   3.632   3.848   4.060   4.187   4.233   4.236   4.206   4.138   4.036   3.932   3.840   3.728   3.533   3.233   2.900   2.676 
+  4.708   5.397   6.136   6.223   5.506   4.508   3.941   4.094   4.633   4.968   4.799   4.346   4.071   4.205   4.546   4.694   4.463   4.049   3.813   3.916   4.176   4.275   4.092   3.811   3.711   3.866   4.063   4.025   3.707   3.351   3.262   3.511   3.886   4.102   4.076   3.967 
+  4.843   5.253   5.859   6.334   6.408   6.006   5.281   4.509   3.917   3.565   3.378   3.277   3.296   3.539   4.030   4.588   4.890   4.709   4.122   3.504   3.254   3.483   3.929   4.179   4.023   3.624   3.355   3.450   3.786   3.994   3.797   3.267   2.757   2.582   2.749   2.973 
+  5.579   5.423   5.397   5.740   6.321   6.652   6.272   5.162   3.820   2.913   2.803   3.340   4.052   4.528   4.663   4.589   4.448   4.258   3.983   3.673   3.495   3.587   3.887   4.152   4.149   3.866   3.514   3.331   3.364   3.463   3.461   3.370   3.378   3.637   4.078   4.423 
+  7.745   7.672   7.551   7.430   7.357   7.341   7.320   7.197   6.918   6.547   6.234   6.100   6.129   6.161   6.032   5.713   5.345   5.113   5.088   5.193   5.326   5.522   5.967   6.820   7.987   9.091   9.692   9.612   9.089   8.586   8.439   8.609   8.769   8.638   8.246   7.902 
+ 11.109  11.194  11.279  11.271  11.142  10.913  10.595  10.155   9.582   8.960   8.449   8.157   8.016   7.827   7.466   7.064   6.955   7.380   8.207   8.958   9.178   8.852   8.482   8.693   9.684  11.003  11.880  11.838  11.078  10.279  10.010  10.275  10.582  10.460   9.917   9.417 
+ 12.168  12.691  13.374  13.774  13.675  13.177  12.522  11.858  11.168  10.394   9.581   8.879   8.411   8.164   8.066   8.134   8.535   9.411  10.637  11.755  12.244  11.917  11.104  10.427  10.318  10.709  11.151  11.248  10.999  10.734  10.725  10.873  10.788  10.193   9.263   8.556 
+ 12.247  12.862  13.797  14.625  15.008  14.818  14.133  13.145  12.083  11.155  10.492  10.097   9.847   9.597   9.350   9.322   9.812  10.926  12.376  13.582  14.042  13.699  12.994  12.526  12.594  13.003  13.307  13.242  12.963  12.859  13.115  13.464  13.383  12.589  11.377  10.469 
+ 12.817  13.420  14.363  15.260  15.777  15.751  15.205  14.304  13.303  12.467  11.962  11.755  11.622  11.329  10.876  10.588  10.914  12.040  13.634  14.984  15.483  15.083  14.322  13.874  14.004  14.398  14.523  14.185  13.750  13.783  14.446  15.211  15.231  14.091  12.277  10.911 
+ 13.250  13.784  14.695  15.701  16.463  16.692  16.266  15.306  14.151  13.195  12.664  12.487  12.371  12.068  11.631  11.440  11.917  13.144  14.691  15.850  16.128  15.595  14.809  14.342  14.334  14.442  14.248  13.734  13.357  13.620  14.501  15.297  15.100  13.574  11.367   9.756 
+ 13.564  13.922  14.665  15.718  16.789  17.432  17.282  16.327  14.958  13.749  13.082  12.914  12.877  12.640  12.235  12.070  12.581  13.818  15.311  16.374  16.596  16.133  15.527  15.229  15.220  15.091  14.517  13.671  13.173  13.553  14.670  15.645  15.450  13.754  11.308   9.532 
+ 13.745  13.920  14.455  15.462  16.719  17.676  17.789  16.923  15.482  14.141  13.375  13.162  13.100  12.831  12.404  12.260  12.837  14.146  15.678  16.751  17.002  16.619  16.110  15.826  15.666  15.236  14.334  13.289  12.806  13.374  14.726  15.863  15.709  13.962  11.437   9.608 
+ 13.949  13.938  14.254  15.171  16.499  17.588  17.787  16.956  15.572  14.350  13.693  13.466  13.255  12.842  12.442  12.507  13.290  14.583  15.855  16.647  16.857  16.681  16.325  15.785  14.927  13.760  12.615  12.015  12.292  13.275  14.297  14.565  13.650  11.761   9.671   8.313 
+ 14.093  13.980  14.168  15.023  16.395  17.608  17.956  17.258  15.970  14.778  14.066  13.720  13.425  13.086  12.968  13.413  14.442  15.660  16.549  16.870  16.778  16.566  16.309  15.799  14.822  13.514  12.389  11.990  12.438  13.290  13.840  13.595  12.564  11.168   9.932   9.231 
+ 14.099  14.090  14.391  15.274  16.586  17.751  18.156  17.604  16.424  15.181  14.269  13.751  13.523  13.562  13.971  14.779  15.757  16.486  16.674  16.401  16.042  15.891  15.856  15.530  14.608  13.278  12.187  11.981  12.776  14.009  14.801  14.525  13.159  11.228   9.451   8.414 
+ 13.875  14.124  14.702  15.624  16.695  17.539  17.789  17.311  16.284  15.089  14.126  13.673  13.825  14.482  15.360  16.045  16.172  15.661  14.836  14.266  14.358  15.003  15.579  15.383  14.196  12.530  11.322  11.279  12.368  13.835  14.718  14.452  13.141  11.373   9.818   8.940 
+ 13.601  14.007  14.793  15.838  16.864  17.492  17.426  16.639  15.443  14.362  13.874  14.161  15.007  15.899  16.284  15.845  14.690  13.321  12.399  12.382  13.242  14.428  15.156  14.863  13.569  11.895  10.695  10.549  11.420  12.694  13.556  13.447  12.322  10.611   8.965   7.975 
+ 13.479  13.811  14.549  15.644  16.759  17.365  17.081  15.997  14.681  13.840  13.862  14.588  15.447  15.834  15.442  14.373  13.021  11.872  11.333  11.590  12.510  13.623  14.283  13.996  12.748  11.089   9.849   9.635  10.447  11.697  12.587  12.594  11.714  10.366   9.105   8.366 
+ 13.180  13.713  14.664  15.783  16.709  17.070  16.678  15.671  14.512  13.777  13.834  14.601  15.563  16.050  15.632  14.377  12.813  11.626  11.285  11.808  12.798  13.677  13.962  13.454  12.290  10.876   9.746   9.366   9.916  11.139  12.370  12.823  12.010  10.086   7.850   6.361 
+ 13.038  13.796  14.977  16.106  16.811  16.934  16.500  15.653  14.636  13.799  13.518  13.968  14.919  15.760  15.831  14.879  13.288  11.868  11.335  11.854  12.972  13.950  14.224  13.655  12.491  11.158  10.097   9.671  10.083  11.218  12.541  13.233  12.634  10.739   8.356   6.711 
+ 13.315  14.083  15.219  16.200  16.696  16.676  16.265  15.573  14.674  13.748  13.149  13.247  14.098  15.263  15.991  15.716  14.492  13.000  12.098  12.242  13.198  14.244  14.656  14.127  12.869  11.416  10.339  10.026  10.571  11.726  12.930  13.498  12.954  11.366   9.421   8.096 
+ 13.290  14.089  15.272  16.281  16.751  16.654  16.179  15.518  14.746  13.909  13.175  12.847  13.178  14.113  15.212  15.877  15.745  14.957  14.084  13.732  14.102  14.838  15.256  14.814  13.488  11.806  10.541  10.255  10.987  12.250  13.303  13.535  12.755  11.260   9.676   8.673 
+ 13.586  14.162  15.097  16.036  16.616  16.628  16.096  15.246  14.357  13.613  13.065  12.710  12.606  12.870  13.556  14.512  15.399  15.889  15.908  15.688  15.567  15.668  15.742  15.343  14.223  12.623  11.214  10.689  11.296  12.651  13.954  14.460  13.877  12.485  10.942   9.952 
+ 13.625  14.048  14.825  15.763  16.519  16.739  16.270  15.286  14.196  13.378  12.946  12.753  12.602  12.468  12.534  13.008  13.911  15.024  16.038  16.761  17.170  17.293  17.057  16.303  14.976  13.336  11.945  11.389  11.895  13.137  14.379  14.876  14.288  12.844  11.212  10.151 
+ 13.588  13.953  14.667  15.600  16.443  16.809  16.469  15.526  14.382  13.475  12.999  12.830  12.698  12.462  12.246  12.332  12.932  14.015  15.338  16.597  17.566  18.103  18.092  17.433  16.149  14.514  13.060  12.356  12.684  13.815  15.070  15.668  15.159  13.692  11.948  10.784 
+ 13.505  13.772  14.378  15.291  16.239  16.774  16.553  15.609  14.360  13.339  12.828  12.708  12.630  12.357  11.981  11.857  12.304  13.357  14.737  16.050  17.017  17.543  17.626  17.243  16.359  15.073  13.734  12.862  12.858  13.693  14.823  15.452  15.002  13.507  11.644  10.372 
+ 13.471  13.666  14.170  15.022  16.004  16.677  16.635  15.817  14.577  13.462  12.841  12.675  12.625  12.385  11.969  11.722  12.030  13.002  14.355  15.609  16.411  16.714  16.695  16.514  16.153  15.498  14.572  13.672  13.247  13.546  14.349  15.017  14.906  13.850  12.346  11.262 
+ 13.633  13.669  13.983  14.767  15.874  16.798  16.998  16.307  15.077  13.934  13.316  13.191  13.157  12.852  12.307  11.948  12.248  13.320  14.786  16.038  16.651  16.629  16.299  15.970  15.684  15.261  14.570  13.769  13.247  13.306  13.841  14.329  14.183  13.218  11.853  10.868 
+ 13.493  13.520  13.784  14.482  15.541  16.560  17.016  16.628  15.573  14.383  13.579  13.304  13.272  13.070  12.580  12.138  12.292  13.305  14.863  16.222  16.736  16.315  15.450  14.774  14.554  14.548  14.341  13.817  13.321  13.317  13.863  14.414  14.198  12.892  11.014   9.642 
+ 13.404  13.383  13.568  14.191  15.230  16.320  16.940  16.757  15.871  14.761  13.937  13.581  13.462  13.212  12.730  12.352  12.595  13.672  15.200  16.394  16.635  15.943  14.938  14.315  14.275  14.419  14.209  13.551  12.941  13.002  13.806  14.636  14.484  12.924  10.605   8.896 
+ 13.388  13.314  13.448  14.076  15.168  16.307  16.940  16.768  15.950  14.966  14.253  13.903  13.694  13.379  12.999  12.894  13.413  14.542  15.805  16.547  16.401  15.558  14.606  14.082  14.081  14.260  14.204  13.826  13.430  13.385  13.702  13.916  13.427  12.046  10.267   9.016 
+ 13.232  13.147  13.301  14.008  15.210  16.422  17.050  16.824  15.975  15.019  14.358  14.022  13.780  13.473  13.241  13.420  14.204  15.365  16.331  16.570  15.984  14.979  14.153  13.848  13.937  14.003  13.738  13.224  12.844  12.910  13.315  13.542  13.042  11.699  10.021   8.859 
+ 13.010  12.931  13.129  13.929  15.226  16.455  16.991  16.619  15.668  14.709  14.095  13.778  13.515  13.239  13.192  13.690  14.728  15.838  16.372  15.990  14.941  13.879  13.353  13.412  13.620  13.478  12.864  12.141  11.851  12.246  13.054  13.640  13.450  12.420  11.043  10.078 
+ 12.475  12.474  12.792  13.690  14.988  16.095  16.440  15.915  14.929  14.034  13.488  13.173  12.894  12.721  12.975  13.841  15.014  15.764  15.479  14.210  12.726  11.974  12.357  13.428  14.251  14.124  13.086  11.828  11.141  11.352  12.174  12.991  13.315  13.058  12.507  12.086 
+ 12.238  12.448  12.937  13.730  14.678  15.472  15.788  15.477  14.659  13.653  12.816  12.402  12.502  13.056  13.876  14.654  15.032  14.732  13.742  12.401  11.290  10.933  11.487  12.633  13.755  14.313  14.155  13.567  13.034  12.899  13.149  13.465  13.488  13.091  12.472  12.015 
+ 13.086  13.366  13.848  14.454  15.150  15.859  16.351  16.291  15.493  14.190  13.016  12.625  13.206  14.318  15.204  15.343  14.757  13.846  12.956  12.115  11.211  10.359  10.016  10.634  12.146  13.833  14.797  14.683  13.986  13.594  13.939  14.537  14.385  12.919  10.670   8.981 
+ 13.475  13.561  13.820  14.382  15.296  16.378  17.179  17.199  16.273  14.826  13.689  13.546  14.394  15.513  16.001  15.454  14.213  12.978  12.174  11.673  11.112  10.458  10.177  10.802  12.283  13.833  14.527  14.139  13.426  13.453  14.530  15.738  15.600  13.409  10.060   7.563 
+ 13.385  13.341  13.480  14.083  15.226  16.586  17.530  17.485  16.410  14.941  14.025  14.222  15.227  16.069  15.863  14.534  12.851  11.743  11.497  11.585  11.277  10.451   9.797  10.159  11.636  13.346  14.160  13.775  13.071  13.315  14.867  16.601  16.719  14.343  10.516   7.623 
+ 13.099  13.111  13.368  14.125  15.366  16.681  17.437  17.211  16.161  15.015  14.582  15.106  16.001  16.249  15.217  13.217  11.310  10.453  10.720  11.282  11.190  10.271   9.294   9.255  10.408  11.985  12.894  12.767  12.346  12.757  14.310  15.963  16.059  13.809  10.209   7.494 
+ 12.990  13.028  13.359  14.207  15.459  16.616  17.098  16.693  15.766  15.024  14.979  15.512  15.925  15.474  13.982  12.027  10.520  10.003  10.258  10.541  10.270   9.541   9.026   9.330  10.401  11.549  12.089  12.020  12.074  13.011  14.760  16.219  16.019  13.700  10.306   7.828 
+ 12.752  12.973  13.500  14.370  15.432  16.336  16.713  16.445  15.796  15.256  15.169  15.413  15.433  14.668  13.050  11.150   9.793   9.415   9.717   9.940   9.567   8.836   8.558   9.368  11.053  12.620  13.109  12.462  11.636  11.778  13.121  14.619  14.721  12.719   9.515   7.104 
+ 12.376  12.814  13.590  14.517  15.355  15.880  15.988  15.754  15.407  15.172  15.077  14.875  14.197  12.872  11.158   9.661   8.917   8.962   9.259   9.130   8.369   7.505   7.431   8.621  10.619  12.286  12.685  11.884  10.946  11.035  12.358  13.858  14.016  12.144   9.113   6.826 
+ 11.944  12.636  13.688  14.647  15.197  15.302  15.149  14.981  14.934  14.958  14.845  14.327  13.234  11.649   9.959   8.698   8.215   8.392   8.668   8.447   7.626   6.780   6.768   8.008  10.014  11.665  12.066  11.314  10.475  10.686  12.115  13.672  13.821  11.890   8.781   6.442 
+ 11.571  12.551  13.927  14.962  15.271  15.011  14.646  14.542  14.708  14.861  14.662  13.917  12.645  11.047   9.462   8.285   7.791   7.924   8.246   8.207   7.601   6.835   6.689   7.665   9.464  11.097  11.650  11.089  10.347  10.544  11.931  13.524  13.827  12.120   9.222   7.007 
+ 11.313  12.491  14.070  15.124  15.273  14.864  14.543  14.642  14.946  14.968  14.399  13.309  11.981  10.638   9.379   8.315   7.647   7.514   7.749   7.899   7.597   6.992   6.748   7.487   9.136  10.828  11.571  11.152  10.405  10.510  11.858  13.532  13.978  12.364   9.466   7.213 
+ 11.035  12.282  13.926  14.977  15.088  14.715  14.572  14.921  15.358  15.237  14.279  12.790  11.335  10.248   9.471   8.794   8.167   7.733   7.570   7.507   7.291   6.951   6.918   7.672   9.196  10.806  11.647  11.468  10.917  10.998  12.092  13.464  13.791  12.351   9.803   7.827 
+ 11.293  12.281  13.661  14.705  15.090  15.044  15.027  15.267  15.552  15.446  14.667  13.314  11.764  10.407   9.453   8.923   8.727   8.706   8.639   8.327   7.777   7.312   7.431   8.417   9.998  11.437  12.059  11.823  11.398  11.604  12.632  13.762  13.893  12.506  10.238   8.520 
+ 11.897  12.340  13.140  14.122  15.061  15.754  16.116  16.203  16.135  15.964  15.603  14.890  13.759  12.366  11.053  10.137   9.695   9.514   9.277   8.851   8.432   8.414   9.062  10.251  11.499  12.299  12.505  12.453  12.700  13.541  14.699  15.441  15.089  13.566  11.561  10.157 
+ 12.282  12.208  12.415  13.240  14.596  15.959  16.760  16.844  16.567  16.428  16.582  16.662  16.110  14.706  12.843  11.273  10.543  10.591  10.848  10.756  10.237   9.738   9.820  10.662  11.897  12.921  13.388  13.468  13.656  14.287  15.181  15.705  15.252  13.752  11.841  10.516 
+ 12.522  12.204  12.083  12.705  14.109  15.733  16.832  17.061  16.705  16.363  16.379  16.536  16.269  15.212  13.570  11.999  11.089  10.898  10.961  10.735  10.104   9.491   9.495  10.363  11.755  13.010  13.675  13.843  14.016  14.602  15.471  15.973  15.431  13.736  11.577  10.077 
+ 12.615  12.261  12.012  12.402  13.582  15.164  16.491  17.107  17.053  16.747  16.578  16.558  16.331  15.529  14.148  12.616  11.489  11.015  10.962  10.856  10.423   9.859   9.671  10.231  11.432  12.751  13.679  14.132  14.469  15.075  15.886  16.302  15.636  13.753  11.374   9.719 
+ 12.690  12.375  12.106  12.348  13.322  14.811  16.271  17.170  17.338  17.034  16.704  16.581  16.491  16.025  14.939  13.438  12.073  11.310  11.160  11.191  10.945  10.379   9.932  10.128  11.089  12.403  13.485  14.104  14.542  15.228  16.154  16.675  15.970  13.821  11.041   9.084 
+ 12.866  12.587  12.313  12.446  13.239  14.601  16.088  17.153  17.495  17.255  16.874  16.709  16.719  16.496  15.657  14.234  12.718  11.689  11.343  11.362  11.251  10.822  10.393  10.477  11.275  12.458  13.458  13.997  14.321  14.876  15.719  16.260  15.674  13.693  11.060   9.188 
+ 12.820  12.682  12.524  12.584  13.130  14.260  15.723  16.982  17.548  17.345  16.784  16.416  16.443  16.530  16.105  14.911  13.293  11.949  11.359  11.409  11.562  11.400  11.019  10.910  11.452  12.527  13.632  14.358  14.746  15.137  15.679  15.998  15.457  13.804  11.617  10.057 
+ 12.923  12.759  12.558  12.575  13.099  14.233  15.705  16.935  17.399  17.043  16.358  15.992  16.192  16.565  16.405  15.323  13.630  12.111  11.389  11.436  11.681  11.576  11.103  10.755  11.036  11.974  13.108  13.915  14.249  14.347  14.443  14.409  13.849  12.561  10.926   9.768 
+ 12.956  12.810  12.607  12.569  12.989  14.013  15.410  16.598  17.015  16.578  15.803  15.416  15.732  16.346  16.455  15.553  13.899  12.336  11.596  11.725  12.116  12.100  11.557  10.979  10.982  11.736  12.832  13.676  13.975  13.877  13.666  13.386  12.811  11.779  10.529   9.653 
+ 12.805  12.624  12.355  12.239  12.607  13.629  15.037  16.171  16.409  15.708  14.718  14.297  14.775  15.617  15.851  14.910  13.156  11.601  11.058  11.473  12.043  11.989  11.259  10.529  10.540  11.405  12.545  13.249  13.299  13.043  12.906  12.873  12.506  11.463  10.009   8.935 
+ 12.627  12.574  12.436  12.323  12.564  13.439  14.787  15.932  16.143  15.296  14.097  13.563  14.135  15.243  15.762  14.996  13.300  11.761  11.224  11.580  11.974  11.712  10.967  10.596  11.241  12.615  13.701  13.683  12.715  11.759  11.644  12.253  12.652  12.032  10.571   9.340 
+ 12.521  12.599  12.607  12.532  12.672  13.391  14.643  15.773  15.956  14.937  13.394  12.477  12.859  14.138  15.171  15.053  13.858  12.490  11.808  11.891  12.125  11.966  11.564  11.592  12.451  13.702  14.350  13.781  12.405  11.344  11.381  12.180  12.565  11.641   9.725   8.160 
+ 12.531  12.528  12.486  12.474  12.728  13.455  14.519  15.364  15.364  14.353  12.855  11.748  11.605  12.282  13.120  13.549  13.528  13.427  13.519  13.652  13.447  12.803  12.156  12.123  12.857  13.756  13.915  12.960  11.470  10.522  10.715  11.568  11.896  10.899   8.960   7.406 
+ 12.422  12.467  12.475  12.455  12.606  13.137  13.956  14.575  14.431  13.383  11.915  10.792  10.469  10.788  11.254  11.589  11.987  12.780  13.884  14.646  14.372  13.070  11.634  11.170  11.998  13.273  13.677  12.606  10.773   9.597   9.893  11.055  11.552  10.335   7.883   5.905 
+ 12.567  12.602  12.553  12.394  12.326  12.602  13.193  13.661  13.468  12.467  11.089   9.998   9.522   9.435   9.331   9.195   9.533  10.824  12.811  14.407  14.487  12.927  10.895   9.989  10.891  12.737  13.840  13.156  11.198   9.534   9.337  10.314  11.018  10.261   8.286   6.599 
+ 12.285  12.506  12.656  12.480  12.062  11.770  11.874  12.233  12.364  11.878  10.841   9.728   9.014   8.808   8.883   9.033   9.353  10.107  11.309  12.478  12.892  12.193  10.775   9.560   9.296   9.979  10.908  11.315  10.992  10.379  10.069  10.245  10.575  10.617  10.291   9.939 
+ 12.223  12.535  12.811  12.698  12.189  11.626  11.358  11.384  11.345  10.874   9.975   9.053   8.557   8.578   8.791   8.808   8.599   8.558   9.124  10.286  11.440  11.775  10.897   9.180   7.548   6.861   7.370   8.632   9.882  10.544  10.512  10.071   9.610   9.361   9.323   9.365 
+ 11.881  12.285  12.661  12.541  11.851  10.976  10.409  10.308  10.371  10.135   9.410   8.457   7.756   7.595   7.857   8.192   8.371   8.491   8.826   9.478  10.173  10.399   9.795   8.466   6.963   5.953   5.836   6.562   7.725   8.815   9.443   9.440   8.862   7.945   7.031   6.465 
+ 11.507  11.785  12.066  12.015  11.502  10.696   9.930   9.442   9.204   8.961   8.444   7.585   6.581   5.778   5.456   5.679   6.274   6.943   7.417   7.571   7.441   7.169   6.891   6.667   6.470   6.250   6.031   5.937   6.122   6.629   7.296   7.798   7.845   7.386   6.685   6.172 
+ 10.955  11.116  11.228  11.033  10.435   9.606   8.891   8.568   8.633   8.770   8.565   7.815   6.713   5.746   5.370   5.681   6.346   6.839   6.822   6.371   5.889   5.770   6.098   6.588   6.816   6.539   5.869   5.187   4.890   5.162   5.914   6.893   7.839   8.589   9.083   9.323 
+ 10.806  10.780  10.606  10.173   9.508   8.810   8.323   8.185   8.338   8.585   8.713   8.600   8.252   7.775   7.333   7.096   7.173   7.541   8.022   8.363   8.391   8.148   7.870   7.812   8.040   8.370   8.520   8.359   8.042   7.910   8.231   8.998   9.942  10.741  11.229  11.430 
+ 11.171  10.961  10.614  10.241   9.933   9.725   9.598   9.515   9.463   9.456   9.488   9.493   9.365   9.063   8.694   8.501   8.699   9.285   9.981  10.403  10.348   9.972   9.681   9.806  10.311  10.807  10.874  10.435   9.846   9.616   9.973  10.660  11.141  11.053  10.515  10.026 
+ 11.259  11.154  11.025  10.941  10.875  10.720  10.395   9.939   9.484   9.129   8.840   8.490   8.030   7.618   7.570   8.128   9.206  10.364  11.052  10.985  10.353   9.694   9.518   9.947  10.646  11.085  10.935  10.303   9.633   9.386   9.718  10.408  11.053  11.368  11.357  11.245 
+ 11.538  11.721  12.071  12.506  12.847  12.890  12.531  11.854  11.077  10.396   9.868   9.426   9.036   8.815   8.991   9.690  10.732  11.652  11.969  11.538  10.694  10.050  10.066  10.720  11.514  11.846  11.455  10.620   9.952   9.945  10.619  11.512  12.033  11.894  11.304  10.794 
+ 11.081  11.501  12.282  13.216  13.921  14.007  13.342  12.188  11.044  10.289   9.946   9.766   9.564   9.481   9.874  10.931  12.345  13.406  13.490  12.554  11.223  10.353  10.415  11.182  11.952  12.109  11.567  10.779  10.343  10.560  11.259  11.977  12.307  12.147  11.716  11.372 
+ 11.107  11.556  12.328  13.165  13.727  13.744  13.179  12.269  11.373  10.734  10.350  10.081   9.870   9.868  10.304  11.200  12.199  12.724  12.382  11.301  10.099   9.478   9.738  10.585  11.378  11.603  11.213  10.601  10.263  10.437  10.980  11.522  11.745  11.581  11.212  10.925 
+ 11.060  11.407  12.030  12.730  13.191  13.124  12.467  11.460  10.486   9.799   9.382   9.069   8.807   8.783   9.255  10.225  11.282  11.823  11.502  10.529   9.546   9.154   9.493  10.208  10.800  11.028  11.021  11.046  11.205  11.369  11.377  11.269  11.280  11.602  12.147  12.573 
+ 12.479  12.062  11.411  10.750  10.198   9.759   9.418   9.222   9.229   9.383   9.476   9.293   8.837   8.411   8.424   9.053  10.045  10.870  11.104  10.754  10.233  10.016  10.284  10.830  11.302  11.521  11.599  11.780  12.190  12.732  13.213  13.537  13.776  14.049  14.364  14.590 
+ 10.951  11.072  11.052  10.625   9.813   8.971   8.538   8.685   9.170   9.513   9.358   8.737   8.034   7.700   7.942   8.615   9.366   9.887  10.092  10.114  10.167  10.391  10.781  11.219  11.558  11.718  11.730  11.734  11.905  12.355  13.050  13.817  14.440  14.787  14.886  14.874 
+ 12.365  12.059  11.392  10.390   9.271   8.382   7.985   8.072   8.386   8.627   8.670   8.607   8.605   8.743   8.982   9.260   9.580   9.978  10.419  10.757  10.849  10.724  10.619  10.795  11.286  11.834  12.101  12.011  11.876  12.163  13.079  14.333  15.331  15.647  15.369  14.999 
+ 11.515  11.335  11.021  10.630  10.191   9.708   9.185   8.674   8.273   8.074   8.100   8.278   8.495   8.694   8.937   9.358  10.037  10.873  11.593  11.901  11.678  11.095  10.516  10.276  10.476  10.955  11.448  11.811  12.110  12.536  13.211  14.063  14.872  15.433  15.700  15.776 
+ 11.604  11.452  11.154  10.732  10.234   9.743   9.350   9.128   9.089   9.173   9.270   9.284   9.198   9.102   9.151   9.478  10.095  10.866  11.555  11.953  11.982  11.730  11.390  11.147  11.090  11.206  11.437  11.760  12.201  12.802  13.555  14.370  15.113  15.673  16.013  16.163 
+ 13.487  12.840  11.921  11.175  10.784  10.584  10.298   9.840   9.412   9.295   9.552   9.918  10.021   9.728   9.306   9.243   9.839  10.933  11.988  12.471  12.242  11.629  11.157  11.162  11.578  12.054  12.273  12.201  12.100  12.305  12.968  13.962  14.983  15.764  16.209  16.385 
+ 10.397  10.477  10.529  10.398   9.985   9.332   8.639   8.185   8.177   8.615   9.263   9.764   9.863   9.577   9.203   9.143   9.632  10.577  11.593  12.250  12.340  11.998  11.588  11.449  11.683  12.131  12.537  12.761  12.878  13.100  13.598  14.369  15.244  16.009  16.529  16.777 
+ 11.758  11.164  10.342   9.721   9.451   9.341   9.100   8.650   8.213   8.100   8.411   8.945   9.383   9.580   9.685   9.969  10.561  11.305  11.904  12.170  12.177  12.165  12.306  12.565  12.765  12.787  12.705  12.739  13.073  13.714  14.495  15.208  15.730  16.052  16.228  16.305 
+ 10.572  10.011   9.280   8.839   8.843   9.050   9.069   8.721   8.200   7.889   8.018   8.462   8.855   8.917   8.705   8.590   8.977  10.006  11.440  12.816  13.709  13.935  13.589  12.943  12.304  11.894  11.790  11.930  12.175  12.415  12.650  12.998  13.582  14.392  15.221  15.753 
+  8.056   7.731   7.174   6.552   6.041   5.724   5.532   5.308   4.964   4.611   4.492   4.764   5.304   5.769   5.908   5.853   6.101   7.110   8.837  10.616  11.558  11.190   9.812   8.284   7.396   7.345   7.719   7.952   7.832   7.621   7.750   8.397   9.350  10.222  10.765  10.985 
+  5.202   5.103   4.827   4.354   3.833   3.511   3.529   3.785   4.010   4.017   3.881   3.862   4.143   4.626   4.998   5.020   4.766   4.578   4.762   5.299   5.848   6.023   5.711   5.135   4.636   4.396   4.351   4.353   4.385   4.597   5.136   5.948   6.772   7.336   7.566   7.599 
+  2.932   3.263   3.876   4.619   5.232   5.445   5.160   4.555   4.001   3.815   4.046   4.442   4.655   4.507   4.126   3.830   3.884   4.309   4.888   5.342   5.509   5.412   5.175   4.907   4.644   4.378   4.133   3.985   4.033   4.336   4.881   5.591   6.357   7.065   7.611   7.909 
+  7.329   7.613   8.119   8.739   9.352   9.850  10.152  10.206   9.985   9.492   8.783   7.981   7.261   6.797   6.689   6.916   7.357   7.871   8.383   8.912   9.523  10.230  10.938  11.463  11.636  11.409  10.895  10.305   9.836   9.571   9.457   9.372   9.212   8.961   8.692   8.517 
+  9.156   9.207   9.524  10.289  11.395  12.449  13.035  13.029  12.664  12.311  12.162  12.114  11.923  11.487  10.964  10.649  10.714  11.087  11.550  11.967  12.401  13.005  13.806  14.583  14.989  14.800  14.109  13.277  12.702  12.566  12.763  13.018  13.093  12.929  12.645  12.434 
+ 11.437  11.657  12.129  12.824  13.574  14.083  14.081  13.501  12.551  11.609  10.992  10.775  10.784  10.780  10.676  10.626  10.902  11.651  12.744  13.828  14.552  14.791  14.691  14.510  14.402  14.320  14.111  13.701  13.199  12.825  12.728  12.865  13.043  13.086  12.981  12.860 
+ 12.122  12.326  12.798  13.586  14.618  15.627  16.212  16.048  15.129  13.837  12.736  12.206  12.206  12.381  12.452  12.511  12.945  14.010  15.451  16.566  16.737  15.970  14.942  14.455  14.756  15.326  15.373  14.589  13.474  12.902  13.288  14.139  14.432  13.528  11.813  10.454 
+ 12.147  12.155  12.368  13.021  14.170  15.544  16.623  16.912  16.266  15.015  13.766  13.006  12.819  12.951  13.141  13.407  13.993  15.017  16.184  16.886  16.693  15.772  14.832  14.552  14.981  15.479  15.305  14.345  13.301  13.094  13.973  15.150  15.369  13.984  11.622   9.810 
+ 12.040  11.967  12.037  12.535  13.596  15.055  16.460  17.282  17.197  16.272  14.929  13.709  12.999  12.905  13.306  14.005  14.825  15.594  16.120  16.233  15.914  15.371  14.934  14.815  14.921  14.931  14.590  13.997  13.575  13.715  14.358  14.921  14.698  13.445  11.683  10.410 
+ 11.996  12.039  12.207  12.642  13.475  14.690  16.025  17.018  17.232  16.528  15.201  13.842  13.017  12.983  13.616  14.561  15.456  16.064  16.283  16.119  15.678  15.162  14.799  14.702  14.768  14.749  14.486  14.111  13.987  14.387  15.152  15.665  15.257  13.769  11.803  10.415 
+ 12.134  12.341  12.686  13.133  13.761  14.679  15.844  16.936  17.473  17.119  15.966  14.548  13.549  13.404  14.068  15.107  15.993  16.402  16.323  15.958  15.557  15.272  15.121  15.008  14.809  14.471  14.094  13.923  14.191  14.898  15.674  15.903  15.104  13.323  11.238   9.837 
+ 11.928  12.192  12.613  13.120  13.787  14.735  15.904  16.930  17.304  16.744  15.468  14.115  13.347  13.444  14.199  15.134  15.843  16.164  16.130  15.833  15.375  14.905  14.614  14.608  14.783  14.862  14.656  14.321  14.305  14.936  15.973  16.574  15.842  13.590  10.699   8.677 
+ 11.939  12.122  12.464  12.982  13.760  14.843  16.072  17.043  17.300  16.649  15.352  14.007  13.200  13.188  13.821  14.733  15.570  16.112  16.241  15.925  15.254  14.502  14.026  14.033  14.379  14.652  14.531  14.130  13.957  14.450  15.440  16.078  15.406  13.183  10.279   8.234 
+ 11.663  11.630  11.759  12.306  13.399  14.879  16.311  17.169  17.107  16.165  14.745  13.408  12.593  12.475  12.979  13.890  14.931  15.786  16.140  15.809  14.903  13.856  13.201  13.210  13.679  14.077  13.999  13.541  13.245  13.598  14.490  15.141  14.640  12.730  10.176   8.362 
+ 12.067  11.629  11.320  11.782  13.164  14.931  16.218  16.426  15.591  14.277  13.102  12.345  11.908  11.620  11.529  11.889  12.849  14.146  15.131  15.181  14.178  12.656  11.469  11.199  11.773  12.568  12.920  12.614  11.977  11.535  11.526  11.702  11.575  10.875   9.843   9.077 
+ 11.545  11.072  10.598  10.621  11.213  11.969  12.404  12.375  12.128  11.938  11.754  11.235  10.180   8.908   8.158   8.527   9.918  11.532  12.438  12.269  11.461  10.841  10.951  11.676  12.446  12.762  12.572  12.195  11.957  11.909  11.855  11.601  11.148  10.662  10.307  10.138 
+ 13.539  12.870  11.960  11.323  11.161  11.260  11.221  10.815  10.135   9.451   8.946   8.599   8.307   8.106   8.210   8.822   9.883  11.008  11.727  11.841  11.588  11.479  11.921  12.928  14.125  15.029  15.360  15.164  14.700  14.229  13.869  13.598  13.350  13.099  12.878  12.746 
+ 14.276  13.813  13.025  12.115  11.261  10.567  10.076   9.793   9.685   9.662   9.584   9.338   8.935   8.556   8.467   8.841   9.606  10.472  11.119  11.442  11.645  12.105  13.071  14.435  15.752  16.507  16.461  15.806  15.034  14.600  14.635  14.900  15.015  14.771  14.284  13.897 
+ 13.652  13.219  12.482  11.645  10.914  10.412  10.151  10.044   9.966   9.820   9.581   9.293   9.045   8.923   8.984   9.233   9.624  10.089  10.577  11.100  11.742  12.603  13.702  14.902  15.933  16.526  16.577  16.240  15.835  15.643  15.720  15.874  15.828  15.458  14.910  14.507 
+ 11.035  10.799  10.329   9.707   9.148   8.924   9.184   9.802  10.413  10.626  10.280   9.557   8.859   8.562   8.804   9.450  10.224  10.893  11.390  11.822  12.383  13.229  14.371  15.634  16.704  17.278  17.240  16.751  16.179  15.868  15.920  16.138  16.197  15.918  15.418  15.029 
+ 11.111  10.667  10.027   9.510   9.302   9.364   9.507   9.549   9.422   9.156   8.807   8.421   8.062   7.871   8.037   8.690   9.779  11.053  12.197  13.027  13.593  14.123  14.828  15.733  16.654  17.328  17.595  17.490  17.190  16.883  16.644  16.426  16.143  15.770  15.389  15.144 
+ 10.912  10.084   8.933   8.119   8.032   8.599   9.412  10.038  10.245  10.029   9.517   8.879   8.319   8.068   8.302   9.021  10.006  10.948  11.670  12.245  12.904  13.795  14.824  15.719  16.269  16.500  16.627  16.816  17.012  16.984  16.579  15.906  15.293  15.019  15.085  15.242 
+ 13.935  13.129  11.986  11.055  10.549  10.273   9.922   9.429   9.001   8.847   8.920   8.950   8.770   8.562   8.745   9.570  10.825  11.955  12.543  12.682  12.901  13.664  14.930  16.162  16.791  16.693  16.253  15.972  16.018  16.135  15.974  15.483  14.965  14.771  14.942  15.184 
+ 14.357  13.426  12.129  11.133  10.713  10.642  10.530  10.222   9.877   9.685   9.577   9.267   8.605   7.872   7.653   8.351   9.787  11.286  12.211  12.479  12.578  13.084  14.105  15.172  15.660  15.335  14.541  13.879  13.707  13.912  14.116  14.072  13.843  13.660  13.645  13.709 
+ 14.613  13.462  11.828  10.530   9.943   9.837   9.720   9.333   8.831   8.531   8.530   8.597   8.444   8.086   7.908   8.337   9.431  10.769  11.767  12.136  12.080  12.064  12.399  12.998  13.513  13.676  13.510  13.254  13.109  13.082  13.041  12.906  12.735  12.652  12.691  12.765 
+ 14.540  13.583  12.368  11.748  12.093  13.068  13.965  14.259  13.912  13.243  12.575  12.020  11.553  11.221  11.198  11.607  12.309  12.919  13.085  12.792  12.390  12.298  12.638  13.130  13.335  13.029  12.371  11.739  11.401  11.325  11.262  10.996  10.515   9.977   9.556   9.339 
+ 13.690  13.413  13.075  12.972  13.286  13.944  14.638  14.995  14.814  14.178  13.383  12.723  12.331  12.182  12.234  12.515  13.051  13.701  14.101  13.879  13.000  11.923  11.339  11.636  12.508  13.123  12.769  11.478  10.077   9.535  10.140  11.198  11.568  10.618   8.811   7.386 
+ 13.259  12.873  12.422  12.323  12.794  13.684  14.549  14.924  14.600  13.730  12.702  11.898  11.512  11.546  11.909  12.497  13.172  13.696  13.777  13.258  12.330  11.521  11.387  12.074  13.116  13.705  13.280  11.996  10.654  10.093  10.517  11.300  11.482  10.565   8.966   7.733 
+ 12.825  12.604  12.307  12.164  12.364  12.911  13.559  13.911  13.647  12.758  11.592  10.664  10.357  10.723  11.499  12.301  12.816  12.888  12.511  11.826  11.129  10.815  11.181  12.161  13.230  13.648  12.963  11.400   9.791   9.011   9.322  10.168  10.609  10.086   8.883   7.897 
+ 12.770  12.614  12.378  12.176  12.099  12.157  12.256  12.238  11.963  11.395  10.636   9.893   9.390   9.278   9.569  10.116  10.662  10.942  10.828  10.438  10.131  10.313  11.151  12.371  13.341  13.438  12.501  11.012   9.837   9.649  10.445  11.528  12.010  11.474  10.290   9.341 
+ 12.650  12.652  12.541  12.247  11.892  11.713  11.823  12.043  12.002  11.443  10.476   9.535   9.069   9.228   9.805  10.439  10.864  11.019  10.972  10.837  10.764  10.958  11.578  12.529  13.340  13.380  12.354  10.693   9.426   9.478  10.911  12.745  13.628  12.870  11.033   9.529 
+ 12.542  12.124  11.581  11.309  11.538  12.150  12.721  12.772  12.092  10.912   9.800   9.332   9.753  10.862  12.161  13.156  13.578  13.431  12.884  12.167  11.518  11.157  11.204  11.566  11.912  11.856  11.258  10.415   9.919  10.215  11.182  12.120  12.213  11.164   9.504   8.266 
+ 12.439  12.251  12.033  12.032  12.439  13.231  14.092  14.541  14.214  13.150  11.836  10.941  10.911  11.709  12.877  13.862  14.337  14.304  13.964  13.513  13.062  12.669  12.389  12.244  12.147  11.932  11.504  11.009  10.792  11.126  11.898  12.565  12.495  11.479   9.979   8.882 
+ 12.019  11.923  11.808  11.857  12.309  13.253  14.425  15.230  15.088  13.890  12.182  10.869  10.624  11.461  12.795  13.902  14.392  14.322  13.961  13.497  12.982  12.473  12.135  12.119  12.337  12.431  12.072  11.342  10.789  10.996  11.976  12.980  12.992  11.575   9.365   7.715 
+ 12.090  11.850  11.586  11.639  12.292  13.536  14.955  15.874  15.744  14.539  12.842  11.523  11.211  11.927  13.153  14.227  14.749  14.707  14.314  13.781  13.238  12.805  12.624  12.771  13.099  13.264  12.978  12.308  11.700  11.624  12.115  12.619  12.381  11.092   9.256   7.919 
+ 12.084  12.000  12.007  12.342  13.127  14.226  15.238  15.685  15.292  14.200  12.928  12.087  12.031  12.678  13.605  14.340  14.610  14.414  13.925  13.361  12.922  12.761  12.940  13.328  13.591  13.346  12.459  11.245  10.338  10.258  10.976  11.851  12.068  11.266   9.864   8.789 
+ 10.339  10.925  11.789  12.577  13.150  13.587  13.948  14.081  13.706  12.744  11.558  10.817  11.020  12.075  13.299  13.881  13.451  12.307  11.149  10.553  10.633  11.070  11.431  11.453  11.107  10.499   9.768   9.084   8.658   8.663   9.083   9.644   9.958   9.801   9.312   8.895 
+  9.762  10.384  11.293  12.092  12.611  12.909  13.047  12.896  12.241  11.108   9.961   9.490  10.086  11.444  12.681  12.942  12.026  10.517   9.340   9.086   9.656  10.440  10.821  10.569   9.861   9.022   8.285   7.746   7.459   7.469   7.743   8.087   8.216   7.970   7.473   7.076 
+  8.934   9.042   9.010   8.646   8.095   7.762   7.922   8.382   8.580   8.067   6.961   5.936   5.708   6.435   7.562   8.243   7.987   7.001   5.966   5.483   5.654   6.106   6.369   6.232   5.820   5.395   5.133   5.054   5.107   5.248   5.433   5.560   5.490   5.163   4.700   4.362 
+  8.499   8.526   8.370   7.903   7.329   7.082   7.411   8.053   8.365   7.853   6.651   5.494   5.162   5.848   6.982   7.683   7.427   6.410   5.318   4.761   4.856   5.266   5.575   5.629   5.557   5.539   5.595   5.583   5.374   4.998   4.609   4.335   4.180   4.065   3.945   3.856 
+  8.044   8.126   8.279   8.485   8.719   8.919   8.968   8.713   8.037   6.972   5.751   4.747   4.297   4.507   5.159   5.820   6.082   5.797   5.156   4.542   4.286   4.462   4.880   5.245   5.361   5.228   4.988   4.778   4.634   4.496   4.302   4.069   3.880   3.807   3.841   3.897 
+  7.599   7.716   7.870   7.979   8.038   8.099   8.161   8.094   7.682   6.804   5.592   4.434   3.769   3.816   4.417   5.131   5.510   5.365   4.867   4.396   4.287   4.625   5.209   5.695   5.804   5.479   4.908   4.408   4.247   4.488   4.957   5.341   5.382   5.035   4.505   4.119 
+  6.792   7.807   9.183  10.110  10.209   9.726   9.225   9.070   9.159   9.093   8.590   7.758   7.003   6.699   6.913   7.402   7.840   8.042   8.015   7.869   7.710   7.596   7.568   7.637   7.750   7.797   7.703   7.545   7.559   7.964   8.733   9.519   9.862   9.551   8.826   8.240 
+ 10.889  10.159   9.147   8.441   8.393   8.934   9.671  10.168  10.176   9.714   8.993   8.304   7.924   8.022   8.567   9.298   9.827   9.865   9.429   8.850   8.539   8.672   9.052   9.278   9.079   8.541   8.018   7.835   8.019   8.321   8.466   8.401   8.307   8.386   8.643   8.874 
+ 11.266  10.975  10.759  11.028  11.863  12.936  13.749  13.983  13.664  13.048  12.394  11.853  11.519  11.512  11.926  12.685  13.467  13.868  13.696  13.155  12.705  12.698  13.087  13.467  13.428  12.904  12.214  11.769  11.729  11.892  11.910  11.597  11.049  10.517  10.175  10.035 
+ 11.647  11.269  11.006  11.422  12.662  14.309  15.665  16.207  15.857  14.906  13.753  12.727  12.066  11.965  12.508  13.527  14.565  15.088  14.854  14.128  13.514  13.499  14.060  14.687  14.794  14.202  13.269  12.587  12.518  12.933  13.358  13.348  12.781  11.876  11.006  10.489 
+ 11.711  11.436  11.284  11.708  12.813  14.253  15.472  16.067  15.964  15.338  14.415  13.395  12.514  12.091  12.394  13.391  14.638  15.483  15.509  14.852  14.114  13.900  14.346  15.029  15.321  14.893  13.954  13.055  12.640  12.741  13.005  13.007  12.550  11.756  10.947  10.448 
+ 11.450  11.326  11.327  11.753  12.710  14.005  15.243  16.034  16.168  15.660  14.704  13.606  12.719  12.372  12.738  13.707  14.872  15.709  15.869  15.408  14.751  14.410  14.617  15.167  15.574  15.435  14.731  13.837  13.243  13.188  13.483  13.643  13.241  12.229  11.001  10.165 
+ 11.047  10.977  11.045  11.504  12.450  13.724  14.974  15.833  16.073  15.673  14.796  13.725  12.809  12.383  12.650  13.548  14.707  15.591  15.784  15.271  14.470  13.977  14.138  14.781  15.318  15.189  14.317  13.221  12.662  13.041  14.018  14.667  14.118  12.225   9.783   8.082 
+ 10.656  10.862  11.234  11.755  12.473  13.450  14.631  15.758  16.431  16.320  15.396  14.018  12.794  12.282  12.714  13.866  15.177  16.025  16.059  15.385  14.514  14.050  14.298  15.025  15.587  15.391  14.382  13.183  12.691  13.387  14.841  15.879  15.367  13.084  10.033   7.880 
+ 11.174  11.389  11.753  12.212  12.799  13.606  14.653  15.758  16.541  16.613  15.840  14.515  13.269  12.744  13.221  14.434  15.710  16.373  16.148  15.325  14.543  14.350  14.817  15.482  15.673  15.014  13.740  12.599  12.350  13.197  14.560  15.376  14.788  12.757  10.185   8.412 
+ 11.012  11.305  11.766  12.265  12.792  13.464  14.383  15.456  16.346  16.634  16.108  14.989  13.870  13.394  13.839  14.921  15.957  16.318  15.845  14.948  14.300  14.344  14.959  15.539  15.441  14.476  13.093  12.116  12.185  13.283  14.685  15.364  14.630  12.588  10.137   8.489 
+ 10.056  10.521  11.186  11.760  12.195  12.728  13.647  14.954  16.232  16.858  16.451  15.207  13.860  13.231  13.690  14.892  16.007  16.290  15.587  14.426  13.619  13.672  14.417  15.133  15.073  14.017  12.476  11.369  11.414  12.607  14.173  15.006  14.352  12.303   9.794   8.095 
+ 10.286  10.685  11.247  11.737  12.162  12.785  13.856  15.280  16.545  17.006  16.360  14.942  13.583  13.095  13.725  14.989  15.999  16.071  15.184  13.974  13.269  13.500  14.399  15.188  15.129  14.065  12.563  11.571  11.785  13.152  14.823  15.633  14.806  12.475   9.672   7.785 
+ 10.741  11.161  11.744  12.228  12.607  13.149  14.129  15.483  16.715  17.186  16.588  15.255  14.008  13.635  14.335  15.574  16.448  16.319  15.261  13.996  13.366  13.726  14.695  15.439  15.271  14.157  12.759  11.999  12.434  13.849  15.346  15.861  14.795  12.401   9.688   7.908 
+ 10.457  10.917  11.558  12.084  12.467  12.979  13.919  15.254  16.514  17.063  16.579  15.363  14.203  13.844  14.461  15.526  16.186  15.895  14.812  13.683  13.279  13.822  14.817  15.414  15.039  13.819  12.512  11.996  12.671  14.181  15.611  16.026  15.005  12.872  10.533   9.025 
+  9.915  10.463  11.196  11.738  12.076  12.586  13.656  15.225  16.668  17.192  16.456  14.920  13.591  13.328  14.206  15.458  16.030  15.371  13.836  12.425  12.045  12.850  14.145  14.901  14.498  13.165  11.813  11.407  12.315  14.062  15.607  15.957  14.716  12.294   9.698   8.041 
+ 10.580  11.033  11.662  12.190  12.616  13.226  14.276  15.647  16.792  17.085  16.333  15.012  14.000  13.961  14.848  15.910  16.232  15.414  13.876  12.571  12.305  13.161  14.447  15.191  14.827  13.582  12.321  11.963  12.868  14.591  16.132  16.510  15.309  12.912  10.316   8.650 
+ 10.776  11.230  11.887  12.498  13.062  13.805  14.875  16.060  16.833  16.740  15.823  14.686  14.109  14.466  15.428  16.187  16.044  14.922  13.416  12.369  12.296  13.062  14.014  14.437  14.013  13.009  12.099  11.957  12.853  14.449  15.934  16.418  15.426  13.212  10.701   9.050 
+ 10.334  10.786  11.459  12.129  12.806  13.685  14.855  16.038  16.682  16.369  15.229  13.957  13.365  13.784  14.797  15.527  15.269  13.999  12.373  11.250  11.115  11.798  12.657  13.045  12.720  11.958  11.343  11.398  12.278  13.659  14.878  15.260  14.468  12.730  10.773   9.491 
+  9.928  10.323  10.961  11.712  12.604  13.747  15.082  16.234  16.674  16.126  14.880  13.692  13.289  13.841  14.814  15.355  14.893  13.534  11.952  10.917  10.804  11.424  12.224  12.661  12.498  11.888  11.267  11.119  11.725  12.965  14.292  14.960  14.441  12.802  10.772   9.385 
+ 10.406  10.581  11.053  11.961  13.311  14.866  16.182  16.794  16.496  15.497  14.356  13.670  13.728  14.344  14.989  15.117  14.478  13.222  11.785  10.663  10.208  10.510  11.362  12.314  12.838  12.598  11.699  10.714  10.376  11.063  12.446  13.598  13.593  12.193  10.110   8.592 
+ 10.166  10.470  11.154  12.262  13.675  15.051  15.931  15.985  15.231  14.089  13.165  12.908  13.345  14.093  14.622  14.574  13.910  12.834  11.635  10.586   9.958   9.995  10.774  12.012  13.058  13.234  12.347  10.978  10.190  10.770  12.541  14.350  14.842  13.491  11.093   9.256 
+  9.474   9.340   9.529  10.519  12.300  14.227  15.378  15.173  13.783  12.031  10.866  10.788  11.620  12.726  13.444  13.416  12.640  11.334   9.807   8.438   7.668   7.864   9.049  10.711  11.953  12.011  10.823   9.196   8.345   9.054  11.046  13.092  13.840  12.789  10.695   9.059 
+  9.383  10.096  11.319  12.717  13.911  14.577  14.532  13.810  12.696  11.652  11.130  11.339  12.110  12.981  13.452  13.255  12.439  11.272  10.060   9.061   8.499   8.572   9.340  10.546  11.591  11.820  11.004   9.624   8.664   8.936  10.433  12.242  13.165  12.618  11.105   9.847 
+  6.396   7.280   8.660  10.017  10.989  11.474  11.506  11.108  10.294   9.200   8.172   7.635   7.812   8.531   9.290   9.554   9.057   7.890   6.401   5.030   4.209   4.272   5.298   6.918   8.332   8.678   7.644   5.852   4.580   4.897   6.798   9.077  10.147   9.248   7.079   5.311 
+  8.559   8.279   7.863   7.566   7.659   8.257   9.183   9.979  10.134   9.406   8.022   6.582   5.707   5.662   6.216   6.821   6.984   6.555   5.772   5.058   4.746   4.909   5.367   5.819   6.015   5.863   5.472   5.082   4.939   5.140   5.555   5.879   5.825   5.330   4.632   4.131 
+  9.157   8.580   7.848   7.501   7.827   8.674   9.565   9.992   9.695   8.748   7.479   6.307   5.584   5.471   5.862   6.409   6.669   6.362   5.569   4.717   4.310   4.575   5.284   5.912   6.019   5.565   4.931   4.609   4.837   5.441   5.978   6.051   5.554   4.691   3.828   3.302 
+  5.962   5.724   5.488   5.596   6.284   7.492   8.828   9.725   9.736   8.806   7.345   6.019   5.383   5.561   6.194   6.681   6.563   5.806   4.790   4.049   3.929   4.395   5.079   5.535   5.507   5.057   4.498   4.182   4.294   4.744   5.231   5.415   5.111   4.396   3.579   3.042 
+  4.618   5.082   5.675   6.061   6.237   6.523   7.188   8.083   8.651   8.359   7.189   5.739   4.812   4.822   5.497   6.134   6.157   5.534   4.732   4.279   4.353   4.696   4.891   4.722   4.316   3.997   4.010   4.355   4.819   5.143   5.165   4.864   4.325   3.696   3.144   2.821 
+  6.569   5.853   4.892   4.344   4.654   5.783   7.221   8.277   8.464   7.752   6.551   5.451   4.877   4.877   5.149   5.273   4.992   4.366   3.715   3.401   3.595   4.174   4.810   5.172   5.124   4.777   4.400   4.232   4.347   4.621   4.825   4.763   4.383   3.794   3.210   2.850 
+  5.188   5.367   5.763   6.370   7.059   7.624   7.916   7.952   7.886   7.856   7.832   7.625   7.068   6.216   5.382   4.958   5.148   5.817   6.598   7.159   7.416   7.537   7.740   8.065   8.315   8.222   7.677   6.858   6.123   5.764   5.809   6.015   6.064   5.801   5.349   5.003 
+  3.945   4.373   5.122   5.995   6.762   7.247   7.417   7.391   7.354   7.414   7.511   7.453   7.072   6.384   5.615   5.072   4.937   5.159   5.512   5.788   5.955   6.156   6.544   7.093   7.556   7.619   7.138   6.282   5.441   4.974   4.969   5.202   5.327   5.144   4.744   4.419 
+  4.920   4.465   3.997   4.057   4.856   6.083   7.093   7.339   6.737   5.700   4.831   4.507   4.668   4.925   4.897   4.487   3.912   3.493   3.411   3.615   3.928   4.223   4.493   4.772   5.012   5.071   4.839   4.379   3.939   3.770   3.906   4.099   4.002   3.463   2.687   2.120 
+  5.344   4.574   3.641   3.293   3.854   5.010   6.072   6.475   6.125   5.356   4.626   4.225   4.190   4.411   4.745   5.055   5.191   5.029   4.586   4.081   3.840   4.062   4.641   5.197   5.339   4.946   4.239   3.605   3.304   3.313   3.407   3.360   3.112   2.757   2.440   2.262 
+  4.662   4.154   3.642   3.727   4.612   5.900   6.852   6.908   6.093   4.984   4.290   4.353   4.942   5.488   5.532   5.048   4.396   3.985   3.952   4.110   4.183   4.084   3.981   4.098   4.457   4.799   4.790   4.320   3.624   3.112   3.033   3.284   3.514   3.445   3.105   2.796 
+  3.993   3.453   2.900   2.934   3.709   4.795   5.524   5.510   4.927   4.320   4.160   4.511   5.056   5.387   5.296   4.851   4.268   3.753   3.442   3.412   3.686   4.179   4.673   4.906   4.740   4.283   3.823   3.612   3.680   3.829   3.829   3.615   3.320   3.127   3.097   3.140 
+  4.884   4.276   3.543   3.275   3.715   4.586   5.323   5.506   5.148   4.636   4.392   4.554   4.918   5.151   5.067   4.750   4.436   4.299   4.324   4.363   4.293   4.123   3.961   3.896   3.902   3.873   3.727   3.499   3.319   3.293   3.398   3.473   3.344   2.965   2.480   2.141 
+  5.331   4.601   3.752   3.517   4.158   5.246   5.978   5.771   4.685   3.353   2.526   2.573   3.307   4.196   4.754   4.815   4.536   4.200   4.012   4.019   4.158   4.333   4.461   4.479   4.347   4.075   3.744   3.480   3.376   3.425   3.509   3.468   3.202   2.745   2.258   1.945 
+  3.077   3.027   3.116   3.541   4.289   5.081   5.513   5.331   4.614   3.746   3.190   3.206   3.722   4.399   4.857   4.883   4.520   3.998   3.581   3.438   3.583   3.901   4.221   4.382   4.301   3.999   3.597   3.263   3.125   3.200   3.370   3.446   3.286   2.888   2.413   2.092 
+  3.296   3.265   3.429   3.959   4.710   5.255   5.228   4.658   3.994   3.747   4.071   4.646   4.959   4.740   4.165   3.675   3.578   3.817   4.067   4.065   3.851   3.701   3.850   4.256   4.623   4.648   4.265   3.687   3.219   3.032   3.059   3.089   2.943   2.600   2.196   1.927 
+  4.068   4.223   4.428   4.583   4.680   4.761   4.804   4.678   4.268   3.660   3.181   3.189   3.772   4.616   5.214   5.241   4.786   4.230   3.897   3.803   3.727   3.516   3.285   3.307   3.698   4.219   4.445   4.144   3.523   3.054   3.042   3.320   3.392   2.904   2.017   1.314 
+  4.695   4.513   4.326   4.353   4.683   5.170   5.507   5.419   4.871   4.127   3.590   3.539   3.929   4.430   4.666   4.482   4.038   3.654   3.561   3.742   3.989   4.099   4.026   3.864   3.718   3.588   3.404   3.140   2.894   2.807   2.916   3.066   3.014   2.638   2.078   1.662 
+  3.926   4.124   4.433   4.743   4.979   5.114   5.122   4.941   4.511   3.862   3.176   2.740   2.780   3.290   3.997   4.503   4.535   4.127   3.589   3.290   3.410   3.826   4.224   4.331   4.094   3.686   3.348   3.203   3.191   3.148   2.963   2.667   2.393   2.256   2.260   2.309 
+  6.647   6.013   5.261   4.962   5.241   5.682   5.719   5.148   4.295   3.720   3.724   4.116   4.420   4.304   3.840   3.380   3.209   3.315   3.464   3.466   3.366   3.366   3.591   3.944   4.178   4.122   3.820   3.473   3.248   3.156   3.085   2.938   2.728   2.540   2.436   2.403 
+  5.555   5.458   5.347   5.325   5.420   5.534   5.477   5.112   4.503   3.940   3.780   4.177   4.915   5.506   5.505   4.837   3.854   3.071   2.795   2.932   3.125   3.091   2.858   2.697   2.841   3.248   3.634   3.723   3.483   3.124   2.883   2.806   2.736   2.508   2.148   1.865 
+  4.519   5.043   5.795   6.354   6.431   6.036   5.460   5.067   5.039   5.258   5.415   5.278   4.884   4.508   4.414   4.607   4.799   4.655   4.092   3.396   3.020   3.226   3.877   4.534   4.788   4.542   4.027   3.573   3.353   3.324   3.371   3.474   3.727   4.189   4.746   5.135 
+  7.489   8.183   9.059   9.448   9.001   7.947   6.951   6.635   7.099   7.819   8.033   7.335   6.033   4.941   4.747   5.450   6.341   6.564   5.814   4.603   3.855   4.162   5.321   6.507   6.922   6.377   5.342   4.499   4.225   4.429   4.810   5.216   5.734   6.477   7.319   7.900 
+  7.424   7.770   7.983   7.580   6.573   5.518   5.048   5.334   5.951   6.260   5.942   5.209   4.544   4.253   4.265   4.320   4.292   4.325   4.635   5.230   5.848   6.175   6.125   5.877   5.666   5.535   5.344   4.998   4.647   4.600   5.011   5.655   6.047   5.855   5.222   4.671 
+  6.297   6.761   7.206   7.128   6.483   5.721   5.366   5.534   5.866   5.905   5.529   5.024   4.752   4.777   4.841   4.686   4.375   4.260   4.609   5.293   5.866   5.984   5.732   5.526   5.669   6.015   6.095   5.617   4.820   4.326   4.572   5.377   6.067   6.079   5.475   4.877 
+  2.804   3.391   4.186   4.751   4.947   5.002   5.246   5.769   6.324   6.554   6.320   5.822   5.419   5.309   5.375   5.319   4.951   4.361   3.857   3.727   4.057   4.705   5.418   5.952   6.127   5.854   5.189   4.374   3.785   3.735   4.246   4.989   5.488   5.463   5.042   4.647 
+  4.421   4.829   5.414   5.859   5.961   5.766   5.552   5.636   6.130   6.824   7.295   7.195   6.507   5.579   4.885   4.697   4.906   5.154   5.144   4.899   4.728   4.947   5.568   6.233   6.450   5.953   4.923   3.880   3.348   3.516   4.146   4.751   4.919   4.565   3.947   3.486 
+  3.547   4.260   5.252   5.951   6.024   5.609   5.215   5.352   6.138   7.186   7.847   7.668   6.724   5.559   4.798   4.711   5.076   5.426   5.461   5.267   5.190   5.474   6.009   6.407   6.326   5.752   5.011   4.491   4.356   4.466   4.562   4.499   4.338   4.228   4.233   4.283 
+  3.272   4.079   5.308   6.364   6.749   6.368   5.632   5.217   5.577   6.569   7.501   7.645   6.832   5.631   4.929   5.221   6.217   7.085   7.147   6.433   5.619   5.419   5.974   6.755   7.033   6.494   5.464   4.587   4.298   4.534   4.891   5.012   4.837   4.544   4.320   4.222 
+  3.435   3.707   4.242   4.924   5.493   5.677   5.423   4.995   4.808   5.088   5.666   6.102   6.075   5.673   5.333   5.459   6.055   6.706   6.944   6.652   6.172   6.001   6.360   7.004   7.427   7.273   6.599   5.794   5.260   5.131   5.252   5.360   5.294   5.072   4.818   4.657 
+  4.789   4.648   4.659   5.040   5.603   5.831   5.335   4.270   3.288   3.022   3.575   4.462   5.061   5.144   5.009   5.115   5.606   6.184   6.437   6.284   6.094   6.339   7.132   8.085   8.617   8.438   7.763   7.090   6.776   6.805   6.903   6.851   6.662   6.495   6.450   6.476 
+  1.774   2.878   4.547   5.972   6.499   5.996   4.942   4.131   4.145   4.949   5.921   6.327   5.892   5.024   4.489   4.799   5.809   6.850   7.290   7.040   6.587   6.553   7.148   8.003   8.480   8.190   7.278   6.277   5.682   5.629   5.876   6.062   5.975   5.647   5.263   5.016 
+  4.234   5.005   5.982   6.491   6.294   5.777   5.625   6.237   7.354   8.206   8.073   6.834   5.088   3.754   3.448   4.106   5.099   5.724   5.692   5.257   4.937   5.081   5.609   6.112   6.183   5.714   4.945   4.266   3.939   3.960   4.116   4.169   4.004   3.671   3.318   3.096 
+  3.535   4.331   5.285   5.687   5.390   4.936   5.066   6.045   7.391   8.227   7.957   6.703   5.173   4.119   3.851   4.135   4.484   4.543   4.279   3.912   3.726   3.913   4.488   5.263   5.888   5.992   5.414   4.378   3.433   3.121   3.577   4.401   4.936   4.780   4.106   3.509 
+  3.756   4.297   4.807   4.712   4.033   3.420   3.578   4.622   5.938   6.683   6.452   5.534   4.570   3.996   3.782   3.639   3.411   3.227   3.308   3.669   4.088   4.342   4.453   4.621   4.931   5.149   4.899   4.088   3.143   2.742   3.239   4.286   5.073   5.003   4.220   3.483 
+  4.337   4.755   5.167   5.144   4.672   4.164   4.039   4.310   4.574   4.426   3.876   3.351   3.290   3.720   4.236   4.406   4.175   3.898   3.956   4.375   4.810   4.911   4.676   4.425   4.436   4.623   4.621   4.196   3.574   3.295   3.714   4.615   5.346   5.386   4.814   4.241 
+  4.631   4.616   4.663   4.846   5.135   5.373   5.358   4.995   4.403   3.868   3.666   3.853   4.210   4.395   4.196   3.705   3.243   3.121   3.403   3.893   4.330   4.615   4.856   5.195   5.595   5.802   5.564   4.904   4.184   3.874   4.181   4.873   5.455   5.567   5.263   4.931 
+  4.262   4.632   5.159   5.560   5.650   5.431   5.030   4.598   4.235   3.985   3.873   3.900   4.021   4.134   4.138   4.005   3.817   3.707   3.756   3.940   4.170   4.397   4.644   4.952   5.273   5.450   5.322   4.892   4.384   4.116   4.276   4.780   5.342   5.699   5.791   5.759 
+  5.382   5.284   5.112   4.916   4.750   4.643   4.572   4.478   4.323   4.140   4.015   4.012   4.093   4.132   4.015   3.752   3.495   3.431   3.645   4.053   4.486   4.818   5.037   5.183   5.242   5.118   4.736   4.186   3.737   3.678   4.088   4.738   5.242   5.345   5.111   4.855 
+  3.473   3.634   3.911   4.259   4.657   5.073   5.407   5.498   5.233   4.672   4.062   3.692   3.678   3.883   4.032   3.950   3.710   3.553   3.674   4.053   4.490   4.795   4.934   4.996   5.042   4.999   4.741   4.275   3.831   3.719   4.064   4.659   5.094   5.089   4.725   4.376 
+  5.244   5.004   4.723   4.637   4.827   5.147   5.324   5.166   4.709   4.193   3.885   3.892   4.096   4.259   4.207   3.945   3.628   3.429   3.416   3.543   3.731   3.950   4.220   4.531   4.783   4.818   4.550   4.072   3.639   3.509   3.757   4.214   4.593   4.700   4.569   4.409 
+  4.844   4.860   4.820   4.708   4.657   4.853   5.308   5.745   5.752   5.127   4.104   3.235   2.984   3.369   3.964   4.253   4.044   3.585   3.316   3.499   4.033   4.589   4.890   4.878   4.659   4.351   4.011   3.700   3.553   3.721   4.209   4.775   5.061   4.867   4.345   3.908 
+  4.466   4.086   3.697   3.738   4.358   5.285   6.022   6.198   5.794   5.104   4.489   4.148   4.050   4.047   4.015   3.921   3.800   3.704   3.683   3.791   4.065   4.472   4.868   5.041   4.841   4.292   3.613   3.091   2.915   3.075   3.400   3.689   3.823   3.805   3.717   3.646 
+  5.934   5.734   5.427   5.175   5.140   5.395   5.860   6.316   6.522   6.354   5.872   5.257   4.680   4.205   3.807   3.465   3.236   3.222   3.469   3.900   4.344   4.657   4.808   4.862   4.876   4.823   4.617   4.220   3.724   3.315   3.136   3.183   3.317   3.388   3.354   3.293 
+  5.223   5.600   5.975   5.947   5.481   4.974   4.936   5.554   6.516   7.234   7.268   6.606   5.596   4.652   3.990   3.588   3.332   3.171   3.137   3.266   3.523   3.827   4.108   4.334   4.472   4.459   4.233   3.830   3.413   3.173   3.159   3.200   3.029   2.513   1.818   1.317 
+  5.043   4.971   4.808   4.588   4.461   4.658   5.336   6.396   7.443   7.955   7.592   6.450   5.050   4.032   3.762   4.109   4.576   4.689   4.350   3.877   3.724   4.094   4.771   5.288   5.290   4.788   4.118   3.647   3.507   3.542   3.495   3.236   2.841   2.484   2.273   2.195 
+  4.641   4.460   4.124   3.738   3.522   3.741   4.533   5.743   6.900   7.425   6.971   5.685   4.180   3.189   3.123   3.812   4.647   5.017   4.726   4.105   3.723   3.940   4.634   5.307   5.462   4.960   4.089   3.328   3.003   3.102   3.351   3.444   3.241   2.817   2.369   2.090 
+  4.313   4.407   4.540   4.613   4.535   4.301   4.041   3.961   4.192   4.652   5.054   5.094   4.679   4.016   3.457   3.239   3.316   3.446   3.430   3.298   3.265   3.498   3.932   4.286   4.292   3.922   3.404   3.029   2.920   2.957   2.923   2.696   2.335   1.996   1.785   1.701 
+  5.390   5.175   4.985   5.072   5.443   5.826   5.878   5.462   4.758   4.117   3.809   3.876   4.174   4.532   4.860   5.124   5.280   5.261   5.055   4.781   4.643   4.770   5.076   5.282   5.111   4.501   3.657   2.911   2.494   2.413   2.507   2.595   2.604   2.559   2.514   2.494 
+  4.583   4.088   3.524   3.398   3.897   4.743   5.411   5.517   5.062   4.370   3.813   3.566   3.571   3.684   3.822   3.991   4.199   4.395   4.497   4.502   4.530   4.731   5.127   5.532   5.644   5.270   4.498   3.669   3.160   3.134   3.421   3.646   3.485   2.886   2.113   1.577 
+  4.568   4.331   4.095   4.117   4.425   4.773   4.833   4.469   3.857   3.351   3.223   3.468   3.836   4.032   3.920   3.588   3.257   3.131   3.300   3.724   4.261   4.717   4.894   4.674   4.094   3.360   2.771   2.555   2.736   3.123   3.429   3.444   3.133   2.631   2.145   1.853 
+  3.971   4.439   5.156   5.839   6.317   6.585   6.727   6.790   6.755   6.604   6.409   6.313   6.420   6.686   6.943   7.028   6.926   6.776   6.732   6.810   6.847   6.623   6.033   5.170   4.257   3.504   3.010   2.759   2.692   2.748   2.851   2.898   2.787   2.496   2.128   1.871 
+  4.595   4.487   4.425   4.579   4.969   5.421   5.687   5.617   5.275   4.884   4.675   4.740   5.005   5.309   5.519   5.595   5.573   5.514   5.459   5.415   5.367   5.286   5.125   4.839   4.417   3.907   3.413   3.045   2.859   2.819   2.818   2.743   2.540   2.243   1.947   1.763 
+  4.812   5.030   5.238   5.189   4.841   4.370   3.985   3.733   3.503   3.204   2.924   2.879   3.195   3.741   4.197   4.316   4.134   3.919   3.908   4.081   4.196   4.046   3.674   3.348   3.293   3.468   3.604   3.468   3.096   2.757   2.683   2.825   2.896   2.655   2.167   1.767 
+  4.449   4.704   5.099   5.456   5.612   5.492   5.139   4.698   4.352   4.236   4.372   4.646   4.865   4.859   4.586   4.157   3.774   3.606   3.690   3.921   4.133   4.207   4.117   3.911   3.647   3.357   3.067   2.836   2.745   2.835   3.035   3.165   3.051   2.654   2.136   1.772 
+  4.716   5.128   5.875   6.768   7.523   7.861   7.674   7.133   6.633   6.559   7.021   7.747   8.227   8.028   7.081   5.749   4.611   4.135   4.422   5.193   5.980   6.381   6.232   5.614   4.756   3.919   3.323   3.105   3.285   3.728   4.164   4.278   3.876   3.025   2.058   1.419 
+  5.398   4.764   4.047   3.872   4.396   5.179   5.569   5.259   4.530   4.001   4.102   4.743   5.412   5.603   5.179   4.419   3.747   3.432   3.480   3.735   4.048   4.336   4.548   4.616   4.492   4.205   3.881   3.646   3.531   3.447   3.281   3.011   2.730   2.553   2.510   2.530 
+  5.604   5.347   5.024   4.878   5.022   5.341   5.541   5.347   4.698   3.815   3.076   2.778   2.956   3.380   3.735   3.834   3.713   3.550   3.487   3.524   3.556   3.497   3.374   3.296   3.342   3.476   3.586   3.588   3.504   3.426   3.399   3.352   3.152   2.744   2.246   1.899 
+  3.940   3.744   3.551   3.588   3.910   4.342   4.615   4.564   4.245   3.871   3.658   3.691   3.902   4.150   4.303   4.278   4.057   3.687   3.295   3.055   3.103   3.432   3.867   4.151   4.120   3.811   3.436   3.223   3.246   3.396   3.475   3.354   3.044   2.668   2.355   2.185 
+  5.433   4.699   3.827   3.496   3.900   4.613   4.993   4.730   4.072   3.560   3.549   3.960   4.425   4.633   4.531   4.252   3.908   3.509   3.082   2.784   2.839   3.303   3.905   4.180   3.843   3.056   2.348   2.195   2.643   3.280   3.590   3.356   2.773   2.213   1.899   1.802 
+  5.709   4.956   3.983   3.449   3.637   4.265   4.737   4.612   3.923   3.113   2.682   2.825   3.342   3.827   3.961   3.698   3.232   2.847   2.753   3.010   3.531   4.120   4.548   4.644   4.376   3.884   3.407   3.146   3.140   3.252   3.276   3.073   2.651   2.140   1.700   1.451 
+  4.562   4.582   4.610   4.640   4.677   4.705   4.650   4.387   3.825   3.023   2.225   1.755   1.820   2.359   3.054   3.519   3.546   3.220   2.845   2.716   2.932   3.356   3.739   3.902   3.832   3.657   3.523   3.492   3.517   3.496   3.354   3.085   2.748   2.424   2.178   2.049 
+  5.244   5.149   5.038   5.009   5.093   5.199   5.134   4.722   3.960   3.089   2.495   2.477   3.027   3.804   4.333   4.311   3.804   3.182   2.854   2.998   3.478   3.984   4.257   4.231   4.010   3.741   3.508   3.324   3.174   3.054   2.953   2.829   2.622   2.318   1.989   1.770 
+  4.160   4.011   3.881   4.001   4.485   5.188   5.709   5.605   4.718   3.371   2.254   1.997   2.732   3.967   4.911   5.021   4.356   3.484   3.020   3.182   3.698   4.092   4.079   3.734   3.337   3.101   3.023   2.969   2.857   2.735   2.693   2.722   2.701   2.520   2.220   1.986 
+  4.490   4.224   3.906   3.788   3.956   4.243   4.350   4.064   3.426   2.722   2.307   2.383   2.887   3.541   4.019   4.121   3.852   3.385   2.954   2.732   2.770   3.002   3.299   3.548   3.688   3.716   3.653   3.506   3.268   2.935   2.545   2.181   1.932   1.837   1.857   1.902 
+  4.415   4.411   4.398   4.366   4.295   4.168   3.991   3.788   3.589   3.415   3.287   3.240   3.325   3.563   3.887   4.131   4.114   3.779   3.271   2.884   2.864   3.228   3.721   3.985   3.801   3.245   2.619   2.229   2.187   2.363   2.526   2.519   2.346   2.116   1.934   1.843 
+  3.043   3.121   3.375   3.850   4.410   4.777   4.732   4.313   3.801   3.521   3.596   3.883   4.121   4.153   4.024   3.887   3.841   3.850   3.827   3.754   3.717   3.802   3.957   3.994   3.726   3.151   2.499   2.084   2.082   2.407   2.776   2.905   2.681   2.203   1.693   1.374 
+  4.299   3.790   3.196   3.016   3.419   4.124   4.639   4.640   4.170   3.534   3.030   2.765   2.678   2.696   2.811   3.042   3.337   3.566   3.636   3.594   3.594   3.748   3.992   4.126   3.991   3.635   3.279   3.125   3.169   3.213   3.048   2.653   2.206   1.919   1.849   1.883 
+  5.971   5.127   4.049   3.447   3.563   4.021   4.213   3.845   3.157   2.666   2.696   3.123   3.546   3.664   3.507   3.333   3.340   3.498   3.629   3.632   3.581   3.612   3.740   3.809   3.648   3.261   2.855   2.656   2.693   2.778   2.688   2.386   2.044   1.874   1.914   2.018 
+  6.437   5.708   4.993   5.060   5.930   6.789   6.680   5.357   3.543   2.351   2.399   3.368   4.353   4.643   4.228   3.658   3.464   3.710   4.045   4.126   3.947   3.790   3.878   4.125   4.220   3.942   3.384   2.865   2.646   2.722   2.866   2.859   2.661   2.391   2.182   2.083 
+  9.348   9.541   9.819  10.035  10.085   9.938   9.598   9.080   8.407   7.661   6.989   6.539   6.363   6.368   6.367   6.214   5.907   5.574   5.357   5.299   5.320   5.294   5.152   4.921   4.676   4.475   4.340   4.284   4.337   4.515   4.762   4.932   4.871   4.540   4.082   3.754 
+ 11.062  11.276  11.565  11.756  11.753  11.548  11.149  10.527   9.669   8.674   7.785   7.269   7.214   7.434   7.586   7.430   7.006   6.588   6.438   6.589   6.827   6.886   6.662   6.270   5.908   5.686   5.580   5.529   5.542   5.681   5.946   6.181   6.160   5.780   5.201   4.770 
+  9.891  10.184  10.601  10.929  11.052  10.970  10.700  10.198   9.393   8.317   7.200   6.386   6.102   6.283   6.594   6.677   6.429   6.081   6.015   6.462   7.312   8.163   8.570   8.288   7.375   6.118   4.884   3.977   3.555   3.588   3.874   4.111   4.050   3.637   3.063   2.653 
+  9.522   9.505   9.515   9.597   9.730   9.791   9.579   8.927   7.835   6.537   5.419   4.816   4.799   5.125   5.390   5.299   4.871   4.418   4.320   4.746   5.529   6.269   6.587   6.343   5.686   4.927   4.346   4.060   4.013   4.061   4.074   3.986   3.805   3.583   3.386   3.271 
+  7.658   7.679   7.756   7.906   8.054   8.024   7.606   6.703   5.447   4.199   3.379   3.231   3.655   4.259   4.594   4.437   3.910   3.365   3.131   3.304   3.734   4.177   4.479   4.641   4.759   4.900   5.057   5.182   5.247   5.247   5.164   4.931   4.480   3.835   3.168   2.739 
+  4.110   4.228   4.585   5.236   5.988   6.453   6.309   5.562   4.564   3.767   3.424   3.464   3.634   3.723   3.686   3.571   3.400   3.134   2.771   2.436   2.325   2.548   3.003   3.436   3.645   3.643   3.613   3.706   3.871   3.898   3.632   3.155   2.741   2.622   2.782   2.979 
+  4.841   5.240   5.860   6.448   6.818   6.928   6.866   6.750   6.635   6.491   6.250   5.889   5.465   5.086   4.838   4.735   4.723   4.747   4.802   4.942   5.220   5.621   6.036   6.307   6.318   6.061   5.643   5.218   4.907   4.739   4.662   4.594   4.478   4.314   4.149   4.046 
+  8.195   8.446   8.646   8.517   8.137   7.935   8.317   9.259  10.249  10.645  10.167   9.100   8.065   7.540   7.561   7.797   7.895   7.776   7.646   7.769   8.229   8.874   9.449   9.760   9.739   9.419   8.885   8.277   7.769   7.510   7.512   7.609   7.557   7.227   6.732   6.363 
+  6.443   6.691   6.778   6.331   5.464   4.794   4.952   6.009   7.345   8.077   7.719   6.514   5.209   4.465   4.424   4.730   4.918   4.810   4.589   4.571   4.921   5.543   6.198   6.670   6.852   6.720   6.304   5.699   5.094   4.719   4.715   5.029   5.445   5.744   5.851   5.851 
+  2.814   3.398   4.137   4.526   4.381   3.947   3.656   3.751   4.124   4.453   4.500   4.273   3.958   3.725   3.618   3.602   3.679   3.915   4.346   4.887   5.367   5.676   5.864   6.082   6.391   6.650   6.618   6.189   5.557   5.116   5.167   5.682   6.337   6.787   6.926   6.901 
+  3.946   4.013   4.145   4.340   4.592   4.884   5.171   5.376   5.414   5.226   4.827   4.333   3.927   3.798   4.043   4.616   5.332   5.947   6.280   6.299   6.134   5.991   6.028   6.259   6.555   6.740   6.715   6.529   6.343   6.316   6.498   6.798   7.062   7.185   7.173   7.123 
+  3.116   3.000   2.924   3.097   3.646   4.525   5.519   6.343   6.755   6.645   6.067   5.222   4.404   3.934   4.050   4.793   5.946   7.077   7.738   7.698   7.097   6.378   6.018   6.223   6.804   7.316   7.388   6.984   6.420   6.116   6.280   6.776   7.256   7.448   7.351   7.193 
+  3.937   4.227   4.545   4.638   4.534   4.571   5.109   6.172   7.331   7.942   7.589   6.382   4.920   3.935   3.879   4.720   6.015   7.191   7.823   7.801   7.328   6.772   6.473   6.554   6.872   7.120   7.050   6.662   6.218   6.048   6.297   6.809   7.251   7.377   7.217   7.020 
+  2.520   3.264   4.172   4.621   4.522   4.370   4.733   5.669   6.614   6.857   6.164   4.985   4.080   3.926   4.423   5.101   5.566   5.761   5.857   5.973   6.064   6.051   5.995   6.069   6.328   6.549   6.377   5.682   4.788   4.279   4.522   5.323   6.064   6.230   5.842   5.405 
+  4.860   4.554   4.149   3.917   4.019   4.419   4.946   5.425   5.775   5.995   6.094   6.021   5.707   5.144   4.462   3.887   3.630   3.753   4.143   4.588   4.904   5.029   5.015   4.950   4.888   4.828   4.754   4.681   4.653   4.707   4.825   4.928   4.933   4.811   4.626   4.490 
+  5.489   5.867   6.299   6.409   6.079   5.525   5.094   4.967   5.031   5.020   4.779   4.399   4.120   4.094   4.245   4.339   4.211   3.916   3.692   3.746   4.078   4.474   4.675   4.565   4.248   3.943   3.831   3.943   4.178   4.387   4.463   4.374   4.152   3.869   3.610   3.456 
+  5.352   5.500   5.626   5.552   5.262   4.911   4.675   4.594   4.555   4.437   4.253   4.137   4.202   4.391   4.513   4.412   4.138   3.918   3.960   4.252   4.552   4.583   4.262   3.763   3.369   3.251   3.370   3.559   3.688   3.736   3.746   3.716   3.584   3.308   2.961   2.715 
+  4.566   4.577   4.539   4.413   4.248   4.156   4.202   4.334   4.428   4.407   4.318   4.269   4.303   4.328   4.199   3.880   3.523   3.359   3.489   3.778   3.952   3.829   3.478   3.146   3.035   3.133   3.261   3.276   3.221   3.266   3.492   3.749   3.747   3.329   2.662   2.155 
+  4.091   4.504   5.047   5.367   5.287   4.900   4.451   4.134   3.968   3.860   3.750   3.693   3.793   4.069   4.376   4.493   4.293   3.870   3.491   3.410   3.691   4.164   4.548   4.637   4.414   4.024   3.657   3.428   3.331   3.289   3.219   3.083   2.897   2.705   2.550   2.466 
+  4.372   4.568   4.870   5.128   5.188   4.983   4.593   4.220   4.074   4.228   4.561   4.827   4.819   4.500   4.012   3.566   3.316   3.295   3.450   3.704   3.988   4.231   4.352   4.294   4.077   3.812   3.632   3.590   3.607   3.538   3.298   2.940   2.621   2.472   2.490   2.557 
+  5.565   5.160   4.606   4.222   4.167   4.352   4.559   4.620   4.529   4.384   4.257   4.114   3.874   3.516   3.145   2.923   2.948   3.176   3.461   3.678   3.805   3.917   4.089   4.320   4.532   4.640   4.626   4.542   4.461   4.415   4.383   4.324   4.220   4.089   3.971   3.902 
+  6.098   6.229   6.324   6.234   5.996   5.823   5.899   6.185   6.425   6.365   5.968   5.449   5.086   4.997   5.087   5.194   5.259   5.365   5.601   5.931   6.208   6.343   6.434   6.711   7.300   8.031   8.493   8.320   7.489   6.386   5.568   5.423   5.966   6.889   7.779   8.306 
+  4.781   4.966   5.223   5.412   5.463   5.395   5.261   5.092   4.909   4.754   4.696   4.757   4.851   4.804   4.501   4.022   3.633   3.588   3.916   4.375   4.655   4.660   4.621   4.897   5.630   6.554   7.142   7.004   6.197   5.200   4.584   4.633   5.221   5.986   6.601   6.918 
+  6.525   6.852   7.212   7.278   6.974   6.546   6.351   6.546   6.948   7.168   6.912   6.196   5.324   4.658   4.390   4.471   4.705   4.915   5.023   5.046   5.034   5.039   5.115   5.313   5.634   5.990   6.210   6.132   5.708   5.058   4.415   3.999   3.903   4.069   4.332   4.517 
+  5.936   6.012   6.048   5.903   5.529   5.042   4.668   4.605   4.864   5.236   5.413   5.200   4.664   4.090   3.787   3.871   4.204   4.524   4.653   4.598   4.499   4.470   4.516   4.574   4.622   4.712   4.889   5.064   5.026   4.607   3.891   3.242   3.089   3.585   4.443   5.095 
+  3.922   4.731   5.786   6.383   6.181   5.419   4.683   4.444   4.738   5.200   5.402   5.174   4.685   4.251   4.074   4.126   4.244   4.300   4.302   4.336   4.454   4.618   4.749   4.824   4.900   5.039   5.209   5.257   5.014   4.446   3.736   3.206   3.121   3.508   4.115   4.559 
+  7.123   7.300   7.443   7.314   6.876   6.368   6.155   6.451   7.117   7.707   7.745   7.059   5.915   4.855   4.350   4.511   5.048   5.512   5.601   5.322   4.911   4.617   4.537   4.609   4.734   4.875   5.046   5.221   5.289   5.121   4.704   4.200   3.859   3.827   4.031   4.235 
+  6.363   6.917   7.450   7.328   6.429   5.282   4.639   4.873   5.684   6.365   6.365   5.681   4.790   4.232   4.222   4.580   4.959   5.133   5.094   4.962   4.835   4.749   4.720   4.786   4.968   5.205   5.362   5.330   5.125   4.886   4.751   4.731   4.713   4.583   4.357   4.175 
+  6.679   6.289   5.660   5.078   4.861   5.187   5.937   6.711   7.064   6.810   6.148   5.501   5.184   5.183   5.227   5.078   4.769   4.566   4.710   5.183   5.711   6.003   5.975   5.773   5.586   5.466   5.342   5.178   5.097   5.281   5.748   6.225   6.308   5.802   4.948   4.295 
+  5.131   5.360   5.635   5.737   5.586   5.308   5.150   5.294   5.719   6.200   6.459   6.338   5.897   5.353   4.938   4.762   4.786   4.896   5.009   5.130   5.319   5.607   5.939   6.186   6.227   6.044   5.748   5.529   5.542   5.817   6.232   6.587   6.724   6.615   6.375   6.189 
+  6.162   6.030   5.871   5.776   5.729   5.638   5.486   5.400   5.560   5.986   6.445   6.592   6.267   5.673   5.249   5.316   5.797   6.269   6.319   5.896   5.364   5.189   5.556   6.219   6.713   6.736   6.357   5.923   5.763   5.955   6.322   6.620   6.719   6.647   6.517   6.428 
+  5.397   5.523   5.625   5.554   5.321   5.118   5.182   5.599   6.218   6.750   6.967   6.847   6.556   6.295   6.151   6.062   5.920   5.698   5.498   5.473   5.704   6.126   6.558   6.814   6.815   6.611   6.337   6.124   6.045   6.097   6.239   6.416   6.590   6.736   6.842   6.897 
+  3.634   3.165   2.642   2.581   3.223   4.388   5.637   6.575   7.040   7.078   6.814   6.370   5.882   5.527   5.457   5.671   5.970   6.090   5.927   5.657   5.606   5.963   6.577   7.049   7.045   6.570   5.963   5.619   5.695   6.031   6.350   6.505   6.566   6.676   6.872   7.036 
+  2.732   2.844   3.070   3.393   3.767   4.133   4.457   4.736   4.964   5.102   5.096   4.942   4.737   4.646   4.773   5.057   5.294   5.293   5.063   4.842   4.927   5.428   6.147   6.700   6.795   6.439   5.912   5.545   5.488   5.651   5.842   5.950   6.007   6.100   6.246   6.365 
+  2.813   3.095   3.662   4.401   5.036   5.271   5.047   4.647   4.486   4.753   5.218   5.432   5.155   4.610   4.299   4.535   5.124   5.515   5.313   4.669   4.179   4.369   5.216   6.152   6.539   6.194   5.485   4.972   4.928   5.183   5.386   5.381   5.319   5.434   5.751   6.034 
+  4.207   3.926   3.690   3.820   4.305   4.809   5.010   4.925   4.884   5.173   5.694   5.997   5.689   4.834   3.951   3.605   3.938   4.573   4.962   4.856   4.471   4.224   4.326   4.613   4.749   4.573   4.248   4.083   4.225   4.537   4.754   4.746   4.616   4.557   4.637   4.747 
+  3.067   3.889   4.948   5.562   5.498   5.101   4.921   5.198   5.670   5.852   5.512   4.884   4.451   4.506   4.903   5.205   5.075   4.543   3.941   3.601   3.600   3.766   3.879   3.856   3.761   3.678   3.620   3.554   3.490   3.500   3.635   3.833   3.936   3.828   3.564   3.343 
+  4.797   4.257   3.541   3.096   3.114   3.417   3.638   3.526   3.129   2.719   2.562   2.738   3.129   3.557   3.905   4.140   4.256   4.236   4.083   3.877   3.758   3.830   4.050   4.235   4.181   3.830   3.327   2.924   2.800   2.942   3.172   3.278   3.153   2.842   2.495   2.272 
+  3.778   3.761   3.763   3.825   3.957   4.105   4.168   4.048   3.727   3.299   2.930   2.762   2.822   3.004   3.152   3.172   3.107   3.097   3.261   3.591   3.940   4.116   4.010   3.670   3.268   2.993   2.945   3.094   3.322   3.493   3.512   3.351   3.047   2.680   2.353   2.161 
+  4.119   4.279   4.414   4.339   4.047   3.724   3.580   3.658   3.814   3.869   3.789   3.704   3.764   3.970   4.148   4.109   3.823   3.459   3.243   3.282   3.501   3.743   3.907   3.993   4.026   3.973   3.764   3.397   3.010   2.809   2.899   3.166   3.357   3.285   3.001   2.748 
+  3.791   4.096   4.463   4.598   4.373   3.903   3.435   3.164   3.133   3.271   3.497   3.774   4.075   4.339   4.470   4.427   4.273   4.148   4.143   4.222   4.250   4.132   3.922   3.798   3.921   4.295   4.761   5.126   5.313   5.394   5.492   5.653   5.817   5.896   5.874   5.823 
+  4.590   4.044   3.407   3.215   3.647   4.394   4.922   4.895   4.397   3.807   3.471   3.471   3.647   3.804   3.888   3.975   4.145   4.375   4.568   4.656   4.655   4.619   4.565   4.462   4.300   4.163   4.191   4.460   4.881   5.250   5.403   5.357   5.281   5.335   5.523   5.692 
+  1.850   2.253   2.824   3.268   3.430   3.365   3.238   3.170   3.171   3.201   3.276   3.477   3.857   4.343   4.735   4.849   4.672   4.386   4.235   4.334   4.574   4.710   4.544   4.074   3.479   2.997   2.785   2.853   3.100   3.376   3.535   3.468   3.138   2.614   2.069   1.721 
+  3.606   3.611   3.609   3.586   3.535   3.460   3.377   3.306   3.276   3.322   3.484   3.788   4.208   4.651   4.964   5.009   4.750   4.300   3.875   3.672   3.737   3.935   4.041   3.905   3.564   3.219   3.080   3.206   3.461   3.616   3.518   3.197   2.819   2.552   2.445   2.432 
+  5.259   4.738   4.081   3.734   3.829   4.085   4.051   3.509   2.681   2.080   2.128   2.846   3.841   4.596   4.811   4.546   4.107   3.789   3.698   3.752   3.818   3.832   3.821   3.834   3.869   3.869   3.775   3.586   3.356   3.151   2.993   2.853   2.685   2.476   2.269   2.137 
+  3.815   3.770   3.786   3.958   4.247   4.493   4.544   4.393   4.170   4.024   3.979   3.941   3.811   3.617   3.503   3.596   3.860   4.106   4.135   3.910   3.591   3.402   3.458   3.688   3.923   4.036   4.015   3.918   3.779   3.576   3.284   2.946   2.674   2.558   2.585   2.650 
+  5.799   5.191   4.441   4.094   4.327   4.816   5.018   4.618   3.780   3.002   2.735   3.067   3.716   4.276   4.486   4.338   3.989   3.604   3.285   3.084   3.036   3.148   3.365   3.582   3.707   3.737   3.750   3.820   3.928   3.963   3.812   3.468   3.046   2.691   2.482   2.400 
+  5.991   5.421   4.689   4.279   4.365   4.685   4.784   4.393   3.652   2.992   2.798   3.135   3.732   4.221   4.390   4.286   4.097   3.979   3.954   3.956   3.924   3.857   3.782   3.703   3.591   3.427   3.254   3.158   3.206   3.367   3.515   3.494   3.227   2.767   2.284   1.976 
+  5.096   4.759   4.387   4.316   4.609   4.977   4.993   4.456   3.587   2.909   2.875   3.531   4.476   5.138   5.167   4.648   3.994   3.626   3.687   3.998   4.244   4.230   3.983   3.677   3.456   3.337   3.250   3.158   3.110   3.177   3.342   3.451   3.319   2.887   2.319   1.917 
+  4.516   3.948   3.328   3.261   3.943   4.987   5.714   5.673   4.974   4.173   3.835   4.111   4.669   4.992   4.790   4.189   3.589   3.334   3.470   3.769   3.956   3.924   3.774   3.668   3.667   3.681   3.577   3.324   3.032   2.857   2.855   2.922   2.882   2.639   2.280   2.013 
+  3.573   3.132   2.626   2.515   2.982   3.786   4.428   4.514   4.018   3.284   2.772   2.757   3.196   3.823   4.354   4.641   4.682   4.531   4.222   3.790   3.324   2.984   2.917   3.130   3.448   3.610   3.450   3.033   2.616   2.465   2.656   3.023   3.291   3.289   3.072   2.867 
+  4.180   4.174   4.233   4.436   4.775   5.114   5.234   4.969   4.339   3.590   3.064   2.996   3.347   3.833   4.125   4.070   3.779   3.502   3.408   3.459   3.473   3.316   3.042   2.857   2.940   3.284   3.684   3.898   3.818   3.525   3.191   2.938   2.773   2.639   2.511   2.422 
+  2.807   3.218   3.900   4.636   5.215   5.469   5.292   4.660   3.700   2.718   2.110   2.167   2.863   3.825   4.532   4.647   4.226   3.663   3.387   3.563   4.005   4.351   4.348   4.014   3.571   3.252   3.140   3.159   3.184   3.150   3.064   2.959   2.847   2.721   2.595   2.512 
+  2.510   3.014   3.726   4.293   4.558   4.598   4.542   4.400   4.077   3.573   3.106   3.004   3.421   4.162   4.800   5.010   4.807   4.477   4.271   4.179   4.003   3.644   3.283   3.243   3.640   4.191   4.395   3.969   3.127   2.415   2.239   2.504   2.718   2.465   1.812   1.252 
+  4.825   4.710   4.387   3.837   3.256   2.952   3.076   3.439   3.634   3.394   2.857   2.482   2.669   3.411   4.289   4.811   4.788   4.411   4.018   3.780   3.632   3.453   3.276   3.284   3.591   4.046   4.303   4.114   3.564   3.006   2.738   2.732   2.676   2.304   1.688   1.204 
+  5.905   5.570   5.127   4.864   4.919   5.159   5.267   4.971   4.256   3.417   2.872   2.884   3.372   3.972   4.303   4.226   3.923   3.718   3.803   4.100   4.343   4.315   4.030   3.705   3.568   3.668   3.847   3.887   3.690   3.333   2.986   2.766   2.672   2.630   2.587   2.550 
+  4.297   4.625   5.109   5.533   5.778   5.817   5.626   5.125   4.276   3.241   2.419   2.235   2.828   3.884   4.813   5.144   4.835   4.246   3.806   3.679   3.704   3.631   3.393   3.160   3.145   3.363   3.598   3.607   3.347   3.014   2.846   2.905   3.034   3.037   2.883   2.723 
+  4.846   4.996   5.207   5.357   5.367   5.243   5.059   4.907   4.837   4.837   4.862   4.869   4.862   4.896   5.056   5.407   5.943   6.554   7.049   7.225   6.970   6.340   5.552   4.904   4.636   4.821   5.341   5.960   6.436   6.627   6.517   6.192   5.777   5.382   5.087   4.930 
+  5.889   5.912   6.033   6.296   6.624   6.858   6.902   6.824   6.791   6.892   7.007   6.896   6.440   5.835   5.537   5.954   7.120   8.612   9.781  10.139   9.614   8.540   7.419   6.663   6.461   6.787   7.473   8.262   8.875   9.089   8.846   8.290   7.688   7.263   7.077   7.039 
+  3.477   3.491   3.619   3.922   4.294   4.490   4.316   3.823   3.310   3.120   3.384   3.923   4.400   4.602   4.610   4.733   5.242   6.127   7.049   7.545   7.311   6.394   5.182   4.195   3.833   4.199   5.067   6.002   6.568   6.523   5.917   5.038   4.241   3.750   3.570   3.552 
+  1.728   1.928   2.275   2.685   3.058   3.273   3.212   2.840   2.298   1.910   2.010   2.681   3.617   4.281   4.301   3.789   3.304   3.418   4.229   5.239   5.722   5.306   4.270   3.314   2.992   3.302   3.769   3.912   3.654   3.319   3.259   3.484   3.669   3.500   3.017   2.594 
+  3.350   3.351   3.327   3.261   3.169   3.091   3.056   3.064   3.107   3.215   3.451   3.852   4.354   4.782   4.952   4.800   4.454   4.156   4.096   4.282   4.547   4.683   4.589   4.325   4.038   3.848   3.793   3.851   3.991   4.184   4.370   4.447   4.311   3.955   3.512   3.206 
+  4.428   4.133   3.777   3.680   4.031   4.737   5.455   5.826   5.747   5.480   5.457   5.919   6.659   7.150   6.965   6.187   5.408   5.302   6.075   7.271   8.113   8.097   7.369   6.560   6.251   6.531   7.006   7.215   7.027   6.693   6.525   6.568   6.573   6.292   5.771   5.349 
+  2.877   3.222   3.700   4.118   4.504   5.050   5.856   6.753   7.413   7.660   7.640   7.660   7.854   8.034   7.932   7.589   7.472   8.101   9.492  10.960  11.563  10.863   9.334   8.011   7.666   8.212   8.868   8.899   8.256   7.521   7.269   7.475   7.560   7.004   5.933   5.064 
+  5.684   5.668   5.665   5.777   6.151   6.844   7.689   8.335   8.523   8.349   8.248   8.641   9.516  10.383  10.681  10.312   9.801   9.868  10.759  11.965  12.603  12.163  10.955   9.837   9.469   9.780  10.110   9.885   9.173   8.579   8.621   9.188   9.623   9.364   8.506   7.748 
+  7.932   7.993   8.006   7.900   7.772   7.853   8.314   9.110   9.998  10.721  11.183  11.446  11.599  11.653  11.578  11.446  11.462  11.827  12.510  13.185  13.443  13.111  12.400  11.728  11.351  11.159  10.828  10.186   9.441   9.043   9.269   9.942  10.552  10.679  10.350   9.984 
+ 10.422  10.704  11.134  11.555  11.902  12.223  12.592  13.023  13.454  13.809  14.052  14.176  14.166  13.997  13.703  13.422  13.336  13.520  13.830  13.985  13.791  13.330  12.894  12.691  12.596  12.206  11.218   9.819   8.684   8.508   9.426  10.811  11.698  11.519  10.551   9.686 
+ 12.183  12.317  12.542  12.815  13.152  13.616  14.253  15.014  15.738  16.215  16.303  16.018  15.539  15.126  14.996  15.209  15.641  16.040  16.159  15.888  15.314  14.650  14.082  13.630  13.143  12.442  11.517  10.615  10.099  10.172  10.665  11.085  10.937  10.086   8.908   8.065 
+ 12.554  12.543  12.518  12.508  12.602  12.954  13.708  14.866  16.192  17.251  17.632  17.227  16.363  15.644  15.574  16.215  17.147  17.788  17.811  17.350  16.825  16.548  16.458  16.195  15.448  14.271  13.079  12.338  12.207  12.427  12.527  12.157  11.299  10.220   9.275   8.737 
+ 11.909  11.931  11.988  12.107  12.333  12.760  13.515  14.651  16.013  17.198  17.738  17.430  16.551  15.755  15.639  16.313  17.310  17.950  17.863  17.242  16.612  16.332  16.277  15.985  15.124  13.846  12.693  12.142  12.201  12.407  12.236  11.517  10.525   9.688   9.230   9.080 
+ 12.514  12.436  12.357  12.378  12.575  13.017  13.781  14.896  16.216  17.363  17.881  17.556  16.664  15.870  15.791  16.523  17.548  18.136  17.923  17.182  16.540  16.401  16.580  16.494  15.726  14.449  13.313  12.894  13.192  13.627  13.521  12.624  11.250   9.958   9.114   8.749 
+ 12.505  12.606  12.738  12.844  12.990  13.365  14.167  15.397  16.761  17.766  18.018  17.520  16.723  16.252  16.470  17.202  17.867  17.923  17.297  16.436  15.933  16.025  16.397  16.445  15.795  14.637  13.591  13.218  13.575  14.167  14.313  13.615  12.178  10.478   9.049   8.256 
+ 13.057  13.257  13.443  13.451  13.425  13.754  14.728  16.194  17.570  18.245  18.048  17.389  16.930  17.067  17.624  18.033  17.802  16.918  15.844  15.162  15.151  15.615  16.054  16.014  15.362  14.335  13.383  12.911  13.061  13.611  14.048  13.799  12.556  10.514   8.366   6.989 
+ 13.588  13.674  13.799  13.970  14.319  15.005  16.014  17.058  17.714  17.745  17.308  16.862  16.797  17.105  17.365  17.084  16.122  14.837  13.851  13.610  14.082  14.808  15.219  14.975  14.116  12.969  11.952  11.390  11.388  11.783  12.171  12.064  11.147   9.525   7.756   6.600 
+ 14.418  13.706  12.894  12.696  13.347  14.439  15.291  15.510  15.256  15.016  15.119  15.453  15.599  15.234  14.421  13.539  12.949  12.735  12.734  12.793  12.951  13.362  14.022  14.594  14.553  13.582  11.894  10.194   9.250   9.368  10.170  10.827  10.618   9.417   7.793   6.649 
+ 14.067  13.920  13.634  13.190  12.546  11.735  10.973  10.634  11.028  12.120  13.427  14.258  14.163  13.261  12.163  11.524  11.569  11.979  12.233  12.110  11.912  12.181  13.138  14.322  14.799  13.838  11.549   8.966   7.426   7.669   9.297  11.010  11.483  10.283   8.169   6.564 
+ 14.145  13.835  13.375  12.908  12.426  11.843  11.221  10.877  11.189  12.212  13.480  14.239  13.991  12.908  11.726  11.175  11.419  11.981  12.226  11.968  11.650  11.927  12.992  14.265  14.732  13.717  11.453   9.015   7.618   7.812   9.142  10.493  10.849   9.943   8.387   7.221 
+ 13.936  13.722  13.415  13.066  12.542  11.689  10.651   9.975  10.263  11.612  13.350  14.415  14.141  12.797  11.390  10.854  11.317  12.088  12.347  11.926  11.452  11.730  12.918  14.259  14.624  13.433  11.166   9.056   8.212   8.869  10.299  11.375  11.325  10.162   8.576   7.477 
+ 13.851  13.674  13.436  13.157  12.635  11.650  10.351   9.392   9.529  10.951  12.939  14.265  14.094  12.641  10.999  10.256  10.649  11.491  11.895  11.626  11.288  11.683  12.940  14.248  14.441  12.977  10.458   8.248   7.512   8.418  10.089  11.267  11.132   9.750   7.925   6.675 
+ 13.791  13.674  13.465  13.121  12.498  11.539  10.498   9.937  10.358  11.716  13.277  14.055  13.532  12.069  10.637  10.052  10.379  11.004  11.283  11.162  11.177  11.845  13.028  13.887  13.526  11.779   9.452   7.788   7.592   8.684  10.082  10.706  10.052   8.402   6.561   5.380 
+ 14.151  13.432  12.762  12.937  13.993  15.139  15.458  14.736  13.646  13.125  13.547  14.429  14.906  14.494  13.438  12.397  11.833  11.713  11.736  11.759  11.931  12.405  12.972  13.084  12.321  10.856   9.458   8.933   9.497  10.599  11.363  11.235  10.301   9.083   8.095   7.583 
+ 13.551  13.131  12.765  13.011  14.053  15.517  16.715  17.114  16.686  15.894  15.351  15.420  16.014  16.695  16.968  16.561  15.556  14.332  13.370  13.026  13.348  14.030  14.554  14.460  13.624  12.355  11.236  10.784  11.129  11.927  12.550  12.444  11.431   9.798   8.148   7.122 
+ 12.237  12.494  12.896  13.379  14.046  15.049  16.329  17.465  17.886  17.323  16.124  15.120  15.055  16.013  17.319  18.008  17.525  16.112  14.612  13.847  14.068  14.855  15.470  15.377  14.536  13.350  12.363  11.951  12.149  12.664  13.009  12.722  11.598   9.841   8.033   6.885 
+ 12.956  12.875  12.854  13.110  13.825  15.003  16.379  17.469  17.784  17.130  15.810  14.538  14.078  14.764  16.249  17.665  18.153  17.420  15.931  14.594  14.141  14.633  15.458  15.800  15.222  13.945  12.638  11.905  11.879  12.203  12.347  11.999  11.216  10.301   9.561   9.168 
+ 13.638  13.092  12.564  12.718  13.778  15.344  16.685  17.233  16.881  15.931  14.817  13.902  13.450  13.650  14.540  15.856  17.006  17.332  16.562  15.088  13.779  13.385  13.978  14.865  15.079  14.093  12.211  10.352   9.418   9.708  10.789  11.849  12.237  11.827  11.008  10.385 
+ 13.051  12.787  12.589  12.806  13.477  14.272  14.747  14.673  14.137  13.377  12.547  11.668  10.792  10.178  10.213  11.107  12.616  14.084  14.843  14.669  13.920  13.240  13.065  13.327  13.573  13.367  12.638  11.708  11.011  10.776  10.903  11.091  11.078  10.808  10.427  10.158 
+ 11.708  10.885   9.842   9.336   9.727  10.740  11.700  12.005  11.495  10.460   9.368   8.580   8.233   8.326   8.808   9.580  10.431  11.041  11.131  10.672   9.956   9.444   9.461   9.979  10.645  11.049  11.006  10.661  10.327  10.222  10.291  10.264   9.878   9.106   8.216   7.620 
+  8.322   8.447   8.546   8.515   8.478   8.735   9.484  10.541  11.353  11.348  10.383   8.930   7.814   7.664   8.482   9.647  10.359  10.185   9.330   8.434   8.106   8.508   9.300   9.919   9.962   9.400   8.514   7.652   7.025   6.652   6.458   6.383   6.426   6.582   6.791   6.941 
+  7.375   7.489   7.435   7.045   6.627   6.833   8.077  10.014  11.621  11.901  10.665   8.735   7.372   7.367   8.529   9.916  10.592  10.272   9.397   8.684   8.586   9.068   9.778  10.354  10.612  10.523  10.129   9.511   8.829   8.293   8.066   8.140   8.347   8.489   8.498   8.450 
+  7.246   6.998   6.636   6.403   6.567   7.286   8.474   9.752  10.586  10.556   9.633   8.251   7.112   6.781   7.348   8.361   9.114   9.103   8.349   7.366   6.807   7.030   7.873   8.792   9.230   8.957   8.164   7.284   6.704   6.566   6.758   7.061   7.297   7.407   7.423   7.409 
+  7.107   7.554   8.180   8.673   8.927   9.094   9.406   9.933  10.503  10.844  10.815  10.520  10.207  10.076  10.148  10.314  10.467  10.593  10.743  10.948  11.188  11.455  11.816  12.397  13.256  14.263  15.109  15.468  15.194  14.409  13.409  12.490  11.811  11.382  11.141  11.033 
+  6.122   6.758   7.710   8.567   9.095   9.341   9.516   9.774  10.090  10.318  10.347  10.202  10.008   9.873   9.811   9.775   9.753   9.820  10.089  10.611  11.325  12.111  12.883  13.636  14.397  15.132  15.702  15.927  15.711  15.120  14.359  13.666  13.195  12.969  12.911  12.917 
+  7.312   7.308   7.321   7.363   7.429   7.510   7.622   7.787   7.990   8.135   8.101   7.866   7.591   7.568   8.020   8.911   9.945  10.778  11.294  11.692  12.309  13.304  14.488  15.444  15.849  15.722  15.386  15.195  15.265  15.442  15.495  15.346  15.123  15.005  15.044  15.128 
+  7.998   7.997   8.250   8.958   9.970  10.822  11.102  10.804  10.343  10.186  10.460  10.885  11.093  11.008  10.938  11.280  12.132  13.186  13.985  14.308  14.323  14.377  14.658  15.041  15.250  15.150  14.887  14.735  14.840  15.100  15.285  15.265  15.106  14.973  14.949  14.982 
+ 11.341  11.387  11.471  11.522  11.390  10.941  10.198   9.399   8.859   8.750   8.982   9.307   9.563   9.828  10.339  11.239  12.390  13.445  14.102  14.326  14.330  14.342  14.402  14.373  14.144  13.810  13.627  13.775  14.163  14.472  14.414  13.975  13.412  13.024  12.908  12.934 
+ 14.284  14.704  15.002  14.547  13.157  11.275   9.656   8.847   8.875   9.351   9.852  10.227  10.612  11.202  12.022  12.895  13.579  13.932  13.943  13.678  13.216  12.654  12.137  11.826  11.801  11.976  12.147  12.138  11.946  11.737  11.698  11.884  12.182  12.427  12.539  12.559 
+ 14.453  14.415  14.195  13.716  13.135  12.744  12.662  12.657  12.324  11.504  10.543  10.091  10.577  11.810  13.084  13.726  13.594  13.113  12.821  12.882  12.992  12.742  12.056  11.278  10.844  10.875  11.097  11.145  10.928  10.698  10.764  11.151  11.563  11.678  11.468  11.215 
+ 17.038  16.669  15.951  14.993  14.028  13.313  12.944  12.764  12.482  11.932  11.263  10.861  11.047  11.791  12.682  13.211  13.125  12.592  12.036  11.799  11.902  12.085  12.044  11.674  11.110  10.594  10.283  10.176  10.168  10.161  10.122  10.073  10.034  10.010   9.992   9.981 
+ 16.986  16.570  15.847  14.997  14.210  13.587  13.086  12.570  11.938  11.260  10.764  10.686  11.072  11.715  12.280  12.525  12.432  12.160  11.869  11.607  11.338  11.063  10.883  10.901  11.079  11.201  11.024  10.508   9.891   9.513   9.525   9.732   9.748   9.336   8.644   8.110 
+ 17.500  16.798  15.754  14.824  14.249  13.943  13.659  13.234  12.710  12.245  11.937  11.745  11.577  11.432  11.419  11.630  11.986  12.229  12.102  11.568  10.866  10.357  10.257  10.497  10.797  10.896  10.725  10.409  10.120   9.928   9.765   9.513   9.119   8.639   8.204   7.946 
+ 15.508  15.596  15.525  15.044  14.146  13.096  12.225  11.681  11.379  11.164  10.992  10.949  11.093  11.311  11.364  11.096  10.602  10.161   9.998  10.081  10.162  10.031   9.712   9.433   9.388   9.533   9.632   9.496   9.185   8.937   8.909   8.973   8.814   8.234   7.408   6.797 
+ 14.223  13.870  13.293  12.627  11.898  11.042  10.069   9.189   8.776   9.112  10.128  11.342  12.108  12.021  11.184  10.140   9.508   9.573  10.133  10.682  10.792  10.387   9.745   9.254   9.129   9.292   9.489   9.505   9.298   8.985   8.702   8.491   8.298   8.066   7.815   7.645 
+ 14.205  13.488  12.479  11.659  11.170  10.749  10.073   9.169   8.519   8.709   9.907  11.624  12.968  13.242  12.407  11.083  10.088   9.897  10.388  11.033  11.319  11.070  10.478   9.884   9.518   9.392   9.368   9.299   9.123   8.868   8.592   8.337   8.116   7.931   7.793   7.717 
+ 10.845  10.535  10.187  10.038   9.993   9.677   8.822   7.642   6.820   7.054   8.516  10.660  12.550  13.434  13.142  12.062  10.789   9.774   9.193   9.020   9.144   9.409   9.617   9.591   9.292   8.882   8.616   8.625   8.778   8.777   8.417   7.784   7.193   6.925   6.990   7.145 
+ 10.398  10.398  10.510  10.791  11.074  11.011  10.322   9.080   7.767   7.022   7.234   8.271   9.557  10.430  10.536   9.988   9.200   8.572   8.256   8.156   8.106   8.045   8.036   8.155   8.357   8.475   8.335   7.908   7.343   6.861   6.595   6.509   6.452   6.306   6.083   5.913 
+  7.112   7.319   7.665   8.038   8.310   8.338   7.995   7.232   6.190   5.231   4.823   5.270   6.470   7.889   8.832   8.856   8.039   6.902   6.056   5.812   6.048   6.379   6.480   6.285   5.962   5.717   5.631   5.639   5.638   5.587   5.520   5.487   5.493   5.508   5.508   5.498 
+  6.143   6.405   6.729   6.865   6.688   6.266   5.775   5.357   5.052   4.850   4.792   4.997   5.549   6.350   7.082   7.368   7.038   6.301   5.646   5.521   5.999   6.710   7.087   6.778   5.893   4.926   4.387   4.451   4.874   5.228   5.249   5.021   4.850   4.969   5.326   5.635 
+  4.691   4.899   5.267   5.657   5.851   5.665   5.113   4.447   4.010   3.993   4.316   4.735   5.081   5.402   5.859   6.495   7.112   7.410   7.268   6.894   6.670   6.824   7.227   7.511   7.411   7.002   6.604   6.452   6.449   6.259   5.658   4.794   4.101   3.923   4.204   4.535 
+  5.750   5.230   4.770   4.964   5.832   6.766   7.052   6.489   5.527   4.834   4.734   5.038   5.361   5.566   5.869   6.529   7.483   8.335   8.709   8.596   8.340   8.266   8.355   8.311   7.946   7.455   7.250   7.497   7.826   7.596   6.509   5.000   3.968   4.025   4.940   5.803 
+  5.873   5.138   4.357   4.319   5.241   6.600   7.572   7.681   7.104   6.419   6.099   6.206   6.495   6.747   6.964   7.281   7.748   8.244   8.613   8.832   9.014   9.240   9.429   9.414   9.170   8.912   8.918   9.198   9.373   8.947   7.786   6.356   5.438   5.506   6.311   7.058 
+  6.374   5.866   5.293   5.166   5.649   6.474   7.225   7.695   7.993   8.318   8.682   8.875   8.712   8.302   8.046   8.331   9.195  10.275  11.068  11.294  11.024  10.533  10.048   9.652   9.368   9.265   9.404   9.679   9.762   9.308   8.285   7.113   6.423   6.564   7.296   7.947 
+  8.907   8.636   8.358   8.383   8.824   9.514  10.148  10.497  10.536  10.382  10.156   9.900   9.635   9.460   9.561  10.090  10.996  11.982  12.647  12.722  12.226  11.433  10.675  10.156   9.885   9.765   9.713   9.719   9.796   9.907   9.930   9.726   9.236   8.547   7.872   7.455 
+  7.268   7.340   7.457   7.593   7.754   7.993   8.393   9.020   9.862  10.784  11.553  11.931  11.813  11.333  10.844  10.747  11.252  12.216  13.189  13.669  13.414  12.592  11.655  11.038  10.884  11.011  11.123  11.067  10.931  10.903  11.036  11.141  10.936  10.307   9.475   8.883 
+  8.361   8.050   7.649   7.451   7.640   8.211   9.033   9.981  11.006  12.076  13.049  13.641  13.583  12.872  11.922  11.411  11.859  13.225  14.843  15.802  15.545  14.246  12.678  11.655  11.482  11.811  12.004  11.685  11.009  10.475  10.452  10.860  11.265  11.290  10.947  10.600 
+  8.685   8.312   7.967   8.110   8.870   9.929  10.784  11.165  11.254  11.498  12.186  13.136  13.802  13.738  13.027  12.315  12.354  13.403  14.971  16.135  16.201  15.202  13.834  12.899  12.694  12.862  12.767  12.087  11.085  10.377  10.387  11.000  11.683  11.957  11.776  11.502 
+  8.392   8.822   9.358   9.630   9.542   9.348   9.447  10.068  11.108  12.233  13.104  13.564  13.649  13.507  13.323  13.288  13.558  14.167  14.944  15.554  15.686  15.282  14.577  13.922  13.493  13.174  12.715  12.032  11.350  11.040  11.276  11.830  12.220  12.112  11.605  11.149 
+  9.564   9.699   9.871   9.956   9.892   9.744   9.706  10.009  10.783  11.947  13.189  14.100  14.394  14.105  13.609  13.405  13.791  14.631  15.418  15.622  15.072  14.099  13.288  13.034  13.236  13.405  13.090  12.290  11.484  11.242  11.729  12.529  12.960  12.627  11.760  11.038 
+ 11.267  11.479  11.821  12.176  12.459  12.674  12.916  13.307  13.888  14.548  15.044  15.146  14.808  14.256  13.886  14.023  14.677  15.499  15.983  15.800  15.027  14.090  13.445  13.243  13.237  13.011  12.370  11.554  11.085  11.342  12.198  13.035  13.160  12.336  11.002  10.006 
+ 12.025  12.225  12.520  12.811  13.120  13.579  14.300  15.243  16.202  16.913  17.212  17.103  16.726  16.281  15.966  15.935  16.243  16.772  17.235  17.293  16.772  15.807  14.763  13.974  13.489  13.076  12.486  11.758  11.255  11.355  12.045  12.811  12.966  12.205  10.909   9.920 
+ 12.034  12.338  12.700  12.892  12.972  13.271  14.107  15.451  16.868  17.795  17.934  17.443  16.796  16.446  16.567  17.040  17.617  18.089  18.335  18.283  17.894  17.191  16.292  15.365  14.535  13.832  13.253  12.861  12.789  13.096  13.583  13.797  13.297  12.019  10.441   9.353 
+ 11.773  12.111  12.595  13.005  13.301  13.674  14.405  15.594  16.990  18.074  18.377  17.821  16.825  16.063  16.031  16.726  17.679  18.300  18.291  17.789  17.172  16.705  16.331  15.778  14.872  13.760  12.856  12.534  12.833  13.400  13.726  13.464  12.616  11.479  10.452   9.858 
+ 12.288  12.679  13.191  13.543  13.724  14.030  14.804  16.080  17.450  18.295  18.214  17.342  16.285  15.726  15.982  16.830  17.710  18.137  17.995  17.538  17.113  16.862  16.620  16.088  15.118  13.903  12.907  12.586  13.078  14.072  14.935  15.044  14.124  12.420  10.598   9.432 
+ 12.271  12.851  13.550  13.917  13.988  14.276  15.256  16.825  18.251  18.727  18.042  16.795  15.946  16.088  17.027  18.015  18.368  17.962  17.220  16.677  16.542  16.591  16.411  15.742  14.639  13.417  12.472  12.130  12.518  13.479  14.541  15.060  14.549  13.034  11.156   9.869 
+ 12.311  13.077  13.987  14.452  14.532  14.885  16.040  17.726  18.951  18.840  17.469  15.909  15.381  16.261  17.795  18.760  18.465  17.226  15.981  15.462  15.676  16.061  16.040  15.423  14.378  13.164  12.000  11.148  10.970  11.712  13.114  14.314  14.314  12.760  10.384   8.625 
+ 12.862  13.434  14.221  14.868  15.370  16.027  17.044  18.184  18.867  18.670  17.766  16.862  16.638  17.171  17.860  17.920  17.038  15.609  14.415  14.018  14.401  15.067  15.437  15.170  14.251  12.897  11.497  10.566  10.602  11.761  13.571  15.007  15.063  13.486  11.095   9.342 
+ 13.335  13.596  14.194  15.172  16.403  17.555  18.225  18.182  17.564  16.842  16.541  16.871  17.551  17.978  17.641  16.482  14.934  13.614  12.927  12.881  13.205  13.610  13.930  14.055  13.823  13.075  11.889  10.749  10.371  11.195  12.918  14.521  14.892  13.653  11.532   9.925 
+ 13.078  13.531  14.457  15.758  17.106  18.010  18.080  17.328  16.245  15.525  15.602  16.317  17.004  16.962  15.969  14.441  13.100  12.421  12.325  12.354  12.165  11.863  11.858  12.365  13.049  13.220  12.468  11.188  10.434  11.101  13.069  15.095  15.643  14.090  11.328   9.208 
+ 12.630  13.484  14.941  16.522  17.646  17.862  17.130  15.904  14.928  14.782  15.481  16.434  16.821  16.160  14.634  12.940  11.770  11.337  11.308  11.200  10.854  10.578  10.817  11.630  12.494  12.660  11.823  10.518   9.842  10.617  12.657  14.752  15.488  14.313  12.020  10.233 
+ 12.463  13.471  15.039  16.494  17.267  17.152  16.378  15.459  14.908  14.956  15.436  15.887  15.835  15.086  13.844  12.562  11.630  11.122  10.813  10.449  10.044   9.902  10.323  11.209  11.977  11.929  10.870   9.426   8.728   9.587  11.782  14.065  14.990  13.976  11.797  10.067 
+ 12.446  13.588  15.213  16.445  16.740  16.161  15.231  14.527  14.338  14.586  14.975  15.197  15.059  14.508  13.618  12.559  11.533  10.692  10.078   9.666   9.468   9.578  10.054  10.728  11.146  10.820   9.666   8.267   7.621   8.449  10.553  12.792  13.809  13.025  11.120   9.573 
+ 12.054  13.431  15.255  16.371  16.216  15.116  13.893  13.198  13.139  13.433  13.799  14.164  14.533  14.748  14.480  13.506  11.989  10.460   9.474   9.244   9.568  10.056  10.411  10.473  10.108   9.167   7.683   6.125   5.329   5.985   8.015  10.419  11.868  11.662  10.286   9.050 
+ 11.819  13.269  15.151  16.207  15.849  14.489  13.082  12.327  12.227  12.309  12.206  12.031  12.201  12.924  13.866  14.335  13.837  12.515  11.094  10.364  10.625  11.496  12.208  12.102  10.998   9.234   7.437   6.215   5.922   6.558   7.793   9.110  10.041  10.383  10.281  10.087 
+ 12.017  13.266  14.882  15.769  15.413  14.192  12.968  12.366  12.315  12.240  11.665  10.706  10.015  10.227  11.400  12.907  13.891  13.900  13.201  12.533  12.506  13.125  13.780  13.705  12.534  10.569   8.588   7.372   7.266   8.056   9.163   9.999  10.254   9.978   9.477   9.111 
+ 11.946  12.925  14.191  14.882  14.582  13.551  12.436  11.727  11.446  11.266  10.900  10.383  10.015  10.045  10.436  10.915  11.249  11.477  11.881  12.708  13.890  15.007  15.510  15.052  13.692  11.861  10.142   9.024   8.725   9.146   9.936  10.656  10.968  10.800  10.364  10.012 
+ 11.767  13.019  14.487  14.953  13.981  12.192  10.665  10.042  10.117  10.201   9.840   9.201   8.821   9.031   9.629  10.101  10.135   9.918   9.955  10.614  11.832  13.195  14.261  14.799  14.774  14.225  13.242  12.078  11.178  10.972  11.526  12.382  12.831  12.459  11.511  10.721 
+ 11.936  12.924  14.065  14.377  13.520  12.017  10.756  10.250  10.290  10.255   9.732   8.880   8.232   8.173   8.596   9.039   9.134   8.950   8.917   9.437  10.536  11.843  12.861  13.280  13.100  12.544  11.912  11.482  11.457  11.892  12.605  13.206  13.293  12.743  11.855  11.191 
+ 12.596  13.559  14.578  14.626  13.429  11.660  10.322   9.894  10.020   9.946   9.284   8.347   7.809   8.036   8.740   9.264   9.212   8.811   8.698   9.343  10.636  11.982  12.772  12.804  12.326  11.769  11.448  11.480  11.857  12.514  13.289  13.887  13.991  13.500  12.687  12.073 
+ 13.158  13.884  14.646  14.654  13.687  12.248  11.110  10.666  10.671  10.554   9.984   9.155   8.561   8.521   8.889   9.236   9.269   9.117   9.202   9.855  11.015  12.267  13.147  13.440  13.257  12.904  12.704  12.890  13.550  14.576  15.617  16.161  15.800  14.549  12.955  11.851 
+ 13.658  14.059  14.437  14.318  13.594  12.591  11.751  11.239  10.837  10.215   9.311   8.447   8.070   8.362   9.083   9.769  10.127  10.246  10.484  11.134  12.171  13.277  14.078  14.374  14.226  13.878  13.642  13.799  14.503  15.659  16.864  17.517  17.149  15.778  14.023  12.807 
+ 13.660  14.156  14.644  14.553  13.723  12.516  11.483  10.899  10.596  10.212   9.585   8.924   8.596   8.754   9.171   9.449   9.398   9.246   9.469  10.396  11.910  13.495  14.567  14.832  14.427  13.802  13.472  13.786  14.797  16.225  17.527  18.096  17.562  16.060  14.255  13.037 
+ 14.084  14.470  14.834  14.693  13.885  12.679  11.552  10.817  10.439  10.160   9.788   9.372   9.121   9.163   9.389   9.547   9.500   9.396   9.607  10.439  11.856  13.442  14.618  14.992  14.592  13.858  13.408  13.711  14.843  16.423  17.766  18.200  17.413  15.656  13.679  12.386 
+ 14.149  14.471  14.771  14.640  13.927  12.855  11.841  11.180  10.856  10.616  10.227   9.682   9.187   8.969   9.075   9.348   9.592   9.773  10.071  10.734  11.834  13.142  14.213  14.661  14.417  13.817  13.427  13.726  14.809  16.302  17.515  17.799  16.887  15.073  13.100  11.829 
+ 13.986  14.368  14.764  14.736  14.120  13.135  12.181  11.514  11.075  10.611   9.960   9.238   8.754   8.738   9.128   9.609   9.880   9.928  10.059  10.651  11.820  13.258  14.400  14.788  14.390  13.646  13.199  13.504  14.551  15.868  16.778  16.760  15.704  13.969  12.216  11.127 
+ 13.719  14.187  14.753  14.951  14.534  13.613  12.522  11.552  10.791  10.166   9.621   9.228   9.130   9.371   9.788  10.101  10.133   9.991  10.033  10.620  11.827  13.331  14.567  15.063  14.736  13.961  13.365  13.474  14.404  15.770  16.864  17.018  15.960  13.995  11.893  10.549 
+ 13.208  13.894  14.764  15.183  14.806  13.759  12.459  11.282  10.378   9.721   9.283   9.110   9.243   9.581   9.892   9.977   9.862   9.811  10.141  10.984  12.190  13.418  14.339  14.763  14.676  14.210  13.636  13.324  13.598  14.500  15.623  16.227  15.681  13.947  11.757  10.243 
+ 12.931  13.730  14.781  15.365  15.059  13.941  12.447  11.038   9.960   9.247   8.856   8.768   8.953   9.295   9.606   9.751   9.779   9.916  10.401  11.305  12.480  13.656  14.589  15.140  15.260  14.972  14.408  13.846  13.631  13.958  14.659  15.216  15.085  14.113  12.737  11.743 
+ 12.523  13.565  14.885  15.529  15.028  13.629  11.985  10.649   9.817   9.454   9.513   9.968  10.646  11.136  11.012  10.234   9.320   9.046   9.849  11.460  13.101  14.104  14.395  14.413  14.599  14.959  15.133  14.875  14.412  14.276  14.745  15.460  15.653  14.848  13.384  12.233 
+ 12.311  13.437  14.807  15.381  14.768  13.425  12.148  11.381  10.980  10.567  10.045   9.706   9.868  10.440  10.936  10.934  10.538  10.343  10.905  12.207  13.641  14.525  14.655  14.392  14.226  14.295  14.332  14.071  13.643  13.512  14.002  14.886  15.503  15.345  14.553  13.834 
+ 11.530  12.531  13.790  14.435  14.119  13.185  12.239  11.601  11.158  10.667  10.122   9.775   9.808  10.072  10.222  10.133  10.135  10.743  12.094  13.668  14.634  14.578  13.902  13.491  13.890  14.780  15.253  14.685  13.372  12.320  12.366  13.434  14.630  15.074  14.671  14.110 
+ 11.024  12.296  13.912  14.761  14.393  13.239  12.100  11.441  11.146  10.845  10.413  10.080  10.098  10.389  10.589  10.479  10.321  10.671  11.813  13.357  14.465  14.553  13.814  13.056  12.968  13.509  13.999  13.819  13.048  12.421  12.633  13.682  14.872  15.459  15.316  14.963 
+ 10.810  12.063  13.743  14.791  14.625  13.451  11.986  10.903  10.453  10.475  10.667  10.813  10.821  10.664  10.373  10.116  10.190  10.842  12.009  13.251  14.005  14.000  13.481  13.007  12.989  13.372  13.747  13.787  13.583  13.566  14.070  14.983  15.811  16.114  15.898  15.583 
+ 11.597  12.744  14.213  15.001  14.670  13.576  12.455  11.807  11.603  11.513  11.307  11.035  10.850  10.761  10.631  10.428  10.407  10.955  12.170  13.624  14.586  14.597  13.871  13.130  12.999  13.487  14.035  14.079  13.596  13.122  13.252  14.095  15.202  15.995  16.262  16.237 
+ 11.492  12.847  14.576  15.497  15.104  13.828  12.536  11.786  11.520  11.359  11.099  10.887  10.946  11.223  11.404  11.285  11.090  11.340  12.330  13.738  14.792  14.898  14.162  13.296  12.990  13.337  13.839  13.969  13.723  13.597  14.045  14.961  15.719  15.766  15.164  14.555 
+ 12.614  13.667  14.940  15.456  14.851  13.567  12.372  11.702  11.428  11.181  10.822  10.560  10.638  10.975  11.193  11.041  10.742  10.884  11.867  13.462  14.902  15.492  15.173  14.524  14.212  14.415  14.759  14.785  14.453  14.180  14.387  15.028  15.599  15.617  15.112  14.605 
+ 12.573  13.797  15.306  15.977  15.357  13.920  12.569  11.878  11.745  11.686  11.389  10.984  10.806  10.975  11.251  11.320  11.197  11.290  12.027  13.385  14.799  15.562  15.378  14.578  13.826  13.600  13.894  14.364  14.692  14.819  14.860  14.870  14.753  14.404  13.905  13.529 
+ 13.303  14.313  15.520  15.959  15.261  13.882  12.643  12.043  11.933  11.796  11.293  10.570  10.057  10.015  10.295  10.530  10.549  10.603  11.149  12.407  14.083  15.520  16.149  15.870  15.064  14.293  13.945  14.090  14.555  15.093  15.477  15.530  15.160  14.435  13.618  13.076 
+ 13.724  14.550  15.500  15.742  14.968  13.582  12.319  11.643  11.465  11.357  11.007  10.480  10.075   9.992  10.146  10.313  10.416  10.650  11.309  12.488  13.945  15.239  16.015  16.179  15.870  15.317  14.758  14.433  14.552  15.147  15.906  16.219  15.527  13.785  11.655  10.193 
+ 13.871  14.530  15.270  15.401  14.652  13.347  12.096  11.315  10.975  10.757  10.415   9.995   9.736   9.800  10.109  10.444  10.687  10.958  11.513  12.502  13.804  15.078  15.952  16.213  15.873  15.141  14.355  13.902  14.073  14.867  15.872  16.395  15.861  14.247  12.227  10.835 
+ 14.107  14.506  14.919  14.882  14.223  13.175  12.164  11.479  11.101  10.808  10.431  10.013   9.747   9.776  10.060  10.433  10.776  11.144  11.721  12.645  13.852  15.057  15.880  16.030  15.452  14.376  13.264  12.646  12.877  13.903  15.201  15.991  15.676  14.252  12.393  11.099 
+ 14.265  14.493  14.678  14.505  13.870  12.960  12.092  11.470  11.077  10.750  10.377   9.996   9.751   9.753   9.997  10.400  10.900  11.520  12.316  13.286  14.301  15.137  15.555  15.393  14.639  13.485  12.329  11.680  11.926  13.059  14.551  15.554  15.376  13.966  12.030  10.660 
+ 14.258  14.315  14.316  14.112  13.615  12.871  12.040  11.305  10.770  10.410  10.128   9.861   9.659   9.665  10.001  10.660  11.486  12.284  12.946  13.509  14.055  14.562  14.818  14.535  13.584  12.197  10.952  10.491  11.142  12.667  14.332  15.284  15.015  13.657  11.927  10.747 
+ 14.177  14.073  13.934  13.774  13.465  12.831  11.853  10.782   9.988   9.682   9.742   9.854   9.833   9.811  10.107  10.872  11.869  12.631  12.865  12.731  12.690  13.038  13.550  13.599  12.702  11.035   9.444   8.907   9.847  11.809  13.755  14.706  14.293  12.867  11.219  10.155 
+ 13.993  13.825  13.642  13.523  13.294  12.662  11.546  10.280   9.412   9.256   9.617   9.992  10.065  10.014  10.302  11.138  12.151  12.653  12.286  11.444  10.996  11.508  12.650  13.375  12.775  10.904   8.849   7.956   8.844  10.978  13.100  14.098  13.647  12.222  10.662   9.691 
+ 13.722  13.709  13.670  13.525  13.111  12.318  11.242  10.206   9.555   9.391   9.510   9.630   9.703   9.977  10.715  11.797  12.655  12.678  11.783  10.615  10.116  10.744  12.021  12.831  12.291  10.500   8.539   7.703   8.580  10.662  12.746  13.744  13.302  11.854  10.232   9.207 
+ 13.574  13.668  13.732  13.579  13.080  12.252  11.285  10.433   9.861   9.553   9.390   9.322   9.471  10.035  11.029  12.113  12.716  12.443  11.440  10.385  10.033  10.629  11.658  12.190  11.580  10.001   8.387   7.810   8.747  10.767  12.823  13.902  13.586  12.196  10.533   9.441 
+ 13.493  13.708  13.927  13.864  13.343  12.429  11.395  10.553  10.059   9.837   9.708   9.604   9.675  10.165  11.130  12.253  12.964  12.841  11.982  11.016  10.680  11.240  12.229  12.735  12.079  10.375   8.550   7.762   8.636  10.833  13.233  14.596  14.262  12.485  10.253   8.748 
+ 13.590  13.834  14.105  14.102  13.638  12.764  11.752  10.922  10.436  10.209  10.033   9.803   9.662   9.910  10.719  11.886  12.872  13.153  12.627  11.748  11.222  11.463  12.231  12.757  12.315  10.819   8.995   7.966   8.511  10.513  12.962  14.533  14.366  12.567  10.155   8.483 
+ 13.704  13.938  14.220  14.276  13.897  13.088  12.087  11.235  10.744  10.560  10.427  10.147   9.808   9.768  10.352  11.514  12.763  13.464  13.327  12.651  12.118  12.237  12.899  13.412  13.036  11.605   9.762   8.587   8.868  10.534  12.651  13.968  13.676  11.882   9.550   7.947 
+ 13.560  13.917  14.338  14.433  13.971  13.038  11.979  11.170  10.779  10.677  10.575  10.277   9.867   9.672  10.019  10.961  12.188  13.198  13.631  13.502  13.157  12.982  13.070  13.127  12.700  11.582  10.076   8.894   8.712   9.683  11.250  12.438  12.446  11.180   9.347   8.033 
+ 13.590  13.854  14.149  14.164  13.704  12.830  11.827  11.027  10.594  10.428  10.272   9.943   9.515   9.299   9.622  10.549  11.796  12.890  13.491  13.605  13.533  13.570  13.715  13.633  12.925  11.517   9.850   8.698   8.689   9.865  11.579  12.844  12.914  11.746  10.039   8.819 
+ 13.576  13.736  13.909  13.875  13.464  12.683  11.743  10.955  10.530  10.429  10.397  10.185   9.776   9.434   9.502  10.115  11.075  11.998  12.625  12.999  13.363  13.834  14.183  13.940  12.785  10.923   9.108   8.241   8.795  10.479  12.372  13.440  13.114  11.586   9.678   8.391 
+ 13.232  13.532  13.801  13.663  13.017  12.108  11.313  10.835  10.590  10.347   9.970   9.541   9.255   9.249   9.500   9.904  10.392  10.976  11.684  12.470  13.199  13.698  13.805  13.374  12.299  10.638   8.787   7.476   7.462   8.986  11.403  13.375  13.650  11.938   9.231   7.231 
+ 12.835  13.133  13.422  13.324  12.673  11.647  10.644  10.012   9.831   9.900   9.918   9.713   9.346   9.049   9.046   9.417  10.073  10.852  11.630  12.355  12.997  13.458  13.536  13.015  11.833  10.224   8.721   7.940   8.260   9.551  11.169  12.252  12.192  11.007   9.363   8.204 
+ 12.940  13.210  13.501  13.452  12.826  11.705  10.511   9.762   9.702  10.086  10.333   9.995   9.162   8.442   8.489   9.446  10.798  11.781  12.013  11.785  11.735  12.205  12.859  12.945  11.985  10.280   8.780   8.382   9.260  10.769  11.963  12.260  11.739  10.900  10.208   9.860 
+ 13.039  13.748  14.508  14.532  13.529  11.959  10.682  10.298  10.682  11.113  10.885   9.928   8.909   8.710   9.697  11.366  12.689  12.895  12.059  11.021  10.679  11.249  12.092  12.249  11.258   9.558   8.182   7.980   9.013  10.562  11.701  11.923  11.358  10.512   9.829   9.487 
+ 14.213  14.218  14.088  13.660  12.913  12.037  11.341  11.027  11.007  10.940  10.523   9.822   9.325   9.597  10.752  12.215  13.044  12.642  11.297  10.030   9.816  10.766  11.972  12.202  10.900   8.680   6.894   6.615   7.871   9.721  11.039  11.327  10.893  10.386  10.179  10.191 
+ 15.143  14.464  13.545  12.912  12.771  12.899  12.875  12.442  11.680  10.894  10.383  10.288  10.595  11.182  11.823  12.185  11.941  11.023   9.801   8.951   8.994   9.835  10.722  10.757   9.613   7.861   6.607   6.691   8.085   9.956  11.321  11.717  11.384  10.884  10.592  10.516 
+ 13.506  13.786  14.217  14.570  14.602  14.184  13.406  12.543  11.890  11.588  11.579  11.728  11.955  12.234  12.470  12.407  11.774  10.577   9.273   8.555   8.830   9.794  10.536  10.189   8.649   6.752   5.705   6.200   7.901   9.753  10.800  10.859  10.488  10.362  10.665  11.033 
+ 14.450  14.060  13.666  13.654  14.016  14.338  14.170  13.457  12.607  12.156  12.334  12.923  13.470  13.627  13.311  12.607  11.628  10.511   9.519   9.024   9.266  10.043  10.704  10.553   9.412   7.848   6.790   6.824   7.750   8.782   9.232   9.058   8.797   8.993   9.647  10.236 
+ 14.238  13.844  13.521  13.721  14.403  15.027  15.039  14.380  13.542  13.111  13.259  13.634  13.723  13.306  12.565  11.809  11.158  10.518   9.858   9.398   9.463  10.087  10.815  10.986  10.294   9.098   8.150   7.937   8.267   8.509   8.267   7.853   8.034   9.275  11.153  12.562 
+ 14.291  13.686  13.170  13.438  14.476  15.539  15.830  15.229  14.371  14.015  14.325  14.759  14.623  13.735  12.542  11.632  11.164  10.811  10.233   9.540   9.227   9.629  10.467  11.013  10.744   9.855   9.095   9.038   9.528   9.843   9.461   8.657   8.314   9.072  10.630  11.894 
+ 14.287  13.643  13.049  13.224  14.218  15.355  15.863  15.569  15.002  14.817  15.128  15.384  14.917  13.604  12.010  10.882  10.504  10.528  10.403   9.957   9.548   9.655  10.357  11.218  11.685  11.583  11.208  10.951  10.869  10.656  10.050   9.222   8.714   8.939   9.733  10.431 
+ 13.944  13.302  12.643  12.658  13.502  14.681  15.521  15.732  15.557  15.405  15.373  15.135  14.309  12.909  11.425  10.439  10.154  10.268  10.307  10.075   9.789   9.811  10.267  10.939  11.496  11.787  11.884  11.858  11.594  10.894   9.814   8.838   8.623   9.456  10.895  11.999 
+ 13.561  13.148  12.677  12.596  13.121  14.098  15.123  15.822  16.037  15.831  15.341  14.639  13.730  12.645  11.531  10.618  10.087   9.952  10.041  10.110  10.006   9.762   9.584   9.714  10.265  11.099  11.836  12.009  11.329   9.899   8.259   7.148   7.106   8.120   9.587  10.635 
+ 13.604  13.161  12.659  12.579  13.148  14.188  15.258  15.971  16.217  16.143  15.943  15.653  15.133  14.238  13.014  11.737  10.754  10.252  10.137  10.129   9.997   9.736   9.567   9.753  10.371  11.218  11.908  12.092  11.657  10.769   9.766   8.978   8.575   8.530   8.676   8.813 
+ 13.686  13.207  12.607  12.384  12.848  13.917  15.151  16.035  16.310  16.123  15.864  15.814  15.888  15.692  14.872  13.454  11.888  10.737  10.266  10.287  10.382  10.298  10.168  10.341  10.993  11.890  12.511  12.457  11.758  10.831  10.125   9.782   9.606   9.337   8.939   8.624 
+ 13.535  13.261  12.842  12.554  12.740  13.584  14.880  16.074  16.620  16.404  15.846  15.531  15.673  15.894  15.557  14.378  12.732  11.373  10.792  10.824  10.870  10.522   9.975   9.818  10.405  11.415  12.063  11.795  10.792   9.816   9.506   9.806  10.051   9.651   8.687   7.869 
+ 13.382  13.275  12.985  12.603  12.525  13.183  14.562  16.018  16.691  16.242  15.205  14.568  14.892  15.785  16.224  15.483  13.783  12.085  11.214  11.187  11.352  11.175  10.832  10.982  11.961  13.221  13.682  12.715  10.823   9.296   9.102  10.033  10.909  10.700   9.478   8.340 
+ 13.142  13.162  13.009  12.656  12.479  13.002  14.315  15.781  16.445  15.863  14.582  13.738  14.075  15.268  16.190  15.907  14.470  12.797  11.794  11.587  11.597  11.304  10.879  10.981  11.938  13.176  13.568  12.464  10.394   8.708   8.407   9.244   9.970   9.514   8.010   6.678 
+ 13.028  12.971  12.760  12.464  12.462  13.166  14.530  15.856  16.251  15.396  13.934  13.021  13.372  14.648  15.747  15.753  14.668  13.281  12.359  11.972  11.611  10.913  10.187  10.150  11.107  12.433  12.985  12.120  10.363   9.002   8.935   9.820  10.383   9.620   7.793   6.258 
+ 13.131  12.847  12.397  11.993  11.853  12.062  12.461  12.716  12.551  11.982  11.343  11.045  11.259  11.795  12.276  12.435  12.261  11.877  11.333  10.560   9.577   8.699   8.456   9.173  10.567  11.791  11.998  11.013   9.523   8.547   8.601   9.271   9.581   8.874   7.429   6.262 
+ 13.528  13.347  13.069  12.829  12.740  12.809  12.902  12.810  12.399  11.725  11.020  10.541  10.403  10.531  10.758  10.956  11.071  11.046  10.775  10.191   9.433   8.907   9.064  10.016  11.305  12.103  11.792  10.479   8.981   8.234   8.549   9.351   9.642   8.845   7.323   6.120 
+ 13.518  13.264  12.930  12.733  12.762  12.912  12.957  12.720  12.196  11.550  10.997  10.670  10.577  10.648  10.827  11.075  11.325  11.437  11.261  10.788  10.251  10.047  10.462  11.390  12.303  12.549  11.821  10.421   9.101   8.536   8.835   9.455   9.626   8.962   7.780   6.865 
+ 13.673  13.286  12.748  12.444  12.726  13.653  14.855  15.672  15.565  14.527  13.153  12.261  12.343  13.256  14.400  15.201  15.485  15.450  15.353  15.253  15.041  14.670  14.270  13.987  13.733  13.189  12.152  10.912  10.223  10.721  12.244  13.703  13.775  11.956   9.115   7.001 
+ 13.339  13.150  12.879  12.758  13.071  13.951  15.164  16.133  16.275  15.439  14.084  13.011  12.817  13.507  14.557  15.350  15.585  15.366  14.957  14.521  14.076  13.648  13.355  13.285  13.299  13.045  12.283  11.237  10.574  10.881  12.041  13.101  12.893  10.993   8.223   6.198 
+ 13.376  13.087  12.704  12.549  12.922  13.898  15.193  16.247  16.525  15.864  14.602  13.387  12.777  12.934  13.605  14.351  14.825  14.883  14.542  13.906  13.154  12.554  12.364  12.641  13.112  13.295  12.874  12.006  11.274  11.215  11.790  12.285  11.814  10.072   7.726   6.051 
+ 13.540  13.104  12.576  12.430  12.968  14.113  15.418  16.305  16.391  15.682  14.548  13.483  12.853  12.775  13.159  13.822  14.543  15.064  15.126  14.586  13.587  12.566  12.033  12.214  12.839  13.307  13.140  12.372  11.532  11.183  11.386  11.574  10.986   9.346   7.224   5.726 
+ 13.730  13.181  12.574  12.522  13.297  14.617  15.824  16.302  15.847  14.724  13.453  12.499  12.085  12.200  12.704  13.400  14.050  14.381  14.184  13.457  12.481  11.712  11.511  11.898  12.519  12.884  12.707  12.096  11.435  11.053  10.932  10.708   9.969   8.637   7.123   6.107 
+ 13.384  13.228  13.118  13.309  13.898  14.713  15.379  15.516  14.961  13.867  12.642  11.745  11.475  11.854  12.632  13.422  13.865  13.779  13.222  12.457  11.824  11.564  11.689  11.969  12.066  11.759  11.100  10.405  10.035  10.122  10.428  10.467   9.834   8.524   7.010   5.997 
+ 13.214  13.525  13.719  13.389  12.591  11.827  11.567  11.764  11.850  11.265  10.026   8.807   8.418   9.120  10.389  11.318  11.325  10.551   9.660   9.254   9.425   9.775   9.828   9.407   8.714   8.093   7.766   7.756   7.968   8.294   8.613   8.753   8.545   7.959   7.214   6.691 
+ 13.193  13.448  13.630  13.359  12.542  11.490  10.701  10.476  10.659  10.753  10.330   9.434   8.607   8.484   9.261  10.469  11.292  11.195  10.347   9.480   9.271   9.762  10.318  10.186   9.170   7.846   7.110   7.444   8.511   9.437   9.516   8.737   7.708   7.081   7.021   7.189 
+ 13.285  13.292  13.214  12.930  12.395  11.722  11.149  10.868  10.831  10.724  10.207   9.261   8.329   8.051   8.730   9.991  10.986  11.050  10.280   9.484   9.491  10.376  11.304  11.198   9.691   7.540   6.097   6.258   7.771   9.469  10.219   9.752   8.707   7.935   7.768   7.901 
+ 13.264  13.217  13.061  12.721  12.179  11.545  11.023  10.770  10.725  10.594  10.068   9.140   8.242   7.983   8.653   9.895  10.891  10.987  10.251   9.456   9.429  10.296  11.293  11.362  10.059   8.007   6.472   6.394   7.680   9.330  10.248  10.040   9.143   8.298   7.901   7.837 
+ 13.365  13.174  12.878  12.536  12.112  11.555  10.954  10.521  10.378  10.341  10.007   9.159   8.117   7.613   8.191   9.612  10.895  11.071  10.054   8.805   8.555   9.685  11.293  11.884  10.652   8.236   6.256   6.009   7.453   9.336  10.303   9.972   9.056   8.528   8.702   9.093 
+ 13.529  13.277  12.888  12.468  12.018  11.484  10.896  10.404  10.134  10.013   9.793   9.311   8.754   8.590   9.156  10.235  11.092  11.043  10.090   9.042   8.884   9.903  11.335  11.904  10.873   8.700   6.739   6.203   7.270   9.033  10.297  10.469   9.837   9.098   8.700   8.609 
+ 14.271  13.583  12.790  12.544  13.002  13.721  14.078  13.794  13.086  12.372  11.871  11.502  11.148  10.935  11.191  12.078  13.292  14.189  14.278  13.644  12.877  12.551  12.714  12.878  12.506  11.562  10.592  10.271  10.822  11.817  12.526  12.465  11.691  10.643   9.774   9.314 
+ 13.722  12.998  12.287  12.411  13.548  15.052  15.954  15.710  14.541  13.167  12.198  11.762  11.604  11.474  11.389  11.541  12.025  12.692  13.281  13.665  13.930  14.193  14.389  14.270  13.656  12.715  11.940  11.810  12.403  13.298  13.861  13.676  12.782  11.573  10.514   9.919 
+ 13.618  13.061  12.508  12.618  13.598  15.006  16.052  16.149  15.278  13.927  12.700  11.943  11.636  11.564  11.556  11.589  11.717  11.968  12.323  12.774  13.356  14.080  14.815  15.273  15.166  14.456  13.474  12.777  12.800  13.521  14.409  14.715  13.942  12.198  10.189   8.858 
+ 13.355  13.001  12.682  12.879  13.779  15.090  16.171  16.431  15.688  14.279  12.831  11.873  11.555  11.655  11.821  11.853  11.812  11.914  12.331  13.064  13.957  14.800  15.405  15.626  15.369  14.665  13.754  13.075  13.051  13.767  14.789  15.318  14.684  12.856  10.589   9.033 
+ 13.245  13.015  12.848  13.119  13.983  15.201  16.210  16.447  15.707  14.293  12.839  11.903  11.643  11.803  11.988  12.003  11.958  12.099  12.538  13.159  13.757  14.238  14.656  15.043  15.246  15.014  14.312  13.556  13.442  14.377  15.962  17.040  16.444  13.931  10.576   8.204 
+ 13.211  12.975  12.841  13.206  14.172  15.392  16.247  16.233  15.294  13.855  12.546  11.807  11.662  11.799  11.861  11.712  11.480  11.399  11.613  12.104  12.768  13.513  14.259  14.862  15.099  14.809  14.120  13.515  13.577  14.527  15.902  16.710  16.062  13.868  11.060   9.111 
+ 13.219  13.019  12.937  13.336  14.281  15.405  16.102  15.914  14.840  13.343  12.050  11.362  11.261  11.411  11.466  11.318  11.121  11.109  11.404  11.957  12.645  13.382  14.115  14.737  15.053  14.903  14.381  13.908  14.013  14.901  16.150  16.850  16.186  14.084  11.425   9.584 
+ 13.178  13.101  13.184  13.669  14.529  15.402  15.790  15.387  14.293  12.942  11.823  11.195  11.000  10.992  10.955  10.837  10.720  10.713  10.879  11.250  11.861  12.735  13.784  14.751  15.295  15.212  14.656  14.120  14.147  14.911  15.999  16.593  16.011  14.223  11.988  10.453 
+ 13.037  13.097  13.359  13.919  14.633  15.127  15.028  14.238  13.022  11.834  11.023  10.651  10.542  10.487  10.401  10.325  10.316  10.361  10.428  10.572  10.969  11.777  12.937  14.092  14.768  14.697  14.070  13.467  13.475  14.251  15.336  15.913  15.342  13.634  11.528  10.091 
+ 12.074  12.564  13.316  13.996  14.330  14.212  13.704  12.954  12.109  11.271  10.514   9.903   9.494   9.298   9.252   9.242   9.170   9.041   9.005   9.299  10.107  11.404  12.890  14.082  14.555  14.206  13.369  12.668  12.651  13.421  14.506  15.110  14.614  13.021  11.032   9.668 
+ 11.268  11.036  10.843  10.938  11.269  11.486  11.243  10.509   9.584   8.818   8.315   7.913   7.433   6.929   6.666   6.842   7.339   7.805   7.989   8.034   8.385   9.377  10.848  12.172  12.713  12.332  11.520  11.022  11.279  12.119  12.922  13.089  12.426  11.211   9.976   9.217 
+  9.987  10.150  10.121   9.580   8.629   7.783   7.540   7.917   8.396   8.344   7.540   6.363   5.464   5.244   5.580   6.002   6.127   5.953   5.780   5.906   6.388   7.058   7.725   8.311   8.813   9.178   9.280   9.038   8.563   8.144   8.055   8.346   8.820   9.212   9.395   9.432 
+  8.609   8.924   9.270   9.339   9.054   8.564   8.018   7.371   6.472   5.334   4.288   3.801   4.074   4.808   5.396   5.411   4.948   4.505   4.513   4.952   5.424   5.590   5.539   5.703   6.401   7.452   8.254   8.295   7.614   6.800   6.513   6.971   7.840   8.598   8.973   9.061 
+  6.003   6.521   7.331   8.119   8.647   8.816   8.616   8.046   7.116   5.926   4.734   3.901   3.697   4.118   4.843   5.411   5.487   5.060   4.421   3.967   3.957   4.375   4.971   5.419   5.505   5.240   4.858   4.686   4.957   5.644   6.426   6.839   6.548   5.584   4.383   3.562 
+  6.139   6.452   6.982   7.593   8.150   8.503   8.464   7.865   6.718   5.330   4.218   3.811   4.144   4.808   5.235   5.123   4.636   4.226   4.237   4.628   5.060   5.232   5.134   4.992   4.996   5.105   5.139   5.045   5.033   5.382   6.084   6.685   6.573   5.509   3.947   2.799 
+  5.593   5.897   6.440   7.101   7.709   8.077   8.056   7.619   6.910   6.209   5.786   5.736   5.910   6.033   5.923   5.641   5.437   5.522   5.863   6.208   6.316   6.201   6.151   6.474   7.193   7.969   8.349   8.136   7.553   7.042   6.876   6.921   6.782   6.198   5.333   4.685 
+  8.196   8.210   8.122   7.906   7.771   8.045   8.848   9.878  10.576  10.561   9.975   9.393   9.362   9.968  10.799  11.328  11.351  11.097  10.945  11.073  11.361  11.614  11.831  12.215  12.908  13.744  14.300  14.232  13.589  12.785  12.256  12.103  12.075  11.867  11.453  11.104 
+  6.444   7.385   8.720   9.775  10.224  10.257  10.323  10.700  11.276  11.691  11.699  11.391  11.115  11.174  11.590  12.115  12.462  12.529  12.442  12.418  12.601  12.999  13.548  14.181  14.842  15.443  15.847  15.933  15.678  15.185  14.623  14.122  13.720  13.399  13.152  13.009 
+ 11.344  11.771  12.433  13.030  13.288  13.081  12.486  11.727  11.054  10.621  10.440  10.423  10.467  10.500  10.477  10.356  10.109   9.777   9.510   9.520   9.946  10.734  11.637  12.362  12.769  12.971  13.232  13.753  14.503  15.218  15.577  15.408  14.786  13.966  13.241  12.826 
+ 12.477  12.855  13.565  14.433  15.126  15.271  14.680  13.512  12.206  11.204  10.673  10.441  10.191   9.744   9.207   8.869   8.962   9.485  10.227  10.926  11.424  11.695  11.774  11.699  11.524  11.378  11.465  11.956  12.839  13.855  14.592  14.697  14.076  12.957  11.793  11.062 
+ 12.667  12.985  13.597  14.409  15.219  15.716  15.590  14.723  13.333  11.927  11.018  10.778  10.905  10.860  10.330   9.552   9.180   9.761  11.229  12.859  13.764  13.544  12.558  11.596  11.247  11.512  11.954  12.202  12.294  12.534  13.038  13.447  13.161  11.917  10.175   8.910 
+ 12.056  12.455  13.134  13.928  14.674  15.194  15.266  14.709  13.567  12.219  11.218  10.906  11.127  11.336  11.097  10.525  10.262  10.899  12.362  13.827  14.332  13.582  12.226  11.325  11.458  12.266  12.859  12.683  12.042  11.753  12.268  13.112  13.233  11.991   9.872   8.233 
+ 11.177  11.666  12.553  13.653  14.694  15.338  15.288  14.453  13.084  11.720  10.900  10.802  11.111  11.276  11.002  10.552  10.558  11.436  12.912  14.123  14.270  13.304  12.008  11.384  11.824  12.819  13.454  13.258  12.604  12.301  12.730  13.370  13.200  11.663   9.324   7.574 
+ 11.401  11.840  12.548  13.276  13.795  13.950  13.661  12.953  12.002  11.117  10.605  10.563  10.788  10.939  10.864  10.788  11.148  12.148  13.442  14.287  14.114  13.051  11.904  11.532  12.138  13.097  13.521  13.059  12.216  11.850  12.309  12.992  12.813  11.203   8.765   6.947 
+  9.453   9.057   8.753   9.036   9.885  10.681  10.672   9.594   7.911   6.471   5.865   6.025   6.392   6.478   6.316   6.406   7.205   8.624   9.985  10.498   9.878   8.590   7.523   7.350   8.083   9.144   9.863   9.975   9.724   9.543   9.609   9.671   9.301   8.320   7.056   6.162 
+ 10.924   9.964   8.743   8.084   8.281   8.898   9.170   8.637   7.477   6.293   5.595   5.452   5.568   5.662   5.749   6.081   6.823   7.814   8.627   8.887   8.555   7.944   7.470   7.376   7.637   8.077   8.543   8.973   9.331   9.518   9.378   8.795   7.810   6.642   5.610   5.007 
+  8.248   7.756   7.157   6.916   7.214   7.801   8.180   7.988   7.267   6.432   5.966   6.074   6.582   7.116   7.412   7.494   7.577   7.821   8.151   8.312   8.106   7.591   7.051   6.768   6.783   6.877   6.785   6.445   6.064   5.911   6.038   6.177   5.945   5.184   4.164   3.434 
+  4.519   5.496   7.015   8.446   9.306   9.484   9.245   9.014   9.096   9.527  10.115  10.625  10.948  11.146  11.345  11.600  11.835  11.912  11.744  11.367  10.900  10.447  10.033   9.622   9.195   8.795   8.496   8.318   8.185   7.969   7.590   7.090   6.605   6.263   6.099   6.052 
+  5.168   5.942   7.068   7.984   8.342   8.200   7.917   7.853   8.107   8.490   8.726   8.719   8.635   8.754   9.209   9.850  10.354  10.486  10.286  10.010   9.886   9.908   9.859   9.560   9.100   8.822   9.043   9.744  10.514  10.839  10.502   9.767   9.169   9.088   9.450   9.826 
+  6.553   6.777   7.188   7.701   8.193   8.559   8.763   8.853   8.905   8.944   8.916   8.756   8.482   8.219   8.125   8.254   8.506   8.701   8.729   8.644   8.608   8.731   8.963   9.133   9.116   8.964   8.890   9.098   9.606  10.212  10.623  10.647  10.302   9.770   9.279   8.994 
+  8.608   8.323   7.967   7.806   7.960   8.333   8.721   8.981   9.127   9.261   9.442   9.601   9.614   9.445   9.240   9.248   9.628  10.297  10.955  11.289  11.198  10.868  10.624  10.683  11.002  11.336  11.452  11.318  11.113  11.051  11.181  11.330  11.246  10.824  10.229   9.797 
+  9.560   9.737   9.909   9.885   9.656   9.445   9.549  10.100  10.929  11.655  11.931  11.682  11.159  10.776  10.848  11.411  12.221  12.930  13.289  13.267  13.029  12.797  12.714  12.779  12.884  12.914  12.830  12.691  12.595  12.592  12.627  12.573  12.321  11.874  11.381  11.057 
+ 12.448  12.154  11.640  11.050  10.568  10.366  10.520  10.956  11.457  11.764  11.735  11.454  11.196  11.260  11.751  12.485  13.098  13.294  13.049  12.618  12.341  12.383  12.638  12.839  12.794  12.538  12.285  12.233  12.393  12.591  12.619  12.400  12.033  11.683  11.459  11.366 
+ 13.972  14.116  14.242  14.144  13.729  13.098  12.500  12.151  12.078  12.087  11.928  11.530  11.111  11.053  11.599  12.615  13.623  14.108  13.874  13.172  12.494  12.211  12.328  12.561  12.613  12.426  12.176  12.063  12.115  12.175  12.081  11.845  11.642  11.640  11.825  12.008 
+ 14.825  15.765  16.802  16.985  16.058  14.631  13.585  13.286  13.331  13.019  12.082  10.993  10.560  11.209  12.599  13.899  14.445  14.190  13.611  13.217  13.158  13.241  13.244  13.166  13.189  13.415  13.714  13.826  13.607  13.164  12.738  12.487  12.366  12.239  12.055  11.906 
+ 14.776  15.089  15.298  14.951  13.975  12.767  11.886  11.603  11.716  11.771  11.491  11.027  10.833  11.263  12.261  13.373  14.072  14.112  13.650  13.069  12.691  12.603  12.692  12.805  12.884  12.962  13.092  13.267  13.412  13.432  13.262  12.895  12.379  11.812  11.321  11.035 
+ 13.285  13.877  14.594  14.842  14.326  13.231  12.054  11.225  10.839  10.690  10.554  10.442  10.604  11.261  12.333  13.401  13.974  13.857  13.294  12.759  12.566  12.627  12.567  12.113  11.392  10.877  10.985  11.682  12.444  12.630  11.994  10.888   9.992   9.772  10.137  10.559 
+ 12.139  12.506  13.154  13.922  14.609  15.026  15.050  14.684  14.070  13.456  13.102  13.169  13.639  14.325  14.948  15.275  15.205  14.786  14.147  13.409  12.630  11.829  11.045  10.383   9.985   9.948  10.235  10.662  10.975  10.974  10.617  10.026   9.401   8.911   8.617   8.492 
+ 14.044  13.962  14.016  14.401  15.031  15.527  15.478  14.774  13.725  12.863  12.593  12.961  13.687  14.411  14.901  15.095  14.985  14.519  13.632  12.374  10.987   9.834   9.195   9.104   9.344   9.603   9.659   9.477   9.149   8.780   8.398   7.966   7.454   6.898   6.408   6.117 
+ 14.766  14.698  14.596  14.491  14.357  14.122  13.724  13.177  12.598  12.162  12.012  12.188  12.603  13.081  13.424  13.475  13.152  12.466  11.499  10.384   9.259   8.251   7.468   6.999   6.895   7.135   7.582   7.996   8.127   7.842   7.221   6.523   6.036   5.902   6.031   6.191 
+ 14.552  13.680  12.424  11.426  11.066  11.244  11.512  11.431  10.880  10.098   9.462   9.196   9.236   9.326   9.240   8.941   8.552   8.197   7.871   7.455   6.853   6.119   5.455   5.075   5.042   5.229   5.423   5.483   5.426   5.367   5.382   5.426   5.378   5.165   4.856   4.628 
+ 10.827  10.053   8.983   8.205   7.977   8.062   7.969   7.374   6.403   5.536   5.250   5.672   6.505   7.261   7.571   7.373   6.847   6.232   5.663   5.162   4.723   4.382   4.205   4.223   4.377   4.547   4.628   4.596   4.503   4.412   4.341   4.248   4.082   3.837   3.579   3.411 
+  8.464   7.956   7.280   6.859   6.882   7.171   7.326   7.043   6.356   5.624   5.273   5.490   6.095   6.674   6.875   6.614   6.083   5.560   5.195   4.954   4.714   4.429   4.182   4.106   4.241   4.469   4.596   4.499   4.223   3.931   3.765   3.739   3.749   3.688   3.553   3.437 
+  6.698   5.993   5.273   5.309   6.257   7.496   8.118   7.644   6.361   5.053   4.394   4.529   5.124   5.738   6.127   6.274   6.213   5.926   5.415   4.826   4.429   4.406   4.669   4.896   4.813   4.439   4.075   4.021   4.288   4.587   4.590   4.230   3.743   3.429   3.383   3.454 
+  5.957   5.790   5.656   5.767   6.130   6.504   6.565   6.152   5.394   4.635   4.205   4.239   4.638   5.174   5.629   5.877   5.884   5.677   5.322   4.912   4.541   4.262   4.075   3.943   3.852   3.836   3.942   4.159   4.389   4.496   4.414   4.204   4.014   3.961   4.038   4.130 
+  5.912   6.005   6.182   6.406   6.597   6.641   6.444   5.995   5.402   4.865   4.588   4.683   5.102   5.664   6.127   6.301   6.112   5.621   4.998   4.450   4.158   4.197   4.495   4.840   4.980   4.761   4.249   3.714   3.482   3.711   4.261   4.758   4.835   4.389   3.676   3.147 
+  7.351   7.060   6.797   6.866   7.217   7.462   7.227   6.514   5.722   5.304   5.392   5.741   6.012   6.110   6.234   6.624   7.276   7.930   8.319   8.415   8.413   8.474   8.536   8.403   8.041   7.736   7.905   8.674   9.664  10.221   9.955   9.094   8.315   8.169   8.620   9.111 
+ 14.532  14.689  14.955  15.197  15.221  14.885  14.242  13.560  13.153  13.129  13.284  13.250  12.793  12.002  11.215  10.749  10.682  10.868  11.130  11.425  11.799  12.227  12.529  12.497  12.132  11.726  11.657  12.046  12.603  12.836  12.468  11.702  11.068  10.971  11.353  11.756 
+ 18.701  18.400  17.989  17.655  17.387  17.002  16.361  15.566  14.931  14.710  14.849  14.983  14.709  13.906  12.833  11.929  11.508  11.597  12.018  12.591  13.235  13.909  14.491  14.769  14.573  13.929  13.070  12.271  11.672  11.232  10.853  10.524  10.346  10.404  10.633  10.836 
+ 16.487  16.092  15.564  15.190  15.039  14.926  14.625  14.086  13.466  12.941  12.509  11.990  11.229  10.308   9.527   9.171   9.282   9.642   9.996  10.297  10.715  11.420  12.328  13.078  13.275  12.794  11.884  10.977  10.387  10.143  10.065   9.971   9.818   9.676   9.602   9.586 
+ 12.660  12.964  13.336  13.439  13.028  12.100  10.894   9.774   9.038   8.777   8.850   8.991   8.964   8.683   8.238   7.822   7.625   7.767   8.274   9.102  10.153  11.276  12.260  12.865  12.913  12.390  11.494  10.582  10.010   9.956  10.336  10.868  11.248  11.329  11.186  11.028 
+ 11.383  12.119  13.163  13.926  14.004  13.389  12.413  11.500  10.909  10.636  10.503  10.328  10.054   9.744   9.500   9.378   9.382   9.498   9.745  10.161  10.756  11.461  12.138  12.636  12.869  12.847  12.657  12.403  12.153  11.921  11.686  11.428  11.153  10.892  10.688  10.575 
+ 13.260  13.672  14.272  14.709  14.677  14.067  13.032  11.900  11.000  10.477  10.256  10.142   9.984   9.776   9.624   9.639   9.863  10.292  10.935  11.815  12.883  13.922  14.582  14.564  13.857  12.815  11.980  11.760  12.170  12.842  13.276  13.151  12.480  11.543  10.693  10.202 
+ 13.239  13.791  14.541  14.994  14.796  13.921  12.662  11.443  10.590  10.203  10.164  10.268  10.347  10.336  10.255  10.164  10.134  10.247  10.608  11.305  12.334  13.529  14.565  15.076  14.854  14.003  12.953  12.260  12.305  13.042  13.986  14.463  14.011  12.688  11.080   9.991 
+ 13.138  13.686  14.414  14.802  14.488  13.476  12.119  10.899  10.154   9.924   9.994  10.091  10.057   9.893   9.682   9.490   9.367   9.418   9.849  10.863  12.454  14.253  15.612  15.936  15.070  13.456  11.919  11.202  11.549  12.601  13.651  14.069  13.629  12.565  11.394  10.647 
+ 12.060  12.778  13.750  14.313  13.990  12.770  11.118   9.700   9.003   9.076   9.557   9.957   9.984   9.693   9.375   9.323   9.662  10.354  11.315  12.475  13.717  14.764  15.191  14.638  13.110  11.119   9.502   8.979   9.734  11.293  12.790  13.439  12.936  11.565  10.007   8.998 
+ 13.995  13.899  13.641  13.144  12.395  11.479  10.554   9.775   9.219   8.871   8.661   8.528   8.460   8.482   8.615   8.863   9.235   9.780  10.556  11.542  12.531  13.127  12.902  11.669   9.683   7.626   6.318   6.302   7.546   9.434  11.074  11.730  11.162   9.699   8.057   6.996 
+ 12.773  11.950  10.703   9.564   8.859   8.564   8.424   8.196   7.826   7.429   7.155   7.072   7.144   7.285   7.404   7.420   7.285   7.027   6.784   6.757   7.046   7.520   7.832   7.645   6.913   5.983   5.403   5.557   6.394   7.467   8.246   8.450   8.158   7.666   7.248   7.030 
+ 10.945  10.627  10.086   9.436   8.730   8.001   7.348   6.958   6.976   7.326   7.664   7.585   6.970   6.175   5.859   6.520   8.083   9.882  11.079  11.234  10.585   9.832   9.599   9.997  10.598  10.826  10.430   9.678   9.152   9.315  10.191  11.375  12.333  12.759  12.730  12.574 
+  9.771   9.559   9.200   8.744   8.187   7.518   6.834   6.374   6.380   6.875   7.549   7.915   7.673   7.000   6.498   6.791   8.037   9.760  11.138  11.574  11.114  10.394  10.155  10.693  11.658  12.343  12.232  11.390  10.397   9.924  10.261  11.157  12.066  12.560  12.606  12.487 
+  8.393   8.218   7.950   7.641   7.246   6.700   6.085   5.689   5.829   6.552   7.490   8.060   7.908   7.225   6.650   6.800   7.780   9.093  10.013  10.130   9.630   9.103   9.067   9.594  10.318  10.759  10.678  10.198   9.647   9.313   9.289   9.503   9.817  10.123  10.358  10.485 
+ 13.892  13.199  12.267  11.626  11.459  11.512  11.389  10.944  10.420  10.208  10.476  11.004  11.386  11.382  11.111  10.915  11.040  11.440  11.846  12.040  12.034  12.029  12.200  12.530  12.840  12.968  12.910  12.805  12.790  12.882  12.981  12.976  12.840  12.638  12.458  12.358 
+ 17.330  16.334  15.174  14.754  15.247  15.989  16.148  15.513  14.649  14.299  14.628  15.047  14.783  13.632  12.184  11.304  11.374  12.001  12.428  12.221  11.594  11.110  11.101  11.397  11.571  11.413  11.126  11.071  11.356  11.705  11.743  11.380  10.903  10.677  10.788  10.986 
+ 16.578  16.356  16.167  16.217  16.397  16.336  15.771  14.844  14.036  13.744  13.910  14.062  13.736  12.904  11.995  11.503  11.543  11.788  11.795  11.430  10.957  10.751  10.934  11.286  11.503  11.515  11.525  11.746  12.120  12.320  12.063  11.405  10.727  10.407  10.489  10.682 
+ 17.446  16.924  16.213  15.679  15.417  15.228  14.885  14.410  14.059  14.035  14.225  14.233  13.719  12.715  11.626  10.898  10.654  10.639  10.495  10.102   9.660   9.472   9.662  10.100  10.584  11.037  11.518  12.026  12.361  12.227  11.531  10.568   9.867   9.785  10.208  10.641 
+ 14.948  14.880  14.936  15.240  15.626  15.725  15.329  14.646  14.172  14.240  14.671  14.864  14.281  12.903  11.243   9.928   9.229   8.956   8.765   8.527   8.418   8.671   9.289  10.040  10.700  11.267  11.879  12.523  12.878  12.538  11.465  10.196   9.547   9.966  11.113  12.072 
+ 15.245  14.538  13.829  13.839  14.595  15.391  15.462  14.714  13.804  13.503  13.937  14.443  14.172  12.858  11.046   9.591   8.926   8.776   8.543   7.932   7.214   6.921   7.316   8.179   9.075   9.762  10.319  10.879  11.335  11.375  10.862  10.130   9.825  10.356  11.465  12.361 
+ 12.650  12.711  12.887  13.200  13.552  13.743  13.613  13.193  12.731  12.530  12.689  12.964  12.894  12.129  10.737   9.218   8.180   7.912   8.177   8.423   8.246   7.730   7.381   7.691   8.701   9.939  10.791  10.998  10.837  10.851  11.346  12.113  12.619  12.492  11.876  11.323 
+ 12.449  11.974  11.297  10.735  10.406  10.192   9.929   9.623   9.460   9.596   9.920  10.049   9.600   8.523   7.201   6.198   5.855   6.060   6.378   6.432   6.208   6.037   6.276   6.973   7.806   8.341   8.387   8.159   8.101   8.512   9.281   9.941  10.010   9.361   8.355   7.615 
+ 10.420  10.064   9.531   9.051   8.743   8.558   8.342   7.971   7.439   6.834   6.260   5.766   5.358   5.047   4.872   4.870   5.002   5.149   5.182   5.080   4.981   5.100   5.563   6.275   6.942   7.254   7.101   6.656   6.267   6.217   6.528   6.961   7.201   7.092   6.749   6.460 
+  9.420   8.934   8.303   7.911   7.857   7.875   7.588   6.863   5.957   5.329   5.261   5.624   5.982   5.947   5.487   4.930   4.668   4.826   5.168   5.326   5.132   4.787   4.695   5.119   5.937   6.697   6.952   6.582   5.876   5.313   5.217   5.570   6.081   6.453   6.586   6.584 
+  9.164   8.895   8.433   7.950   7.679   7.805   8.316   8.946   9.294   9.076   8.339   7.466   6.952   7.091   7.804   8.711   9.395   9.655   9.577   9.414   9.387   9.563   9.884  10.263  10.671  11.129  11.638  12.119  12.433  12.450  12.132  11.557  10.880  10.258   9.804   9.569 
+ 10.424  10.221   9.830   9.374   9.114   9.317  10.019  10.896  11.417  11.207  10.351   9.376   8.900   9.206  10.075  10.982  11.484  11.490  11.235  11.038  11.068  11.296  11.617  11.982  12.418  12.953  13.534  14.048  14.384  14.501  14.406  14.116  13.647  13.058  12.491  12.137 
+  9.228  10.132  11.386  12.292  12.486  12.082  11.435  10.793  10.180   9.556   9.024   8.807   9.010   9.433   9.670   9.445   8.872   8.369   8.293   8.638   9.082   9.328   9.406   9.622  10.218  11.096  11.887  12.311  12.447  12.635  13.083  13.585  13.658  13.015  11.924  11.082 
+ 14.094  13.913  13.696  13.590  13.575  13.421  12.840  11.761  10.506   9.688   9.825  10.928  12.383  13.280  13.004  11.658   9.990   8.861   8.667   9.151   9.726  10.004  10.069  10.291  10.888  11.664  12.178  12.162  11.788  11.506  11.612  11.944  12.029  11.538  10.650   9.950 
+ 13.785  13.217  12.488  12.074  12.108  12.243  11.915  10.827   9.285   8.076   7.946   9.030  10.682  11.856  11.787  10.476   8.643   7.173   6.524   6.507   6.597   6.440   6.152   6.158   6.759   7.826   8.879   9.459   9.470   9.186   8.965   8.946   8.994   8.913   8.676   8.463 
+ 10.280  10.417  10.431  10.025   9.130   7.980   6.962   6.354   6.188   6.312   6.565   6.889   7.272   7.610   7.666   7.204   6.219   5.048   4.221   4.133   4.760   5.662   6.278   6.307   5.883   5.435   5.331   5.604   5.962   6.045   5.735   5.247   4.943   5.038   5.424   5.761 
+ 11.274  10.921  10.315   9.563   8.704   7.742   6.768   6.023   5.801   6.218   7.056   7.820   8.019   7.466   6.385   5.236   4.410   4.033   3.974   4.029   4.091   4.175   4.329   4.539   4.728   4.831   4.860   4.896   5.013   5.218   5.454   5.657   5.802   5.899   5.966   6.005 
+ 10.854  10.518   9.973   9.357   8.715   8.019   7.287   6.665   6.361   6.466   6.843   7.192   7.263   7.010   6.572   6.104   5.643   5.139   4.603   4.192   4.107   4.394   4.837   5.099   4.995   4.659   4.426   4.537   4.921   5.262   5.297   5.058   4.830   4.875   5.179   5.465 
+ 11.305  10.626   9.673   8.915   8.509   8.230   7.759   7.039   6.385   6.210   6.632   7.309   7.659   7.290   6.288   5.136   4.356   4.177   4.462   4.898   5.252   5.474   5.626   5.745   5.796   5.729   5.553   5.349   5.200   5.125   5.074   4.988   4.854   4.706   4.590   4.530 
+ 10.408   9.830   8.825   7.677   6.726   6.210   6.119   6.206   6.164   5.870   5.463   5.197   5.178   5.248   5.132   4.714   4.192   3.935   4.160   4.732   5.263   5.435   5.253   4.993   4.916   5.019   5.072   4.878   4.509   4.257   4.361   4.765   5.151   5.229   5.004   4.753 
+  9.782   9.121   8.079   7.052   6.327   5.968   5.848   5.790   5.683   5.512   5.306   5.094   4.893   4.739   4.687   4.761   4.905   4.979   4.850   4.498   4.064   3.772   3.768   4.014   4.299   4.396   4.227   3.927   3.747   3.865   4.259   4.713   4.978   4.939   4.699   4.486 
+  9.777   9.199   8.128   6.763   5.404   4.364   3.824   3.744   3.911   4.099   4.218   4.344   4.593   4.964   5.295   5.364   5.082   4.587   4.173   4.083   4.333   4.699   4.872   4.668   4.141   3.538   3.136   3.081   3.334   3.724   4.063   4.234   4.224   4.099   3.949   3.853 
+ 13.999  13.979  13.937  13.827  13.543  12.966  12.079  11.028  10.079   9.478   9.309   9.453   9.686   9.819   9.790   9.656   9.518   9.451   9.472   9.546   9.599   9.546   9.339   9.026   8.770   8.778   9.160   9.815  10.453  10.770  10.656  10.273   9.932   9.856  10.019  10.203 
+ 17.232  17.300  17.352  17.244  16.835  16.083  15.112  14.175  13.505  13.156  12.969  12.696  12.204  11.575  11.032  10.754  10.742  10.845  10.898  10.833  10.670  10.428  10.092   9.687   9.369   9.394   9.928  10.846  11.720  12.083  11.773  11.078  10.529  10.489  10.877  11.264 
+ 17.017  16.473  15.658  14.921  14.452  14.177  13.854  13.275  12.427  11.488  10.706  10.244  10.107  10.169  10.250  10.208   9.989   9.633   9.249   8.940   8.745   8.616   8.479   8.336   8.308   8.576   9.220  10.092  10.847  11.150  10.904  10.331   9.817   9.631   9.753   9.931 
+ 13.890  13.559  12.992  12.360  11.839  11.530  11.386  11.219  10.813  10.082   9.159   8.348   7.928   7.963   8.244   8.428   8.274   7.819   7.341   7.153   7.367   7.818   8.191   8.268   8.090   7.923   8.052   8.562   9.275   9.874  10.115   9.968   9.596   9.215   8.958   8.845 
+  9.567  10.610  12.040  13.053  13.280  12.960  12.608  12.510  12.497  12.170  11.306  10.077   8.893   8.067   7.608   7.308   6.973   6.568   6.171   5.848   5.622   5.534   5.693   6.178   6.890   7.535   7.844   7.851   7.938   8.536   9.682  10.858  11.325  10.732   9.477   8.474 
+ 10.393  11.348  12.646  13.546  13.722  13.427  13.154  13.147  13.197  12.868  11.919  10.534   9.180   8.257   7.857   7.783   7.754   7.581   7.207   6.684   6.164   5.904   6.179   7.084   8.361   9.485  10.017   9.973   9.858  10.247  11.244  12.282  12.533  11.611   9.994   8.751 
+  9.769  10.941  12.514  13.549  13.630  13.100  12.675  12.804  13.331  13.680  13.357  12.310  10.882   9.492   8.354   7.465   6.776   6.325   6.185   6.339   6.641   6.950   7.273   7.768   8.568   9.595  10.567  11.205  11.450  11.477  11.512  11.611  11.645  11.474  11.140  10.868 
+  9.948  11.253  13.021  14.187  14.203  13.366  12.500  12.294  12.816  13.540  13.797  13.263  12.132  10.911  10.052   9.709   9.731   9.830   9.762   9.451   9.012   8.712   8.851   9.600  10.856  12.233  13.230  13.501  13.046  12.183  11.337  10.788  10.569  10.547  10.577  10.595 
+ 12.232  12.815  13.670  14.343  14.478  13.999  13.142  12.306  11.837  11.852  12.211  12.650  12.951  13.051  13.008  12.876  12.605  12.059  11.164  10.064   9.142   8.861   9.484  10.870  12.486  13.664  13.937  13.273  12.048  10.808   9.968   9.649   9.707   9.903  10.066  10.144 
+ 13.139  13.570  14.230  14.796  14.969  14.611  13.804  12.805  11.907  11.308  11.053  11.088  11.354  11.834  12.499  13.232  13.805  13.983  13.683  13.072  12.501  12.304  12.598  13.214  13.809  14.062  13.826  13.157  12.228  11.230  10.311   9.565   9.040   8.735   8.602   8.563 
+ 13.096  13.581  14.336  14.998  15.201  14.749  13.743  12.535  11.523  10.915  10.631  10.445  10.221  10.066  10.240  10.906  11.938  12.978  13.682  13.973  14.061  14.228  14.564  14.883  14.892  14.450  13.700  12.963  12.489  12.278  12.100  11.683  10.911   9.911   8.973   8.409 
+ 12.693  13.477  14.470  14.965  14.628  13.668  12.565  11.668  10.998  10.398   9.800   9.326   9.148   9.289   9.590   9.884  10.169  10.599  11.307  12.250  13.239  14.104  14.781  15.216  15.229  14.559  13.160  11.480  10.353  10.451  11.680  13.072  13.413  12.174  10.010   8.350 
+ 12.891  13.474  14.145  14.314  13.752  12.710  11.649  10.846  10.247   9.645   8.989   8.484   8.400   8.798   9.438   9.975  10.234  10.333  10.545  11.054  11.829  12.683  13.405  13.832  13.847  13.390  12.572  11.759  11.459  11.984  13.112  14.097  14.119  12.916  11.081   9.728 
+ 12.934  13.374  13.839  13.841  13.209  12.182  11.166  10.392   9.803   9.231   8.650   8.246   8.226   8.574   9.015   9.247   9.212   9.173   9.495  10.347  11.557  12.749  13.592  13.964  13.922  13.590  13.093  12.585  12.255  12.220  12.373  12.359  11.797  10.607   9.184   8.210 
+ 13.147  13.301  13.480  13.475  13.096  12.275  11.124   9.904   8.916   8.356   8.238   8.412   8.671   8.855   8.905   8.850   8.778   8.815   9.111   9.798  10.896  12.221  13.400  14.009  13.812  12.932  11.832  11.080  11.031  11.614  12.376  12.742  12.359  11.304  10.051   9.214 
+ 13.040  13.152  13.249  13.148  12.724  11.986  11.075  10.188   9.480   8.993   8.678   8.460   8.311   8.262   8.362   8.614   8.976   9.416   9.967  10.731  11.767  12.971  14.028  14.535  14.244  13.272  12.117  11.424  11.608  12.585  13.768  14.385  13.936  12.504  10.753   9.569 
+ 12.482  12.648  12.766  12.598  12.075  11.336  10.578   9.885   9.214   8.524   7.917   7.612   7.765   8.292   8.893   9.278   9.415   9.582  10.170  11.368  12.988  14.527  15.427  15.338  14.278  12.627  11.004  10.052  10.158  11.223  12.605  13.386  12.877  11.091   8.829   7.271 
+ 11.118  11.586  11.941  11.549  10.302   8.753   7.679   7.478   7.905   8.340   8.315   7.831   7.240   6.881   6.824   6.938   7.151   7.593   8.471   9.801  11.264  12.338  12.586  11.890  10.484   8.829   7.458   6.840   7.229   8.490  10.010  10.892  10.425   8.596   6.230   4.585 
+ 11.316  10.837   9.996   8.964   7.904   6.960   6.281   6.002   6.163   6.619   7.057   7.146   6.742   5.983   5.182   4.617   4.366   4.347   4.470   4.757   5.281   6.005   6.672   6.916   6.525   5.643   4.727   4.258   4.422   4.999   5.535   5.643   5.221   4.460   3.695   3.229 
+ 10.245   9.838   9.111   8.235   7.439   6.923   6.746   6.780   6.783   6.560   6.099   5.573   5.199   5.049   4.995   4.816   4.426   4.004   3.924   4.493   5.682   7.064   8.021   8.100   7.276   5.963   4.750   4.070   3.994   4.272   4.547   4.573   4.322   3.924   3.554   3.340 
+  9.661   9.060   8.176   7.395   6.884   6.522   6.074   5.447   4.794   4.375   4.328   4.553   4.797   4.858   4.711   4.474   4.291   4.246   4.380   4.740   5.353   6.126   6.780   6.942   6.379   5.215   3.930   3.106   3.081   3.740   4.599   5.102   4.941   4.203   3.287   2.671 
+  6.508   6.571   6.667   6.720   6.605   6.209   5.530   4.725   4.061   3.772   3.911   4.319   4.722   4.900   4.808   4.568   4.364   4.330   4.495   4.819   5.234   5.659   5.977   6.039   5.722   5.038   4.190   3.513   3.298   3.598   4.172   4.598   4.538   3.951   3.137   2.561 
+  5.681   5.330   4.888   4.663   4.754   4.955   4.914   4.428   3.649   3.020   2.977   3.612   4.573   5.288   5.350   4.790   4.034   3.588   3.699   4.233   4.842   5.226   5.296   5.115   4.749   4.197   3.481   2.766   2.355   2.478   3.059   3.679   3.834   3.317   2.411   1.718 
+  7.814   7.583   7.215   6.833   6.512   6.250   6.005   5.767   5.595   5.586   5.787   6.133   6.467   6.643   6.632   6.557   6.597   6.855   7.269   7.651   7.829   7.773   7.617   7.548   7.661   7.904   8.127   8.221   8.190   8.129   8.121   8.160   8.166   8.073   7.910   7.780 
+ 16.145  16.190  16.090  15.709  15.188  14.875  15.001  15.407  15.615  15.202  14.172  12.965  12.117  11.867  12.048  12.322  12.488  12.576  12.678  12.743  12.587  12.115  11.507  11.131  11.229  11.676  12.062  12.046  11.655  11.248  11.165  11.413  11.675  11.633  11.288  10.958 
+ 18.063  17.829  17.381  16.809  16.284  15.973  15.907  15.916  15.729  15.171  14.300  13.372  12.661  12.301  12.256  12.420  12.706  13.035  13.274  13.241  12.829  12.154  11.553  11.371  11.692  12.232  12.541  12.349  11.770  11.197  10.956  11.048  11.192  11.110  10.798  10.513 
+ 17.745  17.228  16.329  15.290  14.394  13.835  13.614  13.535  13.339  12.873  12.167  11.374  10.633  10.005   9.519   9.256   9.329   9.755  10.335  10.719  10.652  10.207   9.781   9.797  10.347  11.091  11.524  11.401  10.941  10.625  10.761  11.200  11.480  11.255  10.634  10.105 
+ 16.414  15.305  13.583  11.946  10.889  10.469  10.370  10.203   9.791   9.257   8.848   8.689   8.667   8.552   8.244   7.904   7.844   8.253   8.992   9.669   9.933   9.761   9.482   9.496   9.941  10.572  10.968  10.891  10.480  10.119  10.106  10.414  10.744  10.817  10.624  10.406 
+ 12.015  11.456  10.525   9.507   8.666   8.141   7.923   7.905   7.971   8.045   8.091   8.074   7.948   7.688   7.354   7.098   7.088   7.386   7.878   8.330   8.551   8.535   8.463   8.564   8.929   9.446   9.902  10.152  10.225  10.264  10.366  10.484  10.471  10.240   9.877   9.602 
+  9.955   9.545   8.960   8.473   8.191   8.015   7.782   7.442   7.078   6.784   6.543   6.252   5.892   5.644   5.805   6.532   7.648   8.692   9.224   9.135   8.713   8.407   8.492   8.907   9.362   9.610   9.624   9.565   9.607   9.798  10.059  10.300  10.490  10.654  10.802  10.898 
+ 11.151  10.720  10.096   9.551   9.175   8.869   8.525   8.192   8.050   8.190   8.453   8.514   8.166   7.567   7.167   7.368   8.180   9.183   9.840   9.898   9.544   9.211   9.215   9.537   9.915  10.108  10.090  10.022  10.062  10.224  10.398  10.476  10.451  10.393  10.363  10.362 
+ 12.629  12.251  11.674  11.107  10.642  10.251   9.907   9.694   9.747  10.077  10.446  10.479   9.956   9.061   8.330   8.308   9.132  10.398  11.409  11.647  11.112  10.282   9.758   9.855  10.447  11.119  11.483  11.417  11.076  10.733  10.592  10.692  10.943  11.219  11.428  11.535 
+ 10.315  10.278  10.175  10.000   9.806   9.672   9.620   9.571   9.397   9.028   8.523   8.036   7.713   7.630   7.800   8.211   8.816   9.470   9.921   9.928   9.477   8.881   8.628   9.024   9.907  10.719  10.917  10.432   9.758   9.561  10.122  11.074  11.694  11.512  10.721  10.019 
+  9.745   9.962  10.379  10.951  11.586  12.138  12.424  12.293  11.708  10.792   9.794   8.987   8.559   8.563   8.934   9.544  10.232  10.815  11.133  11.131  10.939  10.831  11.053  11.606  12.173  12.311  11.796  10.852  10.049   9.887  10.379  10.996  11.046  10.231   8.926   7.948 
+ 12.278  11.991  11.720  11.847  12.540  13.600  14.563  14.985  14.702  13.896  12.922  12.075  11.472  11.130  11.113  11.547  12.460  13.583  14.374  14.339  13.433  12.194  11.403  11.497  12.200  12.740  12.506  11.614  10.858  11.024  12.117  13.207  13.090  11.302   8.631   6.665 
+ 13.058  12.499  11.830  11.671  12.401  13.868  15.411  16.233  15.898  14.603  13.017  11.809  11.239  11.136  11.235  11.520  12.197  13.332  14.521  15.015  14.293  12.591  10.872  10.145  10.692  11.862  12.668  12.655  12.251  12.270  12.999  13.756  13.399  11.396   8.504   6.383 
+ 13.341  12.896  12.276  11.931  12.259  13.317  14.663  15.540  15.363  14.163  12.589  11.433  11.035  11.113  11.148  10.960  10.898  11.438  12.570  13.626  13.784  12.846  11.519  10.895  11.524  12.939  14.075  14.212  13.576  13.005  13.032  13.257  12.682  10.734   8.015   6.025 
+ 13.401  13.157  12.753  12.436  12.570  13.366  14.582  15.529  15.517  14.424  12.855  11.698  11.410  11.691  11.860  11.577  11.203  11.427  12.497  13.821  14.390  13.669  12.130  10.891  10.779  11.673  12.731  13.260  13.341  13.591  14.312  14.923  14.341  12.054   8.869   6.553 
+ 13.588  13.334  12.916  12.570  12.623  13.268  14.297  15.102  15.054  14.004  12.467  11.271  10.927  11.255  11.611  11.511  11.085  10.936  11.549  12.784  13.950  14.369  13.930  13.126  12.594  12.609  12.988  13.425  13.829  14.304  14.809  14.921  14.075  12.132   9.745   8.089 
+ 13.544  13.233  12.757  12.388  12.431  13.012  13.904  14.568  14.477  13.511  12.095  10.931  10.494  10.699  11.024  10.978  10.528  10.105  10.215  10.997  12.108  13.014  13.399  13.349  13.199  13.225  13.476  13.838  14.197  14.487  14.604  14.335  13.469  12.046  10.492   9.467 
+ 13.408  12.794  12.002  11.588  11.833  12.573  13.334  13.661  13.366  12.574  11.580  10.681  10.075   9.829   9.875  10.037  10.096   9.938   9.675   9.623  10.101  11.165  12.501  13.583  14.017  13.805  13.319  13.015  13.098  13.402  13.551  13.249  12.475  11.468  10.565  10.043 
+ 13.176  12.626  11.930  11.564  11.707  12.150  12.516  12.569  12.321  11.902  11.376  10.722   9.984   9.372   9.165   9.457  10.023  10.458  10.520  10.341  10.294  10.628  11.205  11.605  11.519  11.059  10.682  10.789  11.372  12.024  12.311  12.142  11.805  11.658  11.791  11.984 
+ 13.515  12.961  12.259  11.870  11.938  12.226  12.387  12.274  11.988  11.669  11.293  10.716   9.933   9.219   8.970   9.346  10.076  10.657  10.796  10.651  10.640  10.957  11.303  11.119  10.153   8.808   7.925   8.122   9.287  10.669  11.498  11.570  11.296  11.220  11.496  11.817 
+ 13.455  12.996  12.411  12.080  12.122  12.346  12.478  12.399  12.177  11.893  11.496  10.878  10.088   9.420   9.224   9.582  10.186  10.582  10.582  10.442  10.586  11.111  11.565  11.268   9.952   8.138   6.867   6.953   8.369  10.280  11.676  12.069  11.689  11.117  10.757  10.642 
+ 13.325  12.928  12.435  12.162  12.158  12.204  12.081  11.796  11.541  11.422  11.285  10.855  10.075   9.268   8.917   9.225   9.897  10.387  10.409  10.211  10.305  10.885  11.497  11.345  10.017   7.985   6.390   6.225   7.605   9.703  11.399  12.053  11.803  11.226  10.792  10.615 
+ 12.802  12.434  11.979  11.722  11.700  11.715  11.598  11.401  11.303  11.333  11.231  10.659   9.589   8.443   7.796   7.873   8.342   8.645   8.573   8.511   9.061  10.341  11.666  11.984  10.763   8.546   6.639   6.143   7.158   8.804  10.020  10.379  10.255  10.272  10.641  11.035 
+ 12.203  11.892  11.546  11.421  11.489  11.483  11.212  10.783  10.481  10.405  10.273   9.658   8.455   7.118   6.363   6.578   7.486   8.413   8.912   9.149   9.646  10.623  11.598  11.702  10.471   8.385   6.610   6.126   6.986   8.366   9.326   9.568   9.532   9.809  10.489  11.090 
+ 12.418  11.835  11.097  10.697  10.798  11.161  11.417  11.369  11.053  10.543   9.806   8.795   7.688   6.948   7.028   7.956   9.211  10.094  10.312  10.210  10.413  11.155  11.954  11.980  10.832   9.002   7.567   7.327   8.168   9.195   9.526   9.013   8.259   7.967   8.271   8.690 
+ 11.245  11.167  11.170  11.380  11.714  11.916  11.767  11.265  10.590   9.917   9.295   8.733   8.374   8.523   9.395  10.805  12.141  12.730  12.364  11.489  10.859  10.904  11.360  11.515  10.852   9.538   8.306   7.850   8.266   9.030   9.497   9.443   9.156   9.062   9.280   9.545 
+ 10.455  10.409  10.455  10.705  11.102  11.437  11.521  11.331  10.971  10.521   9.949   9.216   8.469   8.098   8.499   9.713  11.269  12.421  12.649  12.015  11.089  10.484  10.405  10.569  10.534  10.111   9.512   9.120   9.153   9.515   9.949  10.295  10.593  10.953  11.361  11.651 
+  9.094   9.010   8.999   9.186   9.499   9.711   9.658   9.406   9.172   9.071   8.961   8.577   7.853   7.108   6.876   7.479   8.711   9.948  10.601  10.540  10.122   9.836   9.890  10.107  10.185  10.033   9.845   9.888  10.216  10.635  10.929  11.099  11.367  11.912  12.627  13.147 
+  8.325   8.057   7.873   8.090   8.616   8.971   8.721   7.902   7.016   6.604   6.782   7.189   7.377   7.268   7.220   7.650   8.588   9.585  10.093   9.934   9.447   9.168   9.369   9.873  10.286  10.394  10.332  10.400  10.745  11.235  11.629  11.844  12.025  12.349  12.801  13.143 
+  7.500   7.570   7.687   7.817   7.927   8.001   8.041   8.069   8.118   8.214   8.358   8.517   8.648   8.736   8.826   9.002   9.317   9.727  10.081  10.209  10.044   9.690   9.368   9.268   9.424   9.708   9.955  10.123  10.327  10.739  11.419  12.232  12.930  13.328  13.434  13.410 
+  6.472   6.779   7.143   7.304   7.232   7.150   7.302   7.709   8.133   8.296   8.143   7.905   7.896   8.252   8.824   9.332   9.598   9.665   9.698   9.800   9.933   9.991   9.950   9.906   9.980  10.198  10.479  10.745  11.035  11.475  12.136  12.913  13.563  13.892  13.916  13.834 
+  7.525   7.227   6.853   6.682   6.854   7.296   7.805   8.202   8.437   8.563   8.652   8.744   8.857   9.029   9.316   9.731  10.199  10.577  10.750  10.723  10.615  10.564  10.623  10.733  10.804  10.811  10.831  10.983  11.328  11.836  12.420  13.009  13.574  14.099  14.532  14.784 
+  9.769   9.568   9.310   9.167   9.206   9.342   9.412   9.297   9.002   8.635   8.326   8.163   8.192   8.449   8.970   9.736  10.617  11.373  11.759  11.676  11.255  10.797  10.597  10.771  11.203  11.647  11.908  11.971  11.989  12.152  12.548  13.104  13.653  14.052  14.260  14.333 
+ 10.296  10.691  11.318  11.958  12.447  12.717  12.734  12.450  11.831  10.944  10.017   9.365   9.229   9.620  10.317  11.001  11.433  11.552  11.449  11.282  11.203  11.309  11.621  12.037  12.350  12.343  11.959  11.411  11.107  11.386  12.251  13.316  14.048  14.154  13.784  13.402 
+ 12.135  11.956  11.996  12.647  13.853  15.064  15.620  15.254  14.266  13.236  12.546  12.154  11.777  11.289  10.916  11.021  11.693  12.531  12.890  12.410  11.377  10.565  10.661  11.694  12.969  13.550  12.955  11.516  10.133   9.627  10.168  11.212  11.948  11.910  11.286  10.705 
+ 13.063  12.538  12.084  12.371  13.551  15.088  16.155  16.239  15.459  14.380  13.521  13.022  12.720  12.478  12.409  12.745  13.495  14.258  14.435  13.722  12.434  11.366  11.214  12.018  13.078  13.452  12.652  11.029   9.515   8.950   9.479  10.485  11.087  10.808   9.909   9.146 
+ 13.027  12.540  12.062  12.172  13.064  14.389  15.530  16.039  15.879  15.322  14.656  14.006  13.400  12.945  12.871  13.357  14.283  15.189  15.540  15.105  14.149  13.248  12.874  13.063  13.433  13.510  13.095  12.387  11.791  11.586  11.724  11.890  11.758  11.240  10.553  10.070 
+ 12.816  12.333  11.851  11.952  12.857  14.255  15.536  16.210  16.176  15.659  14.942  14.169  13.374  12.679  12.375  12.770  13.882  15.280  16.272  16.343  15.521  14.372  13.586  13.485  13.816  14.004  13.651  12.864  12.168  12.047  12.519  13.077  13.076  12.258  10.997  10.062 
+ 12.396  12.096  11.780  11.835  12.504  13.705  15.052  16.051  16.360  15.940  15.012  13.890  12.842  12.066  11.742  12.025  12.917  14.124  15.092  15.304  14.656  13.599  12.845  12.822  13.320  13.659  13.291  12.344  11.583  11.768  12.918  14.138  14.248  12.759  10.377   8.591 
+ 12.283  12.149  12.042  12.203  12.826  13.916  15.226  16.338  16.854  16.600  15.704  14.524  13.476  12.888  12.932  13.596  14.661  15.702  16.201  15.797  14.550  13.003  11.900  11.718  12.331  13.121  13.465  13.226  12.827  12.824  13.327  13.814  13.525  12.152  10.224   8.826 
+ 12.231  12.072  11.948  12.123  12.769  13.843  15.093  16.164  16.742  16.673  16.008  14.989  13.969  13.308  13.246  13.805  14.750  15.672  16.157  15.983  15.219  14.173  13.207  12.552  12.232  12.131  12.146  12.272  12.563  12.996  13.374  13.387  12.807  11.700  10.463   9.648 
+ 12.126  11.952  11.788  11.890  12.433  13.413  14.639  15.803  16.583  16.739  16.205  15.151  13.972  13.162  13.091  13.793  14.912  15.885  16.258  15.945  15.253  14.642  14.394  14.440  14.456  14.159  13.562  12.984  12.808  13.158  13.747  14.032  13.577  12.379  10.930   9.948 
+ 11.802  11.696  11.623  11.791  12.369  13.381  14.660  15.876  16.643  16.687  15.983  14.815  13.684  13.096  13.307  14.175  15.214  15.853  15.752  14.993  14.003  13.265  13.002  13.049  13.024  12.659  12.050  11.629  11.832  12.709  13.771  14.225  13.479  11.592   9.344   7.829 
+ 11.711  11.676  11.673  11.832  12.313  13.220  14.493  15.849  16.851  17.098  16.459  15.193  13.871  13.105  13.232  14.132  15.301  16.148  16.318  15.871  15.190  14.695  14.557  14.606  14.494  13.989  13.192  12.502  12.330  12.780  13.503  13.881  13.423  12.125  10.532   9.446 
+ 11.687  11.701  11.754  11.930  12.376  13.221  14.447  15.792  16.798  17.034  16.364  15.086  13.817  13.169  13.396  14.260  15.197  15.676  15.520  14.967  14.451  14.268  14.368  14.420  14.096  13.353  12.503  12.018  12.196  12.918  13.672  13.836  13.058  11.492   9.756   8.625 
+ 12.013  12.009  12.056  12.257  12.726  13.542  14.666  15.882  16.825  17.116  16.588  15.457  14.277  13.667  13.931  14.847  15.799  16.194  15.866  15.164  14.654  14.653  14.970  15.069  14.521  13.395  12.261  11.800  12.310  13.466  14.508  14.695  13.740  11.954  10.068   8.876 
+ 11.889  11.772  11.712  11.925  12.522  13.454  14.563  15.644  16.464  16.777  16.415  15.453  14.306  13.576  13.696  14.592  15.676  16.240  15.964  15.143  14.416  14.226  14.459  14.576  14.126  13.185  12.340  12.216  12.952  14.053  14.728  14.419  13.126  11.337   9.708   8.762 
+ 11.737  11.652  11.615  11.803  12.324  13.176  14.261  15.402  16.349  16.801  16.539  15.612  14.436  13.639  13.688  14.547  15.650  16.274  16.044  15.184  14.302  13.881  13.896  13.881  13.382  12.397  11.440  11.143  11.750  12.888  13.791  13.787  12.701  10.914   9.131   8.038 
+ 11.350  11.421  11.552  11.758  12.125  12.793  13.860  15.222  16.499  17.157  16.832  15.646  14.255  13.490  13.797  14.890  15.920  16.094  15.272  14.059  13.302  13.386  13.918  14.073  13.312  11.875  10.623  10.372  11.266  12.674  13.671  13.669  12.725  11.360  10.160   9.492 
+ 11.439  11.554  11.745  11.988  12.347  12.972  13.996  15.345  16.639  17.305  16.945  15.702  14.310  13.686  14.290  15.730  16.987  17.144  16.085  14.573  13.632  13.708  14.313  14.464  13.544  11.867  10.467  10.280  11.407  13.043  14.080  13.869  12.557  10.820   9.355   8.561 
+ 11.621  11.760  11.974  12.217  12.553  13.151  14.141  15.424  16.596  17.125  16.719  15.627  14.597  14.418  15.340  16.802  17.768  17.460  15.952  14.142  13.077  13.153  13.831  14.101  13.326  11.779  10.437  10.211  11.243  12.809  13.853  13.704  12.421  10.622   9.024   8.121 
+ 11.456  11.668  11.945  12.184  12.492  13.140  14.291  15.734  16.906  17.237  16.597  15.465  14.657  14.768  15.738  16.884  17.377  16.830  15.550  14.294  13.710  13.888  14.345  14.416  13.752  12.555  11.405  10.838  10.993  11.554  11.989  11.888  11.175  10.096   9.057   8.431 
+ 11.144  11.355  11.642  11.909  12.259  12.949  14.124  15.571  16.728  17.030  16.356  15.201  14.402  14.547  15.520  16.547  16.736  15.738  14.017  12.520  11.981  12.394  13.054  13.120  12.265  10.914   9.907   9.862  10.745  11.921  12.620  12.430  11.475  10.220   9.149   8.558 
+ 11.016  11.212  11.468  11.708  12.088  12.894  14.232  15.769  16.836  16.883  15.952  14.737  14.137  14.598  15.747  16.638  16.431  15.011  13.069  11.608  11.241  11.796  12.504  12.582  11.788  10.550   9.640   9.638  10.565  11.894  12.885  12.992  12.121  10.628   9.122   8.192 
+ 11.461  11.605  11.820  12.112  12.647  13.628  15.012  16.363  17.053  16.728  15.657  14.628  14.401  15.124  16.186  16.644  15.927  14.253  12.475  11.467  11.532  12.258  12.870  12.787  11.979  10.925  10.256  10.369  11.215  12.354  13.180  13.207  12.291  10.710   9.062   8.019 
+ 11.784  11.804  11.890  12.164  12.802  13.881  15.208  16.311  16.696  16.212  15.242  14.500  14.527  15.273  16.102  16.242  15.362  13.811  12.360  11.632  11.678  11.996  11.946  11.235  10.113   9.174   8.945   9.571  10.748  11.929  12.595  12.477  11.628  10.369   9.157   8.421 
+ 11.415  11.452  11.564  11.870  12.549  13.669  14.991  15.989  16.163  15.462  14.420  13.835  14.158  15.106  15.823  15.525  14.109  12.236  10.839  10.445  10.853  11.382  11.421  10.846  10.002   9.370   9.237   9.594  10.249  10.970  11.533  11.717  11.370  10.543   9.557   8.887 
+ 11.065  11.104  11.252  11.668  12.525  13.823  15.222  16.122  16.034  15.015  13.752  13.147  13.641  14.829  15.700  15.388  13.824  11.805  10.396  10.172  10.872  11.687  11.904  11.365  10.458   9.729   9.508   9.791  10.370  10.997  11.449  11.519  11.070  10.161   9.117   8.417 
+ 11.232  11.271  11.474  12.021  13.009  14.302  15.490  16.057  15.708  14.644  13.529  13.096  13.635  14.738  15.540  15.309  13.973  12.180  10.854  10.577  11.232  12.160  12.644  12.372  11.558  10.719  10.313  10.496  11.098  11.759  12.103  11.882  11.058   9.840   8.631   7.879 
+ 10.182  10.516  11.204  12.242  13.531  14.822  15.744  15.958  15.374  14.284  13.277  12.915  13.380  14.327  15.076  15.050  14.135  12.741  11.508  10.900  10.953  11.334  11.623  11.575  11.219  10.754  10.382  10.208  10.228  10.375  10.562  10.699  10.719  10.611  10.439  10.311 
+  9.227   9.093   9.226  10.061  11.637  13.427  14.610  14.586  13.390  11.696  10.429  10.220  11.063  12.356  13.288  13.297  12.337  10.844   9.448   8.623   8.481   8.784   9.147   9.274   9.101   8.773   8.489   8.359   8.355   8.387   8.417   8.510   8.771   9.219   9.723  10.062 
+  8.956   9.310  10.063  11.191  12.480  13.531  13.929  13.482  12.378  11.127  10.316  10.297  11.020  12.067  12.892  13.086  12.546  11.470  10.206   9.079   8.276   7.831   7.672   7.694   7.797   7.902   7.953   7.929   7.864   7.841   7.972   8.337   8.937   9.663  10.323  10.717 
+  6.075   5.945   6.019   6.703   8.123   9.911  11.307  11.556  10.387   8.258   6.171   5.139   5.606   7.189   8.922   9.833   9.484   8.160   6.609   5.556   5.326   5.753   6.389   6.805   6.786   6.372   5.761   5.201   4.890   4.934   5.315   5.909   6.536   7.046   7.368   7.514 
+  5.861   5.896   6.008   6.306   6.931   7.909   8.993   9.686   9.512   8.391   6.809   5.591   5.385   6.226   7.520   8.452   8.523   7.823   6.864   6.178   5.979   6.122   6.306   6.299   6.038   5.591   5.082   4.661   4.480   4.626   5.034   5.465   5.633   5.411   4.946   4.576 
+  6.616   6.156   5.624   5.548   6.238   7.556   8.949   9.749   9.559   8.491   7.104   6.085   5.854   6.345   7.092   7.539   7.375   6.682   5.836   5.239   5.087   5.286   5.554   5.616   5.351   4.838   4.287   3.913   3.829   3.999   4.258   4.406   4.310   3.983   3.576   3.299 
+  4.799   4.525   4.295   4.529   5.448   6.878   8.305   9.130   9.003   8.019   6.666   5.562   5.129   5.393   6.024   6.558   6.664   6.300   5.676   5.089   4.733   4.622   4.623   4.589   4.452   4.257   4.104   4.064   4.130   4.227   4.259   4.172   3.972   3.719   3.493   3.361 
+  5.209   4.850   4.402   4.282   4.825   6.043   7.532   8.620   8.743   7.806   6.278   4.924   4.339   4.612   5.345   5.979   6.163   5.886   5.359   4.786   4.252   3.776   3.408   3.229   3.264   3.412   3.512   3.495   3.462   3.586   3.907   4.220   4.213   3.739   3.000   2.446 
+  2.922   3.366   4.086   4.916   5.822   6.830   7.812   8.385   8.111   6.880   5.135   3.674   3.139   3.575   4.444   5.054   5.066   4.656   4.253   4.135   4.246   4.338   4.255   4.052   3.874   3.772   3.662   3.479   3.312   3.342   3.622   3.924   3.871   3.273   2.361   1.679 
+  5.768   5.173   4.406   4.036   4.412   5.436   6.628   7.414   7.458   6.824   5.886   5.085   4.695   4.739   5.051   5.410   5.640   5.637   5.364   4.858   4.244   3.710   3.421   3.410   3.539   3.590   3.428   3.120   2.893   2.942   3.250   3.558   3.550   3.109   2.439   1.944 
+  5.529   5.467   5.367   5.357   5.655   6.379   7.312   7.908   7.643   6.479   5.022   4.146   4.341   5.334   6.303   6.528   5.918   4.980   4.307   4.090   4.068   3.918   3.621   3.452   3.607   3.918   3.969   3.542   2.907   2.625   3.003   3.727   4.070   3.545   2.394   1.453 
+  4.497   4.438   4.267   4.042   4.026   4.494   5.391   6.226   6.394   5.718   4.688   4.130   4.518   5.554   6.411   6.426   5.636   4.678   4.170   4.189   4.324   4.194   3.873   3.785   4.165   4.695   4.731   3.944   2.749   2.020   2.322   3.356   4.178   4.043   3.079   2.180 
+  5.602   5.991   6.620   7.312   7.978   8.610   9.164   9.496   9.444   9.002   8.415   8.056   8.157   8.630   9.135   9.358   9.247   9.008   8.879   8.899   8.896   8.683   8.279   7.922   7.866   8.157   8.597   8.921   9.022   9.010   9.064   9.249   9.460   9.552   9.497   9.407 
+  7.363   7.553   7.844   8.168   8.553   9.057   9.608   9.948   9.794   9.108   8.224   7.666   7.769   8.420   9.161   9.551   9.493   9.239   9.092   9.107   9.066   8.750   8.204   7.757   7.736   8.177   8.786   9.196   9.270   9.187   9.230   9.520   9.924  10.223  10.321  10.306 
+  5.040   5.327   5.760   6.163   6.438   6.599   6.703   6.754   6.686   6.455   6.140   5.958   6.131   6.705   7.463   8.046   8.192   7.931   7.568   7.456   7.723   8.180   8.482   8.416   8.085   7.834   7.982   8.568   9.322   9.891  10.118  10.158  10.320  10.784  11.423  11.889 
+  5.959   5.812   5.651   5.607   5.678   5.753   5.758   5.777   6.004   6.559   7.336   8.050   8.459   8.555   8.569   8.758   9.186   9.686  10.024  10.106  10.031   9.972  10.001  10.050  10.020   9.920   9.885  10.052  10.424  10.880  11.298  11.689  12.167  12.800  13.472  13.917 
+  7.799   7.006   6.030   5.600   6.008   6.936   7.772   8.123   8.053   7.923   8.016   8.330   8.683   8.964   9.256   9.707  10.310  10.853  11.092  10.988  10.757  10.672  10.822  11.045  11.115  10.976  10.808  10.855  11.194  11.681  12.103  12.386  12.632  12.970  13.379  13.673 
+  6.834   6.881   7.111   7.610   8.250   8.717   8.754   8.386   7.929   7.752   7.998   8.506   8.987   9.285   9.484   9.777  10.241  10.739  11.031  10.994  10.726  10.471  10.418  10.580  10.834  11.054  11.215  11.372  11.575  11.818  12.074  12.360  12.727  13.192  13.664  13.971 
+  8.121   8.241   8.351   8.301   8.052   7.730   7.544   7.649   8.033   8.534   8.949   9.168   9.235   9.296   9.491   9.855  10.304  10.693  10.911  10.943  10.867  10.799  10.819  10.932  11.076  11.170  11.184  11.160  11.201  11.408  11.824  12.404  13.041  13.610  14.024  14.237 
+  8.559   8.435   8.278   8.218   8.339   8.626   8.975   9.259   9.410   9.449   9.449   9.459   9.467   9.437   9.392   9.437   9.695  10.183  10.735  11.084  11.045  10.661  10.193   9.928   9.980  10.233  10.490  10.678  10.925  11.429  12.233  13.119  13.740  13.886  13.661  13.404 
+  8.791   8.129   7.339   7.048   7.495   8.384   9.185   9.561   9.555   9.412   9.283   9.129   8.883   8.667   8.780   9.424  10.437  11.318  11.584  11.157  10.435   9.978  10.077  10.563  11.017  11.150  11.029  10.965  11.212  11.766  12.406  12.907  13.198  13.350  13.447  13.507 
+  7.389   7.276   7.176   7.258   7.625   8.240   8.943   9.523   9.826   9.813   9.554   9.196   8.906   8.844   9.115   9.712  10.471  11.098  11.303  10.997  10.396   9.935   9.983  10.571  11.325  11.723  11.495  10.874  10.463  10.791  11.886  13.212  14.041  13.992  13.318  12.700 
+  8.964   9.460  10.313  11.282  12.098  12.549  12.553  12.155  11.464  10.588   9.625   8.722   8.109   8.038   8.611   9.630  10.610  11.022  10.626   9.663   8.733   8.421   8.918   9.904  10.779  11.070  10.737  10.164   9.869  10.156  10.930  11.808  12.385  12.494  12.278  12.048 
+ 11.283  11.220  11.438  12.243  13.506  14.635  14.959  14.235  12.824  11.422  10.577  10.400  10.646  11.029  11.429  11.837  12.141  12.053  11.301   9.939   8.469   7.603   7.806   8.966  10.451  11.507  11.716  11.186  10.397   9.844   9.759  10.065  10.514  10.888  11.102  11.182 
+ 11.541  11.508  11.743  12.537  13.815  15.068  15.640  15.172  13.861  12.329  11.232  10.901  11.253  11.972  12.737  13.315  13.490  13.016  11.739   9.836   7.936   6.903   7.329   9.079  11.266  12.761  12.917  11.984  10.895  10.554  11.159  12.081  12.394  11.638  10.216   9.105 
+ 11.936  11.902  12.109  12.826  14.007  15.223  15.905  15.718  14.757  13.456  12.303  11.603  11.433  11.742  12.417  13.241  13.836  13.744  12.708  10.960   9.250   8.481   9.128  10.858  12.680  13.560  13.115  11.865  10.849  10.865  11.888  13.104  13.526  12.748  11.260  10.104 
+ 11.565  11.577  11.803  12.458  13.531  14.714  15.541  15.655  15.008  13.868  12.665  11.786  11.461  11.738  12.502  13.478  14.251  14.382  13.630  12.170  10.613   9.737  10.025  11.319  12.861  13.753  13.540  12.513  11.487  11.206  11.814  12.768  13.282  12.940  12.017  11.249 
+ 11.279  11.080  11.065  11.652  12.907  14.417  15.545  15.835  15.258  14.147  12.947  11.988  11.458  11.459  12.025  13.015  14.030  14.514  14.083  12.837  11.405  10.602  10.898  12.091  13.421  14.085  13.758  12.778  11.863  11.593  12.035  12.751  13.170  13.005  12.444  11.967 
+ 11.453  11.226  11.154  11.669  12.862  14.358  15.537  15.922  15.429  14.337  13.066  11.986  11.352  11.324  11.933  12.981  14.001  14.420  13.899  12.623  11.272  10.627  11.062  12.273  13.482  13.959  13.509  12.559  11.819  11.765  12.325  12.974  13.141  12.629  11.745  11.077 
+ 11.621  11.513  11.558  12.044  13.025  14.238  15.261  15.749  15.572  14.811  13.681  12.495  11.644  11.491  12.160  13.347  14.377  14.571  13.709  12.244  11.042  10.813  11.628  12.904  13.848  14.006  13.509  12.874  12.556  12.640  12.867  12.899  12.581  12.017  11.446  11.098 
+ 11.381  11.280  11.318  11.767  12.685  13.846  14.869  15.433  15.403  14.828  13.891  12.884  12.186  12.154  12.908  14.146  15.201  15.403  14.529  13.012  11.702  11.313  11.957  13.109  14.014  14.204  13.747  13.079  12.616  12.475  12.481  12.392  12.102  11.687  11.307  11.087 
+ 11.104  10.833  10.663  11.031  12.076  13.509  14.791  15.456  15.330  14.549  13.431  12.362  11.720  11.784  12.579  13.755  14.649  14.619  13.466  11.637   9.996   9.298   9.721  10.799  11.800  12.231  12.103  11.788  11.646  11.744  11.858  11.705  11.176  10.405   9.666   9.222 
+ 11.227  11.055  11.004  11.416  12.399  13.724  14.961  15.717  15.797  15.229  14.224  13.132  12.395  12.390  13.198  14.443  15.407  15.442  14.420  12.873  11.661  11.392  12.024  12.953  13.509  13.434  12.976  12.586  12.501  12.593  12.563  12.248  11.751  11.306  11.059  10.980 
+ 11.589  11.484  11.515  11.947  12.836  13.972  15.015  15.685  15.833  15.429  14.547  13.436  12.551  12.389  13.148  14.449  15.447  15.357  14.039  12.184  10.859  10.756  11.715  12.898  13.472  13.211  12.542  12.079  12.069  12.264  12.247  11.869  11.357  11.052  11.058  11.180 
+ 11.461  11.485  11.631  12.028  12.742  13.708  14.720  15.481  15.711  15.276  14.306  13.204  12.502  12.582  13.409  14.488  15.103  14.759  13.506  11.929  10.773  10.471  10.901  11.546  11.897  11.802  11.481  11.266  11.295  11.420  11.366  10.973  10.316   9.618   9.084   8.810 
+ 11.233  11.131  11.149  11.552  12.426  13.596  14.714  15.433  15.534  14.991  13.989  12.913  12.265  12.435  13.426  14.719  15.482  15.065  13.470  11.415   9.897   9.540  10.213  11.200  11.767  11.663  11.188  10.818  10.768  10.861  10.768  10.339   9.727   9.212   8.945   8.870 
+ 11.395  11.256  11.232  11.624  12.538  13.785  14.975  15.716  15.778  15.164  14.115  13.060  12.497  12.772  13.833  15.147  15.924  15.587  14.183  12.406  11.161  10.968  11.645  12.510  12.917  12.693  12.144  11.684  11.460  11.292  10.936  10.384   9.889   9.710   9.850  10.050 
+ 11.669  11.571  11.589  11.976  12.813  13.924  14.969  15.618  15.690  15.198  14.340  13.463  12.969  13.140  13.942  14.952  15.534  15.229  14.084  12.661  11.674  11.507  11.984  12.568  12.803  12.633  12.346  12.221  12.246  12.143  11.679  10.931  10.250   9.953  10.045  10.237 
+ 11.623  11.568  11.602  11.907  12.573  13.518  14.503  15.230  15.463  15.136  14.398  13.590  13.107  13.202  13.820  14.576  14.947  14.589  13.581  12.402  11.652  11.667  12.322  13.139  13.614  13.520  12.980  12.293  11.695  11.240  10.854  10.473  10.119   9.861   9.729   9.689 
+ 11.394  11.157  10.929  11.033  11.647  12.687  13.851  14.770  15.169  14.972  14.330  13.577  13.108  13.188  13.786  14.530  14.894  14.529  13.515  12.354  11.650  11.717  12.390  13.179  13.624  13.563  13.130  12.531  11.847  11.046  10.155   9.388   9.045   9.259   9.821  10.284 
+ 11.091  11.089  11.060  11.066  11.307  12.006  13.161  14.416  15.210  15.151  14.341  13.351  12.847  13.126  13.930  14.658  14.798  14.256  13.350  12.544  12.153  12.229  12.638  13.197  13.727  14.048  13.971  13.382  12.343  11.132  10.131   9.642   9.738  10.245  10.848  11.240 
+ 11.808  11.475  10.962  10.581  10.709  11.556  12.930  14.230  14.775  14.281  13.103  12.024  11.717  12.291  13.272  14.005  14.123  13.717  13.127  12.618  12.235  11.937  11.783  11.930  12.431  13.049  13.329  12.921  11.875  10.649   9.797   9.595   9.921  10.424  10.817  11.004 
+ 10.844  11.102  11.307  11.233  11.076  11.319  12.197  13.324  13.919  13.487  12.343  11.425  11.522  12.601  13.834  14.318  13.813  12.835  12.095  11.837  11.734  11.385  10.852  10.666  11.259  12.398  13.227  12.927  11.432   9.525   8.245   8.124   8.908   9.917  10.631  10.938 
+ 10.006  10.616  11.191  11.134  10.562  10.236  10.795  12.045  13.045  12.962  11.885  10.813  10.771  11.890  13.280  13.823  13.128  11.786  10.732  10.387  10.387  10.116   9.449   8.922   9.174  10.212  11.263  11.383  10.273   8.551   7.250   7.030   7.778   8.873   9.743  10.171 
+ 10.082  10.331  10.402   9.973   9.294   9.057   9.718  10.962  11.873  11.741  10.739   9.816   9.860  10.886  12.011  12.248  11.364  10.031   9.151   9.039   9.230   9.058   8.400   7.836   8.056   9.115  10.258  10.514   9.520   7.829   6.461   6.132   6.821   7.959   8.944   9.468 
+  9.232   9.434   9.496   9.117   8.417   7.893   7.980   8.628   9.328   9.561   9.257   8.826   8.745   9.107   9.564   9.692   9.394   8.946   8.657   8.528   8.279   7.723   7.076   6.853   7.387   8.431   9.255   9.207   8.249   6.998   6.229   6.299   6.966   7.705   8.164   8.329 
+  8.254   8.123   7.641   6.707   5.641   5.087   5.540   6.891   8.445   9.415   9.504   9.069   8.751   8.920   9.404   9.711   9.497   8.833   8.087   7.566   7.295   7.102   6.879   6.723   6.825   7.228   7.732   8.038   7.999   7.732   7.492   7.441   7.542   7.649   7.673   7.647 
+  7.188   7.075   6.692   6.002   5.315   5.151   5.807   7.014   8.053   8.288   7.672   6.781   6.351   6.696   7.518   8.211   8.358   7.976   7.363   6.768   6.233   5.722   5.330   5.295   5.768   6.591   7.332   7.615   7.420   7.088   7.006   7.269   7.640   7.811   7.713   7.547 
+  4.346   4.366   4.460   4.702   5.131   5.710   6.322   6.811   7.057   7.040   6.862   6.690   6.662   6.802   7.001   7.084   6.936   6.580   6.171   5.896   5.844   5.946   6.033   5.959   5.717   5.448   5.342   5.510   5.909   6.377   6.747   6.936   6.969   6.929   6.886   6.865 
+  4.372   4.540   4.845   5.231   5.639   6.028   6.375   6.655   6.806   6.735   6.390   5.840   5.300   5.021   5.114   5.441   5.687   5.591   5.163   4.705   4.589   4.964   5.618   6.129   6.180   5.795   5.308   5.098   5.321   5.824   6.308   6.551   6.536   6.390   6.250   6.177 
+  4.331   4.539   4.891   5.314   5.767   6.209   6.527   6.545   6.145   5.416   4.686   4.347   4.590   5.268   5.998   6.439   6.499   6.331   6.141   6.009   5.881   5.708   5.546   5.505   5.602   5.687   5.560   5.190   4.799   4.708   5.033   5.540   5.795   5.534   4.912   4.399 
+  5.761   5.468   5.142   5.106   5.499   6.160   6.723   6.846   6.411   5.581   4.700   4.122   4.067   4.558   5.423   6.366   7.068   7.313   7.093   6.603   6.135   5.902   5.905   5.955   5.829   5.454   4.995   4.750   4.958   5.616   6.466   7.137   7.365   7.134   6.679   6.333 
+  4.812   4.588   4.314   4.207   4.380   4.768   5.178   5.406   5.331   4.951   4.392   3.889   3.741   4.200   5.301   6.756   8.014   8.528   8.082   6.948   5.746   5.062   5.095   5.569   5.975   5.952   5.532   5.080   5.003   5.454   6.229   6.922   7.198   6.992   6.532   6.173 
+  5.089   4.668   4.143   3.891   4.052   4.452   4.779   4.842   4.683   4.474   4.346   4.325   4.414   4.690   5.265   6.128   7.031   7.575   7.483   6.825   5.990   5.409   5.238   5.280   5.197   4.829   4.350   4.125   4.412   5.153   6.005   6.580   6.679   6.374   5.923   5.611 
+  4.546   4.158   3.641   3.330   3.415   3.825   4.299   4.563   4.492   4.161   3.777   3.569   3.677   4.094   4.661   5.136   5.307   5.126   4.756   4.478   4.501   4.801   5.113   5.128   4.721   4.065   3.503   3.305   3.481   3.807   4.019   4.012   3.872   3.754   3.731   3.756 
+  5.325   5.095   4.871   4.892   5.177   5.503   5.629   5.509   5.309   5.213   5.234   5.239   5.140   5.062   5.260   5.859   6.665   7.252   7.294   6.831   6.235   5.900   5.931   6.115   6.178   6.061   5.962   6.101   6.467   6.807   6.847   6.556   6.165   5.946   5.968   6.072 
+  7.658   7.813   8.112   8.492   8.824   8.974   8.911   8.742   8.629   8.652   8.743   8.782   8.757   8.832   9.229  10.001  10.912  11.551  11.612  11.116  10.383   9.798   9.555   9.588   9.726   9.872  10.063  10.358  10.703  10.928  10.887  10.600  10.249  10.029   9.992  10.034 
+  5.766   6.104   6.583   6.931   6.966   6.708   6.356   6.141   6.155   6.289   6.333   6.176   5.943   5.944   6.449   7.456   8.629   9.482   9.671   9.203   8.396   7.656   7.243   7.182   7.349   7.618   7.930   8.257   8.537   8.668   8.588   8.342   8.065   7.888   7.841   7.858 
+  5.260   6.149   7.341   8.028   7.699   6.480   5.073   4.303   4.569   5.576   6.562   6.865   6.421   5.807   5.777   6.665   8.103   9.302   9.638   9.099   8.234   7.686   7.718   8.092   8.362   8.284   7.984   7.785   7.889   8.212   8.487   8.511   8.285   7.968   7.716   7.592 
+  5.819   6.021   6.295   6.489   6.551   6.545   6.568   6.656   6.761   6.820   6.830   6.855   6.970   7.210   7.579   8.071   8.667   9.271   9.676   9.652   9.125   8.312   7.650   7.518   7.955   8.616   9.028   8.960   8.588   8.316   8.401   8.725   8.907   8.670   8.114   7.652 
+  4.677   5.094   5.788   6.521   7.050   7.214   7.011   6.606   6.259   6.197   6.491   7.028   7.589   7.997   8.236   8.441   8.771   9.256   9.741   9.987   9.854   9.420   8.937   8.653   8.637   8.759   8.822   8.747   8.634   8.653   8.867   9.145   9.260   9.084   8.716   8.420 
+  5.530   6.119   6.833   7.122   6.798   6.172   5.780   5.944   6.528   7.082   7.240   7.024   6.825   7.080   7.930   9.116  10.166  10.711  10.697  10.349   9.989   9.819   9.837   9.890   9.805   9.516   9.114   8.807   8.794   9.136   9.680  10.128  10.205   9.853   9.286   8.865 
+  6.414   5.972   5.519   5.517   6.028   6.661   6.951   6.793   6.549   6.697   7.375   8.228   8.725   8.641   8.286   8.241   8.854   9.927  10.866  11.155  10.751  10.072   9.632   9.642   9.909  10.078   9.971   9.725   9.640   9.890  10.352  10.684  10.585  10.019   9.263   8.735 
+  4.643   5.125   5.978   6.961   7.733   7.997   7.687   7.063   6.589   6.645   7.260   8.085   8.654   8.744   8.559   8.574   9.153  10.229  11.318  11.851  11.594  10.810  10.051   9.747   9.918  10.225  10.305  10.087   9.832   9.866  10.244  10.659  10.669  10.085   9.169   8.485 
+  5.230   5.537   6.113   6.841   7.508   7.881   7.839   7.481   7.097   6.984   7.246   7.715   8.093   8.200   8.152   8.286   8.887   9.911  10.959  11.530  11.384  10.725  10.052   9.779   9.940  10.211  10.225   9.908   9.552   9.546  10.009  10.647  10.971  10.706  10.038   9.486 
+  4.830   5.583   6.653   7.469   7.694   7.392   6.904   6.567   6.511   6.650   6.816   6.907   6.939   7.032   7.351   8.041   9.123  10.407  11.497  11.971  11.661  10.823  10.021   9.754  10.089  10.615  10.791  10.399   9.732   9.336   9.523  10.085  10.475  10.292   9.653   9.092 
+  6.630   6.702   6.903   7.265   7.712   8.072   8.197   8.088   7.919   7.911   8.148   8.487   8.668   8.544   8.262   8.208   8.725   9.812  11.045  11.819  11.757  10.979  10.026   9.480   9.573  10.077  10.536  10.645  10.448  10.240  10.263  10.495  10.692  10.642  10.372  10.122 
+  7.022   6.653   6.313   6.405   6.925   7.454   7.566   7.262   6.995   7.249   8.059   8.927   9.254   8.895   8.337   8.321   9.218  10.698  11.967  12.367  11.844  10.925  10.271  10.207  10.582  10.998  11.162  11.057  10.856  10.727  10.705  10.720  10.697  10.624  10.537  10.481 
+  7.405   6.708   6.000   6.022   6.875   7.930   8.397   8.037   7.362   7.144   7.707   8.657   9.274   9.206   8.797   8.767   9.545  10.851  11.915  12.108  11.440  10.507   9.981  10.106  10.592  10.952  10.922  10.621  10.375  10.405  10.673  10.956  11.053  10.922  10.680  10.500 
+  7.098   6.762   6.438   6.547   7.234   8.210   8.927   8.961   8.327   7.480   7.008   7.217   7.957   8.785   9.342   9.614   9.867  10.335  10.948  11.364  11.278  10.730  10.117   9.863  10.065  10.406  10.465  10.126   9.709   9.695  10.249  11.015  11.367  10.944   9.997   9.227 
+  6.812   6.587   6.321   6.279   6.634   7.338   8.119   8.640   8.718   8.454   8.158   8.112   8.368   8.756   9.073   9.290   9.557  10.010  10.564  10.935  10.885  10.477  10.070  10.014  10.316  10.605  10.472   9.895   9.334   9.360  10.114  11.086  11.471  10.840   9.551   8.523 
+  5.843   5.850   6.089   6.790   7.922   9.135   9.948  10.071   9.588   8.880   8.350   8.175   8.268   8.461   8.703   9.104   9.770  10.613  11.310  11.512  11.121  10.413   9.863   9.801  10.178  10.628  10.788  10.606  10.368  10.418  10.812  11.220  11.174  10.480   9.436   8.665 
+  6.152   6.791   7.788   8.745   9.365   9.578   9.513   9.355   9.203   9.026   8.736   8.306   7.855   7.622   7.847   8.611   9.741  10.850  11.521  11.533  11.006  10.339   9.966  10.074  10.493  10.834  10.801  10.426  10.047  10.027  10.448  11.019  11.298  11.050  10.450   9.959 
+  5.443   6.106   7.121   8.078   8.723   9.070   9.293   9.522   9.697   9.620   9.141   8.334   7.523   7.136   7.476   8.540  10.000  11.340  12.101  12.107  11.554  10.893  10.566  10.737  11.196  11.523  11.404  10.872  10.284  10.039  10.254  10.664  10.835  10.524   9.891   9.386 
+  4.671   4.880   5.522   6.718   8.197   9.383   9.823   9.560   9.072   8.826   8.865   8.834   8.421   7.786   7.513   8.116   9.523  11.047  11.894  11.771  11.071  10.498  10.472  10.860  11.200  11.182  10.911  10.744  10.917  11.312  11.590  11.499  11.069  10.538  10.132   9.935 
+  5.799   6.067   6.556   7.170   7.791   8.322   8.734   9.064   9.345   9.540   9.543   9.275   8.813   8.408   8.369   8.850   9.724  10.637  11.217  11.303  11.006  10.592  10.292  10.174  10.178  10.235  10.352  10.592  10.979  11.426  11.757  11.805  11.524  11.019  10.496  10.170 
+  7.171   6.989   6.801   6.843   7.256   8.000   8.877   9.627  10.027   9.962   9.469   8.745   8.112   7.909   8.318   9.237  10.291  11.021  11.142  10.707  10.057   9.584   9.484   9.683   9.949  10.112  10.186  10.325  10.661  11.157  11.610  11.776  11.531  10.962  10.322   9.905 
+  5.701   6.039   6.658   7.444   8.236   8.872   9.256   9.386   9.328   9.155   8.889   8.533   8.143   7.899   8.054   8.784  10.001  11.314  12.185  12.242  11.519  10.463   9.676   9.545  10.027  10.724  11.190  11.238  11.019  10.843  10.904  11.133  11.288  11.191  10.896  10.641 
+  5.888   6.331   7.022   7.731   8.345   8.883   9.370   9.728   9.822   9.601   9.200   8.858   8.749   8.881   9.173   9.603  10.243  11.101  11.947  12.351  11.983  10.950   9.826   9.278   9.557  10.303  10.858  10.826  10.402  10.154  10.474  11.182  11.686  11.527  10.825  10.194 
+  9.306   8.800   8.173   7.914   8.262   9.073   9.960  10.578  10.798  10.687  10.364   9.917   9.437   9.106   9.167   9.762  10.754  11.729  12.224  12.036  11.365  10.667  10.331  10.416  10.673  10.793  10.695  10.588  10.786  11.400  12.189  12.674  12.466  11.558  10.381   9.565 
+  8.372   8.160   7.875   7.732   7.905   8.442   9.218   9.985  10.468  10.489  10.052   9.348   8.691   8.395   8.645   9.422  10.498  11.531  12.209  12.387  12.138  11.690  11.282  11.034  10.913  10.826  10.746  10.769  11.038  11.584  12.220  12.599  12.426  11.694  10.740  10.075 
+  4.452   5.459   6.983   8.394   9.323   9.787   9.987  10.030   9.853   9.376   8.700   8.097   7.828   7.965   8.423   9.119  10.072  11.273  12.490  13.254  13.149  12.189  10.914  10.045   9.943  10.369  10.755  10.765  10.608  10.802  11.590  12.590  13.042  12.486  11.241  10.226 
+  6.221   6.045   6.050   6.610   7.742   9.018   9.855   9.937   9.417   8.748   8.302   8.127   8.035   7.901   7.888   8.342   9.444  10.936  12.188  12.610  12.087  11.078  10.291  10.169  10.608  11.114  11.253  11.028  10.851  11.149  11.948  12.777  13.022  12.426  11.338  10.499 
+  6.610   6.260   6.075   6.614   7.943   9.497  10.464  10.378   9.434   8.295   7.573   7.436   7.629   7.841   8.049   8.515   9.467  10.771  11.916  12.365  11.968  11.093  10.356  10.163  10.438  10.760  10.758  10.443  10.180  10.347  10.969  11.644  11.842  11.338  10.423   9.718 
+  7.357   7.126   7.126   7.821   9.165  10.519  11.095  10.566   9.333   8.218   7.839   8.183   8.718   8.920   8.746   8.656   9.165  10.337  11.660  12.406  12.189  11.245  10.226   9.687   9.710   9.942   9.992   9.815   9.735  10.100  10.886  11.614  11.688  10.890   9.623   8.679 
+  6.976   6.311   5.843   6.487   8.315  10.360  11.328  10.618   8.796   7.143   6.658   7.361   8.432   9.011   8.932   8.788   9.304  10.615  12.083  12.800  12.327  11.043   9.821   9.340   9.597  10.028  10.056   9.608   9.146   9.221   9.946  10.857  11.267  10.831   9.851   9.060 
+  5.785   5.732   6.079   7.215   8.927  10.396  10.768   9.837   8.232   6.936   6.550   6.919   7.421   7.612   7.640   8.051   9.198  10.798  12.060  12.289  11.448  10.197   9.384   9.406   9.967  10.399  10.255   9.673   9.234   9.457  10.352  11.393  11.918  11.631  10.825  10.159 
+  6.930   6.754   6.897   7.817   9.375  10.787  11.177  10.261   8.579   7.073   6.391   6.490   6.858   7.074   7.207   7.682   8.796  10.334  11.657  12.173  11.775  10.892  10.119   9.774   9.744   9.712   9.506   9.279   9.352   9.903  10.762  11.494  11.699  11.292  10.574  10.034 
+  7.146   6.876   6.928   7.837   9.428  10.814  11.104  10.164   8.740   7.814   7.787   8.235   8.427   8.080   7.649   7.870   9.017  10.576  11.638  11.658  10.873  10.042   9.769  10.035  10.320  10.162   9.604   9.148   9.297  10.113  11.166  11.862  11.858  11.242  10.424   9.869 
+  6.493   6.588   7.113   8.283   9.766  10.767  10.628   9.413   7.910   7.027   7.076   7.591   7.831   7.496   7.022   7.174   8.331  10.091  11.549  11.981  11.360  10.279   9.426   9.081   9.050   9.000   8.851   8.844   9.277  10.177  11.203  11.862  11.837  11.195  10.329   9.733 
+  6.642   6.785   7.266   8.172   9.216   9.836   9.620   8.696   7.677   7.195   7.406   7.921   8.216   8.138   8.045   8.449   9.491  10.748  11.541  11.472  10.727   9.879   9.403   9.333   9.339   9.119   8.725   8.534   8.903   9.818  10.844  11.395  11.118  10.122   8.910   8.099 
+  9.361   8.469   7.502   7.389   8.369   9.764  10.521  10.053   8.678   7.331   6.820   7.265   8.150   8.862   9.203   9.444   9.936  10.672  11.240  11.172  10.390   9.317   8.567   8.483   8.909   9.377   9.525   9.385   9.313   9.629  10.293  10.895  10.961  10.341   9.364   8.640 
+  9.817   9.300   8.723   8.581   8.955   9.427   9.445   8.809   7.850   7.150   7.068   7.482   7.976   8.254   8.402   8.762   9.526  10.468  11.050  10.851   9.943   8.874   8.284   8.438   9.067   9.629   9.752   9.509   9.308   9.523  10.156  10.825  11.057  10.666   9.914   9.330 
+  7.229   7.039   7.131   7.909   9.174  10.142  10.057   8.852   7.259   6.240   6.237   6.904   7.512   7.647   7.557   7.854   8.877  10.314  11.408  11.553  10.746   9.535   8.560   8.115   8.076   8.169   8.273   8.482   8.926   9.568  10.189  10.547  10.556  10.316  10.018   9.827 
+  6.942   6.929   7.134   7.744   8.609   9.256   9.213   8.393   7.192   6.213   5.838   6.008   6.381   6.696   7.007   7.577   8.548   9.692  10.504  10.573   9.912   8.979   8.333   8.230   8.469   8.614   8.396   7.959   7.747   8.128   9.062  10.090  10.651  10.498   9.878   9.345 
+  8.201   8.038   7.983   8.257   8.729   8.958   8.583   7.701   6.849   6.572   6.949   7.516   7.693   7.332   6.910   7.143   8.355  10.122  11.520  11.789  10.885   9.473   8.413   8.142   8.446   8.754   8.657   8.231   7.928   8.162   8.949   9.887  10.459  10.420   9.960   9.543 
+  8.850   8.194   7.442   7.215   7.647   8.275   8.472   8.010   7.255   6.820   7.002   7.522   7.823   7.629   7.268   7.418   8.479  10.127  11.456  11.642  10.583   9.002   7.909   7.856   8.576   9.268   9.279   8.623   7.921   7.849   8.558   9.535  10.018   9.612   8.619   7.806 
+  9.864   9.207   8.284   7.610   7.477   7.778   8.111   8.091   7.634   6.991   6.537   6.476   6.726   7.053   7.333   7.675   8.285   9.179  10.034  10.364   9.902   8.882   7.925   7.600   7.989   8.643   8.975   8.761   8.314   8.175   8.590   9.245   9.517   9.032   8.034   7.233 
+  7.815   7.460   7.190   7.415   8.031   8.450   8.120   7.078   5.982   5.575   6.058   6.950   7.547   7.567   7.375   7.598   8.496   9.671  10.378  10.157   9.205   8.199   7.739   7.911   8.320   8.506   8.329   8.021   7.913   8.121   8.468   8.662   8.533   8.136   7.679   7.386 
+  7.723   7.688   7.763   8.020   8.275   8.176   7.516   6.499   5.662   5.472   5.939   6.586   6.852   6.584   6.193   6.331   7.322   8.843  10.112  10.442   9.723   8.470   7.423   7.037   7.242   7.606   7.717   7.473   7.083   6.836   6.863   7.064   7.228   7.216   7.061   6.916 
+  7.437   6.623   5.777   5.708   6.453   7.224   7.142   6.081   4.830   4.391   5.076   6.233   6.850   6.491   5.704   5.535   6.593   8.488  10.123  10.544   9.631   8.074   6.762   6.148   6.089   6.183   6.193   6.194   6.377   6.791   7.274   7.609   7.699   7.612   7.481   7.398 
+ 11.575  11.654  11.853  12.181  12.544  12.767  12.708  12.353  11.818  11.253  10.723  10.194   9.616   9.032   8.586   8.425   8.572   8.891   9.180   9.310   9.293   9.223   9.146   8.990   8.624   7.993   7.217   6.559   6.268   6.416   6.853   7.294   7.496   7.395   7.122   6.903 
+ 13.510  13.560  13.718  14.022  14.407  14.697  14.701  14.330  13.645  12.812  11.995  11.275  10.659  10.138   9.738   9.512   9.482   9.606   9.791   9.957  10.082  10.182  10.254  10.224   9.973   9.421   8.620   7.764   7.105   6.812   6.883   7.160   7.433   7.566   7.562   7.515 
+  9.332   9.392   9.851  10.947  12.407  13.516  13.650  12.794  11.543  10.571  10.056   9.597   8.697   7.333   6.072   5.597   6.088   7.034   7.650   7.513   6.869   6.337   6.338   6.745   7.057   6.876   6.248   5.576   5.252   5.359   5.681   5.958   6.085   6.122   6.153   6.186 
+ 11.323  10.853  10.224   9.858  10.021  10.647  11.366  11.719  11.421  10.502   9.246   7.995   6.966   6.204   5.680   5.404   5.435   5.787   6.322   6.768   6.878   6.609   6.172   5.883   5.934   6.264   6.624   6.788   6.711   6.528   6.397   6.357   6.318   6.180   5.959   5.786 
+ 10.674  10.374  10.014   9.871  10.021  10.267  10.290   9.905   9.208   8.485   7.970   7.645   7.264   6.590   5.646   4.765   4.371   4.661   5.433   6.202   6.538   6.345   5.897   5.596   5.665   6.013   6.351   6.450   6.311   6.121   6.055   6.127   6.196   6.129   5.937   5.768 
+  8.707   8.241   7.646   7.350   7.569   8.136   8.612   8.570   7.874   6.750   5.620   4.830   4.477   4.431   4.512   4.640   4.855   5.197   5.590   5.854   5.838   5.567   5.251   5.130   5.291   5.598   5.809   5.775   5.557   5.361   5.353   5.527   5.725   5.793   5.716   5.615 
+  7.804   7.766   7.650   7.431   7.144   6.865   6.645   6.462   6.252   5.991   5.735   5.571   5.525   5.519   5.436   5.243   5.041   4.984   5.131   5.359   5.445   5.248   4.830   4.418   4.224   4.293   4.500   4.690   4.808   4.906   5.028   5.114   5.030   4.708   4.259   3.933 
+  7.208   7.507   7.601   7.037   5.951   5.040   4.943   5.633   6.403   6.491   5.747   4.752   4.265   4.556   5.228   5.652   5.572   5.273   5.212   5.505   5.815   5.723   5.190   4.622   4.472   4.788   5.173   5.191   4.808   4.408   4.367   4.637   4.769   4.372   3.552   2.879 
+  8.134   8.098   7.911   7.504   6.984   6.573   6.390   6.314   6.086   5.580   4.975   4.632   4.764   5.217   5.587   5.568   5.230   4.947   5.044   5.494   5.943   6.038   5.726   5.259   4.917   4.757   4.624   4.411   4.243   4.376   4.879   5.439   5.542   4.919   3.853   3.033 
+  6.678   6.601   6.422   6.158   5.907   5.784   5.809   5.869   5.824   5.653   5.488   5.471   5.576   5.589   5.321   4.847   4.522   4.700   5.386   6.151   6.445   6.045   5.260   4.663   4.605   4.930   5.167   5.008   4.614   4.445   4.778   5.377   5.658   5.223   4.278   3.505 
+  6.590   6.228   5.816   5.705   5.977   6.369   6.487   6.144   5.507   4.961   4.781   4.921   5.074   4.959   4.577   4.224   4.240   4.730   5.458   6.025   6.154   5.868   5.429   5.108   4.991   4.971   4.904   4.768   4.683   4.776   5.022   5.210   5.098   4.614   3.959   3.491 
+  5.643   5.598   5.612   5.770   6.021   6.189   6.120   5.830   5.517   5.401   5.532   5.736   5.753   5.469   5.035   4.770   4.913   5.428   6.009   6.287   6.086   5.523   4.911   4.534   4.482   4.635   4.788   4.804   4.676   4.497   4.355   4.279   4.235   4.184   4.118   4.069 
+  7.997   7.487   6.954   6.917   7.441   8.072   8.250   7.791   7.008   6.375   6.089   5.948   5.645   5.145   4.765   4.868   5.475   6.191   6.520   6.277   5.715   5.254   5.102   5.116   5.014   4.696   4.347   4.232   4.411   4.669   4.729   4.529   4.269   4.194   4.346   4.528 
+  6.475   6.855   7.430   7.955   8.276   8.378   8.315   8.100   7.681   7.008   6.141   5.279   4.673   4.484   4.703   5.161   5.640   5.967   6.067   5.962   5.739   5.513   5.379   5.360   5.377   5.299   5.039   4.648   4.302   4.178   4.307   4.526   4.592   4.381   3.992   3.688 
+  7.636   7.463   7.322   7.422   7.760   8.090   8.107   7.695   7.022   6.400   6.036   5.897   5.789   5.584   5.362   5.347   5.682   6.247   6.704   6.738   6.302   5.659   5.178   5.048   5.149   5.180   4.942   4.519   4.222   4.315   4.767   5.235   5.307   4.829   4.053   3.470 
+ 11.775  11.378  10.973  10.967  11.384  11.824  11.799  11.166  10.237   9.502   9.233   9.315   9.434   9.407   9.307   9.302   9.383   9.303   8.789   7.845   6.823   6.172   6.084   6.342   6.519   6.354   5.964   5.728   5.954   6.613   7.352   7.748   7.590   6.983   6.262   5.789 
+ 11.791  11.530  11.099  10.637  10.274  10.057   9.914   9.694   9.264   8.620   7.921   7.412   7.275   7.507   7.901   8.159   8.058   7.570   6.871   6.240   5.911   5.964   6.296   6.676   6.866   6.740   6.356   5.925   5.691   5.777   6.096   6.397   6.432   6.125   5.645   5.289 
+  5.209   6.021   7.138   7.952   8.195   8.053   7.877   7.804   7.645   7.142   6.303   5.496   5.165   5.453   6.060   6.485   6.423   5.986   5.559   5.456   5.693   6.035   6.246   6.275   6.241   6.267   6.358   6.431   6.434   6.404   6.400   6.410   6.337   6.107   5.781   5.538 
+  5.417   6.291   7.564   8.608   9.043   8.912   8.533   8.196   7.953   7.669   7.233   6.725   6.377   6.382   6.719   7.159   7.435   7.430   7.236   7.056   7.040   7.195   7.417   7.587   7.658   7.661   7.656   7.688   7.757   7.834   7.872   7.830   7.689   7.472   7.247   7.103 
+  7.679   8.034   8.563   9.015   9.203   9.093   8.792   8.445   8.133   7.844   7.530   7.199   6.946   6.897   7.097   7.452   7.773   7.902   7.826   7.679   7.629   7.750   7.974   8.169   8.266   8.316   8.430   8.659   8.924   9.066   8.971   8.666   8.298   8.022   7.894   7.863 
+  7.869   7.585   7.344   7.517   8.179   9.010   9.499   9.306   8.488   7.451   6.669   6.406   6.622   7.080   7.524   7.802   7.877   7.782   7.595   7.425   7.390   7.547   7.835   8.078   8.097   7.836   7.432   7.138   7.156   7.495   7.957   8.258   8.205   7.813   7.296   6.938 
+  6.927   7.215   7.878   8.903   9.995  10.645  10.428   9.343   7.885   6.755   6.411   6.780   7.363   7.637   7.439   7.038   6.858   7.097   7.568   7.866   7.733   7.282   6.906   6.957   7.447   8.045   8.340   8.168   7.726   7.388   7.403   7.708   8.022   8.102   7.946   7.765 
+  9.568   9.880  10.441  11.089  11.570  11.624  11.120  10.163   9.051   8.117   7.555   7.344   7.330   7.363   7.391   7.448   7.567   7.725   7.858   7.925   7.956   8.023   8.175   8.397   8.624   8.806   8.937   9.050   9.167   9.262   9.280   9.182   8.978   8.728   8.509   8.384 
+  8.901   9.327   9.879  10.193  10.107   9.734   9.304   8.952   8.646   8.296   7.914   7.637   7.599   7.797   8.077   8.270   8.325   8.303   8.263   8.172   7.960   7.670   7.520   7.778   8.516   9.486  10.250  10.494  10.246   9.826   9.557   9.508   9.491   9.302   8.949   8.660 
+ 10.545  10.626  10.697  10.643  10.416  10.069   9.714   9.420   9.149   8.787   8.266   7.687   7.316   7.424   8.067   8.976   9.674   9.766   9.200   8.311   7.603   7.423   7.768   8.349   8.838   9.084   9.158   9.208   9.302   9.385   9.365   9.236   9.091   9.036   9.084   9.153 
+ 10.117  10.284  10.576  10.858  10.896  10.496   9.689   8.778   8.161   8.030   8.220   8.370   8.266   8.053   8.114   8.684   9.556  10.160   9.984   8.998   7.705   6.793   6.652   7.153   7.822   8.231   8.265   8.087   7.911   7.819   7.755   7.658   7.552   7.508   7.544   7.599 
+  8.712   9.184   9.814  10.169   9.964   9.239   8.319   7.595   7.276   7.283   7.367   7.348   7.273   7.368   7.796   8.443   8.924   8.837   8.086   6.999   6.140   5.924   6.333   6.940   7.229   6.955   6.291   5.667   5.451   5.705   6.185   6.536   6.529   6.181   5.706   5.378 
+  9.916  10.428  10.837  10.462   9.181   7.578   6.503   6.413   7.053   7.722   7.862   7.464   6.974   6.843   7.126   7.470   7.457   6.966   6.254   5.722   5.594   5.784   6.015   6.052   5.849   5.519   5.214   5.027   4.981   5.051   5.191   5.330   5.394   5.348   5.229   5.130 
+  7.889   7.664   7.183   6.461   5.619   4.867   4.398   4.267   4.365   4.503   4.550   4.509   4.485   4.582   4.818   5.111   5.346   5.448   5.419   5.316   5.212   5.160   5.177   5.237   5.280   5.238   5.079   4.843   4.632   4.556   4.656   4.872   5.083   5.196   5.203   5.173 
+  5.146   5.552   5.965   5.920   5.270   4.307   3.527   3.255   3.436   3.755   3.942   3.979   4.058   4.335   4.755   5.085   5.141   4.966   4.801   4.863   5.133   5.360   5.275   4.848   4.353   4.179   4.532   5.257   5.933   6.162   5.833   5.175   4.570   4.278   4.290   4.395 
+  5.634   5.672   5.668   5.521   5.180   4.714   4.299   4.120   4.249   4.579   4.880   4.967   4.824   4.612   4.527   4.640   4.855   5.010   5.038   5.020   5.084   5.258   5.414   5.385   5.144   4.863   4.790   5.023   5.397   5.604   5.439   4.970   4.482   4.234   4.253   4.359 
+  4.905   4.952   4.965   4.847   4.557   4.159   3.799   3.622   3.685   3.919   4.181   4.344   4.377   4.350   4.361   4.461   4.622   4.772   4.868   4.918   4.950   4.953   4.860   4.602   4.189   3.752   3.486   3.533   3.882   4.369   4.766   4.911   4.779   4.473   4.151   3.951 
+  7.412   7.055   6.533   6.078   5.795   5.617   5.408   5.119   4.827   4.658   4.648   4.696   4.662   4.495   4.300   4.246   4.418   4.736   5.013   5.107   5.027   4.904   4.866   4.923   4.962   4.860   4.600   4.291   4.080   4.031   4.061   3.999   3.713   3.213   2.668   2.313 
+  5.488   5.556   5.601   5.495   5.149   4.597   4.010   3.619   3.575   3.829   4.143   4.243   4.016   3.609   3.328   3.411   3.838   4.334   4.576   4.445   4.124   3.958   4.181   4.716   5.223   5.339   4.953   4.292   3.748   3.594   3.783   3.988   3.855   3.279   2.497   1.942 
+  6.546   5.991   5.260   4.764   4.592   4.465   4.065   3.397   2.848   2.856   3.487   4.319   4.755   4.513   3.864   3.396   3.517   4.118   4.679   4.721   4.215   3.594   3.383   3.758   4.412   4.819   4.662   4.076   3.519   3.392   3.724   4.161   4.258   3.830   3.103   2.552 
+  7.270   6.122   4.547   3.441   3.237   3.668   4.089   4.037   3.548   3.020   2.804   2.922   3.136   3.243   3.283   3.456   3.854   4.302   4.475   4.200   3.651   3.241   3.300   3.805   4.398   4.665   4.449   3.944   3.516   3.423   3.647   3.944   4.054   3.884   3.557   3.304 
+  5.814   5.629   5.273   4.804   4.332   3.988   3.859   3.924   4.059   4.113   4.006   3.783   3.582   3.534   3.675   3.921   4.124   4.170   4.052   3.867   3.750   3.779   3.919   4.042   4.010   3.780   3.456   3.240   3.309   3.676   4.148   4.420   4.257   3.664   2.912   2.394 
+  5.442   5.017   4.465   4.150   4.231   4.565   4.853   4.889   4.705   4.506   4.476   4.636   4.862   5.019   5.073   5.078   5.072   4.999   4.752   4.297   3.758   3.368   3.307   3.562   3.921   4.124   4.046   3.770   3.506   3.414   3.481   3.535   3.387   2.993   2.498   2.155 
+  4.807   4.616   4.365   4.218   4.246   4.372   4.426   4.291   4.023   3.840   3.965   4.441   5.053   5.454   5.411   4.980   4.470   4.211   4.309   4.579   4.724   4.582   4.250   3.983   3.958   4.135   4.309   4.315   4.163   4.002   3.936   3.901   3.718   3.283   2.717   2.311 
+  4.630   4.701   4.796   4.868   4.912   4.959   5.023   5.078   5.081   5.031   4.981   4.991   5.057   5.115   5.120   5.128   5.270   5.618   6.050   6.273   6.021   5.280   4.345   3.628   3.367   3.470   3.637   3.635   3.482   3.387   3.495   3.718   3.788   3.525   3.030   2.637 
+  6.306   5.956   5.547   5.397   5.575   5.863   5.985   5.865   5.673   5.616   5.698   5.713   5.462   5.014   4.709   4.895   5.603   6.472   6.995   6.879   6.234   5.434   4.815   4.460   4.244   4.034   3.851   3.823   4.029   4.375   4.642   4.641   4.344   3.879   3.442   3.185 
+  5.836   5.432   4.955   4.802   5.115   5.666   6.028   5.899   5.331   4.677   4.327   4.435   4.856   5.316   5.655   5.929   6.302   6.828   7.332   7.501   7.116   6.243   5.209   4.393   3.993   3.948   4.051   4.145   4.218   4.338   4.509   4.600   4.431   3.952   3.337   2.905 
+  5.578   4.950   4.307   4.316   5.082   6.039   6.441   6.005   5.133   4.531   4.596   5.113   5.526   5.488   5.187   5.146   5.714   6.707   7.530   7.651   7.005   6.006   5.182   4.788   4.699   4.624   4.403   4.121   3.984   4.100   4.379   4.614   4.638   4.440   4.152   3.949 
+  5.917   5.685   5.403   5.310   5.538   6.023   6.547   6.879   6.907   6.677   6.311   5.906   5.502   5.146   4.963   5.150   5.827   6.872   7.888   8.381   8.073   7.095   5.929   5.092   4.816   4.948   5.143   5.167   5.059   5.031   5.204   5.458   5.518   5.219   4.687   4.272 
+  6.834   6.628   6.363   6.210   6.226   6.310   6.312   6.164   5.940   5.778   5.747   5.780   5.754   5.637   5.582   5.843   6.565   7.609   8.570   8.992   8.654   7.712   6.589   5.710   5.262   5.153   5.159   5.134   5.097   5.153   5.344   5.563   5.629   5.450   5.118   4.859 
+  6.736   6.374   5.923   5.715   5.878   6.249   6.517   6.475   6.171   5.836   5.662   5.646   5.632   5.523   5.458   5.754   6.632   7.943   9.146   9.613   9.060   7.767   6.407   5.596   5.491   5.765   5.927   5.740   5.374   5.202   5.423   5.860   6.112   5.910   5.374   4.923 
+  5.677   5.441   5.199   5.211   5.544   6.020   6.368   6.441   6.306   6.147   6.079   6.069   6.012   5.894   5.864   6.137   6.807   7.720   8.528   8.880   8.616   7.833   6.814   5.884   5.295   5.153   5.413   5.902   6.374   6.612   6.526   6.187   5.774   5.454   5.289   5.237 
+  4.987   5.148   5.503   6.010   6.479   6.661   6.447   5.993   5.616   5.529   5.637   5.623   5.256   4.682   4.396   4.888   6.227   7.923   9.205   9.506   8.801   7.563   6.405   5.701   5.452   5.426   5.418   5.385   5.412   5.565   5.803   5.994   6.025   5.881   5.659   5.499 
+  5.140   4.708   4.289   4.392   5.143   6.138   6.725   6.501   5.625   4.698   4.315   4.637   5.329   5.892   6.107   6.216   6.681   7.730   9.070  10.024   9.994   8.905   7.275   5.866   5.191   5.247   5.631   5.916   5.947   5.860   5.862   6.003   6.150   6.147   5.991   5.835 
+  4.894   4.355   3.768   3.704   4.334   5.272   5.875   5.742   5.003   4.197   3.842   4.080   4.646   5.164   5.480   5.757   6.277   7.137   8.108   8.766   8.785   8.159   7.199   6.330   5.840   5.760   5.915   6.079   6.112   6.015   5.880   5.816   5.879   6.047   6.241   6.368 
+  5.050   4.926   4.795   4.786   4.928   5.106   5.136   4.919   4.537   4.222   4.204   4.545   5.093   5.609   5.959   6.226   6.632   7.319   8.165   8.806   8.855   8.188   7.063   5.983   5.393   5.426   5.872   6.363   6.621   6.600   6.445   6.335   6.361   6.499   6.660   6.762 
+  6.039   5.338   4.478   4.105   4.462   5.218   5.762   5.717   5.221   4.775   4.787   5.223   5.673   5.762   5.552   5.549   6.285   7.805   9.496  10.432  10.015   8.407   6.446   5.095   4.833   5.436   6.244   6.680   6.609   6.302   6.117   6.186   6.375   6.475   6.419   6.321 
+  5.546   4.992   4.352   4.169   4.614   5.354   5.848   5.800   5.389   5.084   5.222   5.714   6.146   6.175   5.871   5.714   6.211   7.453   8.967   9.985   9.950   8.882   7.347   6.094   5.602   5.853   6.440   6.879   6.900   6.550   6.077   5.743   5.672   5.825   6.058   6.220 
+  5.976   5.630   5.161   4.851   4.840   5.038   5.215   5.198   5.014   4.860   4.922   5.203   5.517   5.667   5.665   5.785   6.367   7.494   8.829   9.750   9.748   8.781   7.320   6.041   5.396   5.379   5.646   5.845   5.883   5.916   6.124   6.503   6.857   6.994   6.909   6.777 
+  5.989   5.565   4.832   4.044   3.552   3.651   4.370   5.392   6.209   6.439   6.072   5.463   5.079   5.201   5.803   6.661   7.558   8.373   9.022   9.362   9.202   8.463   7.333   6.247   5.661   5.770   6.393   7.105   7.511   7.464   7.084   6.609   6.232   6.015   5.925   5.899 
+  6.293   5.756   4.988   4.437   4.446   5.059   5.998   6.820   7.171   6.973   6.434   5.880   5.558   5.546   5.805   6.297   7.023   7.942   8.858   9.428   9.336   8.524   7.299   6.187   5.636   5.759   6.312   6.892   7.203   7.190   6.978   6.720   6.493   6.299   6.136   6.036 
+  5.358   5.169   4.923   4.768   4.753   4.804   4.830   4.824   4.873   5.055   5.337   5.594   5.732   5.823   6.086   6.717   7.682   8.664   9.227   9.090   8.321   7.303   6.494   6.174   6.315   6.668   6.947   6.991   6.809   6.521   6.255   6.088   6.029   6.045   6.090   6.124 
+  7.651   7.280   6.647   5.943   5.374   5.077   5.058   5.207   5.383   5.514   5.621   5.758   5.932   6.099   6.240   6.445   6.889   7.672   8.652   9.431   9.568   8.884   7.627   6.361   5.630   5.642   6.186   6.827   7.198   7.187   6.916   6.575   6.290   6.087   5.951   5.879 
+  5.934   5.867   5.787   5.765   5.831   5.949   6.031   5.998   5.839   5.625   5.463   5.433   5.553   5.809   6.208   6.793   7.589   8.496   9.252   9.524   9.104   8.077   6.829   5.858   5.496   5.745   6.304   6.792   6.973   6.852   6.603   6.408   6.348   6.397   6.478   6.533 
+  5.922   5.653   5.397   5.450   5.831   6.266   6.441   6.283   5.991   5.804   5.741   5.594   5.187   4.651   4.421   4.926   6.209   7.817   9.069   9.474   9.004   8.018   6.986   6.231   5.865   5.855   6.101   6.440   6.662   6.595   6.251   5.872   5.790   6.160   6.801   7.293 
+  6.431   6.438   6.460   6.483   6.454   6.299   5.986   5.580   5.226   5.052   5.056   5.082   4.943   4.618   4.364   4.603   5.613   7.234   8.850   9.703   9.383   8.119   6.652   5.744   5.693   6.191   6.625   6.567   6.060   5.505   5.281   5.434   5.700   5.785   5.636   5.452 
+  6.127   6.182   6.311   6.485   6.580   6.434   6.001   5.439   5.041   5.020   5.315   5.618   5.616   5.292   5.011   5.288   6.388   8.049   9.567  10.212   9.688   8.325   6.852   5.940   5.821   6.236   6.699   6.857   6.674   6.357   6.128   6.043   5.998   5.876   5.676   5.517 
+  5.981   5.981   5.892   5.682   5.491   5.551   5.961   6.525   6.837   6.586   5.807   4.883   4.284   4.285   4.870   5.859   7.059   8.285   9.283   9.712   9.319   8.182   6.788   5.783   5.553   5.971   6.533   6.775   6.615   6.335   6.245   6.371   6.451   6.234   5.763   5.370 
+  6.158   5.992   5.897   6.110   6.612   7.107   7.264   6.986   6.466   5.999   5.723   5.558   5.368   5.182   5.237   5.776   6.799   7.981   8.849   9.078   8.660   7.853   6.987   6.308   5.939   5.919   6.203   6.637   6.964   6.949   6.551   5.995   5.632   5.674   6.021   6.340 
+ 10.763  10.024   9.021   8.347   8.272   8.547   8.600   7.975   6.678   5.179   4.101   3.807   4.228   4.992   5.745   6.390   7.056   7.872   8.730   9.277   9.132   8.189   6.754   5.408   4.689   4.796   5.504   6.338   6.852   6.858   6.463   5.943   5.553   5.398   5.422   5.487 
+ 10.915   9.775   8.225   7.168   7.019   7.450   7.718   7.270   6.144   4.868   4.028   3.875   4.265   4.897   5.582   6.307   7.088   7.815   8.263   8.251   7.795   7.117   6.487   6.073   5.888   5.869   5.965   6.158   6.413   6.634   6.694   6.517   6.135   5.671   5.271   5.044 
+  6.977   6.810   6.560   6.355   6.287   6.351   6.437   6.405   6.186   5.841   5.500   5.250   5.065   4.886   4.766   4.943   5.702   7.087   8.710   9.874   9.987   8.982   7.416   6.121   5.657   5.983   6.563   6.826   6.571   6.034   5.606   5.491   5.598   5.705   5.696   5.636 
+  6.246   6.051   5.855   5.854   6.063   6.305   6.393   6.321   6.269   6.399   6.647   6.715   6.324   5.513   4.726   4.560   5.353   6.902   8.548   9.555   9.521   8.571   7.218   6.045   5.419   5.375   5.697   6.083   6.299   6.265   6.059   5.848   5.790   5.930   6.177   6.365 
+  4.317   4.838   5.590   6.182   6.360   6.154   5.834   5.704   5.891   6.262   6.519   6.411   5.914   5.274   4.871   5.008   5.737   6.822   7.858   8.462   8.444   7.875   7.027   6.238   5.764   5.686   5.907   6.229   6.456   6.484   6.329   6.096   5.901   5.807   5.801   5.824 
+  4.171   4.494   5.034   5.606   6.004   6.092   5.870   5.491   5.181   5.109   5.286   5.560   5.727   5.689   5.545   5.553   5.974   6.886   8.075   9.097   9.472   8.937   7.611   5.979   4.672   4.164   4.533   5.432   6.299   6.682   6.477   5.938   5.464   5.311   5.444   5.620 
+  4.530   4.532   4.713   5.215   5.936   6.536   6.683   6.330   5.771   5.406   5.424   5.664   5.796   5.656   5.442   5.584   6.381   7.698   8.978   9.579   9.180   7.981   6.545   5.446   4.959   4.996   5.280   5.566   5.771   5.921   6.044   6.094   5.992   5.720   5.378   5.140 
+  4.896   4.843   4.966   5.450   6.172   6.715   6.693   6.093   5.326   4.912   5.059   5.515   5.810   5.711   5.449   5.543   6.332   7.620   8.746   9.034   8.282   6.909   5.659   5.097   5.279   5.803   6.162   6.104   5.739   5.373   5.236   5.326   5.464   5.487   5.379   5.264 
+  4.605   4.732   5.002   5.414   5.916   6.387   6.671   6.655   6.341   5.863   5.411   5.126   5.035   5.089   5.260   5.598   6.182   6.983   7.772   8.196   7.989   7.186   6.142   5.333   5.056   5.264   5.648   5.888   5.867   5.689   5.525   5.439   5.362   5.202   4.971   4.795 
+  5.434   5.075   4.734   4.828   5.437   6.220   6.697   6.624   6.153   5.642   5.326   5.149   4.909   4.543   4.279   4.477   5.299   6.504   7.544   7.914   7.482   6.541   5.601   5.066   5.047   5.385   5.811   6.101   6.146   5.944   5.566   5.123   4.732   4.468   4.339   4.299 
+  4.113   4.285   4.730   5.447   6.173   6.513   6.276   5.705   5.322   5.487   6.054   6.467   6.248   5.451   4.662   4.527   5.209   6.245   6.924   6.852   6.215   5.561   5.323   5.511   5.807   5.914   5.805   5.679   5.712   5.869   5.952   5.794   5.407   4.949   4.588   4.402 
+  6.481   5.983   5.345   5.040   5.336   6.120   6.968   7.423   7.276   6.662   5.934   5.419   5.247   5.358   5.630   6.007   6.488   7.023   7.439   7.504   7.095   6.345   5.600   5.213   5.303   5.696   6.072   6.218   6.155   6.056   6.039   6.038   5.866   5.425   4.845   4.429 
+  6.415   6.432   6.353   6.095   5.740   5.507   5.576   5.907   6.250   6.324   6.033   5.526   5.078   4.903   5.059   5.481   6.060   6.671   7.141   7.266   6.924   6.207   5.440   5.008   5.092   5.545   6.005   6.180   6.053   5.837   5.734   5.732   5.637   5.294   4.786   4.403 
+  5.310   5.295   5.308   5.433   5.755   6.259   6.757   6.944   6.588   5.730   4.710   3.965   3.755   4.035   4.580   5.211   5.914   6.711   7.462   7.825   7.492   6.500   5.324   4.594   4.641   5.253   5.866   6.030   5.741   5.371   5.262   5.395   5.435   5.090   4.448   3.932 
+  6.061   5.912   5.753   5.685   5.623   5.343   4.729   3.957   3.425   3.442   3.947   4.526   4.751   4.550   4.293   4.499   5.387   6.659   7.683   7.926   7.311   6.230   5.253   4.768   4.816   5.178   5.580   5.844   5.913   5.802   5.555   5.232   4.910   4.660   4.512   4.450 
+  6.473   6.088   5.615   5.375   5.420   5.491   5.287   4.767   4.230   4.063   4.392   4.949   5.291   5.183   4.815   4.657   5.056   5.929   6.788   7.102   6.684   5.818   5.025   4.692   4.831   5.152   5.329   5.252   5.051   4.927   4.941   4.962   4.787   4.343   3.778   3.382 
+  6.918   6.819   6.480   5.836   5.082   4.605   4.678   5.213   5.796   6.006   5.734   5.213   4.784   4.624   4.688   4.870   5.154   5.578   6.070   6.365   6.183   5.513   4.711   4.263   4.372   4.772   4.962   4.674   4.135   3.856   4.120   4.658   4.845   4.276   3.186   2.318 
+  5.291   5.307   5.270   5.138   4.975   4.926   5.091   5.407   5.666   5.649   5.293   4.740   4.249   4.037   4.181   4.609   5.160   5.641   5.867   5.718   5.212   4.548   4.036   3.928   4.243   4.743   5.093   5.095   4.811   4.463   4.214   4.018   3.690   3.122   2.445   1.975 
+  6.209   6.114   6.006   6.000   6.175   6.501   6.827   6.927   6.626   5.900   4.920   3.987   3.404   3.348   3.809   4.610   5.480   6.148   6.425   6.271   5.807   5.269   4.888   4.767   4.824   4.865   4.739   4.463   4.210   4.157   4.321   4.514   4.482   4.118   3.573   3.172 
+  5.219   4.709   4.278   4.517   5.419   6.338   6.559   5.933   4.987   4.419   4.468   4.761   4.758   4.337   3.943   4.151   5.080   6.212   6.816   6.554   5.741   5.024   4.809   4.978   5.104   4.923   4.573   4.424   4.677   5.160   5.493   5.426   5.027   4.567   4.258   4.133 
+  6.227   6.438   6.744   6.961   6.918   6.568   6.033   5.543   5.287   5.277   5.347   5.305   5.113   4.924   4.942   5.210   5.539   5.647   5.409   4.986   4.713   4.821   5.246   5.682   5.844   5.704   5.497   5.502   5.798   6.202   6.432   6.328   5.956   5.517   5.183   5.018 
+  4.192   4.115   4.224   4.765   5.671   6.540   6.924   6.676   6.056   5.503   5.274   5.276   5.222   4.948   4.606   4.540   4.960   5.721   6.387   6.557   6.168   5.536   5.117   5.183   5.664   6.250   6.643   6.748   6.681   6.627   6.683   6.809   6.894   6.867   6.756   6.659 
+  5.961   5.617   5.315   5.476   6.146   6.911   7.193   6.708   5.697   4.746   4.362   4.619   5.168   5.537   5.485   5.131   4.799   4.742   4.979   5.330   5.590   5.675   5.651   5.649   5.769   6.030   6.383   6.746   7.026   7.147   7.069   6.806   6.429   6.040   5.730   5.562 
+  7.843   7.241   6.462   6.034   6.196   6.718   7.080   6.887   6.183   5.440   5.184   5.583   6.301   6.776   6.685   6.215   5.909   6.185   6.963   7.701   7.837   7.267   6.438   5.980   6.191   6.825   7.351   7.445   7.257   7.217   7.576   8.118   8.329   7.880   6.980   6.258 
+  8.869   8.708   8.380   7.945   7.568   7.433   7.588   7.865   7.993   7.818   7.443   7.145   7.137   7.386   7.658   7.740   7.622   7.474   7.452   7.528   7.529   7.328   7.000   6.772   6.810   7.065   7.332   7.468   7.547   7.769   8.218   8.698   8.855   8.494   7.804   7.258 
+  7.136   7.009   6.963   7.189   7.624   7.951   7.839   7.243   6.466   5.939   5.890   6.180   6.459   6.476   6.284   6.159   6.317   6.687   6.964   6.881   6.470   6.060   6.008   6.384   6.895   7.116   6.856   6.345   6.076   6.416   7.285   8.173   8.500   8.049   7.145   6.439 
+  6.332   6.382   6.518   6.757   7.032   7.181   7.016   6.450   5.597   4.748   4.215   4.135   4.383   4.679   4.805   4.772   4.792   5.065   5.578   6.083   6.295   6.138   5.823   5.682   5.902   6.385   6.858   7.119   7.196   7.267   7.438   7.597   7.501   7.026   6.341   5.838 
+  5.990   6.185   6.428   6.532   6.397   6.066   5.667   5.326   5.094   4.958   4.873   4.797   4.695   4.549   4.388   4.307   4.425   4.799   5.340   5.827   6.036   5.898   5.558   5.280   5.259   5.508   5.880   6.222   6.485   6.717   6.957   7.143   7.146   6.906   6.530   6.249 
+  5.085   5.242   5.614   6.202   6.850   7.294   7.332   6.985   6.488   6.108   5.942   5.873   5.716   5.428   5.168   5.163   5.489   5.970   6.293   6.258   5.934   5.608   5.547   5.797   6.160   6.374   6.339   6.195   6.200   6.508   7.029   7.475   7.568   7.242   6.705   6.306 
+  5.410   5.519   5.739   6.073   6.501   6.946   7.257   7.269   6.911   6.299   5.698   5.367   5.386   5.619   5.833   5.898   5.863   5.877   6.011   6.176   6.215   6.074   5.882   5.849   6.062   6.392   6.599   6.560   6.396   6.361   6.599   6.980   7.200   7.052   6.628   6.268 
+  7.000   7.281   7.556   7.525   7.152   6.681   6.389   6.330   6.338   6.239   6.049   5.931   5.963   6.006   5.829   5.396   4.985   4.970   5.444   6.056   6.276   5.870   5.158   4.755   5.042   5.822   6.528   6.762   6.677   6.792   7.442   8.368   8.898   8.561   7.581   6.744 
+  6.688   6.868   7.045   7.006   6.683   6.210   5.818   5.671   5.775   6.015   6.254   6.414   6.476   6.442   6.331   6.191   6.105   6.146   6.321   6.551   6.739   6.843   6.910   6.996   7.080   7.061   6.870   6.597   6.487   6.766   7.426   8.161   8.558   8.412   7.900   7.463 
+  7.202   7.147   7.141   7.285   7.563   7.843   7.988   7.964   7.847   7.734   7.651   7.567   7.473   7.433   7.523   7.722   7.876   7.801   7.463   7.053   6.861   7.050   7.507   7.931   8.068   7.899   7.617   7.429   7.374   7.342   7.239   7.136   7.226   7.620   8.186   8.604 
+  5.543   5.488   5.626   6.207   7.221   8.354   9.204   9.549   9.442   9.089   8.655   8.194   7.737   7.386   7.277   7.419   7.596   7.482   6.910   6.061   5.378   5.241   5.670   6.305   6.693   6.629   6.275   5.976   5.959   6.175   6.391   6.415   6.234   5.978   5.778   5.681 
+  5.755   6.186   6.919   7.747   8.474   9.010   9.392   9.700   9.910   9.845   9.302   8.294   7.206   6.642   7.016   8.178   9.404   9.825   9.034   7.387   5.772   4.992   5.245   6.065   6.748   6.882   6.571   6.232   6.198   6.470   6.784   6.874   6.676   6.320   5.991   5.806 
+  4.961   5.442   6.410   7.759   9.204  10.369  10.997  11.074  10.745  10.125   9.221   8.086   7.023   6.568   7.139   8.598  10.160  10.827  10.103   8.401   6.797   6.259   6.964   8.225   9.065   8.943   8.070   7.119   6.643   6.706   6.969   7.057   6.850   6.484   6.159   5.986 
+  5.257   5.427   6.000   7.187   8.898  10.660  11.834  11.966  11.046   9.505   7.986   7.056   6.990   7.701   8.805   9.787  10.215   9.947   9.208   8.470   8.169   8.428   8.989   9.416   9.409   9.002   8.485   8.142   8.032   7.986   7.812   7.485   7.164   7.023   7.079   7.184 
+  5.226   5.831   6.972   8.439   9.851  10.777  10.950  10.420   9.501   8.565   7.850   7.434   7.339   7.617   8.278   9.149   9.837   9.931   9.321   8.356   7.662   7.705   8.430   9.286   9.618   9.146   8.147   7.220   6.847   7.080   7.566   7.845   7.657   7.071   6.384   5.936 
+  6.371   6.598   7.291   8.547   9.998  10.937  10.847   9.836   8.554   7.636   7.210   6.934   6.512   6.131   6.349   7.487   9.121  10.242  10.029   8.583   6.937   6.274   6.990   8.388   9.264   8.870   7.468   6.055   5.562   6.182   7.340   8.200   8.255   7.572   6.634   5.994 
+  6.614   6.649   6.965   7.737   8.777   9.593   9.771   9.312   8.592   7.983   7.523   6.971   6.202   5.498   5.404   6.217   7.591   8.691   8.821   8.004   6.982   6.610   7.142   8.033   8.416   7.825   6.573   5.470   5.184   5.766   6.687   7.288   7.222   6.603   5.833   5.327 
+  7.222   7.266   7.379   7.558   7.743   7.856   7.879   7.863   7.845   7.745   7.390   6.688   5.808   5.170   5.182   5.907   6.938   7.648   7.636   7.021   6.334   6.089   6.382   6.851   7.000   6.624   5.957   5.464   5.462   5.898   6.431   6.705   6.589   6.197   5.765   5.496 
+  7.591   6.781   5.700   5.041   5.177   5.958   6.879   7.442   7.416   6.870   6.038   5.209   4.677   4.694   5.347   6.423   7.429   7.851   7.503   6.693   6.021   5.938   6.405   6.937   7.004   6.454   5.619   5.033   5.019   5.479   6.035   6.334   6.277   5.999   5.707   5.536 
+  6.754   6.701   6.568   6.376   6.248   6.353   6.765   7.327   7.686   7.500   6.702   5.609   4.772   4.632   5.221   6.134   6.796   6.848   6.373   5.812   5.624   5.954   6.542   6.928   6.789   6.156   5.373   4.848   4.786   5.099   5.506   5.736   5.679   5.405   5.082   4.874 
+  6.302   6.371   6.472   6.587   6.757   7.045   7.444   7.800   7.860   7.437   6.574   5.584   4.893   4.782   5.203   5.811   6.199   6.165   5.833   5.544   5.598   6.041   6.637   7.042   7.032   6.637   6.088   5.651   5.469   5.502   5.606   5.639   5.552   5.380   5.206   5.099 
+  6.483   6.172   5.903   6.030   6.546   7.062   7.149   6.723   6.108   5.719   5.690   5.794   5.715   5.405   5.145   5.263   5.774   6.314   6.453   6.105   5.646   5.608   6.209   7.129   7.736   7.579   6.724   5.690   5.060   5.077   5.543   6.027   6.187   5.963   5.553   5.249 
+  2.932   3.941   5.450   6.769   7.439   7.448   7.128   6.843   6.725   6.631   6.327   5.721   4.975   4.425   4.364   4.852   5.656   6.368   6.639   6.401   5.938   5.726   6.123   7.082   8.115   8.577   8.105   6.898   5.620   4.948   5.106   5.726   6.158   5.989   5.356   4.802 
+  6.127   5.926   5.574   5.188   4.933   4.953   5.272   5.740   6.091   6.091   5.699   5.108   4.640   4.552   4.876   5.404   5.817   5.884   5.598   5.190   4.991   5.251   5.988   6.964   7.795   8.147   7.908   7.245   6.501   5.996   5.855   5.973   6.126   6.148   6.035   5.917 
+  5.519   5.091   4.775   5.147   6.266   7.548   8.192   7.797   6.649   5.473   4.864   4.892   5.169   5.246   4.997   4.647   4.515   4.722   5.138   5.567   5.946   6.374   6.944   7.573   7.998   7.972   7.465   6.715   6.078   5.805   5.911   6.218   6.501   6.636   6.636   6.594 
+  6.672   6.343   6.180   6.696   7.892   9.158   9.702   9.146   7.801   6.394   5.521   5.270   5.298   5.229   4.989   4.798   4.890   5.260   5.684   5.969   6.172   6.559   7.335   8.386   9.283   9.565   9.068   8.053   7.030   6.423   6.337   6.557   6.756   6.739   6.543   6.362 
+  5.218   5.563   6.388   7.708   9.188  10.226  10.336   9.518   8.283   7.277   6.805   6.665   6.414   5.810   5.055   4.608   4.775   5.437   6.164   6.608   6.804   7.118   7.871   8.989   9.977  10.268   9.658   8.487   7.414   6.964   7.189   7.684   7.920   7.641   7.029   6.538 
+  3.671   3.905   4.699   6.274   8.323  10.021  10.539   9.660   7.976   6.472   5.837   6.032   6.446   6.469   5.991   5.423   5.299   5.814   6.708   7.541   8.086   8.476   9.006   9.780  10.550  10.887  10.536   9.645   8.683   8.104   8.030   8.198   8.202   7.826   7.214   6.750 
+  5.058   5.361   6.222   7.761   9.591  10.874  10.858   9.463   7.423   5.813   5.318   5.803   6.514   6.715   6.232   5.507   5.179   5.570   6.511   7.574   8.456   9.167   9.886  10.669  11.303  11.444  10.920   9.916   8.886   8.250   8.111   8.228   8.229   7.913   7.395   7.000 
+  6.198   6.369   7.047   8.424  10.097  11.137  10.726   8.845   6.403   4.652   4.316   5.142   6.196   6.624   6.265   5.637   5.420   5.896   6.831   7.792   8.564   9.267  10.120  11.098  11.848  11.939  11.225  10.007   8.853   8.215   8.154   8.356   8.407   8.105   7.585   7.188 
+  5.370   5.982   7.193   8.813  10.350  11.128  10.663   9.020   6.867   5.125   4.436   4.822   5.765   6.625   7.057   7.146   7.194   7.410   7.766   8.125   8.467   8.961   9.786  10.866  11.778  11.989  11.263   9.907   8.629   8.067   8.341   8.975   9.277   8.874   7.997   7.290 
+  4.808   5.706   7.302   9.170  10.696  11.270  10.581   8.849   6.777   5.218   4.700   5.148   5.985   6.556   6.578   6.266   6.089   6.352   6.972   7.607   8.023   8.323   8.838   9.745  10.787  11.384  11.084   9.990   8.763   8.147   8.381   9.003   9.225   8.595   7.400   6.458 
+  5.448   6.055   7.205   8.686  10.084  10.869  10.641   9.401   7.627   6.064   5.303   5.432   6.004   6.369   6.140   5.458   4.851   4.825   5.499   6.567   7.595   8.361   8.954   9.561  10.166  10.479  10.177   9.247   8.098   7.305   7.176   7.519   7.823   7.696   7.194   6.745 
+  9.209   9.583  10.158  10.663  10.844  10.539   9.728   8.541   7.247   6.184   5.607   5.543   5.746   5.843   5.596   5.091   4.688   4.750   5.361   6.278   7.146   7.784   8.273   8.778   9.275   9.484   9.104   8.149   7.057   6.412   6.503   7.081   7.562   7.512   7.005   6.527 
+ 11.504  11.513  11.457  11.262  10.911  10.422   9.781   8.932   7.872   6.754   5.864   5.430   5.436   5.609   5.645   5.476   5.319   5.460   5.951   6.535   6.885   6.934   6.955   7.280   7.911   8.422   8.300   7.448   6.372   5.819   6.146   6.982   7.518   7.199   6.223   5.383 
+ 10.189  10.184  10.086   9.800   9.297   8.619   7.822   6.945   6.047   5.261   4.764   4.659   4.839   5.017   4.926   4.544   4.152   4.128   4.653   5.567   6.501   7.167   7.529   7.731   7.863   7.842   7.523   6.946   6.423   6.332   6.770   7.395   7.653   7.232   6.362   5.664 
+  7.001   7.814   8.893   9.523   9.288   8.290   7.006   5.955   5.422   5.400   5.685   5.997   6.068   5.729   5.015   4.227   3.812   4.096   5.029   6.182   7.041   7.374   7.363   7.375   7.581   7.784   7.632   7.020   6.280   5.944   6.264   6.942   7.344   7.043   6.215   5.513 
+  8.745   8.909   8.997   8.737   8.062   7.176   6.412   6.003   5.959   6.115   6.273   6.306   6.165   5.853   5.418   4.978   4.708   4.757   5.130   5.673   6.173   6.523   6.778   7.053   7.347   7.491   7.282   6.709   6.036   5.638   5.707   6.085   6.389   6.333   5.971   5.637 
+  7.938   8.286   8.760   9.071   9.051   8.728   8.263   7.810   7.430   7.109   6.832   6.625   6.527   6.527   6.553   6.525   6.420   6.301   6.259   6.347   6.544   6.787   7.026   7.246   7.436   7.561   7.573   7.458   7.271   7.112   7.049   7.068   7.085   7.030   6.913   6.816 
+ 12.756  13.096  13.508  13.650  13.343  12.676  11.914  11.294  10.876  10.556  10.195   9.743   9.264   8.853   8.535   8.253   7.929   7.557   7.227   7.067   7.140   7.388   7.649   7.756   7.628   7.320   6.988   6.811   6.892   7.193   7.553   7.763   7.682   7.326   6.870   6.557 
+ 11.512  11.917  12.274  12.087  11.251  10.134   9.246   8.818   8.680   8.502   8.135   7.701   7.396   7.226   6.989   6.523   5.937   5.579   5.724   6.291   6.877   7.092   6.890   6.581   6.514   6.749   7.025   7.043   6.779   6.500   6.489   6.750   7.002   6.963   6.642   6.333 
+  8.398   8.866   9.429   9.668   9.473   9.100   8.905   9.006   9.193   9.140   8.703   8.022   7.354   6.847   6.467   6.127   5.842   5.727   5.833   6.041   6.135   6.033   5.904   6.033   6.529   7.161   7.520   7.382   6.938   6.642   6.812   7.332   7.752   7.702   7.242   6.808 
+  8.074   8.081   8.030   7.856   7.569   7.277   7.121   7.176   7.388   7.593   7.613   7.375   6.961   6.564   6.375   6.470   6.760   7.050   7.159   7.033   6.780   6.596   6.637   6.909   7.263   7.502   7.517   7.369   7.239   7.286   7.520   7.785   7.882   7.721   7.406   7.159 
+  9.422   9.255   9.115   9.196   9.485   9.709   9.525   8.800   7.753   6.836   6.402   6.451   6.655   6.658   6.408   6.214   6.458   7.195   8.009   8.299   7.785   6.813   6.138   6.338   7.318   8.343   8.617   7.926   6.815   6.130   6.307   7.014   7.459   7.096   6.114   5.281 
+  8.992   9.320   9.962  10.765  11.364  11.335  10.500   9.137   7.857   7.190   7.196   7.436   7.362   6.808   6.161   6.040   6.736   7.890   8.707   8.571   7.571   6.477   6.179   6.998   8.416   9.454   9.403   8.333   7.015   6.305   6.497   7.153   7.497   7.075   6.114   5.330 
+ 10.183   9.999  10.006  10.513  11.321  11.783  11.330  10.006   8.489   7.547   7.431   7.732   7.849   7.585   7.329   7.627   8.571   9.586   9.854   9.012   7.515   6.318   6.147   6.962   8.040   8.571   8.265   7.493   6.909   6.907   7.350   7.731   7.591   6.852   5.869   5.184 
+  8.986   9.390  10.148  11.037  11.622  11.474  10.520   9.195   8.187   7.919   8.220   8.496   8.281   7.680   7.286   7.617   8.578   9.456   9.471   8.444   6.976   6.003   6.078   6.987   7.982   8.391   8.094   7.505   7.158   7.271   7.644   7.884   7.731   7.217   6.605   6.203 
+ 10.200  10.607  11.219  11.710  11.765  11.243  10.269   9.187   8.374   8.024   8.045   8.159   8.133   7.969   7.890   8.111   8.599   9.012   8.916   8.125   6.910   5.869   5.550   6.067   7.015   7.745   7.817   7.280   6.597   6.270   6.458   6.889   7.104   6.843   6.256   5.779 
+  8.660   8.977   9.496  10.004  10.256  10.086   9.512   8.746   8.071   7.656   7.450   7.247   6.891   6.451   6.210   6.445   7.160   7.996   8.432   8.136   7.228   6.223   5.692   5.873   6.519   7.091   7.153   6.667   5.976   5.517   5.482   5.705   5.833   5.638   5.206   4.852 
+  8.750   8.838   8.986   9.145   9.239   9.187   8.930   8.466   7.864   7.243   6.725   6.380   6.215   6.201   6.310   6.528   6.809   7.050   7.109   6.904   6.507   6.142   6.046   6.287   6.676   6.889   6.713   6.236   5.799   5.730   6.060   6.467   6.511   5.997   5.165   4.538 
+  8.087   8.741   9.543   9.886   9.525   8.722   7.987   7.643   7.617   7.581   7.304   6.854   6.520   6.521   6.799   7.072   7.067   6.729   6.237   5.841   5.684   5.745   5.908   6.052   6.095   5.995   5.755   5.453   5.230   5.213   5.402   5.623   5.642   5.348   4.872   4.512 
+  9.859   9.774   9.562   9.173   8.614   7.976   7.429   7.143   7.184   7.459   7.752   7.852   7.685   7.357   7.066   6.948   6.978   6.998   6.856   6.537   6.186   5.996   6.052   6.252   6.381   6.264   5.892   5.428   5.088   4.992   5.089   5.211   5.190   4.980   4.681   4.467 
+  9.224  10.091  11.088  11.340  10.525   9.101   7.908   7.497   7.752   8.066   7.875   7.078   6.052   5.310   5.137   5.464   6.006   6.469   6.675   6.572   6.219   5.780   5.485   5.503   5.799   6.106   6.105   5.685   5.065   4.645   4.683   5.073   5.444   5.484   5.207   4.920 
+ 11.324  11.432  11.419  11.033  10.225   9.224   8.384   7.936   7.836   7.816   7.589   7.050   6.322   5.658   5.271   5.220   5.413   5.678   5.862   5.901   5.836   5.771   5.799   5.923   6.033   5.966   5.626   5.083   4.554   4.273   4.327   4.593   4.834   4.879   4.746   4.602 
+  8.677   8.517   8.393   8.518   8.901   9.288   9.319   8.797   7.868   6.940   6.411   6.383   6.619   6.752   6.605   6.326   6.243   6.541   7.062   7.408   7.282   6.766   6.283   6.248   6.705   7.263   7.407   6.919   6.065   5.363   5.152   5.325   5.460   5.221   4.671   4.210 
+  9.275   8.869   8.584   8.971  10.037  11.121  11.355  10.360   8.608   7.111   6.676   7.293   8.175   8.412   7.721   6.667   6.174   6.735   7.978   8.969   8.992   8.150   7.271   7.193   8.046   9.133   9.524   8.844   7.575   6.621   6.527   7.031   7.337   6.863   5.784   4.889 
+  8.560   7.824   7.135   7.390   8.811  10.689  11.883  11.674  10.302   8.729   7.862   7.856   8.089   7.809   6.880   5.961   5.953   7.157   8.922  10.101   9.979   8.889   7.946   8.115   9.380  10.734  11.030   9.958   8.313   7.308   7.521   8.393   8.728   7.769   5.914   4.437 
+  7.537   7.394   7.564   8.506  10.155  11.788  12.453  11.665   9.815   7.946   7.016   7.209   7.857   8.054   7.461   6.625   6.517   7.648   9.540  11.035  11.225  10.219   9.064   8.853   9.783  10.974  11.237  10.132   8.373   7.220   7.376   8.371   8.988   8.364   6.783   5.453 
+  7.819   7.279   7.031   7.939   9.998  12.149  13.018  11.982   9.686   7.555   6.711   7.156   7.903   7.906   6.996   6.037   6.175   7.823  10.240  12.062  12.344  11.249   9.852   9.232   9.635  10.383  10.550   9.793   8.630   7.937   8.142   8.835   9.125   8.450   7.102   6.023 
+  6.758   6.793   7.264   8.543  10.477  12.276  12.950  12.006   9.882   7.726   6.617   6.813   7.613   7.984   7.459   6.555   6.341   7.480   9.560  11.336  11.708  10.641   9.217   8.738   9.637  11.124  11.885  11.209   9.585   8.231   8.010   8.700   9.264   8.850   7.595   6.500 
+  7.692   7.260   7.019   7.664   9.299  11.224  12.376  12.092  10.603   8.864   7.825   7.737   8.050   7.971   7.226   6.349   6.240   7.350   9.197  10.666  10.887   9.941   8.810   8.561   9.460  10.763  11.361  10.725   9.335   8.235   8.113   8.730   9.194   8.802   7.699   6.751 
+  7.472   7.446   7.542   7.987   8.913  10.163  11.236  11.529  10.769   9.307   7.948   7.366   7.580   7.958   7.826   7.133   6.566   6.931   8.344   9.995  10.763  10.181   8.865   7.994   8.264   9.287   9.973   9.555   8.307   7.284   7.330   8.287   9.158   9.062   8.066   7.113 
+  8.431   7.901   7.431   7.707   8.906  10.475  11.480  11.267   9.932   8.237   7.032   6.648   6.744   6.706   6.254   5.724   5.775   6.768   8.354   9.670   9.986   9.288   8.283   7.810   8.164   8.889   9.218   8.767   7.863   7.240   7.373   8.058   8.609   8.488   7.789   7.145 
+  9.800   9.554   9.322   9.432  10.009  10.820  11.355  11.160  10.192   8.913   7.996   7.834   8.235   8.582   8.371   7.663   7.051   7.136   7.956   8.902   9.215   8.656   7.733   7.260   7.634   8.474   8.962   8.585   7.599   6.786   6.736   7.313   7.801   7.592   6.769   6.027 
+  8.845   8.916   9.220   9.876  10.744  11.400  11.373  10.504   9.118   7.857   7.246   7.318   7.607   7.549   6.974   6.280   6.115   6.798   7.982   8.860   8.796   7.857   6.776   6.368   6.862   7.730   8.155   7.737   6.825   6.191   6.333   7.047   7.621   7.498   6.774   6.108 
+  9.255   9.579  10.017  10.279  10.160   9.647   8.909   8.202   7.748   7.633   7.760   7.887   7.741   7.207   6.445   5.846   5.796   6.384   7.290   7.971   8.047   7.579   7.019   6.824   7.080   7.441   7.458   7.010   6.444   6.287   6.757   7.530   7.978   7.709   6.916   6.240 
+  8.840   9.026   9.378   9.816  10.182  10.277   9.966   9.269   8.377   7.546   6.950   6.579   6.286   5.931   5.527   5.256   5.331   5.819   6.551   7.213   7.550   7.529   7.334   7.200   7.234   7.349   7.373   7.216   6.956   6.762   6.740   6.836   6.885   6.771   6.532   6.336 
+  8.863   8.534   8.300   8.593   9.403  10.192  10.283   9.415   7.982   6.752   6.268   6.439   6.658   6.357   5.538   4.807   4.874   5.924   7.384   8.315   8.126   7.029   5.881   5.515   6.119   7.141   7.782   7.640   6.989   6.482   6.563   7.107   7.580   7.546   7.057   6.589 
+ 10.682  10.086   9.308   8.845   8.892   9.201   9.311   8.937   8.203   7.515   7.199   7.205   7.156   6.701   5.871   5.126   5.013   5.710   6.827   7.660   7.711   7.055   6.270   5.980   6.378   7.116   7.631   7.617   7.245   6.965   7.085   7.506   7.834   7.755   7.332   6.945 
+ 11.384  11.307  11.118  10.782  10.304   9.734   9.147   8.625   8.257   8.123   8.246   8.535   8.790   8.818   8.581   8.270   8.178   8.465   8.992   9.397   9.378   8.957   8.471   8.281   8.442   8.632   8.434   7.729   6.851   6.343   6.507   7.141   7.706   7.780   7.405   7.014 
+ 11.949  11.944  11.800  11.373  10.655   9.813   9.109   8.761   8.843   9.261   9.800  10.191  10.212   9.803   9.143   8.598   8.508   8.937   9.571   9.910   9.647   8.931   8.282   8.174   8.622   9.136   9.108   8.340   7.240   6.517   6.611   7.346   8.102   8.349   8.072   7.713 
+ 10.081   9.725   9.378   9.407   9.802  10.157  10.031   9.357   8.508   7.966   7.893   8.004   7.847   7.228   6.380   5.751   5.616   5.884   6.239   6.457   6.572   6.765   7.099   7.398   7.397   7.012   6.462   6.132   6.273   6.826   7.483   7.929   8.035   7.889   7.668   7.523 
+ 10.348  10.469  10.507  10.243   9.647   8.925   8.362   8.124   8.167   8.312   8.379   8.265   7.928   7.360   6.619   5.876   5.391   5.373   5.810   6.445   6.940   7.121   7.088   7.082   7.233   7.430   7.440   7.178   6.845   6.795   7.216   7.932   8.523   8.667   8.413   8.119 
+  9.328   9.046   8.708   8.564   8.652   8.761   8.615   8.123   7.481   7.017   6.911   7.043   7.098   6.846   6.366   5.993   6.043   6.527   7.122   7.426   7.287   6.935   6.782   7.055   7.585   7.933   7.762   7.153   6.578   6.534   7.134   7.995   8.526   8.389   7.772   7.229 
+  9.117   8.961   8.697   8.403   8.137   7.919   7.731   7.544   7.357   7.198   7.105   7.078   7.060   6.971   6.772   6.509   6.303   6.265   6.408   6.628   6.763   6.711   6.495   6.257   6.155   6.268   6.556   6.911   7.232   7.485   7.696   7.904   8.122   8.329   8.491   8.579 
+  8.183   8.486   8.925   9.236   9.187   8.699   7.908   7.096   6.533   6.323   6.365   6.464   6.490   6.469   6.518   6.709   6.974   7.155   7.142   6.979   6.825   6.818   6.952   7.090   7.093   6.940   6.746   6.655   6.730   6.931   7.197   7.525   7.960   8.509   9.059   9.413 
+  7.442   7.707   7.996   8.034   7.748   7.318   7.012   6.956   7.040   7.025   6.744   6.229   5.670   5.282   5.199   5.453   6.009   6.773   7.572   8.179   8.399   8.202   7.759   7.336   7.110   7.062   7.037   6.929   6.800   6.828   7.122   7.586   7.977   8.098   7.973   7.811 
+ 10.865  11.146  11.401  11.311  10.862  10.365  10.174  10.357  10.627  10.593  10.083   9.257   8.450   7.911   7.702   7.804   8.237   9.047  10.134  11.158  11.684  11.502  10.834  10.207  10.049  10.342  10.628  10.395   9.506   8.326   7.462   7.340   7.956   8.952   9.881  10.417 
+ 12.662  12.876  12.967  12.594  11.765  10.886  10.460  10.680  11.282  11.752  11.711  11.146  10.352   9.681   9.345   9.387   9.766  10.397  11.117  11.664  11.777  11.391  10.735  10.215  10.105  10.321  10.453  10.090   9.154   7.995   7.166   7.063   7.701   8.754   9.766  10.369 
+ 13.087  13.453  13.731  13.433  12.492  11.371  10.715  10.856  11.565  12.248  12.389  11.877  10.996  10.161   9.653   9.547   9.795  10.317  10.990  11.598  11.858  11.565  10.739   9.631   8.567   7.751   7.199   6.827   6.606   6.592   6.838   7.279   7.729   8.012   8.091   8.070 
+ 13.479  13.893  14.204  13.860  12.798  11.560  10.882  11.114  11.965  12.741  12.862  12.231  11.193  10.223   9.635   9.525   9.871  10.616  11.608  12.518  12.903  12.440  11.168   9.508   8.031   7.131   6.860   7.023   7.383   7.802   8.202   8.482   8.508   8.232   7.788   7.454 
+ 14.320  14.173  13.925  13.662  13.474  13.418  13.488  13.608  13.675  13.597  13.333  12.890  12.321  11.718  11.221  10.997  11.170  11.729  12.467  13.037  13.110  12.554  11.516  10.345   9.403   8.888   8.783   8.924   9.127   9.277   9.330   9.273   9.109   8.865   8.611   8.447 
+ 15.083  14.987  14.930  15.069  15.435  15.891  16.218  16.255  16.001  15.579  15.125  14.682  14.212  13.689  13.192  12.902  12.973  13.380  13.869  14.071  13.712  12.777  11.528  10.348   9.535   9.174   9.152   9.279   9.410   9.490   9.518   9.498   9.416   9.271   9.106   8.994 
+ 15.264  14.664  14.234  14.747  16.186  17.696  18.330  17.890  17.063  16.721  17.069  17.444  16.964  15.416  13.541  12.450  12.682  13.759  14.592  14.355  13.055  11.365   9.980   9.111   8.520   7.954   7.462   7.319   7.664   8.278   8.715   8.655   8.124   7.419   6.845   6.547 
+ 16.186  15.704  15.417  15.974  17.286  18.536  18.913  18.370  17.655  17.558  18.109  18.501  17.848  16.081  14.124  13.170  13.674  14.971  15.813  15.346  13.670  11.585   9.856   8.705   7.918   7.323   7.086   7.525   8.665  10.024  10.867  10.708   9.621   8.124   6.811   6.077 
+ 16.574  15.958  15.500  15.958  17.282  18.619  19.102  18.660  18.037  17.998  18.522  18.787  18.000  16.250  14.548  13.969  14.678  15.753  15.962  14.776  12.710  10.748   9.465   8.687   7.924   7.066   6.578   7.020   8.372   9.877  10.580  10.055   8.669   7.189   6.177   5.732 
+ 16.761  16.058  15.489  15.891  17.238  18.633  19.141  18.651  17.919  17.766  18.240  18.584  18.042  16.684  15.409  15.102  15.746  16.373  15.920  14.166  11.890  10.127   9.271   8.883   8.331   7.560   7.193   7.851   9.400  10.895  11.322  10.424   8.857   7.560   6.978   6.885 
+ 16.800  16.164  15.656  16.051  17.347  18.723  19.263  18.774  17.914  17.531  17.865  18.372  18.311  17.502  16.499  16.029  16.251  16.565  16.151  14.719  12.760  11.083  10.119   9.647   9.165   8.499   8.013   8.232   9.261  10.571  11.363  11.172  10.151   8.866   7.845   7.322 
+ 16.704  16.142  15.712  16.129  17.409  18.794  19.388  18.917  17.927  17.264  17.334  17.835  18.143  17.937  17.455  17.157  17.181  17.143  16.485  15.014  13.104  11.378  10.175   9.337   8.493   7.542   6.848   6.928   7.942   9.427  10.546  10.628   9.571   7.843   6.165   5.159 
+ 16.505  16.074  15.764  16.156  17.293  18.569  19.194  18.819  17.796  16.868  16.579  16.910  17.416  17.671  17.596  17.400  17.245  17.000  16.324  15.002  13.204  11.403  10.044   9.235   8.754   8.325   7.920   7.790   8.214   9.170  10.226  10.756  10.337   9.053   7.494   6.444 
+ 16.150  15.942  15.879  16.320  17.258  18.240  18.671  18.260  17.242  16.206  15.687  15.846  16.459  17.155  17.676  17.945  17.951  17.610  16.782  15.410  13.656  11.865  10.390   9.404   8.853   8.588   8.516   8.664   9.081   9.690  10.230  10.363   9.887   8.901   7.797   7.073 
+ 15.710  15.724  15.891  16.325  16.944  17.450  17.502  16.957  15.991  15.009  14.421  14.438  15.016  15.944  16.963  17.826  18.297  18.149  17.235  15.588  13.481  11.358   9.659   8.645   8.325   8.509   8.948   9.436   9.837  10.047   9.961   9.497   8.666   7.622   6.650   6.062 
+ 14.577  14.789  15.184  15.664  16.046  16.120  15.765  15.036  14.151  13.383  12.936  12.904  13.297  14.091  15.213  16.473  17.523  17.935  17.386  15.844  13.621  11.258   9.309   8.132   7.811   8.185   8.941   9.728  10.242  10.319   9.971   9.375   8.774   8.347   8.138   8.073 
+ 13.558  13.835  14.186  14.356  14.212  13.824  13.387  13.052  12.807  12.516  12.073  11.570  11.313  11.664  12.781  14.439  16.059  16.951  16.648  15.133  12.852  10.500   8.711   7.812   7.756   8.232   8.860   9.361   9.614   9.622   9.428   9.070   8.582   8.035   7.548   7.257 
+ 13.249  13.297  13.314  13.165  12.720  11.958  11.029  10.217   9.774   9.738   9.887   9.906   9.683   9.483   9.825  11.090  13.122  15.155  16.182  15.558  13.436  10.719   8.533   7.583   7.810   8.563   9.111   9.120   8.761   8.430   8.354   8.406   8.265   7.744   7.004   6.461 
+ 13.270  13.109  12.948  12.910  12.902  12.645  11.934  10.866   9.822   9.177   8.995   8.998   8.870   8.626   8.711   9.668  11.618  13.975  15.682  15.841  14.291  11.731   9.278   7.803   7.496   7.922   8.459   8.740   8.791   8.827   8.942   8.974   8.663   7.922   7.001   6.361 
+ 13.618  13.652  13.784  14.000  14.097  13.763  12.844  11.551  10.409   9.932  10.241  10.969  11.531  11.591  11.343  11.380  12.226  13.883  15.732  16.875  16.682  15.159  12.928  10.856   9.603   9.364   9.903  10.783  11.599  12.095  12.159  11.785  11.049  10.123   9.265   8.747 
+ 14.602  14.900  15.422  16.003  16.390  16.314  15.632  14.457  13.154  12.171  11.786  11.931  12.264  12.460  12.508  12.773  13.709  15.413  17.382  18.698  18.569  16.865  14.244  11.778  10.339  10.187  10.984  12.157  13.257  14.060  14.437  14.220  13.275  11.721  10.048   8.955 
+ 15.260  14.993  14.796  15.051  15.832  16.768  17.257  16.878  15.703  14.261  13.170  12.728  12.775  12.945  13.071  13.381  14.284  15.902  17.758  18.947  18.702  16.958  14.449  12.256  11.140  11.166  11.847  12.624  13.232  13.683  13.963  13.832  12.965  11.339   9.469   8.206 
+ 15.231  14.934  14.675  14.844  15.553  16.484  17.070  16.876  15.903  14.585  13.477  12.887  12.749  12.820  13.017  13.553  14.708  16.420  18.072  18.757  17.880  15.637  12.965  10.959  10.185  10.422  10.989  11.361  11.501  11.685  12.021  12.169  11.586  10.077   8.152   6.797 
+ 14.481  13.689  12.846  12.772  13.650  14.856  15.492  15.101  13.952  12.695  11.768  11.133  10.544  10.030  10.033  11.033  12.969  15.059  16.229  15.873  14.290  12.453  11.287  11.042  11.247  11.219  10.658   9.852   9.364   9.510  10.073  10.454  10.123   9.022   7.629   6.672 
+ 14.320  13.796  13.228  13.100  13.421  13.716  13.497  12.728  11.833  11.241  10.961  10.639  10.062   9.564   9.843  11.280  13.359  14.837  14.631  12.728  10.323   8.987   9.495  11.255  12.769  12.770  11.123   8.836   7.260   7.130   8.155   9.358   9.822   9.276   8.179   7.336 
+ 14.019  13.692  13.307  13.141  13.223  13.311  13.134  12.639  11.999  11.411  10.911  10.424  10.008   9.978  10.701  12.177  13.784  14.549  13.813  11.819   9.679   8.672   9.341  11.079  12.538  12.570  11.012   8.757   7.102   6.856   7.857   9.185   9.848   9.454   8.406   7.553 
+ 13.981  13.623  13.127  12.780  12.734  12.905  13.040  12.897  12.405  11.708  11.058  10.677  10.666  11.014  11.637  12.384  13.007  13.186  12.685  11.569  10.309   9.592   9.885  11.028  12.205  12.423  11.205   9.003   6.960   6.146   6.814   8.235   9.262   9.195   8.275   7.418 
+ 14.081  13.558  12.880  12.505  12.632  13.051  13.310  13.056  12.318  11.478  10.981  11.010  11.378  11.726  11.822  11.716  11.602  11.569  11.478  11.137  10.589  10.215  10.464  11.390  12.424  12.672  11.585   9.486   7.461   6.618   7.254   8.616   9.479   9.106   7.818   6.705 
+ 14.279  13.786  13.145  12.791  12.921  13.353  13.664  13.521  12.939  12.269  11.920  12.038  12.410  12.671  12.617  12.361  12.172  12.168  12.173  11.895  11.281  10.695  10.668  11.390  12.393  12.790  11.956  10.122   8.327   7.690   8.535  10.110  11.151  10.884   9.630   8.516 
+ 14.925  14.167  13.256  12.895  13.310  14.088  14.551  14.330  13.646  13.068  13.003  13.363  13.702  13.663  13.313  13.048  13.175  13.560  13.696  13.159  12.037  10.945  10.552  11.011  11.768  11.963  11.114   9.534   8.142   7.770   8.526   9.699  10.303   9.831   8.641   7.663 
+ 14.958  14.345  13.609  13.321  13.677  14.362  14.844  14.817  14.406  13.981  13.786  13.728  13.518  13.006  12.383  12.047  12.246  12.826  13.321  13.308  12.745  11.993  11.509  11.482  11.684  11.667  11.123  10.118   9.039   8.308   8.103   8.280   8.526   8.606   8.502   8.374 
+ 14.324  13.581  12.694  12.353  12.779  13.585  14.161  14.184  13.804  13.388  13.109  12.822  12.304  11.592  11.042  11.027  11.562  12.256  12.639  12.582  12.401  12.533  13.095  13.717  13.831  13.143  11.884  10.635   9.891   9.741   9.893   9.961   9.749   9.321   8.880   8.612 
+ 14.155  13.347  12.396  12.080  12.661  13.713  14.516  14.623  14.122  13.413  12.797  12.270  11.699  11.112  10.777  10.958  11.614  12.365  12.788  12.771  12.583  12.584  12.854  13.098  12.913  12.163  11.115  10.217   9.742   9.616   9.566   9.401   9.150   8.964   8.921   8.952 
+ 13.991  13.305  12.455  12.103  12.589  13.719  14.927  15.658  15.649  14.980  13.925  12.784  11.806  11.181  11.007  11.233  11.655  12.013  12.164  12.167  12.204  12.376  12.569  12.517  12.018  11.103  10.009   8.988   8.136   7.400   6.742   6.266   6.166   6.514   7.113   7.570 
+ 13.741  13.214  12.560  12.314  12.796  13.912  15.222  16.195  16.485  16.051  15.104  13.952  12.871  12.052  11.596  11.513  11.719  12.052  12.338  12.479  12.492  12.456  12.393  12.185  11.607  10.489   8.881   7.107   5.634   4.823   4.738   5.130   5.616   5.913   5.972   5.930 
+ 13.514  12.973  12.271  11.940  12.348  13.487  14.971  16.242  16.842  16.602  15.661  14.348  13.033  12.002  11.417  11.302  11.550  11.965  12.328  12.504  12.503  12.439  12.386  12.245  11.746  10.626   8.883   6.894   5.270   4.505   4.661   5.333   5.924   6.053   5.774   5.465 
+ 13.622  12.988  12.184  11.800  12.154  13.118  14.273  15.207  15.709  15.748  15.349  14.539  13.428  12.288  11.492  11.299  11.664  12.247  12.664  12.756  12.661  12.625  12.711  12.677  12.141  10.887   9.080   7.198   5.758   5.035   4.963   5.255   5.607   5.845   5.945   5.966 
+ 13.755  13.169  12.434  12.097  12.429  13.292  14.311  15.163  15.715  15.943  15.782  15.123  13.980  12.644  11.610  11.281  11.680  12.422  13.000  13.152  13.002  12.863  12.888  12.888  12.456  11.316   9.568   7.663   6.120   5.224   4.918   4.922   4.950   4.867   4.706   4.580 
+ 13.680  13.147  12.480  12.178  12.488  13.277  14.193  14.932  15.382  15.548  15.408  14.876  13.936  12.790  11.831  11.432  11.689  12.359  13.035  13.418  13.451  13.239  12.856  12.236  11.255   9.901   8.366   6.968   5.958   5.397   5.166   5.097   5.078   5.079   5.097   5.116 
+ 13.906  13.011  11.949  11.585  12.255  13.573  14.821  15.534  15.765  15.848  15.976  15.992  15.590  14.653  13.410  12.274  11.570  11.402  11.726  12.454  13.406  14.206  14.325  13.410  11.656   9.850   8.918   9.258  10.415  11.416  11.517  10.751   9.804   9.369   9.558   9.903 
+ 13.692  13.036  12.205  11.836  12.298  13.470  14.848  15.880  16.288  16.163  15.817  15.522  15.329  15.072  14.531  13.638  12.591  11.789  11.612  12.165  13.139  13.922  13.932  12.985  11.454  10.071   9.480   9.837  10.732  11.493  11.645  11.185  10.487   9.962   9.759   9.748 
+ 11.426  11.338  11.505  12.255  13.524  14.830  15.617  15.680  15.280  14.885  14.774  14.868  14.883  14.619  14.094  13.451  12.787  12.105  11.440  10.943  10.796  10.991  11.228  11.090  10.409   9.479   8.893   9.094   9.997  11.031  11.551  11.286  10.464   9.552   8.902   8.601 
+ 12.016  11.365  10.679  10.629  11.335  12.248  12.628  12.170  11.233  10.499  10.392  10.782  11.184  11.215  10.874  10.433  10.119   9.932   9.737   9.490   9.303   9.278   9.310   9.100   8.427   7.424   6.564   6.331   6.844   7.756   8.520   8.776   8.543   8.098   7.717   7.523 
+ 10.585  10.440  10.235  10.085  10.072  10.188  10.339  10.403  10.301  10.048   9.746   9.524   9.466   9.582   9.818  10.093  10.339  10.503  10.551  10.466  10.260   9.977   9.674   9.379   9.072   8.714   8.309   7.946   7.782   7.942   8.427   9.090   9.710  10.125  10.314  10.362 
+  8.742   8.645   8.747   9.320  10.283  11.186  11.558  11.293  10.733  10.384  10.507  10.956  11.371  11.528  11.515  11.593  11.903  12.314  12.545  12.423  12.029  11.589  11.250  10.951  10.526   9.923   9.312   8.991   9.151   9.732  10.469  11.081  11.429  11.546  11.545  11.521 
+  7.565   7.506   7.550   7.852   8.376   8.900   9.185   9.149   8.904   8.613   8.366   8.164   8.034   8.089   8.439   9.032   9.591   9.786   9.504   8.986   8.664   8.820   9.368   9.935  10.194  10.132  10.026  10.159  10.561  11.020  11.331  11.522  11.825  12.413  13.163  13.702 
+  6.936   7.374   7.989   8.442   8.543   8.338   8.023   7.766   7.598   7.449   7.269   7.121   7.149   7.461   8.039   8.734   9.363   9.801  10.024  10.078  10.025   9.930   9.860   9.896  10.104  10.499  11.034  11.627  12.212  12.770  13.314  13.857  14.375  14.820  15.143  15.310 
+  9.286   8.707   7.939   7.481   7.589   8.113   8.636   8.787   8.500   8.017   7.687   7.707   8.026   8.445   8.798   9.066   9.325   9.624   9.904  10.046   9.998   9.851   9.782   9.916  10.222  10.554  10.796  10.999  11.362  12.077  13.139  14.305  15.237  15.726  15.823  15.767 
+  7.699   7.304   6.773   6.417   6.373   6.565   6.858   7.216   7.694   8.277   8.761   8.857   8.452   7.799   7.399   7.644   8.491   9.477  10.061  10.041   9.679   9.457   9.677  10.235  10.756  10.939  10.807  10.678  10.899  11.592  12.596  13.610  14.395  14.873  15.102  15.182 
+  3.885   4.492   5.311   5.902   6.146   6.302   6.701   7.390   8.047   8.254   7.852   7.070   6.330   5.948   5.987   6.342   6.906   7.602   8.294   8.734   8.683   8.142   7.444   7.057   7.235   7.824   8.435   8.823   9.133   9.748  10.874  12.258  13.331  13.676  13.392  13.008 
+  6.776   6.758   6.619   6.314   5.991   5.918   6.240   6.781   7.122   6.902   6.129   5.195   4.590   4.539   4.869   5.200   5.282   5.183   5.186   5.511   6.119   6.750   7.141   7.206   7.062   6.901   6.862   6.996   7.313   7.815   8.470   9.178   9.783  10.167  10.325  10.356 
+  7.458   6.874   6.081   5.577   5.663   6.248   6.930   7.260   7.022   6.348   5.594   5.110   5.034   5.256   5.540   5.694   5.679   5.590   5.558   5.646   5.816   5.974   6.050   6.038   5.990   5.966   5.988   6.036   6.079   6.121   6.214   6.427   6.795   7.270   7.723   8.001 
+  6.855   6.501   6.110   6.024   6.303   6.661   6.712   6.301   5.633   5.097   4.958   5.180   5.526   5.799   5.997   6.245   6.602   6.942   7.045   6.805   6.363   6.016   5.978   6.206   6.433   6.403   6.089   5.739   5.692   6.128   6.932   7.776   8.333   8.477   8.333   8.161 
+  6.023   6.720   7.662   8.304   8.411   8.170   7.959   8.012   8.285   8.592   8.813   8.960   9.071   9.112   9.026   8.881   8.913   9.341  10.110  10.838  11.079  10.710  10.060   9.643   9.700   9.999  10.101   9.855   9.623   9.982  11.125  12.558  13.404  13.134  12.054  11.109 
+  7.541   7.967   8.729   9.631  10.394  10.761  10.647  10.209   9.773   9.623   9.812  10.135  10.307  10.199   9.957   9.893  10.233  10.926  11.660  12.080  12.037  11.670  11.278  11.083  11.099  11.186  11.245  11.348  11.697  12.423  13.412  14.309  14.739  14.576  14.055  13.620 
+ 10.426   9.498   8.498   8.368   9.299  10.600  11.333  11.118  10.353   9.713   9.489   9.407   9.079   8.555   8.381   9.065  10.487  11.871  12.375  11.797  10.713   9.969   9.986  10.529  11.076  11.370  11.595  12.050  12.719  13.226  13.222  12.801  12.475  12.690  13.378  13.986 
+ 13.392  13.081  12.880  13.185  13.928  14.585  14.646  14.067  13.283  12.769  12.617  12.534  12.260  11.927  11.967  12.637  13.642  14.291  14.073  13.125  12.133  11.725  11.935  12.237  12.094  11.492  10.923  10.866  11.272  11.590  11.307  10.458   9.615   9.343   9.670  10.091 
+ 13.370  13.109  12.957  13.276  14.037  14.773  14.955  14.419  13.488  12.683  12.312  12.297  12.379  12.431  12.582  13.006  13.636  14.106  14.022  13.327  12.413  11.835  11.874  12.295  12.530  12.110  11.008   9.629   8.492   7.884   7.734   7.756   7.688   7.452   7.146   6.935 
+ 12.668  12.461  12.266  12.334  12.723  13.216  13.460  13.213  12.517  11.681  11.084  10.953  11.257  11.777  12.258  12.537  12.581  12.442  12.199  11.935  11.728  11.637  11.652  11.660  11.479  10.948  10.050   8.953   7.942   7.266   7.011   7.066   7.220   7.307   7.290   7.241 
+ 12.316  12.502  12.583  12.288  11.657  11.016  10.642  10.474  10.192   9.581   8.828   8.416   8.688   9.494  10.283  10.565  10.329  10.018  10.092  10.603  11.173  11.373  11.115  10.668  10.316  10.028   9.512   8.580   7.466   6.711   6.699   7.282   7.876   7.966   7.549   7.105 
+ 12.674  12.678  12.545  12.191  11.740  11.413  11.250  10.981  10.260   9.072   7.912   7.476   8.089   9.382  10.546  10.975  10.726  10.388  10.495  11.045  11.557  11.584  11.144  10.642  10.394  10.255   9.764   8.688   7.389   6.599   6.767   7.590   8.223   8.010   7.081   6.243 
+ 12.360  12.483  12.539  12.362  11.985  11.590  11.266  10.859  10.121   9.043   8.022   7.645   8.216   9.450  10.641  11.196  11.078  10.767  10.785  11.231  11.726  11.798  11.317  10.574   9.953   9.562   9.163   8.479   7.541   6.705   6.342   6.490   6.820   6.955   6.803   6.594 
+ 12.210  12.472  12.678  12.514  11.985  11.389  10.984  10.703  10.234   9.410   8.504   8.088   8.544   9.663  10.751  11.176  10.892  10.446  10.466  11.085  11.822  12.007  11.359  10.197   9.126   8.520   8.269   7.987   7.429   6.709   6.157   5.991   6.139   6.359   6.476   6.496 
+ 12.792  12.578  12.403  12.528  12.969  13.456  13.642  13.357  12.692  11.894  11.200  10.782  10.779  11.297  12.301  13.499  14.400  14.603  14.096  13.282  12.660  12.399  12.197  11.579  10.389   9.013   8.107   8.038   8.551   8.980   8.824   8.169   7.577   7.546   8.039   8.537 
+ 13.458  12.803  12.209  12.426  13.516  14.761  15.281  14.766  13.665  12.695  12.207  11.998  11.724  11.410  11.522  12.482  14.131  15.696  16.351  15.865  14.745  13.755  13.257  12.996  12.469  11.486  10.374   9.641   9.475   9.563   9.400   8.754   7.839   7.065   6.660   6.545 
+ 13.501  12.763  12.075  12.290  13.541  15.080  15.883  15.464  14.201  12.921  12.190  11.941  11.740  11.365  11.097  11.463  12.678  14.344  15.685  16.116  15.637  14.730  13.901  13.302  12.732  11.969  11.054  10.280   9.917   9.961  10.124  10.059   9.612   8.895   8.182   7.747 
+ 13.398  12.863  12.387  12.636  13.745  15.149  15.983  15.726  14.557  13.167  12.204  11.838  11.767  11.618  11.349  11.297  11.860  13.089  14.572  15.685  16.009  15.562  14.701  13.803  13.023  12.294  11.542  10.856  10.466  10.523  10.901  11.213  11.059  10.336   9.355   8.658 
+ 13.285  12.999  12.820  13.184  14.156  15.294  15.919  15.592  14.435  13.041  12.051  11.721  11.815  11.889  11.718  11.499  11.671  12.504  13.816  15.046  15.649  15.452  14.719  13.875  13.158  12.505  11.747  10.900  10.244  10.098  10.483  11.006  11.115  10.541   9.556   8.801 
+ 13.121  13.064  13.143  13.544  14.220  14.830  14.931  14.298  13.122  11.919  11.176  11.018  11.144  11.112  10.740  10.303  10.323  11.125  12.517  13.877  14.592  14.491  13.915  13.375  13.114  12.957  12.575  11.892  11.233  11.048  11.454  12.038  12.137  11.406  10.168   9.219 
+ 11.661  11.702  11.964  12.593  13.473  14.188  14.258  13.483  12.129  10.792   9.997   9.843   9.964   9.850   9.300   8.613   8.380   9.007  10.365  11.845  12.785  12.924  12.520  12.073  11.894  11.904  11.810  11.451  10.987  10.744  10.867  11.127  11.089  10.506   9.592   8.902 
+ 10.819  11.043  11.551  12.290  12.969  13.166  12.637  11.554  10.432   9.771   9.710   9.968  10.133  10.009   9.745   9.641   9.857  10.294  10.730  11.050  11.326  11.682  12.095  12.363  12.270  11.788  11.123  10.541  10.162   9.903   9.622   9.295   9.047   9.010   9.162   9.325 
+  8.340   8.356   8.495   8.829   9.261   9.554   9.510   9.141   8.661   8.312   8.178   8.156   8.100   7.987   7.937   8.082   8.415   8.788   9.056   9.224   9.439   9.820  10.296  10.606  10.488   9.888   9.011   8.174   7.590   7.277   7.130   7.067   7.089   7.226   7.435   7.594 
+  5.722   6.171   6.815   7.368   7.720   7.945   8.102   8.067   7.598   6.598   5.319   4.275   3.902   4.254   4.995   5.688   6.123   6.387   6.665   6.985   7.176   7.064   6.680   6.267   6.067   6.103   6.192   6.153   6.014   5.980   6.201   6.571   6.783   6.613   6.150   5.757 
+  6.934   6.593   6.309   6.510   7.250   8.120   8.561   8.291   7.499   6.655   6.138   6.004   6.062   6.138   6.247   6.528   7.037   7.636   8.087   8.274   8.306   8.413   8.700   9.018   9.066   8.649   7.878   7.124   6.775   6.969   7.524   8.073   8.314   8.179   7.840   7.572 
+  8.445   8.433   8.594   9.078   9.779  10.349  10.450  10.038   9.423   9.039   9.123   9.580  10.118  10.518  10.800  11.130  11.611  12.151  12.548  12.694  12.702  12.804  13.131  13.553  13.751  13.465  12.722  11.848  11.264  11.205  11.583  12.073  12.343  12.264  11.965  11.713 
+  9.154   9.336   9.849  10.749  11.774  12.416  12.267  11.367  10.232   9.504   9.506  10.063  10.716  11.126  11.305  11.499  11.877  12.324  12.547  12.382  11.998  11.798  12.077  12.746  13.356  13.434  12.849  11.928  11.222  11.116  11.570  12.174  12.464  12.244  11.708  11.275 
+ 12.075  12.485  13.190  13.971  14.534  14.614  14.087  13.057  11.821  10.732  10.013   9.658   9.489   9.317   9.109   9.020   9.265   9.939  10.915  11.903  12.619  12.930  12.874  12.566  12.097  11.520  10.924  10.490  10.423  10.782  11.354  11.710  11.463  10.565   9.400   8.588 
+ 13.289  13.401  13.812  14.642  15.692  16.449  16.415  15.479  14.035  12.722  11.981  11.786  11.754  11.532  11.120  10.865  11.140  11.997  13.074  13.844  13.983  13.546  12.850  12.180  11.614  11.102  10.692  10.647  11.268  12.547  13.943  14.574  13.754  11.539   8.854   7.031 
+ 13.257  13.036  13.074  13.830  15.209  16.506  16.913  16.146  14.670  13.311  12.617  12.506  12.483  12.189  11.774  11.753  12.505  13.868  15.191  15.790  15.417  14.357  13.122  12.040  11.109  10.201   9.371   8.954   9.313  10.457  11.853  12.655  12.226  10.596   8.528   7.106 
+ 12.636  12.385  12.380  13.119  14.550  15.986  16.578  15.960  14.516  13.053  12.175  11.894  11.777  11.473  11.098  11.148  12.001  13.481  14.872  15.412  14.839  13.556  12.278  11.480  11.096  10.718  10.071   9.342   9.051   9.565  10.681  11.646  11.670  10.526   8.800   7.537 
+ 11.212  11.116  11.438  12.593  14.300  15.636  15.749  14.578  12.905  11.680  11.251  11.196  10.900  10.272   9.890  10.421  11.867  13.401  13.979  13.208  11.685  10.485  10.260  10.730  11.008  10.426   9.149   8.046   7.976   9.091  10.707  11.798  11.685  10.441   8.789   7.654 
+ 11.807  11.754  11.750  11.855  11.969  11.875  11.420  10.678   9.908   9.350   9.046   8.850   8.617   8.373   8.295   8.515   8.944   9.306   9.362   9.114   8.791   8.630   8.644   8.611   8.296   7.694   7.069   6.757   6.900   7.344   7.785   7.999   7.972   7.837   7.724   7.674 
+ 10.904  10.618  10.298  10.201  10.341  10.459  10.250   9.640   8.853   8.220   7.911   7.826   7.724   7.466   7.142   6.977   7.146   7.639   8.299   8.932   9.388   9.565   9.389   8.863   8.148   7.566   7.451   7.923   8.763   9.526   9.826   9.572   8.989   8.405   8.027   7.869 
+  9.080   8.950   8.970   9.427  10.316  11.283  11.874  11.884  11.509  11.171  11.164  11.418  11.584  11.360  10.790  10.290  10.365  11.237  12.658  14.034  14.764  14.561  13.562  12.202  10.970  10.207  10.019  10.311  10.868  11.436  11.787  11.781  11.404  10.787  10.160   9.769 
+ 11.665  11.711  11.865  12.162  12.530  12.805  12.832  12.596  12.238  11.946  11.799  11.705  11.499  11.131  10.788  10.813  11.468  12.698  14.091  15.088  15.295  14.694  13.612  12.482  11.605  11.059  10.794  10.777  11.030  11.538  12.126  12.466  12.268  11.506  10.517   9.826 
+ 14.331  13.546  12.438  11.571  11.215  11.239  11.347  11.396  11.486  11.764  12.184  12.494  12.481  12.236  12.137  12.540  13.439  14.405  14.884  14.593  13.686  12.577  11.606  10.861  10.267   9.805   9.611   9.844  10.472  11.198  11.624  11.508  10.905  10.095   9.392   8.999 
+ 12.690  11.938  10.841   9.922   9.485   9.504   9.795  10.245  10.889  11.765  12.748  13.550  13.923  13.875  13.668  13.605  13.776  14.009  14.046  13.780  13.330  12.904  12.613  12.418  12.241  12.105  12.128  12.378  12.745  12.983  12.915  12.594  12.271  12.175  12.313  12.484 
+ 12.230  11.431  10.421   9.854   9.901  10.190  10.264  10.083  10.079  10.702  11.937  13.239  13.976  13.923  13.372  12.804  12.472  12.321  12.227  12.243  12.510  12.962  13.184  12.705  11.506  10.218   9.725  10.422  11.812  12.858  12.827  11.900  10.976  10.849  11.509  12.207 
+ 14.881  14.663  14.285  13.773  13.080  12.185  11.264  10.703  10.869  11.778  12.979  13.808  13.848  13.222  12.456  12.043  12.078  12.287  12.359  12.257  12.189  12.305  12.452  12.277  11.588  10.630   9.961  10.007  10.691  11.470  11.774  11.440  10.775  10.227  10.007   9.995 
+ 14.952  14.274  13.211  12.146  11.321  10.786  10.516  10.523  10.831  11.372  11.953  12.397  12.693  12.989  13.376  13.699  13.637  13.057  12.286  11.963  12.487  13.540  14.193  13.637  11.959  10.242   9.786  11.038  13.148  14.588  14.337  12.662  10.812   9.932  10.163  10.697 
+ 11.937  11.170  10.181   9.616   9.733  10.292  10.864  11.235  11.516  11.927  12.518  13.132  13.583  13.822  13.891  13.761  13.329  12.628  12.030  12.097  13.069  14.456  15.211  14.539  12.685  10.950  10.751  12.432  14.847  16.183  15.383  12.985  10.645   9.743  10.307  11.164 
+ 11.880  11.824  11.551  10.944  10.146   9.547   9.521  10.129  11.053  11.832  12.218  12.339  12.521  12.925  13.327  13.286  12.570  11.481  10.740  10.964  12.124  13.461  13.983  13.213  11.606  10.269  10.173  11.435  13.230  14.383  14.198  12.880  11.272  10.170   9.791   9.801 
+ 12.143  12.690  13.177  12.941  11.882  10.606   9.976  10.439  11.718  13.069  13.864  13.983  13.741  13.471  13.216  12.771  12.014  11.157  10.649  10.804  11.492  12.169  12.251  11.539  10.364   9.370   9.101   9.692  10.829  11.953  12.540  12.319  11.342   9.940   8.599   7.785 
+ 14.066  13.972  13.751  13.428  13.154  13.136  13.459  13.976  14.374  14.406  14.087  13.664  13.395  13.303  13.147  12.640  11.745  10.768  10.172  10.236  10.830  11.482  11.685  11.218  10.265   9.275   8.694   8.732   9.288  10.031  10.551  10.536   9.898   8.821   7.706   7.001 
+ 13.514  13.203  12.937  13.127  13.888  14.946  15.860  16.354  16.496  16.558  16.728  16.918  16.830  16.211  15.069  13.691  12.458  11.621  11.202  11.032  10.883  10.570  10.010   9.249   8.462   7.901   7.788   8.169   8.852   9.472   9.683   9.335   8.537   7.574   6.753   6.290 
+ 13.014  12.947  12.946  13.217  13.918  15.004  16.173  17.000  17.221  16.945  16.593  16.542  16.778  16.860  16.302  15.061  13.701  13.014  13.367  14.305  14.788  13.915  11.596   8.657   6.304   5.380   5.932   7.345   8.810   9.750   9.936   9.377   8.211   6.699   5.255   4.365 
+ 12.855  12.618  12.443  12.719  13.636  14.996  16.290  16.998  16.952  16.460  16.090  16.225  16.741  17.066  16.645  15.420  13.963  13.076  13.174  13.903  14.340  13.628  11.600   8.918   6.659   5.657   6.067   7.391   8.852   9.806   9.948   9.291   8.053   6.569   5.242   4.457 
+ 12.738  12.384  12.110  12.439  13.564  15.150  16.529  17.147  16.939  16.350  15.992  16.180  16.706  17.017  16.662  15.657  14.496  13.771  13.712  13.980  13.884  12.874  10.943   8.669   6.882   6.189   6.674   7.916   9.264  10.150  10.282   9.663   8.512   7.168   5.999   5.322 
+ 12.904  12.514  12.245  12.673  13.922  15.523  16.747  17.133  16.789  16.238  15.989  16.193  16.612  16.877  16.774  16.344  15.785  15.281  14.876  14.455  13.798  12.677  11.011   9.015   7.223   6.288   6.600   7.974   9.653  10.715  10.614   9.483   7.966   6.732   6.067   5.845 
+ 13.156  12.608  12.194  12.639  14.038  15.733  16.849  16.991  16.483  15.991  15.939  16.241  16.545  16.646  16.645  16.723  16.824  16.624  15.825  14.464  12.887  11.420  10.084   8.679   7.165   5.932   5.597   6.462   8.113   9.585  10.009   9.207   7.733   6.373   5.569   5.273 
+ 12.606  12.128  11.785  12.248  13.628  15.331  16.501  16.671  16.060  15.333  15.056  15.335  15.883  16.352  16.593  16.634  16.480  16.011  15.076  13.685  12.057  10.465   9.048   7.779   6.642   5.806   5.589   6.181   7.390   8.635   9.264   8.933   7.782   6.298   5.013   4.292 
+ 12.130  11.684  11.383  11.888  13.329  15.146  16.481  16.795  16.209  15.333  14.789  14.831  15.314  15.935  16.461  16.764  16.726  16.199  15.088  13.490  11.690  10.003   8.598   7.473   6.606   6.105   6.173   6.904   8.079   9.198   9.751   9.513   8.658   7.596   6.716   6.241 
+ 12.391  11.919  11.648  12.288  13.901  15.776  16.971  17.026  16.242  15.336  14.862  14.912  15.273  15.771  16.393  17.080  17.511  17.185  15.814  13.635  11.323   9.514   8.373   7.614   6.925   6.373   6.365   7.195   8.616   9.878  10.249   9.541   8.207   6.929   6.127   5.804 
+ 12.373  11.985  11.797  12.430  13.928  15.653  16.759  16.822  16.092  15.213  14.713  14.742  15.171  15.853  16.692  17.504  17.893  17.402  15.873  13.665  11.465   9.820   8.781   8.019   7.276   6.707   6.753   7.637   8.996  10.024  10.059   9.088   7.726   6.688   6.253   6.198 
+ 12.084  11.682  11.472  12.083  13.574  15.313  16.453  16.555  15.840  14.924  14.333  14.241  14.577  15.244  16.165  17.127  17.671  17.286  15.804  13.618  11.462   9.888   8.901   8.097   7.171   6.307   6.050   6.749   8.112   9.308   9.566   8.743   7.371   6.176   5.529   5.327 
+ 11.770  11.330  11.103  11.778  13.407  15.288  16.483  16.516  15.647  14.566  13.855  13.706  14.044  14.783  15.865  17.068  17.868  17.654  16.181  13.846  11.465   9.695   8.602   7.775   6.866   6.013   5.735   6.361   7.579   8.560   8.585   7.618   6.292   5.345   5.035   5.073 
+ 11.823  11.562  11.570  12.378  13.960  15.655  16.646  16.563  15.697  14.684  14.027  13.871  14.147  14.821  15.908  17.237  18.285  18.371  17.130  14.860  12.377  10.455   9.333   8.689   8.091   7.457   7.096   7.312   7.992   8.602   8.612   7.946   7.021   6.359   6.150   6.186 
+ 11.831  11.628  11.722  12.589  14.144  15.708  16.519  16.311  15.448  14.537  13.956  13.725  13.768  14.190  15.195  16.699  18.093  18.503  17.422  15.148  12.608  10.678   9.591   8.950   8.285   7.592   7.315   7.818   8.879   9.751   9.750   8.830   7.596   6.755   6.538   6.630 
+ 11.525  11.349  11.445  12.254  13.713  15.210  16.020  15.842  14.966  13.978  13.308  13.046  13.111  13.517  14.395  15.728  17.118  17.870  17.421  15.736  13.347  10.983   9.135   7.912   7.240   7.108   7.582   8.568   9.637  10.174   9.793   8.657   7.368   6.512   6.243   6.275 
+ 11.285  11.132  11.309  12.262  13.867  15.399  16.060  15.594  14.439  13.327  12.720  12.607  12.761  13.134  13.925  15.258  16.815  17.852  17.657  16.072  13.618  11.131   9.229   8.068   7.513   7.451   7.897   8.801   9.833  10.441  10.215   9.213   7.936   6.943   6.464   6.342 
+ 11.762  11.650  11.909  12.949  14.553  15.919  16.278  15.525  14.283  13.339  13.021  13.085  13.165  13.277  13.830  15.120  16.831  18.079  18.020  16.487  14.084  11.691   9.861   8.651   7.935   7.771   8.364   9.668  11.093  11.749  11.101   9.443   7.719   6.776   6.732   7.014 
+ 11.829  11.871  12.277  13.281  14.632  15.664  15.799  15.037  13.943  13.168  12.938  12.994  13.006  13.018  13.446  14.624  16.323  17.748  18.047  16.903  14.711  12.246  10.158   8.743   8.073   8.205   9.154  10.646  12.003  12.425  11.530   9.699   7.840   6.734   6.497   6.639 
+ 11.616  11.703  12.151  13.131  14.373  15.235  15.191  14.280  13.094  12.298  12.111  12.234  12.260  12.172  12.418  13.469  15.274  17.108  17.987  17.326  15.308  12.719  10.441   9.021   8.574   8.934   9.811  10.823  11.507  11.464  10.597   9.247   8.009   7.339   7.251   7.386 
+ 10.976  11.322  12.098  13.255  14.441  15.113  14.901  13.915  12.700  11.842  11.564  11.643  11.729  11.748  12.021  12.963  14.624  16.482  17.667  17.483  15.831  13.260  10.656   8.814   8.138   8.566   9.664  10.811  11.420  11.176  10.186   8.930   7.986   7.674   7.871   8.153 
+ 11.201  11.782  12.729  13.684  14.283  14.301  13.748  12.867  12.010  11.450  11.248  11.255  11.282  11.302  11.536  12.309  13.741  15.510  16.888  17.097  15.791  13.335  10.656   8.755   8.172   8.756   9.861  10.790  11.161  10.983  10.464   9.779   8.990   8.137   7.355   6.873 
+ 10.321  10.419  10.554  10.640  10.596  10.362   9.909   9.271   8.587   8.079   7.931   8.143   8.513   8.807   9.021   9.470  10.550  12.302  14.157  15.145  14.526  12.369   9.604   7.446   6.612   6.944   7.687   8.172   8.279   8.328   8.567   8.792   8.489   7.383   5.840   4.713 
+  9.841   9.942   9.958   9.691   9.119   8.443   7.939   7.762   7.862   8.062   8.209   8.271   8.323   8.472   8.804   9.376  10.215  11.261  12.311  13.053  13.209  12.718  11.800  10.837  10.137   9.780   9.648   9.598   9.602   9.715   9.931  10.090   9.961   9.453   8.757   8.256 
+ 10.930  10.406   9.685   9.131   8.833   8.577   8.111   7.445   6.888   6.771   7.125   7.620   7.842   7.674   7.427   7.606   8.492   9.891  11.243  11.984  11.870  11.056   9.916   8.820   8.004   7.569   7.523   7.784   8.184   8.524   8.685   8.704   8.730   8.885   9.144   9.346 
+ 10.749  10.046   9.160   8.669   8.713   8.897   8.687   7.909   6.912   6.253   6.215   6.597   6.948   7.008   6.937   7.148   7.900   9.038  10.080  10.549  10.268   9.402   8.289   7.265   6.587   6.431   6.860   7.739   8.722   9.393   9.520   9.209   8.815   8.654   8.768   8.938 
+  9.862   9.818   9.754   9.693   9.639   9.567   9.445   9.265   9.066   8.921   8.888   8.973   9.125   9.292   9.477   9.751  10.190  10.793  11.432  11.908  12.067  11.903  11.556  11.210  10.974  10.832  10.710  10.574  10.473  10.474  10.566  10.622  10.481  10.094   9.599   9.251 
+  9.194   9.710  10.496  11.223  11.680  11.881  11.999  12.212  12.562  12.937  13.145  13.047  12.638  12.066  11.574  11.401  11.661  12.275  12.988  13.496  13.617  13.393  13.048  12.814  12.763  12.769  12.650  12.349  12.009  11.861  12.026  12.398  12.721  12.802  12.661  12.496 
+ 10.261  10.481  10.880  11.367  11.815  12.108  12.206  12.152  12.021  11.831  11.517  10.996  10.290   9.600   9.233   9.432  10.204  11.290  12.292  12.890  12.982  12.704  12.316  12.053  12.020  12.170  12.339  12.335  12.039  11.497  10.935  10.664  10.904  11.622  12.503  13.103 
+ 11.726  11.622  11.356  10.883  10.262   9.684   9.407   9.615  10.289  11.173  11.872  12.051  11.631  10.862  10.230  10.204  10.985  12.362  13.796  14.687  14.684  13.874  12.718  11.794  11.469  11.716  12.159  12.329  11.958  11.144  10.294   9.881  10.168  11.052  12.110  12.816 
+ 11.144  10.676  10.051   9.649   9.643   9.925  10.268  10.552  10.828  11.185  11.563  11.735  11.506  10.949  10.455  10.514  11.371  12.822  14.318  15.283  15.422  14.825  13.838  12.831  12.034  11.495  11.128  10.803  10.410   9.932   9.466   9.196   9.274   9.699  10.267  10.666 
+ 11.876  11.009   9.892   9.267   9.442  10.124  10.756  11.007  10.987  11.033  11.316  11.665  11.769  11.529  11.212  11.249  11.865  12.880  13.845  14.384  14.416  14.116  13.688  13.208  12.647  12.014  11.424  11.018  10.817  10.696  10.504  10.212   9.940   9.830   9.890   9.989 
+ 12.584  11.540  10.055   8.975   8.882   9.764  11.059  12.058  12.363  12.097  11.714  11.584  11.711  11.807  11.665  11.450  11.623  12.519  13.934  15.136  15.352  14.356  12.683  11.250  10.699  10.966  11.443  11.527  11.096  10.508  10.193  10.241  10.366  10.242   9.849   9.495 
+ 10.101   9.740   9.291   9.109   9.381   9.989  10.600  10.920  10.918  10.828  10.915  11.205  11.432  11.307  10.866  10.573  10.990  12.242  13.756  14.574  14.076  12.538  11.002  10.506  11.273  12.530  13.147  12.563  11.226  10.164  10.091  10.807  11.443  11.273  10.384   9.565 
+ 10.383  10.400  10.286   9.901   9.289   8.702   8.448   8.676   9.261   9.872  10.174  10.020   9.534   9.056   8.988   9.595  10.844  12.356  13.539  13.893  13.310  12.184  11.188  10.846  11.183  11.734  11.919  11.495  10.728  10.147  10.090  10.433  10.727  10.612  10.141   9.717 
+ 12.282  12.489  12.352  11.348   9.582   7.861   7.114   7.668   8.989  10.094  10.288   9.613   8.709   8.281   8.637   9.612  10.812  11.877  12.571  12.740  12.322  11.436  10.439   9.775   9.696  10.064  10.460  10.530  10.265   9.958   9.890  10.038  10.104   9.829   9.281   8.834 
+  9.552   9.236   8.770   8.375   8.186   8.193   8.297   8.427   8.598   8.875   9.265   9.665   9.914   9.944   9.881   9.996  10.513  11.401  12.345  12.918  12.866  12.278  11.512  10.940  10.703  10.680  10.654  10.537  10.433  10.492  10.702  10.821  10.547   9.794   8.833   8.160 
+  9.959   9.680   9.126   8.380   7.658   7.238   7.304   7.813   8.523   9.146   9.520   9.669   9.731   9.859  10.159  10.693  11.458  12.332  13.044  13.265  12.822  11.873  10.876  10.318  10.379  10.812  11.152  11.084  10.671  10.253  10.114  10.233  10.324  10.138   9.715   9.360 
+ 10.670   9.690   8.414   7.640   7.645   8.049   8.243   7.983   7.574   7.519   7.982   8.612   8.889   8.664   8.369   8.665   9.834  11.461  12.691  12.875  12.040  10.825   9.956   9.727   9.876   9.931   9.653   9.225   9.048   9.371  10.063  10.707  10.910  10.574   9.958   9.491 
+ 10.423   9.189   7.638   6.849   7.196   8.122   8.708   8.494   7.824   7.449   7.785   8.528   8.970   8.687   7.975   7.620   8.213   9.617  11.047  11.677  11.252  10.213   9.283   8.913   9.023   9.218   9.197   9.005   8.931   9.201   9.737  10.201  10.254   9.818   9.145   8.652 
+ 10.637   9.913   8.794   7.699   6.879   6.368   6.151   6.303   6.931   7.946   8.928   9.322   8.860   7.877   7.185   7.517   8.965  10.848  12.158  12.250  11.250   9.894   8.958   8.731   8.925   9.030   8.772   8.310   8.052   8.282   8.915   9.560   9.812   9.543   8.982   8.543 
+  9.821   9.674   9.474   9.302   9.149   8.945   8.679   8.467   8.453   8.631   8.767   8.563   7.955   7.294   7.182   8.035   9.699  11.447  12.420  12.198  11.079   9.846   9.198   9.286   9.679   9.766   9.266   8.433   7.843   7.938   8.692   9.633  10.195  10.118   9.609   9.158 
+ 10.938  10.920  10.910  10.954  11.081  11.254  11.357  11.230  10.768   9.989   9.025   8.052   7.230   6.705   6.651   7.220   8.382   9.774  10.770  10.820   9.883   8.571   7.794   8.101   9.225  10.241  10.282   9.265   7.988   7.503   8.226   9.571  10.417  10.049   8.774   7.667 
+  7.175   7.356   7.604   7.813   7.980   8.151   8.285   8.187   7.642   6.632   5.433   4.465   4.007   4.048   4.385   4.846   5.396   6.008   6.486   6.506   5.906   4.978   4.384   4.675   5.766   6.901   7.206   6.434   5.218   4.580   5.053   6.212   7.021   6.744   5.601   4.584 
+  9.234   8.969   8.581   8.243   8.032   7.906   7.768   7.568   7.325   7.070   6.768   6.339   5.746   5.093   4.600   4.473   4.741   5.222   5.628   5.755   5.599   5.316   5.081   4.962   4.912   4.859   4.798   4.805   4.955   5.226   5.477   5.519   5.246   4.713   4.129   3.750 
+  8.484   7.622   6.586   6.164   6.585   7.385   7.860   7.672   7.057   6.498   6.227   6.061   5.688   5.078   4.573   4.547   4.997   5.477   5.477   4.889   4.120   3.736   3.973   4.565   5.024   5.092   4.934   4.927   5.266   5.782   6.122   6.072   5.725   5.345   5.117   5.042 
+  6.494   6.209   5.716   5.152   4.685   4.455   4.516   4.798   5.117   5.266   5.141   4.820   4.528   4.479   4.706   5.010   5.104   4.839   4.351   3.973   3.981   4.361   4.810   4.976   4.748   4.359   4.198   4.490   5.109   5.678   5.860   5.603   5.135   4.748   4.572   4.541 
+  5.835   5.495   5.052   4.808   4.917   5.286   5.654   5.768   5.533   5.039   4.493   4.099   3.982   4.158   4.534   4.948   5.231   5.289   5.156   4.967   4.858   4.864   4.894   4.824   4.623   4.404   4.338   4.507   4.818   5.063   5.076   4.861   4.572   4.375   4.323   4.341 
+  5.379   5.097   4.761   4.645   4.846   5.197   5.382   5.165   4.569   3.870   3.414   3.405   3.796   4.353   4.819   5.060   5.094   5.021   4.918   4.794   4.619   4.388   4.153   4.006   4.020   4.204   4.500   4.815   5.061   5.181   5.147   4.960   4.651   4.286   3.958   3.763 
+  7.071   7.251   7.663   8.321   9.121   9.869  10.389  10.626  10.641  10.522  10.307  10.009   9.696   9.533   9.681  10.150  10.726  11.091  11.040  10.641  10.167   9.886   9.853   9.903   9.813   9.482   8.973   8.404   7.823   7.204   6.563   6.034   5.814   5.987   6.401   6.738 
+ 11.312  10.769  10.207  10.237  11.057  12.307  13.377  13.853  13.737  13.302  12.792  12.293  11.837  11.579  11.769  12.522  13.596  14.460  14.639  14.072  13.168  12.494  12.367  12.672  13.025  13.089  12.767  12.149  11.358  10.483   9.654   9.111   9.111   9.705  10.589  11.238 
+ 12.355  11.729  10.928  10.505  10.707  11.343  12.013  12.443  12.648  12.798  12.965  13.043  12.898  12.609  12.507  12.924  13.864  14.884  15.353  14.909  13.754  12.539  11.919  12.105  12.751  13.235  13.105  12.363  11.416  10.766  10.690  11.128  11.793  12.390  12.770  12.935 
+ 12.964  13.078  13.237  13.314  13.172  12.769  12.239  11.864  11.907  12.404  13.088  13.538  13.474  12.978  12.457  12.366  12.876  13.758  14.547  14.862  14.638  14.111  13.610  13.321  13.218  13.161  13.051  12.921  12.880  13.013  13.299  13.630  13.887  14.012  14.030  14.011 
+ 14.770  14.959  15.073  14.852  14.311  13.758  13.534  13.716  14.064  14.232  14.060  13.662  13.285  13.094  13.099  13.260  13.604  14.190  14.955  15.626  15.843  15.433  14.570  13.673  13.089  12.860  12.773  12.642  12.529  12.680  13.240  14.028  14.630  14.736  14.421  14.081 
+ 15.445  14.705  13.622  12.708  12.252  12.162  12.119  11.882  11.502  11.269  11.450  12.041  12.750  13.225  13.330  13.236  13.250  13.533  13.959  14.228  14.148  13.800  13.457  13.311  13.273  13.051  12.460  11.680  11.209  11.493  12.523  13.763  14.494  14.348  13.593  12.927 
+ 13.264  12.670  11.810  11.125  10.872  10.974  11.106  10.973  10.571  10.232  10.383  11.217  12.505  13.726  14.419  14.485  14.204  13.969  13.977  14.117  14.148  13.960  13.669  13.466  13.380  13.217  12.757  12.034  11.406  11.305  11.856  12.707  13.267  13.168  12.571  12.031 
+ 12.007  11.190  10.068   9.328   9.375  10.096  10.972  11.463  11.375  10.969  10.750  11.105  12.062  13.303  14.402  15.082  15.323  15.283  15.135  14.961  14.756  14.496  14.176  13.790  13.307  12.695  12.004  11.416  11.178  11.430  12.060  12.715  13.011  12.797  12.271  11.843 
+  9.366   8.516   7.436   6.979   7.685   9.422  11.435  12.791  12.943  12.054  10.869  10.229  10.571  11.725  13.129  14.240  14.844  15.050  15.068  14.994  14.785  14.392  13.892  13.446  13.156  12.957  12.686  12.264  11.809  11.565  11.686  12.077  12.462  12.602  12.493  12.338 
+  9.880   8.958   7.739   7.091   7.595   9.174  11.119  12.515  12.787  12.035  10.919  10.216  10.341  11.189  12.335  13.405  14.278  15.002  15.563  15.768  15.392  14.446  13.292  12.451  12.240  12.530  12.862  12.813  12.323  11.715  11.407  11.586  12.114  12.685  13.079  13.253 
+  9.667   8.255   6.507   5.782   6.735   8.878  10.986  11.981  11.623  10.539   9.649   9.525  10.139  11.099  12.070  12.992  13.941  14.862  15.471  15.434  14.690  13.580  12.664  12.349  12.613  13.053  13.200  12.859  12.222  11.693  11.586  11.933  12.513  13.052  13.394  13.538 
+  9.069   8.613   8.034   7.808   8.261   9.337  10.578  11.365  11.294  10.452   9.389   8.791   9.077  10.185  11.683  13.071  14.036  14.494  14.479  14.039  13.268  12.393  11.764  11.655  12.047  12.572  12.761  12.393  11.685  11.127  11.103  11.600  12.260  12.700  12.804  12.750 
+ 10.161   9.658   8.958   8.521   8.709   9.546  10.656  11.428  11.382  10.495   9.269   8.457   8.616   9.778  11.464  13.004  13.930  14.170  13.955  13.579  13.213  12.884  12.577  12.310  12.123  12.002  11.872  11.657  11.375  11.159  11.168  11.472  11.997  12.576  13.041  13.292 
+  9.411   8.783   7.936   7.461   7.782   8.893  10.327  11.394  11.572  10.824   9.655   8.845   9.000  10.199  11.949  13.486  14.230  14.098  13.488  12.951  12.807  12.970  13.089  12.868  12.317  11.724  11.419  11.500  11.779  11.961  11.900  11.722  11.698  11.988  12.479  12.858 
+  7.837   7.317   6.648   6.390   6.980   8.434  10.236  11.577  11.819  10.933   9.561   8.628   8.754   9.893  11.438  12.701  13.362  13.568  13.653  13.793  13.886  13.732  13.285  12.726  12.295  12.066  11.908  11.657  11.319  11.101  11.227  11.722  12.380  12.925  13.223  13.322 
+  9.501   8.495   7.177   6.470   6.912   8.318   9.924  10.897  10.847  10.023   9.102   8.746   9.231  10.348  11.594  12.506  12.912  12.970  12.998  13.217  13.590  13.848  13.707  13.093  12.233  11.516  11.219  11.316  11.512  11.502  11.238  10.987  11.113  11.756  12.658  13.311 
+  7.298   6.343   5.212   4.881   5.815   7.655   9.510  10.583  10.643  10.061   9.459   9.301   9.707  10.524  11.499  12.407  13.100  13.516  13.692  13.736  13.746  13.699  13.452  12.870  12.009  11.157  10.669  10.701  11.087  11.480  11.652  11.691  11.895  12.455  13.226  13.790 
+  7.869   7.037   6.012   5.627   6.334   7.903   9.593  10.630  10.682  10.002   9.212   8.901   9.320  10.320  11.513  12.518  13.137  13.394  13.449  13.456  13.462  13.383  13.081  12.493  11.711  10.963  10.491  10.404  10.628  10.978  11.308  11.596  11.918  12.323  12.747  13.026 
+  7.381   6.510   5.429   5.007   5.737   7.416   9.291  10.542  10.771  10.188   9.427   9.138   9.631  10.746  11.989  12.844  13.058  12.769  12.393  12.333  12.693  13.191  13.354  12.868  11.843  10.770  10.193  10.336  10.964  11.598  11.888  11.857  11.803  11.992  12.399  12.737 
+  5.444   5.568   5.909   6.605   7.715   9.086  10.308  10.875  10.511   9.443   8.373   8.085   8.924  10.546  12.142  13.008  13.019  12.649  12.538  12.965  13.646  13.995  13.619  12.623  11.512  10.804  10.684  10.952  11.259  11.394  11.407  11.501  11.834  12.386  12.968  13.339 
+  5.359   5.731   6.274   6.837   7.499   8.433   9.574  10.473  10.601   9.878   8.904   8.576   9.366  10.900  12.269  12.821  12.723  12.756  13.523  14.803  15.681  15.341  13.814  11.978  10.840  10.737  11.181  11.430  11.188  10.807  10.830  11.405  12.144  12.533  12.442  12.204 
+  4.948   5.279   5.860   6.614   7.522   8.557   9.571  10.267  10.372   9.881   9.151   8.723   8.967   9.858  11.043  12.155  13.056  13.824  14.517  14.988  14.951  14.256  13.102  11.949  11.203  10.934  10.898  10.824  10.679  10.676  11.020  11.656  12.278  12.590  12.562  12.426 
+  6.112   6.237   6.483   6.871   7.440   8.200   9.065   9.840  10.309  10.377  10.152   9.892   9.870  10.231  10.955  11.913  12.931  13.818  14.368  14.405  13.885  12.980  12.031  11.371  11.112  11.091  11.021  10.749  10.385  10.214  10.441  11.011  11.647  12.076  12.223  12.220 
+  6.514   6.708   7.022   7.375   7.751   8.220   8.872   9.703  10.544  11.109  11.168  10.729  10.110   9.793  10.156  11.236  12.689  13.990  14.722  14.776  14.332  13.680  13.025  12.418  11.825  11.238  10.719  10.352  10.179  10.180  10.317  10.584  10.997  11.523  12.040  12.366 
+  5.046   5.167   5.496   6.129   7.079   8.217   9.312  10.128  10.530  10.546  10.339  10.129  10.097  10.322  10.780  11.374  11.994  12.551  12.983  13.252  13.323  13.181  12.851  12.410  11.970  11.625  11.397  11.231  11.042  10.802  10.590  10.559  10.827  11.366  11.978  12.383 
+  5.460   5.968   6.612   7.019   7.179   7.453   8.196   9.346  10.386  10.747  10.300   9.513   9.120   9.587  10.796  12.187  13.181  13.533  13.373  12.985  12.591  12.276  12.057  11.933  11.860  11.717  11.371  10.823  10.290  10.088  10.388  11.053  11.715  12.060  12.055  11.933 
+  4.746   5.595   6.814   7.813   8.317   8.502   8.752   9.282   9.958  10.439  10.502  10.233   9.949   9.950  10.321  10.943  11.631  12.260  12.766  13.076  13.097  12.791  12.257  11.702  11.313  11.122  11.014  10.860  10.662  10.549  10.645  10.928  11.232  11.390  11.374  11.302 
+  4.876   5.684   6.925   8.097   8.869   9.224   9.362   9.484   9.642   9.760   9.760   9.669   9.611   9.729  10.107  10.746  11.581  12.489  13.285  13.754  13.748  13.283  12.565  11.875  11.402  11.132  10.909  10.604  10.249  10.022  10.094  10.477  11.013  11.490  11.788  11.912 
+  5.232   5.863   6.916   8.065   9.002   9.560   9.753   9.730   9.662   9.642   9.657   9.643   9.598   9.633   9.935  10.633  11.671  12.771  13.558  13.755  13.347  12.582  11.820  11.318  11.099  10.999  10.829  10.535  10.232  10.099  10.227  10.543  10.867  11.053  11.082  11.048 
+  4.713   5.509   6.764   7.999   8.854   9.252   9.366   9.442   9.617   9.850  10.007  10.008   9.934   9.992  10.378  11.129  12.065  12.872  13.266  13.146  12.641  12.019  11.533  11.287  11.198  11.090  10.826  10.410   9.978   9.709   9.705   9.932  10.264  10.562  10.753  10.837 
+  6.055   6.451   7.081   7.745   8.328   8.822   9.240   9.541   9.659   9.610   9.537   9.622   9.941  10.386  10.772  11.020  11.239  11.610  12.174  12.734  12.986  12.776  12.240  11.683  11.308  11.047  10.666  10.052   9.391   9.061   9.311  10.017  10.765  11.176  11.194  11.070 
+  6.121   6.653   7.464   8.233   8.784   9.149   9.461   9.784  10.061  10.184  10.127   9.983   9.903   9.987  10.250  10.664  11.197  11.796  12.341  12.647  12.577  12.167  11.638  11.241  11.057  10.927  10.603  10.006   9.353   9.017   9.235   9.900  10.642  11.114  11.236  11.194 
+  6.018   6.389   7.072   7.930   8.767   9.393   9.718   9.805   9.815   9.893  10.065  10.237  10.296  10.238  10.198  10.365  10.836  11.529  12.210  12.623  12.620  12.229  11.615  10.987  10.509  10.237  10.121  10.048   9.922   9.737   9.601   9.690  10.120  10.842  11.614  12.115 
+  5.258   5.801   6.731   7.805   8.788   9.526   9.968  10.145  10.135  10.035   9.940   9.929  10.040  10.269  10.583  10.941  11.317  11.692  12.029  12.264  12.320  12.158  11.806  11.359  10.921  10.552  10.235   9.920   9.591   9.314   9.227   9.458  10.037  10.839  11.615  12.092 
+  6.631   6.680   6.916   7.495   8.431   9.526  10.444  10.887  10.770  10.260   9.686   9.355   9.406   9.784  10.324  10.874  11.363  11.787  12.142  12.374  12.397  12.155  11.681  11.093  10.541  10.126   9.870   9.733   9.669   9.667   9.757   9.972  10.308  10.703  11.056  11.265 
+  5.042   5.180   5.585   6.372   7.485   8.663   9.580  10.045  10.107   9.986   9.882   9.844   9.791   9.675   9.609   9.829  10.492  11.475  12.369  12.719  12.344  11.485  10.656  10.282  10.411  10.722  10.809  10.518  10.061   9.814   9.997  10.487  10.934  11.061  10.884  10.670 
+  6.674   6.735   6.946   7.395   8.081   8.871   9.571  10.026  10.193  10.127   9.912   9.606   9.258   8.977   8.949   9.368  10.278  11.460  12.476  12.885  12.509  11.562  10.538   9.910   9.852  10.165  10.454  10.420  10.053   9.610   9.410   9.624  10.187  10.881  11.470  11.797 
+ 10.025   9.968   9.919   9.957  10.109  10.321  10.486  10.519  10.428  10.303  10.235  10.228  10.197  10.061   9.876   9.842  10.166  10.854  11.620  12.032  11.824  11.112  10.343   9.973  10.123  10.499  10.653  10.360   9.811   9.447   9.591  10.188  10.872  11.283  11.346  11.264 
+ 12.455  12.105  11.656  11.376  11.316  11.289  11.092  10.744  10.491  10.560  10.898  11.158  10.989  10.391   9.799   9.785  10.595  11.895  12.957  13.162  12.425  11.235  10.277   9.960  10.181  10.494  10.495  10.125   9.665   9.478   9.717  10.227  10.694  10.893  10.837  10.719 
+  8.475   8.253   7.998   7.955   8.258   8.844   9.511  10.050  10.367  10.488  10.482  10.378  10.172   9.907   9.744   9.917  10.563  11.559  12.508  12.938  12.600  11.655  10.595   9.928   9.866  10.204  10.513  10.455  10.015   9.474   9.183   9.320   9.807  10.411  10.909  11.176 
+  5.387   5.690   6.262   7.051   7.994   8.990   9.873  10.446  10.566  10.252   9.705   9.215   9.009   9.151   9.562  10.120  10.731  11.323  11.789  11.978  11.783  11.257  10.642  10.230  10.167  10.346  10.489  10.368   9.987   9.566   9.367   9.496   9.851  10.235  10.503  10.625 
+  6.427   6.460   6.567   6.841   7.396   8.260   9.279  10.132  10.502  10.292   9.705   9.109   8.793   8.825   9.103   9.535  10.114  10.836  11.542  11.910  11.671  10.874   9.937   9.378   9.415   9.795  10.008   9.737   9.141   8.711   8.843   9.496  10.239  10.640  10.621  10.460 
+  6.529   6.156   5.704   5.595   6.128   7.291   8.727   9.915  10.440  10.219   9.535   8.863   8.603   8.891   9.578  10.375  11.030  11.422  11.548  11.453  11.183  10.793  10.361   9.981   9.717   9.567   9.477   9.407   9.372   9.435   9.641   9.965  10.311  10.582  10.734  10.792 
+  6.633   6.142   5.541   5.376   6.035   7.509   9.357  10.923  11.670  11.453  10.569   9.574   8.965   8.952   9.410  10.028  10.519  10.758  10.777  10.672  10.518  10.346  10.175  10.042   9.990  10.025  10.089  10.092   9.973   9.757   9.551   9.481   9.612   9.908  10.240  10.457 
+  6.792   6.322   5.788   5.769   6.663   8.405  10.432  11.959  12.414  11.762  10.506   9.350   8.779   8.842   9.272   9.772  10.228  10.664  11.058  11.243  11.023  10.405   9.690   9.295   9.426   9.890  10.238  10.128   9.607   9.063   8.901   9.227   9.805  10.298  10.539  10.595 
+  5.874   5.522   5.201   5.442   6.572   8.437  10.394  11.628  11.635  10.548   9.071   8.031   7.874   8.456   9.273   9.911  10.318  10.706  11.209  11.657  11.690  11.119  10.169   9.366   9.132   9.450   9.891   9.981   9.594   9.021   8.704   8.873   9.411  10.007  10.424  10.611 
+  6.496   5.997   5.440   5.434   6.371   8.141  10.141  11.591  11.971  11.308  10.122   9.080   8.604   8.712   9.155   9.691  10.242  10.821  11.351  11.598  11.325  10.534   9.558   8.876   8.770   9.122   9.524   9.616   9.359   9.031   8.955   9.224   9.658   9.994  10.120  10.120 
+ 10.990  10.157   8.955   8.076   8.075   9.035  10.481  11.633  11.881  11.166   9.996   9.071   8.810   9.144   9.699  10.179  10.571  11.010  11.481  11.689  11.290  10.270   9.096   8.433   8.627   9.410  10.106  10.176   9.636   8.994   8.776   9.081   9.561   9.792   9.672   9.463 
+ 11.077   9.866   8.281   7.413   7.849   9.301  10.840  11.555  11.142  10.011   8.913   8.396   8.518   8.976   9.459   9.898  10.414  11.052  11.600  11.689  11.111  10.063   9.082   8.688   9.003   9.669  10.127  10.037   9.508   8.961   8.770   8.990   9.368   9.608   9.621   9.543 
+  7.053   6.887   6.695   6.693   7.066   7.865   8.955  10.053  10.843  11.119  10.882  10.335   9.787   9.512   9.642  10.123  10.753  11.269  11.445  11.181  10.546   9.758   9.099   8.788   8.883   9.253   9.657   9.870   9.808   9.551   9.282   9.175   9.300   9.600   9.933  10.148 
+  7.055   6.826   6.463   6.173   6.248   6.918   8.172   9.670  10.867  11.309  10.904   9.981   9.100   8.734   9.038   9.823  10.703  11.300  11.386  10.946  10.166   9.363   8.873   8.884   9.333   9.917  10.266  10.172   9.713   9.181   8.873   8.898   9.148   9.428   9.610   9.681 
+  6.884   7.187   7.561   7.780   7.862   8.082   8.704   9.680  10.584  10.886  10.354   9.275   8.301   8.033   8.638   9.788  10.908  11.548  11.590  11.209  10.671  10.158   9.735   9.427   9.275   9.318   9.524   9.757   9.843   9.686   9.359   9.060   8.985   9.189   9.538   9.800 
+  5.025   5.808   6.795   7.328   7.243   6.997   7.252   8.259   9.585  10.424  10.241   9.220   8.156   7.870   8.630  10.001  11.203  11.672  11.382  10.744  10.218   9.986   9.915   9.766   9.441   9.059   8.831   8.869   9.108   9.369   9.507   9.501   9.438   9.412   9.447   9.492 
+  7.449   8.201   8.920   8.799   7.814   6.812   6.774   7.934   9.536  10.466  10.173   9.091   8.215   8.273   9.196  10.314  10.982  11.051  10.816  10.604  10.461  10.214   9.768   9.271   8.976   8.971   9.084   9.081   8.928   8.833   9.012   9.423   9.765   9.758   9.432   9.111 
+ 12.718  12.370  11.839  11.328  10.938  10.630  10.303   9.914   9.514   9.200   9.027   8.991   9.071   9.275   9.618  10.058  10.465  10.682  10.637  10.411  10.173  10.049  10.018   9.954   9.763   9.491   9.291   9.288   9.458   9.647   9.709   9.632   9.537   9.548   9.671   9.791 
+ 11.775  11.332  10.625   9.931   9.493   9.415   9.615   9.880   9.980   9.798   9.394   8.980   8.800   8.991   9.504  10.126  10.600  10.766  10.632  10.337  10.047   9.851   9.731   9.621   9.484   9.350   9.288   9.335   9.460   9.591   9.671   9.705   9.746   9.833   9.953  10.042 
+  8.340   8.293   8.284   8.426   8.767   9.229   9.620   9.746   9.556   9.202   8.960   9.050   9.479  10.058  10.554  10.867  11.073  11.288  11.502  11.552  11.267  10.670  10.024   9.664   9.733  10.071  10.350  10.355  10.150   9.989  10.052  10.262  10.353  10.130   9.677   9.309 
+  8.175   8.032   8.010   8.378   9.129   9.941  10.414  10.380  10.019   9.683   9.609   9.773   9.978  10.084  10.131  10.261  10.532  10.824  10.927  10.741  10.381  10.098  10.071  10.267  10.482  10.511  10.308  10.002   9.774   9.727   9.831   9.985  10.104  10.158  10.168  10.164 
+  9.718   9.645   9.613   9.731   9.981  10.207  10.239  10.040   9.755   9.603   9.707  10.004  10.299  10.428  10.378  10.276  10.269  10.394  10.558  10.628  10.551  10.394  10.286  10.309  10.434  10.560  10.602  10.563  10.524  10.574  10.733  10.937  11.085  11.121  11.069  11.009 
+  8.509   9.330  10.475  11.316  11.520  11.206  10.746  10.437  10.313  10.245  10.159  10.135  10.308  10.696  11.136  11.414  11.439  11.296  11.128  10.990  10.821  10.567  10.309  10.233  10.468  10.934  11.369  11.536  11.405  11.166  11.036  11.071  11.137  11.078  10.884  10.708 
+  8.304   8.797   9.550  10.236  10.624  10.686  10.569  10.464  10.469  10.551  10.605  10.570  10.494  10.506  10.717  11.123  11.580  11.879  11.864  11.532  11.042  10.626  10.466  10.597  10.899  11.178  11.280  11.174  10.952  10.755  10.685  10.753  10.895  11.032  11.120  11.156 
+  9.237   9.308   9.387   9.422   9.448   9.587   9.945  10.481  10.980  11.152  10.851  10.214   9.637   9.538  10.074  11.001  11.799  11.988  11.441  10.463   9.599   9.294   9.636  10.347  10.998  11.286  11.178  10.868  10.601  10.514  10.588  10.710  10.776  10.751  10.676  10.615 
+  8.267   8.802   9.448   9.742   9.591   9.336   9.410   9.931  10.581  10.902  10.700  10.221   9.932  10.135  10.754  11.430  11.819  11.785  11.404  10.822  10.176   9.619   9.346   9.505  10.044  10.656  10.949  10.745  10.245   9.887   9.991  10.490  11.007  11.191  11.021  10.789 
+  7.735   8.098   8.695   9.326   9.817  10.085  10.159  10.141  10.143  10.216  10.325  10.380  10.317  10.180  10.133  10.367  10.946  11.694  12.243  12.247  11.629  10.669   9.847   9.531   9.735  10.139  10.362  10.265  10.046  10.040  10.413  10.998  11.433  11.464  11.166  10.869 
+  9.422   9.446   9.525   9.650   9.732   9.667   9.461   9.284   9.362   9.781  10.377  10.849  11.009  10.948  10.967  11.297  11.868  12.329  12.322  11.783  11.006  10.438  10.356  10.705  11.191  11.517  11.563  11.386  11.104  10.798  10.519  10.330  10.315  10.501  10.796  11.018 
+  5.965   7.086   8.711  10.019  10.511  10.286   9.890   9.877  10.419  11.228  11.817  11.876  11.480  11.006  10.837  11.099  11.598  11.983  11.987  11.589  10.999  10.512  10.333  10.487  10.841  11.202  11.413  11.421  11.270  11.066  10.917  10.891  10.997  11.184  11.376  11.496 
+  6.416   6.683   7.116   7.604   8.117   8.703   9.403  10.155  10.797  11.157  11.176  10.942  10.639  10.447  10.473  10.733  11.151  11.572  11.793  11.650  11.145  10.498  10.058  10.080  10.533  11.095  11.381  11.232  10.828  10.541  10.629  11.037  11.468  11.649  11.558  11.406 
+  7.381   7.735   8.343   9.033   9.625  10.008  10.197  10.300  10.424  10.563  10.592  10.382   9.958   9.564   9.537  10.064  10.992  11.866  12.193  11.768  10.822   9.882   9.435   9.625  10.200  10.708  10.816  10.499  10.015   9.690   9.699   9.983  10.342  10.592  10.686  10.693 
+  8.768   8.362   7.956   8.021   8.714   9.751  10.632  11.002  10.851  10.421   9.977   9.656   9.495   9.551   9.911  10.575  11.323  11.765  11.593  10.832   9.883   9.271   9.297   9.844  10.491  10.834  10.744  10.395  10.088  10.024  10.215  10.539  10.861  11.105  11.258  11.331 
+  8.815   8.801   8.851   9.055   9.457  10.025  10.665  11.245  11.598  11.561  11.054  10.191   9.309   8.833   9.013   9.730  10.522  10.887  10.629  10.001   9.506   9.519  10.012  10.608  10.892  10.723  10.297   9.940   9.852  10.003  10.244  10.486  10.761  11.121  11.517  11.788 
+ 10.235  10.229  10.112   9.859   9.659   9.806  10.399  11.148  11.518  11.149  10.194   9.253   8.938   9.417  10.315  11.033  11.199  10.870  10.364   9.946   9.664   9.448   9.304   9.364   9.721  10.252  10.641  10.619  10.211   9.741   9.576   9.843  10.360  10.830  11.084  11.160 
+  7.325   7.332   7.385   7.594   8.125   9.060  10.235  11.223  11.545  11.004   9.867   8.729   8.155   8.355   9.129  10.073  10.838  11.242  11.220  10.769   9.988   9.154   8.676   8.852   9.603  10.445  10.799  10.434   9.668   9.132   9.270   9.996  10.799  11.196  11.121  10.908 
+  5.798   6.200   6.822   7.485   8.178   9.014  10.009  10.913  11.303  10.899   9.841   8.659   7.956   8.042   8.802   9.851  10.795  11.385  11.507  11.139  10.379   9.517   8.974   9.065   9.726  10.478  10.739  10.277   9.422   8.825   8.950   9.713  10.585  11.055  11.035  10.849 
+  6.685   7.111   7.710   8.227   8.639   9.140   9.871  10.678  11.152  10.953  10.128   9.134   8.532   8.618   9.274  10.135  10.853  11.253  11.283  10.939  10.278   9.518   9.028   9.125   9.785  10.573  10.910  10.517   9.663   8.975   8.945   9.557  10.346  10.819  10.855  10.720 
+  7.584   7.440   7.247   7.186   7.474   8.233   9.365  10.527  11.280  11.336  10.726   9.788   8.971   8.620   8.848   9.549  10.471  11.289  11.691  11.492  10.761   9.865   9.305   9.414  10.112  10.931  11.331  11.100  10.497  10.031  10.040  10.435  10.809  10.821  10.490  10.160 
+  9.956   9.367   8.345   7.248   6.590   6.818   8.002   9.695  11.128  11.658  11.159  10.063   9.049   8.617   8.864   9.542  10.287  10.799  10.907  10.567   9.902   9.225   8.943   9.317  10.220  11.144  11.512  11.099  10.220   9.492   9.355   9.749  10.217  10.331  10.062   9.752 
+  9.133   8.853   8.358   7.824   7.545   7.809   8.696   9.943  11.023  11.420  10.940   9.835   8.673   8.026   8.180   9.019  10.119  10.974  11.234  10.858  10.133   9.521   9.412   9.881  10.620  11.116  10.990  10.265   9.365   8.819   8.882   9.372   9.842   9.949   9.710   9.440 
+  8.366   8.063   7.631   7.357   7.522   8.246   9.386  10.554  11.291  11.296  10.589   9.486   8.436   7.807   7.762   8.250   9.077   9.984  10.719  11.106  11.111  10.871  10.623  10.554  10.668  10.781  10.675  10.286   9.782   9.441   9.432   9.688   9.963  10.050   9.937   9.796 
+  8.737   8.228   7.438   6.790   6.750   7.565   9.025  10.485  11.209  10.838   9.644   8.339   7.589   7.608   8.126   8.711   9.115   9.369   9.585   9.752   9.734   9.473   9.144   9.061   9.381   9.921  10.271  10.147   9.653   9.187   9.083   9.302   9.491   9.330   8.857   8.444 
+ 13.237  13.372  13.438  13.251  12.865  12.555  12.576  12.909  13.260  13.299  12.929  12.346  11.859  11.654  11.718  11.951  12.294  12.730  13.174  13.429  13.293  12.761  12.081  11.576  11.369  11.277  11.021  10.548  10.155  10.235  10.849  11.545  11.652  10.842   9.490   8.460 
+ 15.612  15.119  14.425  13.936  13.922  14.348  14.902  15.204  15.057  14.558  13.985  13.558  13.294  13.066  12.815  12.683  12.914  13.587  14.428  14.939  14.761  13.983  13.088  12.560  12.478  12.483  12.165  11.522  11.041  11.271  12.238  13.265  13.426  12.313  10.469   9.070 
+ 14.667  13.620  12.363  11.907  12.653  14.092  15.224  15.320  14.424  13.214  12.406  12.215  12.311  12.255  11.969  11.820  12.245  13.271  14.391  14.917  14.525  13.516  12.559  12.135  12.169  12.163  11.711  10.938  10.444  10.775  11.869  12.975  13.169  12.096  10.320   8.980 
+ 11.634  11.055  10.337  10.033  10.410  11.266  12.090  12.412  12.075  11.257  10.286   9.426   8.818   8.542   8.687   9.303  10.274  11.259  11.816  11.660  10.873   9.860   9.087   8.766   8.751   8.720   8.502   8.255   8.340   8.980   9.982  10.780  10.809   9.938   8.629   7.674 
+  8.222   8.062   7.891   7.944   8.419   9.339  10.471  11.392  11.682  11.160  10.000   8.649   7.610   7.217   7.530   8.366   9.399  10.271  10.697  10.564  10.001   9.350   8.987   9.076   9.437   9.665   9.443   8.825   8.237   8.153   8.697   9.508  10.002   9.833   9.185   8.620 
+  6.030   6.161   6.508   7.163   8.126   9.252  10.277  10.928  11.034  10.594   9.769   8.825   8.058   7.729   7.994   8.822   9.951  10.937  11.340  10.964  10.012   9.005   8.469   8.597   9.112   9.473   9.293   8.639   8.001   7.908   8.511   9.451  10.133  10.186   9.744   9.305 
+  8.212   7.611   7.010   7.082   7.998   9.295  10.284  10.605  10.419  10.128   9.934   9.689   9.165   8.440   7.968   8.233   9.272  10.542  11.281  11.070  10.138   9.144   8.664   8.800   9.209   9.457   9.367   9.077   8.846   8.826   8.991   9.239   9.503   9.770  10.014  10.168 
+  7.443   6.927   6.492   6.765   7.817   9.096   9.945  10.173  10.147  10.317  10.668  10.685   9.877   8.398   7.113   6.989   8.292  10.297  11.785  11.929  10.848   9.425   8.577   8.615   9.160   9.575   9.502   9.052   8.609   8.482   8.733   9.225   9.788  10.307  10.709  10.933 
+  6.944   6.655   6.480   6.839   7.766   8.860   9.639   9.943  10.009  10.160  10.416  10.435   9.857   8.742   7.666   7.346   8.082   9.495  10.775  11.245  10.796   9.867   9.055   8.697   8.739   8.915   9.029   9.080   9.184   9.418   9.744  10.061  10.291  10.424  10.489  10.517 
+  5.540   5.781   6.289   7.013   7.774   8.356   8.699   8.965   9.384   9.973  10.411  10.260   9.373   8.155   7.378   7.645   8.915  10.469  11.397  11.211  10.145   8.920   8.204   8.196   8.612   9.018   9.172   9.144   9.155   9.361   9.741  10.168  10.523  10.765  10.906  10.971 
+  3.813   4.267   5.070   6.003   6.794   7.288   7.589   8.012   8.779   9.710  10.221   9.738   8.248   6.512   5.649   6.361   8.365  10.528  11.628  11.190   9.752   8.398   7.953   8.466   9.321   9.804   9.632   9.057   8.573   8.519   8.904   9.508  10.089  10.518  10.781  10.902 
+  5.147   5.486   5.969   6.323   6.375   6.211   6.175   6.653   7.743   9.074   9.952   9.822   8.717   7.331   6.607   7.098   8.574  10.184  11.045  10.809   9.817   8.763   8.192   8.209   8.575   8.993   9.316   9.539   9.670   9.669   9.522   9.334   9.297   9.530   9.939  10.258 
+  5.129   5.628   6.268   6.606   6.465   6.113   6.104   6.860   8.273   9.663  10.181   9.423   7.795   6.325   6.001   7.097   9.003  10.665  11.313  10.920  10.077   9.457   9.319   9.449   9.483   9.275   8.978   8.818   8.837   8.879   8.816   8.750   8.953   9.581  10.442  11.069 
+  5.859   5.858   5.845   5.804   5.743   5.765   6.069   6.838   8.018   9.207   9.809   9.439   8.281   7.084   6.707   7.522   9.132  10.648  11.311  10.982  10.136   9.414   9.138   9.185   9.249   9.180   9.084   9.130   9.312   9.443   9.382   9.242   9.325   9.827  10.589  11.163 
+  5.527   6.101   6.751   6.925   6.527   6.044   6.166   7.205   8.769   9.989  10.124   9.091   7.538   6.414   6.363   7.362   8.820  10.006  10.481  10.271   9.732   9.258   9.060   9.116   9.267   9.358   9.325   9.205   9.089   9.066   9.178   9.412   9.713  10.008  10.237  10.361 
+  3.030   4.376   6.047   6.841   6.358   5.302   4.869   5.752   7.579   9.217   9.660   8.767   7.303   6.324   6.444   7.520   8.897   9.919  10.288  10.086   9.576   9.004   8.542   8.302   8.330   8.570   8.854   8.991   8.903   8.690   8.566   8.704   9.124   9.693  10.211  10.513 
+  2.873   3.722   4.750   5.214   4.964   4.587   4.891   6.165   7.875   9.031   8.957   7.807   6.450   5.836   6.360   7.679   9.057   9.888  10.008   9.637   9.110   8.657   8.362   8.239   8.287   8.461   8.639   8.664   8.457   8.111   7.872   7.989   8.559   9.444  10.332  10.885 
+  3.817   4.317   4.870   5.041   4.874   4.906   5.667   7.120   8.560   9.102   8.381   6.877   5.598   5.388   6.394   8.058   9.563  10.340  10.293   9.680   8.868   8.167   7.787   7.831   8.245   8.786   9.120   9.020   8.547   8.029   7.846   8.173   8.889   9.699  10.333  10.663 
+  3.353   4.178   5.107   5.375   4.902   4.418   4.823   6.363   8.314   9.486   9.124   7.486   5.658   4.790   5.357   6.977   8.789  10.036  10.417  10.068   9.334   8.567   8.041   7.905   8.141   8.533   8.769   8.632   8.179   7.721   7.610   7.998   8.748   9.565  10.190  10.511 
+  4.510   4.773   5.136   5.442   5.714   6.165   7.000   8.157   9.217   9.609   9.001   7.607   6.161   5.524   6.159   7.832   9.729  10.938  10.970   9.989   8.636   7.605   7.246   7.464   7.882   8.137   8.079   7.796   7.492   7.365   7.533   8.027   8.792   9.684  10.485  10.962 
+  4.992   4.837   4.653   4.613   4.864   5.487   6.473   7.680   8.776   9.288   8.839   7.477   5.834   4.880   5.340   7.151   9.397  10.863  10.833   9.543   7.965   7.075   7.193   7.883   8.414   8.361   7.858   7.365   7.240   7.501   7.938   8.381   8.830   9.353   9.900  10.268 
+  5.302   4.991   4.566   4.334   4.572   5.382   6.615   7.891   8.743   8.832   8.143   7.042   6.137   5.985   6.781   8.236   9.714  10.573  10.502   9.655   8.507   7.553   7.057   6.983   7.127   7.301   7.438   7.567   7.731   7.931   8.145   8.367   8.616   8.898   9.169   9.341 
+  2.520   2.609   2.654   2.625   2.768   3.467   4.859   6.552   7.784   7.959   7.128   6.000   5.452   5.925   7.180   8.569   9.526   9.872   9.735   9.283   8.569   7.635   6.692   6.112   6.186   6.856   7.697   8.215   8.201   7.865   7.623   7.765   8.268   8.886   9.376   9.626 
+  2.852   3.318   3.950   4.441   4.757   5.131   5.767   6.545   7.053   6.931   6.229   5.440   5.157   5.656   6.737   7.932   8.859   9.388   9.561   9.396   8.848   7.952   6.966   6.299   6.236   6.694   7.263   7.521   7.368   7.081   7.058   7.491   8.239   8.990   9.507   9.744 
+  4.437   4.639   4.783   4.632   4.260   4.035   4.307   5.071   5.930   6.405   6.309   5.881   5.568   5.691   6.267   7.100   7.982   8.780   9.363   9.524   9.061   8.003   6.736   5.848   5.757   6.397   7.256   7.750   7.645   7.193   6.899   7.127   7.878   8.856   9.703  10.175 
+  6.269   5.789   5.245   5.137   5.655   6.531   7.247   7.412   7.011   6.356   5.832   5.651   5.803   6.181   6.718   7.391   8.133   8.758   9.014   8.751   8.056   7.230   6.625   6.440   6.625   6.949   7.164   7.146   6.950   6.757   6.780   7.157   7.887   8.817   9.681  10.202 
+  7.005   6.841   6.788   7.081   7.595   7.889   7.589   6.772   5.975   5.779   6.335   7.235   7.863   7.902   7.564   7.355   7.613   8.216   8.718   8.749   8.321   7.785   7.521   7.640   7.945   8.142   8.079   7.827   7.570   7.464   7.564   7.858   8.308   8.847   9.353   9.665 
+  6.320   6.169   6.236   6.840   7.822   8.559   8.444   7.430   6.142   5.428   5.722   6.746   7.786   8.283   8.226   8.051   8.174   8.604   8.962   8.842   8.194   7.382   6.902   7.021   7.616   8.314   8.765   8.833   8.611   8.293   8.058   8.010   8.171   8.483   8.823   9.045 
+  6.081   6.174   6.438   6.885   7.333   7.472   7.100   6.336   5.607   5.382   5.858   6.837   7.884   8.636   8.994   9.095   9.113   9.090   8.939   8.582   8.073   7.605   7.379   7.481   7.837   8.264   8.568   8.612   8.354   7.869   7.344   7.023   7.089   7.539   8.148   8.577 
+  6.259   6.138   6.154   6.517   7.102   7.467   7.221   6.412   5.573   5.344   5.980   7.137   8.134   8.463   8.135   7.609   7.389   7.637   8.099   8.345   8.117   7.483   6.747   6.229   6.086   6.286   6.683   7.102   7.403   7.512   7.448   7.320   7.263   7.352   7.539   7.690 
+  7.521   6.729   5.897   5.834   6.663   7.688   8.007   7.293   6.072   5.240   5.297   5.969   6.531   6.505   6.074   5.871   6.364   7.402   8.322   8.491   7.786   6.640   5.655   5.176   5.142   5.292   5.443   5.606   5.876   6.276   6.709   7.049   7.243   7.329   7.368   7.389 
+  8.330   7.854   7.135   6.484   6.110   6.027   6.123   6.266   6.381   6.428   6.353   6.109   5.738   5.421   5.425   5.905   6.745   7.545   7.845   7.420   6.443   5.392   4.735   4.645   4.932   5.240   5.338   5.287   5.356   5.773   6.508   7.267   7.699   7.651   7.288   6.965 
+  7.664   6.566   5.257   4.744   5.295   6.278   6.774   6.398   5.566   5.027   5.158   5.691   6.084   6.115   6.080   6.420   7.169   7.811   7.723   6.776   5.529   4.804   5.016   5.871   6.661   6.873   6.548   6.136   6.032   6.258   6.538   6.620   6.497   6.336   6.268   6.273 
+  7.150   7.101   7.078   7.147   7.267   7.294   7.078   6.591   5.979   5.479   5.286   5.442   5.851   6.360   6.856   7.280   7.585   7.696   7.524   7.051   6.389   5.760   5.395   5.404   5.720   6.152   6.507   6.689   6.715   6.657   6.553   6.384   6.114   5.749   5.382   5.148 
+  9.786   8.991   7.959   7.353   7.415   7.812   7.961   7.536   6.708   5.965   5.685   5.866   6.210   6.434   6.498   6.569   6.776   7.037   7.119   6.865   6.363   5.898   5.738   5.944   6.358   6.755   7.002   7.097   7.104   7.060   6.966   6.831   6.701   6.630   6.628   6.651 
+  9.485   8.939   8.213   7.734   7.650   7.740   7.649   7.209   6.576   6.076   5.922   6.079   6.356   6.616   6.874   7.197   7.531   7.660   7.363   6.642   5.792   5.226   5.189   5.591   6.096   6.391   6.403   6.299   6.304   6.497   6.750   6.842   6.633   6.162   5.632   5.287 
+  9.021   8.400   7.619   7.221   7.396   7.859   8.125   7.915   7.358   6.826   6.591   6.628   6.707   6.661   6.542   6.537   6.725   6.941   6.881   6.372   5.556   4.825   4.553   4.848   5.510   6.198   6.656   6.825   6.789   6.653   6.461   6.205   5.886   5.544   5.255   5.089 
+ 10.103   9.938   9.680   9.388   9.020   8.463   7.650   6.682   5.825   5.370   5.451   5.971   6.667   7.266   7.607   7.656   7.453   7.059   6.549   6.027   5.619   5.423   5.456   5.656   5.944   6.281   6.676   7.126   7.560   7.842   7.850   7.555   7.053   6.509   6.074   5.840 
+  8.237   8.128   8.085   8.249   8.523   8.585   8.145   7.233   6.259   5.758   6.025   6.896   7.868   8.428   8.357   7.795   7.071   6.465   6.072   5.841   5.685   5.561   5.479   5.461   5.534   5.721   6.046   6.496   6.981   7.346   7.436   7.184   6.656   6.019   5.468   5.153 
+  6.687   6.629   6.791   7.365   8.123   8.492   8.028   6.865   5.693   5.249   5.742   6.712   7.436   7.504   7.077   6.632   6.481   6.524   6.422   5.988   5.392   5.004   5.041   5.390   5.747   5.929   6.038   6.322   6.885   7.534   7.905   7.742   7.080   6.199   5.429   4.997 
+  6.811   6.340   5.667   5.168   5.091   5.406   5.829   6.003   5.726   5.088   4.423   4.112   4.349   5.018   5.757   6.167   6.046   5.494   4.829   4.381   4.293   4.460   4.645   4.662   4.516   4.382   4.454   4.791   5.258   5.619   5.690   5.448   5.022   4.594   4.285   4.135 
+  4.832   4.827   4.911   5.158   5.501   5.725   5.604   5.089   4.395   3.891   3.864   4.312   4.939   5.366   5.398   5.148   4.923   4.968   5.264   5.561   5.593   5.308   4.905   4.666   4.722   4.958   5.129   5.079   4.860   4.653   4.577   4.562   4.418   4.035   3.519   3.145 
+  4.066   4.084   4.402   5.206   6.244   6.908   6.726   5.795   4.735   4.190   4.318   4.748   5.004   4.973   4.952   5.268   5.869   6.330   6.262   5.721   5.186   5.103   5.456   5.765   5.553   4.807   4.001   3.650   3.836   4.152   4.114   3.615   2.996   2.686   2.779   2.988 
+  5.277   4.706   3.989   3.646   3.904   4.543   5.083   5.150   4.731   4.149   3.820   3.979   4.561   5.258   5.701   5.638   5.064   4.248   3.632   3.615   4.303   5.392   6.305   6.537   5.981   4.994   4.132   3.751   3.784   3.870   3.700   3.281   2.893   2.802   3.002   3.232 
+  5.691   5.120   4.425   4.157   4.540   5.290   5.824   5.703   4.976   4.152   3.826   4.237   5.102   5.839   6.004   5.597   5.003   4.653   4.701   4.973   5.204   5.325   5.520   6.010   6.765   7.435   7.590   7.065   6.122   5.259   4.835   4.820   4.884   4.722   4.337   4.007 
+  5.884   5.193   4.394   4.199   4.887   6.081   7.022   7.124   6.378   5.311   4.555   4.393   4.628   4.846   4.816   4.665   4.708   5.103   5.660   6.004   5.930   5.642   5.621   6.215   7.304   8.335   8.732   8.342   7.550   6.947   6.846   7.045   7.039   6.503   5.614   4.929 
+  5.448   5.235   4.955   4.837   5.076   5.677   6.383   6.784   6.569   5.764   4.744   3.986   3.743   3.908   4.167   4.307   4.384   4.609   5.080   5.638   6.007   6.077   6.057   6.308   6.992   7.878   8.493   8.509   8.021   7.451   7.168   7.182   7.181   6.878   6.320   5.871 
+  7.149   6.292   5.154   4.468   4.614   5.368   6.101   6.242   5.654   4.680   3.862   3.575   3.833   4.367   4.849   5.080   5.048   4.859   4.653   4.567   4.721   5.195   5.968   6.885   7.686   8.127   8.102   7.706   7.170   6.733   6.521   6.512   6.595   6.664   6.683   6.674 
+  5.480   4.846   4.159   4.080   4.787   5.829   6.511   6.445   5.811   5.131   4.808   4.846   4.967   4.940   4.795   4.739   4.903   5.197   5.428   5.535   5.684   6.122   6.906   7.792   8.390   8.447   8.029   7.434   6.963   6.730   6.672   6.682   6.719   6.797   6.911   6.999 
+  5.469   5.349   5.208   5.170   5.295   5.532   5.772   5.942   6.068   6.251   6.551   6.880   7.018   6.764   6.125   5.383   4.964   5.168   5.962   7.000   7.856   8.300   8.398   8.385   8.425   8.474   8.363   7.990   7.460   7.019   6.856   6.949   7.098   7.113   6.973   6.827 
+  5.177   5.395   5.674   5.821   5.748   5.552   5.457   5.666   6.223   6.962   7.578   7.780   7.447   6.696   5.849   5.284   5.261   5.794   6.650   7.482   8.017   8.190   8.138   8.069   8.100   8.181   8.163   7.937   7.532   7.100   6.809   6.728   6.808   6.937   7.035   7.079 
+  7.027   6.459   5.746   5.361   5.442   5.745   5.953   6.022   6.193   6.676   7.325   7.672   7.330   6.411   5.532   5.369   6.115   7.319   8.239   8.421   8.007   7.544   7.499   7.900   8.384   8.549   8.273   7.750   7.267   6.966   6.783   6.583   6.303   5.990   5.735   5.598 
+  5.628   5.728   5.841   5.911   6.019   6.332   6.926   7.660   8.229   8.377   8.083   7.557   7.074   6.809   6.805   7.062   7.589   8.348   9.139   9.626   9.541   8.933   8.201   7.832   8.021   8.498   8.751   8.447   7.708   6.986   6.647   6.659   6.657   6.321   5.708   5.216 
+  6.096   5.780   5.348   5.087   5.211   5.738   6.496   7.234   7.777   8.105   8.291   8.388   8.370   8.206   7.990   7.973   8.404   9.276  10.205  10.621  10.171   9.034   7.863   7.344   7.697   8.511   9.066   8.870   8.004   6.987   6.326   6.134   6.133   5.988   5.642   5.338 
+  5.357   4.720   4.100   4.224   5.249   6.614   7.521   7.600   7.193   7.006   7.475   8.405   9.193   9.399   9.158   9.036   9.493  10.419  11.176  11.103  10.071   8.611   7.530   7.327   7.869   8.558   8.808   8.447   7.752   7.141   6.824   6.672   6.393   5.829   5.123   4.627 
+  5.891   5.478   5.064   5.129   5.835   6.885   7.758   8.103   7.976   7.736   7.732   8.038   8.481   8.883   9.271   9.841  10.686  11.569  11.972  11.464  10.099   8.498   7.503   7.615   8.637   9.803  10.306   9.828   8.689   7.535   6.830   6.567   6.392   5.995   5.404   4.951 
+  5.721   5.366   5.117   5.453   6.395   7.443   7.993   7.857   7.412   7.261   7.705   8.521   9.222   9.547   9.702  10.134  11.028  12.011  12.361  11.582   9.870   8.068   7.127   7.478   8.765  10.131  10.787  10.462   9.444   8.259   7.295   6.618   6.070   5.511   4.969   4.619 
+  6.368   5.848   5.318   5.358   6.120   7.201   7.989   8.172   7.963   7.874   8.256   9.023   9.789  10.261  10.511  10.863  11.505  12.200  12.381  11.598   9.954   8.152   7.087   7.261   8.463   9.916  10.783  10.648   9.675   8.385   7.272   6.545   6.124   5.834   5.589   5.429 
+  4.884   5.121   5.609   6.306   7.071   7.700   8.051   8.155   8.213   8.453   8.960   9.621  10.222  10.638  10.923  11.236  11.633  11.933  11.781  10.924   9.478   7.966   7.063   7.188   8.227   9.588  10.558  10.711  10.093   9.106   8.185   7.550   7.163   6.885   6.643   6.485 
+  6.084   5.557   5.009   5.025   5.792   6.966   7.985   8.523   8.695   8.870   9.297   9.905  10.439  10.753  10.957  11.269  11.724  12.038  11.790  10.783   9.271   7.860   7.148   7.376   8.330   9.514  10.432  10.786  10.526   9.793   8.842   7.961   7.382   7.182   7.253   7.375 
+  6.280   5.853   5.415   5.448   6.103   7.083   7.902   8.273   8.307   8.374   8.771   9.491  10.278  10.863  11.171  11.303  11.358  11.283  10.896  10.069   8.900   7.736   7.006   7.007   7.758   8.994  10.273  11.134  11.261  10.607   9.428   8.179   7.300   6.980   7.084   7.272 
+  6.263   5.909   5.488   5.382   5.812   6.673   7.585   8.152   8.250   8.135   8.255   8.899   9.944  10.918  11.347  11.106  10.480   9.896   9.547   9.253   8.691   7.791   6.922   6.689   7.454   8.999  10.607  11.507  11.354  10.370   9.110   8.058   7.394   7.037   6.844   6.748 
+  6.572   6.251   5.839   5.663   5.934   6.611   7.413   8.007   8.237   8.239   8.328   8.744   9.443  10.119  10.442  10.315   9.922   9.535   9.249   8.909   8.305   7.463   6.758   6.689   7.485   8.872  10.195  10.834  10.582   9.711   8.708   7.929   7.445   7.137   6.905   6.761 
+  7.338   6.996   6.584   6.447   6.747   7.351   7.940   8.246   8.234   8.098   8.082   8.293   8.636   8.929   9.063   9.071   9.042   8.979   8.751   8.216   7.414   6.650   6.351   6.776   7.793   8.921   9.625   9.651   9.153   8.524   8.078   7.846   7.635   7.274   6.804   6.460 
+  6.773   6.547   6.294   6.260   6.557   7.105   7.709   8.206   8.539   8.732   8.808   8.761   8.602   8.413   8.328   8.442   8.719   8.999   9.111   9.004   8.780   8.605   8.572   8.637   8.673   8.585   8.390   8.178   8.025   7.914   7.750   7.441   6.974   6.435   5.963   5.689 
+  7.032   7.016   7.072   7.283   7.644   8.055   8.402   8.629   8.731   8.697   8.495   8.136   7.765   7.634   7.944   8.645   9.408   9.818   9.669   9.120   8.567   8.328   8.414   8.559   8.487   8.147   7.736   7.487   7.446   7.443   7.269   6.880   6.431   6.123   6.024   6.035 
+  7.043   7.149   7.356   7.644   7.980   8.323   8.626   8.835   8.885   8.722   8.353   7.891   7.549   7.540   7.939   8.596   9.190   9.417   9.177   8.636   8.102   7.809   7.764   7.783   7.661   7.346   6.969   6.721   6.689   6.787   6.821   6.634   6.203   5.648   5.146   4.853 
+  7.517   7.592   7.552   7.238   6.748   6.423   6.581   7.231   8.032   8.533   8.506   8.084   7.615   7.380   7.418   7.581   7.711   7.764   7.783   7.786   7.727   7.559   7.316   7.109   7.021   7.000   6.891   6.580   6.114   5.682   5.451   5.421   5.432   5.327   5.105   4.918 
+ 11.855  11.445  10.857  10.400  10.264  10.406  10.593  10.569  10.211   9.597   8.941   8.462   8.268   8.324   8.495   8.629   8.634   8.502   8.286   8.050   7.826   7.602   7.351   7.071   6.807   6.628   6.572   6.601   6.608   6.476   6.162   5.724   5.285   4.956   4.771   4.700 
+ 12.464  11.637  10.510   9.746   9.674  10.101  10.512  10.475   9.909   9.065   8.284   7.779   7.584   7.643   7.884   8.224   8.534   8.659   8.512   8.151   7.743   7.425   7.190   6.923   6.544   6.136   5.904   6.002   6.368   6.743   6.856   6.616   6.160   5.715   5.428   5.308 
+  8.379   8.525   8.558   8.198   7.411   6.481   5.825   5.686   5.971   6.339   6.474   6.313   6.074   6.076   6.505   7.299   8.206   8.947   9.356   9.421   9.235   8.914   8.539   8.137   7.707   7.253   6.818   6.479   6.311   6.317   6.388   6.336   6.012   5.421   4.760   4.322 
+  7.564   7.651   7.820   8.036   8.208   8.210   7.943   7.420   6.799   6.313   6.134   6.254   6.499   6.669   6.719   6.817   7.205   7.969   8.905   9.615   9.782   9.406   8.801   8.340   8.159   8.073   7.770   7.115   6.292   5.653   5.410   5.450   5.438   5.129   4.598   4.181 
+  8.762   8.104   7.407   7.362   8.112   9.093   9.487   8.878   7.574   6.338   5.769   5.884   6.217   6.311   6.152   6.160   6.773   8.009   9.380  10.240  10.255   9.615   8.830   8.317   8.123   7.980   7.615   7.011   6.412   6.089   6.078   6.131   5.919   5.314   4.523   3.964 
+ 10.032   8.833   7.532   7.343   8.509  10.075  10.713   9.842   8.081   6.651   6.319   6.817   7.221   6.882   6.051   5.651   6.432   8.282  10.274  11.369  11.155  10.035   8.796   8.002   7.698   7.577   7.350   6.970   6.564   6.246   5.996   5.718   5.356   4.953   4.608   4.413 
+  6.503   5.917   5.544   6.195   7.850   9.546  10.121   9.160   7.311   5.726   5.132   5.359   5.690   5.637   5.428   5.773   7.159   9.333  11.410  12.486  12.224  10.964   9.380   8.030   7.145   6.710   6.624   6.755   6.914   6.874   6.499   5.875   5.272   4.939   4.904   4.984 
+  7.422   6.872   6.461   6.894   8.188   9.580  10.140   9.532   8.226   7.035   6.418   6.215   5.999   5.651   5.559   6.253   7.832   9.752  11.167  11.532  10.921   9.836   8.747   7.813   6.981   6.266   5.863   5.955   6.439   6.909   6.937   6.415   5.624   4.965   4.638   4.556 
+  6.825   6.234   5.883   6.610   8.402  10.290  11.119  10.485   8.994   7.661   7.040   6.890   6.626   6.055   5.654   6.114   7.614   9.521  10.818  10.857   9.787   8.318   7.117   6.391   5.973   5.703   5.641   5.933   6.512   7.019   7.063   6.563   5.823   5.252   5.029   5.019 
+  2.873   3.841   5.554   7.563   9.282  10.206  10.161   9.412   8.487   7.830   7.531   7.342   6.974   6.410   5.972   6.088   6.930   8.238   9.448  10.029   9.771   8.843   7.640   6.554   5.839   5.570   5.676   5.978   6.239   6.259   5.979   5.516   5.089   4.866   4.851   4.909 
+  5.847   5.592   5.689   6.680   8.365   9.820  10.136   9.201   7.795   6.909   6.907   7.300   7.315   6.675   5.888   5.763   6.668   8.191   9.492   9.965   9.608   8.830   7.993   7.173   6.325   5.578   5.259   5.584   6.335   6.923   6.841   6.085   5.154   4.595   4.549   4.706 
+  6.416   6.761   7.466   8.433   9.358   9.814   9.506   8.498   7.212   6.169   5.658   5.605   5.710   5.758   5.807   6.130   6.944   8.182   9.464  10.319  10.454   9.911   8.998   8.093   7.461   7.174   7.152   7.249   7.329   7.307   7.163   6.933   6.684   6.478   6.346   6.287 
+  7.555   7.870   8.487   9.267   9.878   9.922   9.210   7.955   6.693   5.942   5.850   6.128   6.329   6.238   6.065   6.268   7.163   8.621  10.105  11.000  10.985  10.204   9.123   8.241   7.835   7.892   8.192   8.470   8.533   8.324   7.922   7.483   7.163   7.035   7.058   7.117 
+  7.721   7.869   8.365   9.286  10.303  10.794  10.320   9.030   7.593   6.693   6.499   6.615   6.522   6.119   5.838   6.241   7.466   9.035  10.195  10.480  10.019   9.340   8.908   8.809   8.807   8.661   8.345   8.006   7.755   7.553   7.288   6.951   6.678   6.617   6.758   6.918 
+  7.510   7.452   7.583   8.121   8.956   9.640   9.701   9.007   7.889   6.893   6.393   6.375   6.546   6.655   6.708   6.918   7.465   8.288   9.108   9.635   9.772   9.646   9.464   9.346   9.263   9.109   8.812   8.388   7.905   7.433   7.018   6.697   6.504   6.446   6.483   6.534 
+  6.061   6.043   6.348   7.271   8.648   9.838  10.147   9.340   7.825   6.358   5.531   5.458   5.851   6.357   6.813   7.255   7.747   8.263   8.725   9.107   9.458   9.796  10.010   9.904   9.383   8.597   7.870   7.461   7.356   7.302   7.047   6.574   6.105   5.879   5.923   6.046 
+  7.444   7.034   6.656   6.810   7.611   8.660   9.331   9.220   8.398   7.295   6.354   5.772   5.492   5.392   5.449   5.725   6.237   6.875   7.462   7.895   8.218   8.552   8.946   9.305   9.459   9.305   8.885   8.339   7.795   7.300   6.856   6.486   6.251   6.195   6.273   6.365 
+  6.723   6.809   7.047   7.520   8.222   8.966   9.392   9.157   8.204   6.901   5.866   5.551   5.905   6.414   6.540   6.202   5.858   6.106   7.109   8.392   9.204   9.151   8.542   8.117   8.387   9.172   9.754   9.497   8.399   7.080   6.255   6.177   6.535   6.833   6.846   6.731 
+  6.024   6.157   6.413   6.820   7.438   8.231   8.950   9.200   8.728   7.696   6.640   6.081   6.086   6.223   5.992   5.369   4.933   5.384   6.851   8.652   9.771   9.687   8.814   8.133   8.328   9.194   9.866   9.631   8.583   7.509   7.147   7.516   7.955   7.808   7.069   6.380 
+  5.785   6.081   6.686   7.582   8.646   9.611  10.112   9.867   8.884   7.529   6.340   5.696   5.584   5.684   5.709   5.705   6.006   6.871   8.121   9.158   9.410   8.828   7.971   7.563   7.875   8.505   8.756   8.294   7.482   7.060   7.455   8.348   8.931   8.623   7.620   6.748 
+  5.870   6.046   6.493   7.273   8.263   9.119   9.421   8.929   7.783   6.459   5.490   5.121   5.187   5.309   5.262   5.196   5.499   6.397   7.642   8.603   8.724   7.986   6.964   6.394   6.610   7.310   7.856   7.844   7.425   7.115   7.283   7.786   8.104   7.840   7.118   6.501 
+  6.551   7.093   7.875   8.500   8.720   8.526   8.052   7.450   6.838   6.327   6.016   5.908   5.847   5.617   5.177   4.818   5.019   6.028   7.513   8.658   8.720   7.636   6.159   5.326   5.673   6.837   7.886   8.097   7.507   6.777   6.532   6.804   7.071   6.826   6.107   5.475 
+  6.243   6.492   6.945   7.506   8.030   8.330   8.236   7.699   6.866   6.057   5.584   5.541   5.716   5.753   5.459   5.000   4.792   5.139   5.915   6.597   6.664   6.038   5.195   4.810   5.216   6.143   6.944   7.131   6.738   6.223   6.020   6.160   6.302   6.110   5.611   5.179 
+  5.456   5.754   6.290   6.917   7.403   7.515   7.163   6.494   5.823   5.442   5.414   5.533   5.493   5.154   4.688   4.469   4.778   5.541   6.333   6.657   6.305   5.525   4.848   4.703   5.125   5.754   6.138   6.075   5.730   5.451   5.454   5.650   5.751   5.551   5.127   4.780 
+  4.855   5.641   6.862   7.981   8.514   8.249   7.327   6.147   5.151   4.600   4.476   4.547   4.563   4.434   4.286   4.345   4.747   5.406   6.042   6.361   6.252   5.859   5.483   5.371   5.551   5.837   5.973   5.823   5.456   5.080   4.886   4.929   5.123   5.333   5.471   5.528 
+  5.002   5.754   6.792   7.525   7.624   7.154   6.405   5.618   4.888   4.256   3.829   3.748   4.025   4.452   4.740   4.784   4.777   5.034   5.651   6.333   6.605   6.232   5.478   4.917   4.967   5.527   6.083   6.167   5.759   5.271   5.143   5.443   5.839   5.954   5.734   5.469 
+  5.197   5.936   7.046   7.988   8.327   7.935   7.007   5.931   5.080   4.655   4.633   4.825   5.009   5.063   5.026   5.051   5.274   5.682   6.081   6.221   5.982   5.492   5.055   4.943   5.186   5.557   5.752   5.634   5.335   5.132   5.203   5.482   5.725   5.733   5.530   5.328 
+  4.826   5.573   6.656   7.562   8.026   8.120   8.043   7.860   7.444   6.674   5.662   4.760   4.324   4.449   4.914   5.391   5.693   5.844   5.937   5.968   5.831   5.495   5.136   5.054   5.422   6.092   6.674   6.843   6.597   6.235   6.073   6.167   6.304   6.242   5.970   5.717 
+  6.300   6.426   6.630   6.894   7.258   7.751   8.249   8.461   8.095   7.121   5.890   4.953   4.695   5.073   5.674   6.052   6.059   5.903   5.901   6.182   6.602   6.923   7.057   7.141   7.371   7.776   8.155   8.239   7.926   7.363   6.823   6.487   6.350   6.291   6.226   6.167 
+  6.151   6.488   7.023   7.586   8.070   8.418   8.516   8.194   7.361   6.194   5.147   4.691   4.969   5.666   6.241   6.353   6.114   5.946   6.168   6.704   7.174   7.283   7.120   7.080   7.478   8.210   8.805   8.817   8.212   7.389   6.833   6.731   6.889   6.985   6.894   6.754 
+  5.886   6.298   6.910   7.462   7.815   7.979   7.994   7.817   7.360   6.653   5.939   5.585   5.816   6.523   7.296   7.702   7.562   7.030   6.419   5.963   5.715   5.630   5.699   5.984   6.500   7.113   7.572   7.686   7.484   7.197   7.068   7.160   7.340   7.428   7.375   7.286 
+  4.953   5.521   6.471   7.511   8.358   8.823   8.838   8.434   7.711   6.822   5.968   5.371   5.215   5.553   6.257   7.035   7.552   7.584   7.128   6.411   5.775   5.511   5.723   6.297   6.983   7.535   7.827   7.884   7.827   7.773   7.765   7.762   7.698   7.550   7.367   7.239 
+  5.697   5.922   6.502   7.441   8.422   8.903   8.516   7.399   6.152   5.424   5.459   5.996   6.566   6.896   7.051   7.228   7.461   7.539   7.241   6.621   6.057   5.972   6.482   7.298   7.956   8.183   8.061   7.870   7.810   7.842   7.792   7.565   7.243   6.991   6.892   6.889 
+  5.923   6.323   7.106   8.129   9.064   9.490   9.152   8.159   6.975   6.145   5.972   6.370   6.982   7.448   7.609   7.518   7.299   7.024   6.702   6.368   6.137   6.158   6.491   7.040   7.587   7.931   7.996   7.844   7.601   7.363   7.164   6.999   6.864   6.766   6.711   6.690 
+  5.161   5.888   6.964   7.850   8.142   7.763   6.953   6.089   5.478   5.241   5.324   5.590   5.907   6.191   6.393   6.478   6.419   6.210   5.889   5.543   5.300   5.277   5.528   5.996   6.518   6.896   6.990   6.798   6.450   6.121   5.920   5.842   5.797   5.707   5.573   5.470 
+  5.491   5.868   6.523   7.267   7.859   8.078   7.810   7.101   6.148   5.215   4.512   4.123   4.023   4.152   4.488   5.036   5.740   6.416   6.789   6.647   6.018   5.215   4.670   4.669   5.152   5.761   6.089   5.961   5.520   5.075   4.832   4.747   4.605   4.254   3.769   3.413 
+  4.964   5.466   6.285   7.142   7.782   8.065   7.985   7.627   7.102   6.497   5.868   5.263   4.768   4.538   4.750   5.488   6.609   7.704   8.255   7.932   6.855   5.590   4.831   4.957   5.764   6.621   6.932   6.572   5.938   5.587   5.743   6.101   6.097   5.421   4.336   3.515 
+  3.465   4.505   5.981   7.154   7.676   7.747   7.799   8.050   8.321   8.243   7.624   6.630   5.676   5.169   5.331   6.172   7.494   8.878   9.718   9.474   8.061   6.090   4.628   4.512   5.711   7.283   8.063   7.572   6.365   5.519   5.660   6.407   6.724   5.896   4.243   2.912 
+  3.415   4.196   5.384   6.490   7.225   7.625   7.921   8.285   8.672   8.851   8.588   7.828   6.777   5.862   5.571   6.216   7.695   9.406  10.455  10.147   8.482   6.284   4.765   4.735   6.039   7.658   8.469   8.068   7.016   6.299   6.453   7.114   7.373   6.627   5.172   4.009 
+  1.908   3.429   5.556   7.117   7.489   6.954   6.364   6.446   7.285   8.338   8.899   8.620   7.731   6.861   6.641   7.346   8.735  10.151  10.832  10.311   8.723   6.796   5.465   5.301   6.133   7.180   7.642   7.302   6.652   6.420   6.876   7.544   7.582   6.544   4.859   3.580 
+  2.366   3.699   5.539   6.863   7.195   6.866   6.636   7.030   7.957   8.850   9.161   8.760   7.983   7.374   7.366   8.083   9.296  10.478  10.986  10.363   8.685   6.658   5.298   5.281   6.433   7.806   8.376   7.840   6.838   6.367   6.869   7.789   8.027   6.935   4.978   3.450 
+  3.860   4.699   5.898   6.829   7.131   6.918   6.654   6.790   7.440   8.311   8.909   8.885   8.291   7.581   7.361   8.000   9.341  10.711  11.266  10.515   8.690   6.676   5.495   5.645   6.782   7.982   8.423   7.974   7.223   6.920   7.302   7.855   7.746   6.574   4.804   3.489 
+  4.355   4.752   5.410   6.094   6.575   6.750   6.738   6.818   7.240   8.002   8.794   9.189   8.980   8.401   8.022   8.342   9.362  10.488  10.885  10.062   8.272   6.406   5.442   5.806   7.123   8.506   9.166   8.898   8.102   7.375   7.022   6.865   6.485   5.654   4.591   3.836 
+  4.005   4.647   5.523   6.117   6.174   5.863   5.631   5.880   6.700   7.823   8.796   9.238   9.055   8.501   8.067   8.208   9.038  10.155  10.800  10.319   8.663   6.566   5.158   5.228   6.657   8.467   9.501   9.224   8.033   6.834   6.272   6.244   6.109   5.365   4.173   3.253 
+  4.454   4.800   5.242   5.469   5.336   4.984   4.762   5.025   5.918   7.274   8.654   9.540   9.619   9.002   8.249   8.065   8.808  10.134  11.097  10.766   8.951   6.490   4.769   4.759   6.289   8.160   9.048   8.508   7.243   6.435   6.690   7.516   7.781   6.770   4.889   3.404 
+  5.192   5.231   5.340   5.541   5.808   6.079   6.310   6.551   6.937   7.577   8.412   9.163   9.493   9.286   8.826   8.658   9.169  10.180  10.948  10.656   9.087   6.923   5.358   5.250   6.474   8.003   8.708   8.228   7.197   6.628   6.985   7.752   7.885   6.772   4.864   3.390 
+  2.995   3.896   5.204   6.269   6.698   6.548   6.212   6.122   6.505   7.319   8.316   9.166   9.596   9.537   9.209   9.044   9.383  10.141  10.732  10.427   8.971   6.932   5.431   5.342   6.581   8.119   8.764   8.115   6.865   6.164   6.580   7.565   7.926   6.911   4.956   3.401 
+  3.954   4.382   5.064   5.760   6.301   6.635   6.804   6.904   7.067   7.445   8.115   8.967   9.698   9.999   9.821   9.482   9.441   9.858  10.356  10.251   9.147   7.402   5.988   5.772   6.792   8.159   8.752   8.128   6.874   6.063   6.272   7.047   7.302   6.328   4.504   3.059 
+  3.289   4.019   5.072   5.968   6.498   6.803   7.141   7.614   8.118   8.520   8.824   9.137   9.490   9.753   9.776   9.611   9.519   9.703   9.991   9.868   8.929   7.367   6.003   5.708   6.662   8.128   9.006   8.735   7.737   6.987   7.074   7.620   7.619   6.413   4.411   2.867 
+  1.126   2.274   3.977   5.511   6.525   7.147   7.674   8.199   8.565   8.636   8.532   8.552   8.850   9.252   9.437   9.314   9.157   9.310   9.727   9.881   9.232   7.849   6.545   6.275   7.265   8.708   9.379   8.696   7.253   6.285   6.519   7.454   7.779   6.604   4.372   2.595 
+  3.310   3.667   4.273   5.032   5.937   6.976   7.976   8.606   8.623   8.148   7.659   7.627   8.095   8.635   8.768   8.470   8.243   8.611   9.515  10.220   9.931   8.572   6.989   6.280   6.819   7.889   8.314   7.558   6.258   5.642   6.326   7.617   8.033   6.650   4.057   2.006 
+  3.083   3.524   4.279   5.199   6.186   7.153   7.930   8.293   8.142   7.681   7.351   7.513   8.131   8.794   9.089   9.010   8.969   9.355  10.045  10.388   9.761   8.216   6.588   5.866   6.344   7.353   7.842   7.345   6.413   6.073   6.789   7.885   8.052   6.537   3.964   1.983 
+  4.618   4.655   4.781   5.076   5.599   6.320   7.093   7.728   8.118   8.320   8.491   8.730   8.980   9.106   9.086   9.098   9.363   9.848  10.137   9.689   8.335   6.592   5.414   5.500   6.688   8.013   8.441   7.708   6.539   5.996   6.514   7.458   7.639   6.383   4.214   2.539 
+  5.401   5.396   5.342   5.276   5.388   5.893   6.802   7.828   8.568   8.816   8.721   8.606   8.654   8.759   8.718   8.538   8.487   8.792   9.263   9.298   8.382   6.662   5.032   4.509   5.401   6.986   8.061   7.914   6.884   5.991   5.970   6.598   6.929   6.230   4.738   3.512 
+  5.450   5.342   5.208   5.182   5.381   5.834   6.434   6.988   7.327   7.408   7.320   7.190   7.093   7.045   7.068   7.237   7.598   8.032   8.211   7.780   6.660   5.237   4.188   4.036   4.745   5.724   6.270   6.107   5.575   5.284   5.550   6.086   6.256   5.665   4.564   3.694 
+  5.089   4.982   4.948   5.193   5.757   6.468   7.063   7.380   7.456   7.451   7.483   7.523   7.454   7.237   7.010   7.003   7.312   7.730   7.828   7.254   6.059   4.746   3.975   4.110   4.948   5.854   6.216   5.871   5.176   4.687   4.697   5.032   5.237   4.998   4.419   3.936 
+  4.623   4.861   5.086   5.104   5.055   5.334   6.195   7.409   8.356   8.491   7.797   6.803   6.166   6.182   6.649   7.138   7.374   7.363   7.209   6.908   6.362   5.606   4.943   4.774   5.222   5.942   6.353   6.129   5.503   5.058   5.171   5.632   5.812   5.265   4.192   3.328 
+  5.714   5.516   5.128   4.675   4.456   4.799   5.786   7.082   8.078   8.266   7.599   6.524   5.686   5.513   6.007   6.820   7.507   7.746   7.410   6.556   5.416   4.375   3.854   4.078   4.884   5.757   6.138   5.824   5.109   4.540   4.464   4.750   4.936   4.665   4.030   3.499 
+  6.273   5.604   4.714   4.222   4.528   5.545   6.735   7.439   7.299   6.476   5.520   4.981   5.046   5.490   5.925   6.128   6.158   6.191   6.254   6.157   5.687   4.890   4.135   3.859   4.199   4.844   5.278   5.200   4.757   4.375   4.338   4.511   4.466   3.916   3.030   2.351 
+  6.137   5.733   5.148   4.690   4.559   4.749   5.081   5.365   5.544   5.724   6.076   6.674   7.404   8.012   8.260   8.074   7.576   6.993   6.516   6.221   6.085   6.080   6.221   6.538   6.999   7.463   7.725   7.632   7.188   6.562   5.993   5.666   5.626   5.790   6.013   6.162 
+  7.565   6.931   6.168   5.885   6.314   7.147   7.799   7.884   7.510   7.179   7.392   8.283   9.536  10.613  11.092  10.862  10.113   9.175   8.357   7.877   7.842   8.247   8.969   9.790  10.463  10.804  10.750  10.355   9.743   9.073   8.507   8.193   8.212   8.521   8.943   9.240 
+  6.494   6.774   7.263   7.818   8.256   8.434   8.338   8.109   7.964   8.060   8.408   8.902   9.426   9.928  10.399  10.784  10.935  10.699  10.074   9.309   8.817   8.929   9.671  10.718  11.575  11.866  11.516  10.740   9.877   9.196   8.810   8.694   8.765   8.927   9.097   9.203 
+  8.185   7.488   6.686   6.472   7.074   8.100   8.890   9.053   8.735   8.423   8.519   9.054   9.764  10.364  10.746  10.947  10.979  10.766  10.264   9.624   9.188   9.268   9.893  10.759  11.428  11.623  11.365  10.863  10.310   9.775   9.273   8.879   8.733   8.907   9.283   9.585 
+  9.087   8.543   7.879   7.612   7.954   8.659   9.222   9.262   8.805   8.245   8.058   8.482   9.389  10.393  11.078  11.198  10.741   9.898   8.974   8.294   8.103   8.477   9.269  10.166  10.823  11.028  10.783  10.273   9.739   9.357   9.186   9.192   9.305   9.455   9.590   9.668 
+  8.363   8.344   8.442   8.782   9.323   9.829  10.030   9.827   9.385   9.035   9.049   9.470  10.100  10.657  10.949  10.939  10.694  10.289   9.774   9.225   8.806   8.733   9.140   9.941  10.812  11.356  11.336  10.826  10.158   9.690   9.574   9.690   9.776   9.654   9.370   9.134 
+  9.176   8.748   8.314   8.346   8.948   9.759  10.240  10.099   9.482   8.818   8.489   8.611   9.083   9.747  10.494  11.203  11.660  11.618  11.001  10.061   9.300   9.155   9.686  10.535  11.187  11.334  11.045  10.637  10.385  10.336  10.345  10.260  10.055   9.816   9.640   9.557 
+  9.874   9.160   8.247   7.770   8.009   8.730   9.423   9.713   9.597   9.351   9.255   9.403   9.721  10.117  10.559  11.013  11.349  11.365  10.951  10.250   9.625   9.436   9.788  10.470  11.112  11.445  11.412  11.117  10.675  10.156   9.636   9.264   9.218   9.548  10.080  10.478 
+ 10.507   9.974   9.309   9.007   9.288   9.962  10.610  10.894  10.753  10.367   9.976   9.734   9.700   9.884  10.259  10.713  11.027  10.972  10.489   9.777   9.203   9.059   9.360   9.857  10.242  10.359  10.255  10.058   9.822   9.511   9.114   8.750   8.620   8.829   9.254   9.592 
+ 10.033   9.656   9.257   9.206   9.533   9.888   9.860   9.353   8.670   8.251   8.318   8.748   9.243   9.610   9.842   9.986   9.970   9.623   8.898   8.046   7.518   7.634   8.292   9.017   9.319   9.066   8.558   8.237   8.317   8.646   8.900   8.881   8.656   8.432   8.335   8.331 
+  8.495   7.904   7.190   6.933   7.387   8.293   9.083   9.292   8.876   8.199   7.759   7.845   8.401   9.118   9.661   9.844   9.661   9.217   8.656   8.120   7.741   7.617   7.759   8.073   8.395   8.585   8.613   8.563   8.553   8.631   8.728   8.705   8.458   8.011   7.522   7.203 
+  9.408   8.555   7.437   6.802   7.035   7.919   8.842   9.246   8.978   8.307   7.668   7.351   7.391   7.638   7.922   8.138   8.245   8.227   8.090   7.890   7.731   7.699   7.799   7.937   8.004   7.969   7.903   7.914   8.042   8.221   8.326   8.277   8.091   7.856   7.662   7.558 
+  8.225   7.842   7.240   6.668   6.351   6.398   6.763   7.263   7.648   7.712   7.399   6.859   6.384   6.250   6.532   7.038   7.431   7.461   7.143   6.732   6.518   6.591   6.792   6.880   6.769   6.618   6.692   7.102   7.678   8.072   8.032   7.597   7.050   6.682   6.576   6.603 
+  7.169   6.516   5.745   5.469   5.860   6.524   6.858   6.558   5.832   5.172   4.931   5.079   5.332   5.451   5.432   5.411   5.453   5.462   5.306   5.013   4.801   4.901   5.327   5.844   6.162   6.181   6.049   5.993   6.090   6.209   6.170   5.943   5.684   5.578   5.658   5.776 
+  4.965   4.605   4.321   4.546   5.267   5.997   6.204   5.766   5.043   4.511   4.336   4.308   4.164   3.940   3.971   4.509   5.361   5.944   5.757   4.848   3.834   3.427   3.871   4.795   5.577   5.874   5.845   5.892   6.232   6.687   6.880   6.597   5.960   5.294   4.842   4.646 
+  5.464   4.712   3.803   3.432   3.831   4.614   5.137   5.040   4.495   3.996   3.904   4.179   4.491   4.571   4.443   4.353   4.502   4.859   5.216   5.408   5.448   5.474   5.571   5.680   5.683   5.562   5.461   5.560   5.893   6.279   6.447   6.233   5.692   5.041   4.504   4.214 
+  5.832   5.805   5.734   5.601   5.417   5.219   5.045   4.903   4.764   4.596   4.400   4.235   4.189   4.323   4.607   4.929   5.145   5.171   5.032   4.847   4.751   4.811   4.995   5.202   5.341   5.390   5.405   5.460   5.587   5.734   5.794   5.665   5.320   4.838   4.370   4.083 
+  6.453   6.163   5.795   5.595   5.637   5.778   5.781   5.513   5.027   4.496   4.082   3.861   3.861   4.110   4.620   5.304   5.930   6.196   5.930   5.233   4.454   3.978   3.996   4.411   4.956   5.396   5.656   5.792   5.879   5.926   5.894   5.766   5.593   5.451   5.379   5.361 
+  6.122   5.946   5.518   4.844   4.146   3.784   3.985   4.625   5.282   5.538   5.300   4.854   4.623   4.838   5.383   5.932   6.205   6.133   5.821   5.409   4.994   4.658   4.525   4.713   5.224   5.869   6.364   6.535   6.449   6.334   6.355   6.449   6.383   6.003   5.428   4.994 
+  6.605   6.253   5.712   5.215   4.933   4.902   5.028   5.169   5.223   5.166   5.031   4.865   4.698   4.552   4.462   4.476   4.628   4.902   5.213   5.445   5.512   5.404   5.199   5.015   4.949   5.045   5.285   5.616   5.969   6.269   6.438   6.412   6.177   5.794   5.399   5.149 
+  4.999   4.903   4.902   5.197   5.796   6.466   6.882   6.844   6.389   5.730   5.090   4.589   4.245   4.060   4.071   4.304   4.704   5.116   5.370   5.396   5.276   5.167   5.179   5.292   5.407   5.454   5.472   5.577   5.849   6.239   6.573   6.654   6.393   5.870   5.302   4.938 
+  5.961   6.405   6.945   7.175   6.957   6.504   6.163   6.119   6.274   6.377   6.268   5.983   5.672   5.429   5.229   5.013   4.803   4.700   4.770   4.937   5.024   4.927   4.737   4.683   4.925   5.394   5.838   6.041   6.002   5.912   5.942   6.064   6.073   5.812   5.361   5.008 
+ 11.352  10.575   9.381   8.259   7.531   7.232   7.201   7.282   7.433   7.668   7.927   8.032   7.794   7.184   6.404   5.771   5.503   5.578   5.780   5.887   5.843   5.765   5.812   6.018   6.261   6.374   6.298   6.146   6.114   6.313   6.668   6.953   6.953   6.625   6.145   5.798 
+  9.149   8.855   8.281   7.557   6.971   6.808   7.098   7.512   7.576   7.053   6.157   5.385   5.100   5.234   5.393   5.253   4.861   4.565   4.636   4.985   5.244   5.141   4.794   4.606   4.874   5.489   6.038   6.214   6.118   6.144   6.533   7.064   7.197   6.592   5.501   4.645 
+  5.168   5.233   5.367   5.610   6.028   6.640   7.326   7.826   7.884   7.441   6.707   6.019   5.594   5.376   5.123   4.671   4.128   3.824   4.037   4.732   5.547   6.040   6.007   5.607   5.217   5.149   5.458   5.967   6.440   6.725   6.785   6.635   6.303   5.841   5.376   5.079 
+  6.857   6.594   6.299   6.233   6.468   6.843   7.117   7.157   6.997   6.733   6.398   5.955   5.412   4.914   4.674   4.795   5.145   5.432   5.446   5.237   5.076   5.203   5.603   6.014   6.156   5.993   5.766   5.790   6.177   6.739   7.135   7.124   6.717   6.127   5.603   5.308 
+  7.745   7.446   6.993   6.591   6.393   6.421   6.562   6.651   6.580   6.353   6.063   5.805   5.604   5.412   5.172   4.887   4.639   4.517   4.545   4.656   4.748   4.771   4.766   4.825   5.004   5.278   5.565   5.808   6.012   6.213   6.407   6.511   6.424   6.123   5.728   5.450 
+  8.020   8.104   8.056   7.698   7.122   6.657   6.569   6.798   6.982   6.773   6.143   5.409   4.938   4.845   4.938   4.961   4.857   4.797   4.956   5.286   5.536   5.501   5.253   5.100   5.295   5.793   6.279   6.466   6.359   6.222   6.284   6.485   6.517   6.148   5.495   4.980 
+ 10.211   9.800   9.159   8.556   8.208   8.163   8.274   8.259   7.845   6.925   5.650   4.406   3.647   3.648   4.330   5.268   5.921   5.948   5.412   4.721   4.343   4.494   5.027   5.580   5.868   5.870   5.793   5.860   6.110   6.390   6.500   6.363   6.076   5.800   5.636   5.577 
+  7.652   7.835   8.142   8.444   8.567   8.360   7.794   6.988   6.151   5.472   5.057   4.930   5.088   5.492   6.009   6.386   6.340   5.759   4.855   4.102   3.939   4.449   5.274   5.860   5.857   5.370   4.850   4.723   5.075   5.620   5.973   5.946   5.646   5.317   5.122   5.058 
+  6.951   7.280   7.783   8.252   8.546   8.650   8.653   8.656   8.704   8.775   8.817   8.793   8.709   8.610   8.558   8.603   8.747   8.921   9.001   8.864   8.475   7.922   7.377   6.992   6.796   6.702   6.596   6.459   6.392   6.521   6.864   7.276   7.538   7.526   7.313   7.114 
+  8.943   9.007   9.104   9.190   9.239   9.247   9.232   9.222   9.239   9.295   9.376   9.442   9.444   9.367   9.266   9.245   9.385   9.648   9.860   9.798   9.345   8.601   7.840   7.334   7.175   7.232   7.275   7.176   7.003   6.943   7.123   7.485   7.832   7.993   7.959   7.873 
+  7.499   7.789   8.085   8.066   7.650   7.046   6.556   6.300   6.125   5.773   5.155   4.468   4.057   4.120   4.531   4.928   4.987   4.673   4.247   4.055   4.261   4.746   5.220   5.446   5.390   5.208   5.114   5.232   5.535   5.893   6.157   6.232   6.111   5.865   5.604   5.440 
+  7.364   7.651   7.908   7.797   7.261   6.564   6.036   5.789   5.674   5.493   5.233   5.070   5.147   5.378   5.489   5.273   4.805   4.390   4.279   4.439   4.609   4.582   4.422   4.396   4.678   5.134   5.434   5.377   5.121   5.055   5.409   5.987   6.298   6.005   5.268   4.650 
+  8.436   8.332   7.965   7.242   6.339   5.647   5.478   5.801   6.252   6.433   6.222   5.819   5.518   5.418   5.367   5.159   4.763   4.362   4.167   4.210   4.333   4.371   4.338   4.395   4.649   5.002   5.225   5.198   5.076   5.169   5.629   6.252   6.604   6.401   5.794   5.276 
+  7.094   6.917   6.638   6.390   6.310   6.456   6.740   6.955   6.892   6.486   5.882   5.337   5.048   5.020   5.086   5.058   4.882   4.664   4.573   4.700   4.988   5.296   5.500   5.559   5.508   5.401   5.288   5.227   5.284   5.499   5.822   6.102   6.170   5.969   5.616   5.348 
+  6.871   6.993   7.146   7.202   7.075   6.784   6.460   6.275   6.341   6.632   6.992   7.229   7.238   7.052   6.813   6.656   6.627   6.669   6.695   6.665   6.613   6.597   6.630   6.661   6.620   6.500   6.392   6.430   6.702   7.162   7.638   7.925   7.900   7.597   7.194   6.916 
+  6.099   6.010   5.945   6.011   6.172   6.250   6.059   5.570   4.966   4.521   4.402   4.562   4.791   4.897   4.851   4.774   4.806   4.959   5.103   5.086   4.888   4.654   4.578   4.733   4.994   5.125   4.975   4.611   4.280   4.224   4.485   4.871   5.100   5.018   4.718   4.460 
+  7.140   6.706   6.010   5.308   4.810   4.588   4.569   4.607   4.595   4.511   4.406   4.331   4.285   4.233   4.162   4.125   4.207   4.442   4.755   4.992   5.026   4.860   4.626   4.483   4.487   4.560   4.581   4.510   4.433   4.472   4.649   4.823   4.790   4.464   3.979   3.622 
+  6.504   6.459   6.376   6.260   6.111   5.936   5.750   5.575   5.416   5.249   5.031   4.751   4.458   4.251   4.209   4.327   4.505   4.610   4.574   4.438   4.305   4.253   4.272   4.282   4.224   4.122   4.069   4.143   4.335   4.544   4.651   4.609   4.460   4.294   4.175   4.120 
+  6.395   6.264   6.058   5.833   5.594   5.316   5.005   4.742   4.631   4.705   4.865   4.944   4.838   4.602   4.404   4.389   4.554   4.758   4.853   4.809   4.720   4.694   4.730   4.713   4.532   4.210   3.923   3.870   4.119   4.537   4.880   4.949   4.709   4.283   3.862   3.608 
+  4.483   4.830   5.425   6.095   6.622   6.828   6.644   6.159   5.594   5.190   5.086   5.236   5.448   5.502   5.293   4.890   4.473   4.209   4.154   4.242   4.369   4.481   4.597   4.749   4.921   5.039   5.043   4.953   4.875   4.915   5.069   5.205   5.152   4.848   4.420   4.110 
+  3.749   4.421   5.334   5.973   6.121   5.946   5.747   5.643   5.498   5.128   4.562   4.068   3.916   4.127   4.451   4.606   4.534   4.417   4.455   4.634   4.740   4.590   4.251   3.999   4.054   4.364   4.644   4.666   4.484   4.375   4.535   4.838   4.923   4.540   3.833   3.273 
+  6.578   5.916   5.101   4.725   4.982   5.540   5.855   5.651   5.132   4.767   4.862   5.294   5.636   5.535   5.003   4.380   4.031   4.059   4.277   4.419   4.396   4.340   4.446   4.758   5.111   5.263   5.095   4.707   4.333   4.166   4.239   4.428   4.568   4.575   4.480   4.390 
+  5.428   5.474   5.593   5.769   5.888   5.804   5.475   5.049   4.787   4.857   5.170   5.417   5.298   4.772   4.108   3.693   3.740   4.135   4.550   4.717   4.624   4.499   4.582   4.903   5.251   5.350   5.090   4.630   4.276   4.248   4.513   4.812   4.857   4.548   4.050   3.679 
+  5.870   5.622   5.363   5.361   5.691   6.180   6.551   6.635   6.451   6.126   5.764   5.389   5.010   4.690   4.523   4.536   4.627   4.640   4.511   4.351   4.358   4.620   5.014   5.291   5.299   5.120   4.991   5.075   5.294   5.399   5.215   4.821   4.499   4.480   4.731   4.983 
+  4.287   4.782   5.554   6.303   6.816   7.033   6.997   6.769   6.393   5.946   5.573   5.437   5.608   5.994   6.384   6.595   6.601   6.525   6.517   6.623   6.772   6.870   6.903   6.949   7.087   7.310   7.530   7.667   7.735   7.822   7.978   8.141   8.172   7.989   7.672   7.427 
+  5.119   5.591   6.306   6.938   7.240   7.162   6.840   6.486   6.253   6.163   6.127   6.033   5.828   5.548   5.277   5.091   5.011   5.010   5.040   5.077   5.133   5.237   5.407   5.627   5.850   6.027   6.136   6.198   6.251   6.327   6.422   6.503   6.528   6.486   6.408   6.348 
+  6.297   6.125   6.074   6.402   7.006   7.443   7.300   6.574   5.702   5.198   5.223   5.467   5.456   4.984   4.286   3.815   3.852   4.294   4.788   5.055   5.080   5.042   5.088   5.204   5.278   5.252   5.182   5.136   5.074   4.862   4.436   3.927   3.608   3.662   4.000   4.307 
+  5.915   6.309   6.850   7.195   7.119   6.642   6.002   5.490   5.278   5.325   5.442   5.436   5.229   4.891   4.562   4.346   4.255   4.235   4.234   4.246   4.300   4.410   4.538   4.611   4.575   4.442   4.287   4.201   4.224   4.331   4.457   4.542   4.568   4.550   4.521   4.501 
+  6.218   6.126   5.966   5.765   5.549   5.346   5.200   5.166   5.263   5.440   5.579   5.563   5.367   5.087   4.876   4.831   4.912   4.981   4.914   4.718   4.536   4.545   4.813   5.239   5.618   5.768   5.646   5.347   5.027   4.804   4.702   4.678   4.671   4.648   4.611   4.584 
+  4.899   5.391   5.995   6.289   6.159   5.844   5.644   5.607   5.514   5.157   4.624   4.274   4.405   4.931   5.400   5.362   4.761   3.995   3.583   3.756   4.310   4.841   5.090   5.093   5.034   5.003   4.927   4.725   4.481   4.419   4.676   5.109   5.369   5.205   4.716   4.295 
+  3.550   4.212   5.088   5.638   5.631   5.249   4.845   4.610   4.472   4.263   3.968   3.759   3.807   4.068   4.292   4.256   3.988   3.749   3.787   4.095   4.429   4.550   4.455   4.354   4.420   4.573   4.535   4.121   3.467   2.966   2.941   3.361   3.868   4.101   4.002   3.817 
+  3.911   4.150   4.380   4.368   4.158   4.034   4.228   4.650   4.941   4.803   4.299   3.818   3.722   4.015   4.350   4.366   4.038   3.710   3.758   4.241   4.835   5.131   4.982   4.595   4.294   4.218   4.245   4.192   4.052   3.999   4.164   4.427   4.472   4.085   3.409   2.881 
+  4.510   4.249   4.018   4.107   4.495   4.845   4.796   4.307   3.711   3.435   3.636   4.081   4.368   4.285   3.971   3.761   3.878   4.245   4.598   4.735   4.684   4.625   4.680   4.783   4.753   4.488   4.087   3.775   3.717   3.888   4.105   4.182   4.057   3.806   3.557   3.410 
+  3.896   4.446   5.118   5.412   5.161   4.645   4.326   4.452   4.875   5.203   5.144   4.726   4.230   3.932   3.909   4.040   4.186   4.323   4.525   4.838   5.178   5.377   5.307   4.980   4.528   4.103   3.804   3.665   3.693   3.861   4.081   4.189   4.024   3.561   2.975   2.567 
+  4.635   5.042   5.538   5.737   5.467   4.875   4.273   3.893   3.760   3.753   3.764   3.782   3.842   3.924   3.932   3.794   3.573   3.459   3.627   4.071   4.580   4.880   4.834   4.532   4.198   4.010   3.991   4.034   4.021   3.915   3.749   3.563   3.359   3.131   2.908   2.763 
+  4.966   5.041   5.044   4.810   4.306   3.707   3.305   3.322   3.739   4.282   4.588   4.445   3.938   3.390   3.141   3.328   3.818   4.339   4.680   4.812   4.839   4.853   4.836   4.696   4.385   3.979   3.635   3.462   3.434   3.419   3.311   3.128   2.993   3.006   3.146   3.279 
+  5.493   5.335   4.901   4.156   3.320   2.795   2.870   3.472   4.202   4.643   4.661   4.442   4.249   4.165   4.059   3.807   3.500   3.426   3.799   4.525   5.223   5.516   5.329   4.904   4.551   4.371   4.209   3.881   3.408   3.031   2.979   3.237   3.542   3.626   3.460   3.264 
+  4.780   4.714   4.622   4.577   4.644   4.830   5.052   5.170   5.095   4.868   4.650   4.594   4.709   4.837   4.787   4.506   4.140   3.919   3.968   4.201   4.408   4.440   4.329   4.221   4.210   4.232   4.136   3.861   3.528   3.352   3.423   3.593   3.574   3.202   2.612   2.163 
+  5.108   5.097   5.038   4.898   4.684   4.457   4.294   4.243   4.291   4.377   4.432   4.420   4.350   4.260   4.192   4.164   4.165   4.164   4.130   4.057   3.982   3.967   4.063   4.261   4.475   4.579   4.477   4.169   3.755   3.379   3.137   3.033   2.998   2.957   2.893   2.840 
+  4.237   4.735   5.299   5.448   5.061   4.467   4.129   4.254   4.648   4.940   4.920   4.673   4.428   4.308   4.247   4.127   3.969   3.934   4.144   4.503   4.746   4.668   4.327   3.997   3.906   4.033   4.157   4.123   4.038   4.183   4.711   5.423   5.883   5.792   5.275   4.807 
+  5.804   5.718   5.497   5.156   4.845   4.760   4.948   5.217   5.274   4.999   4.585   4.384   4.582   4.994   5.202   4.932   4.317   3.808   3.774   4.184   4.626   4.679   4.265   3.699   3.388   3.489   3.834   4.156   4.359   4.565   4.905   5.303   5.495   5.287   4.790   4.376 
+  5.769   5.448   5.009   4.726   4.768   5.095   5.490   5.700   5.604   5.271   4.895   4.653   4.592   4.627   4.639   4.576   4.483   4.444   4.489   4.571   4.614   4.588   4.544   4.555   4.636   4.719   4.704   4.554   4.333   4.151   4.056   3.985   3.817   3.496   3.107   2.837 
+  4.559   5.072   5.622   5.681   5.135   4.381   3.987   4.212   4.831   5.365   5.494   5.271   4.972   4.796   4.691   4.486   4.136   3.825   3.809   4.159   4.656   4.969   4.927   4.651   4.423   4.426   4.597   4.716   4.618   4.330   4.012   3.801   3.706   3.649   3.580   3.521 
+  5.608   5.624   5.498   5.138   4.719   4.586   4.932   5.563   5.999   5.874   5.256   4.586   4.278   4.351   4.441   4.188   3.613   3.128   3.156   3.724   4.416   4.725   4.496   4.026   3.773   3.943   4.336   4.571   4.446   4.079   3.743   3.585   3.517   3.368   3.109   2.892 
+  3.755   4.028   4.414   4.734   4.937   5.111   5.347   5.586   5.623   5.266   4.529   3.680   3.094   3.007   3.383   3.960   4.447   4.692   4.720   4.648   4.574   4.533   4.513   4.500   4.479   4.429   4.323   4.162   3.993   3.890   3.895   3.971   4.028   3.997   3.891   3.798 
+  5.635   5.972   6.192   5.891   5.198   4.716   4.943   5.743   6.399   6.237   5.242   4.072   3.470   3.627   4.087   4.264   4.025   3.778   3.997   4.690   5.344   5.422   4.897   4.288   4.166   4.602   5.118   5.166   4.671   4.085   3.933   4.295   4.749   4.818   4.447   4.046 
+  5.774   6.118   6.539   6.722   6.551   6.184   5.898   5.862   6.025   6.197   6.226   6.090   5.862   5.586   5.243   4.816   4.393   4.160   4.279   4.719   5.237   5.520   5.408   5.004   4.590   4.411   4.508   4.712   4.795   4.644   4.324   4.013   3.862   3.906   4.059   4.183 
+  4.077   4.433   4.991   5.546   5.973   6.262   6.456   6.571   6.576   6.440   6.178   5.838   5.451   5.012   4.524   4.077   3.830   3.912   4.296   4.778   5.121   5.229   5.210   5.248   5.406   5.540   5.430   5.009   4.473   4.148   4.217   4.558   4.837   4.796   4.479   4.183 
+  4.550   5.204   6.006   6.376   6.140   5.639   5.389   5.620   6.100   6.380   6.197   5.671   5.136   4.809   4.624   4.366   3.950   3.549   3.455   3.811   4.482   5.166   5.624   5.809   5.804   5.670   5.400   4.997   4.578   4.338   4.379   4.588   4.697   4.514   4.111   3.779 
+  5.729   5.630   5.548   5.612   5.850   6.145   6.304   6.200   5.875   5.521   5.344   5.419   5.628   5.751   5.628   5.277   4.874   4.625   4.624   4.805   5.022   5.161   5.199   5.170   5.090   4.928   4.651   4.296   3.981   3.814   3.792   3.771   3.569   3.122   2.573   2.191 
+  5.309   5.655   6.112   6.366   6.239   5.811   5.357   5.147   5.239   5.431   5.413   5.018   4.376   3.841   3.727   4.060   4.537   4.750   4.496   3.936   3.477   3.462   3.923   4.559   4.971   4.936   4.535   4.043   3.715   3.620   3.648   3.638   3.499   3.258   3.014   2.863 
+  5.591   5.570   5.577   5.661   5.825   6.007   6.118   6.095   5.951   5.757   5.602   5.528   5.517   5.507   5.432   5.263   5.016   4.745   4.521   4.414   4.464   4.658   4.915   5.096   5.070   4.781   4.296   3.788   3.446   3.361   3.478   3.624   3.627   3.432   3.135   2.916 
+  5.938   6.058   6.194   6.197   5.972   5.566   5.181   5.066   5.354   5.929   6.446   6.534   6.038   5.151   4.299   3.871   3.963   4.341   4.632   4.608   4.337   4.098   4.135   4.447   4.787   4.857   4.536   3.980   3.497   3.326   3.461   3.678   3.703   3.429   2.990   2.661 
+  5.127   5.268   5.494   5.717   5.859   5.899   5.880   5.878   5.928   5.978   5.916   5.654   5.218   4.756   4.442   4.348   4.393   4.416   4.318   4.152   4.084   4.243   4.591   4.927   5.023   4.794   4.355   3.946   3.755   3.802   3.937   3.960   3.755   3.356   2.922   2.643 
+  5.600   5.813   6.107   6.315   6.360   6.314   6.340   6.548   6.888   7.151   7.105   6.672   6.003   5.391   5.070   5.053   5.142   5.097   4.827   4.465   4.253   4.339   4.658   4.986   5.109   4.969   4.670   4.362   4.113   3.889   3.631   3.348   3.120   3.024   3.050   3.107 
+  6.306   6.641   7.037   7.174   6.944   6.510   6.137   5.964   5.930   5.890   5.784   5.682   5.667   5.703   5.635   5.330   4.832   4.356   4.140   4.274   4.668   5.150   5.587   5.902   6.002   5.764   5.127   4.238   3.449   3.118   3.322   3.752   3.921   3.555   2.829   2.251 
+  6.342   6.325   6.332   6.386   6.444   6.411   6.222   5.905   5.574   5.334   5.189   5.036   4.763   4.357   3.939   3.677   3.660   3.839   4.082   4.304   4.532   4.852   5.279   5.665   5.766   5.421   4.717   3.987   3.617   3.775   4.275   4.676   4.576   3.897   2.962   2.297 
+  6.189   6.304   6.573   6.951   7.246   7.221   6.815   6.254   5.901   5.935   6.167   6.173   5.681   4.844   4.147   3.996   4.355   4.760   4.728   4.196   3.600   3.520   4.180   5.237   6.031   6.078   5.404   4.471   3.801   3.612   3.737   3.830   3.641   3.173   2.631   2.276 
+  6.104   5.673   5.319   5.512   6.166   6.668   6.466   5.639   4.861   4.777   5.365   5.917   5.677   4.558   3.268   2.721   3.269   4.450   5.434   5.732   5.521   5.338   5.506   5.851   5.940   5.554   4.896   4.363   4.142   4.061   3.817   3.329   2.834   2.627   2.751   2.951 
+  7.301   7.114   6.914   6.895   7.085   7.283   7.192   6.650   5.791   4.992   4.629   4.814   5.311   5.713   5.741   5.432   5.086   4.998   5.224   5.553   5.709   5.591   5.336   5.165   5.150   5.140   4.910   4.402   3.821   3.486   3.559   3.888   4.129   4.033   3.664   3.337 
+  7.096   7.320   7.597   7.760   7.797   7.779   7.667   7.245   6.332   5.089   4.075   3.885   4.644   5.809   6.541   6.364   5.530   4.767   4.629   5.037   5.436   5.387   5.009   4.835   5.227   5.944   6.311   5.858   4.801   3.898   3.772   4.356   4.973   4.982   4.382   3.779 
+  6.735   6.743   6.844   7.137   7.626   8.133   8.331   7.936   6.951   5.767   4.973   4.962   5.624   6.395   6.664   6.236   5.462   4.927   4.973   5.452   5.919   6.061   5.949   5.892   6.052   6.237   6.077   5.441   4.654   4.268   4.563   5.245   5.659   5.354   4.501   3.776 
+  6.669   6.724   6.856   7.104   7.482   7.898   8.128   7.909   7.154   6.102   5.242   4.999   5.406   6.044   6.341   6.005   5.238   4.560   4.386   4.737   5.294   5.722   5.926   6.023   6.100   6.055   5.705   5.064   4.459   4.316   4.757   5.408   5.642   5.105   4.061   3.234 
+  6.792   7.150   7.644   8.022   8.195   8.232   8.181   7.946   7.362   6.440   5.497   5.002   5.201   5.869   6.410   6.292   5.446   4.323   3.552   3.510   4.125   5.016   5.797   6.262   6.361   6.101   5.534   4.834   4.308   4.238   4.624   5.102   5.162   4.559   3.564   2.809 
+  6.875   7.125   7.500   7.858   8.127   8.290   8.285   7.978   7.276   6.299   5.415   5.037   5.306   5.936   6.381   6.216   5.445   4.481   3.837   3.787   4.255   4.966   5.660   6.178   6.417   6.282   5.763   5.061   4.568   4.617   5.172   5.753   5.745   4.893   3.578   2.598 
+  7.084   7.523   8.122   8.562   8.711   8.639   8.420   7.985   7.203   6.134   5.160   4.777   5.186   6.030   6.591   6.306   5.218   3.959   3.278   3.512   4.409   5.397   6.024   6.183   6.014   5.678   5.253   4.832   4.608   4.784   5.332   5.889   5.950   5.284   4.199   3.377 
+  6.207   6.909   7.834   8.432   8.499   8.239   7.949   7.688   7.280   6.626   5.956   5.705   6.095   6.837   7.289   6.982   6.029   5.036   4.602   4.856   5.446   5.940   6.205   6.390   6.592   6.619   6.156   5.197   4.247   3.995   4.678   5.744   6.215   5.504   3.983   2.753 
+  7.342   7.765   8.334   8.689   8.609   8.102   7.331   6.504   5.820   5.482   5.642   6.281   7.101   7.619   7.465   6.676   5.721   5.174   5.282   5.797   6.207   6.187   5.845   5.560   5.575   5.752   5.731   5.331   4.791   4.579   4.929   5.553   5.836   5.384   4.413   3.623 
+  7.433   7.530   7.784   8.195   8.591   8.656   8.129   7.024   5.706   4.718   4.468   4.973   5.836   6.494   6.548   5.982   5.132   4.455   4.261   4.570   5.152   5.691   5.955   5.878   5.551   5.152   4.863   4.806   4.995   5.320   5.581   5.572   5.187   4.505   3.775   3.305 
+  9.286   9.657   9.876   9.409   8.263   7.048   6.489   6.823   7.617   8.147   7.985   7.285   6.541   6.113   5.960   5.785   5.411   4.981   4.809   5.046   5.515   5.856   5.838   5.527   5.177   4.977   4.917   4.880   4.822   4.829   4.991   5.248   5.395   5.269   4.929   4.640 
+ 10.092  10.556  10.916  10.554   9.376   7.925   6.936   6.739   7.037   7.215   6.878   6.142   5.448   5.132   5.154   5.202   5.036   4.703   4.459   4.501   4.793   5.133   5.356   5.456   5.516   5.563   5.534   5.378   5.173   5.097   5.246   5.493   5.564   5.278   4.750   4.333 
+  8.108   7.749   7.373   7.336   7.659   7.995   7.939   7.393   6.643   6.099   5.941   6.004   5.980   5.719   5.342   5.069   4.979   4.940   4.788   4.536   4.404   4.607   5.117   5.642   5.858   5.682   5.320   5.071   5.062   5.160   5.145   4.933   4.643   4.462   4.453   4.513 
+  6.389   6.564   6.917   7.364   7.673   7.557   6.892   5.857   4.873   4.331   4.339   4.677   4.999   5.101   5.031   4.983   5.081   5.274   5.416   5.436   5.414   5.491   5.711   5.942   5.980   5.726   5.294   4.938   4.864   5.071   5.363   5.489   5.312   4.884   4.400   4.086 
+  5.457   5.724   6.290   7.068   7.738   7.873   7.252   6.083   4.924   4.309   4.387   4.874   5.324   5.491   5.453   5.443   5.580   5.774   5.873   5.870   5.947   6.283   6.831   7.293   7.341   6.891   6.181   5.586   5.339   5.395   5.540   5.600   5.565   5.526   5.543   5.583 
+  8.271   8.040   7.807   7.836   8.189   8.653   8.879   8.624   7.921   7.054   6.366   6.067   6.144   6.418   6.671   6.746   6.605   6.321   6.064   6.036   6.390   7.121   8.020   8.739   8.961   8.586   7.806   7.001   6.525   6.506   6.790   7.059   7.047   6.699   6.199   5.842 
+ 11.718  11.212  10.544  10.177  10.379  11.022  11.639  11.704  10.981   9.688   8.379   7.609   7.601   8.137   8.731   8.954   8.670   8.061   7.455   7.120   7.156   7.522   8.098   8.734   9.261   9.528   9.475   9.198   8.914   8.815   8.899   8.950   8.695   8.047   7.229   6.656 
+ 10.408  10.198   9.832   9.407   9.030   8.754   8.536   8.256   7.810   7.219   6.641   6.276   6.218   6.380   6.555   6.565   6.389   6.157   6.062   6.248   6.763   7.565   8.522   9.400   9.888   9.727   8.890   7.693   6.677   6.295   6.603   7.206   7.539   7.291   6.637   6.093 
+ 11.803  11.710  11.488  11.121  10.666  10.238   9.924   9.730   9.587   9.430   9.262   9.131   9.058   8.992   8.837   8.544   8.164   7.819   7.623   7.628   7.834   8.232   8.786   9.372   9.752   9.668   9.045   8.133   7.413   7.290   7.766   8.399   8.599   8.090   7.148   6.415 
+ 13.331  13.037  12.530  11.934  11.351  10.828  10.374   9.997   9.744   9.680   9.822  10.075  10.247  10.148   9.710   9.041   8.357   7.841   7.559   7.481   7.590   7.939   8.578   9.416  10.146  10.382   9.926   8.973   8.035   7.612   7.825   8.323   8.558   8.222   7.495   6.908 
+ 10.257   9.794   9.052   8.298   7.742   7.446   7.335   7.282   7.212   7.126   7.049   6.960   6.777   6.429   5.939   5.444   5.104   4.998   5.088   5.316   5.717   6.424   7.501   8.735   9.616   9.606   8.553   6.926   5.603   5.318   6.137   7.388   8.140   7.894   6.940   6.115 
+  7.083   7.027   7.139   7.605   8.315   8.867   8.865   8.253   7.373   6.697   6.465   6.538   6.574   6.351   5.926   5.525   5.289   5.153   4.979   4.803   4.916   5.659   7.068   8.698   9.807   9.824   8.741   7.151   5.876   5.462   5.883   6.635   7.126   7.070   6.630   6.236 
+  6.590   6.562   6.714   7.229   8.014   8.665   8.724   8.022   6.848   5.773   5.260   5.356   5.709   5.876   5.669   5.254   4.943   4.893   4.996   5.065   5.120   5.465   6.426   7.939   9.391   9.924   9.064   7.156   5.242   4.379   4.910   6.246   7.339   7.491   6.842   6.169 
+  6.649   7.222   8.119   8.959   9.396   9.253   8.573   7.572   6.538   5.718   5.238   5.079   5.116   5.194   5.210   5.136   4.998   4.837   4.704   4.705   5.016   5.809   7.092   8.569   9.689   9.917   9.092   7.604   6.213   5.587   5.867   6.601   7.091   6.925   6.267   5.691 
+  5.202   6.365   8.047   9.392   9.860   9.462   8.583   7.611   6.710   5.868   5.114   4.625   4.607   5.085   5.799   6.344   6.426   6.052   5.518   5.229   5.505   6.445   7.885   9.417  10.498  10.668   9.821   8.344   6.972   6.363   6.671   7.444   7.959   7.776   7.066   6.444 
+  3.853   5.619   8.106   9.956  10.387   9.563   8.259   7.175   6.510   6.061   5.613   5.209   5.048   5.199   5.453   5.484   5.145   4.621   4.298   4.496   5.302   6.598   8.153   9.657  10.701  10.861   9.943   8.247   6.539   5.634   5.848   6.756   7.516   7.529   6.894   6.273 
+  5.286   6.491   8.103   9.155   9.230   8.657   8.080   7.849   7.773   7.425   6.634   5.671   4.991   4.799   4.886   4.872   4.590   4.240   4.200   4.715   5.759   7.136   8.640  10.048  11.018  11.113  10.092   8.257   6.465   5.651   6.152   7.410   8.371   8.313   7.416   6.568 
+  3.945   4.842   6.198   7.468   8.354   8.879   9.154   9.133   8.616   7.523   6.116   4.916   4.337   4.369   4.600   4.584   4.222   3.831   3.865   4.571   5.863   7.456   9.061  10.419  11.223  11.134  10.012   8.191   6.472   5.691   6.139   7.309   8.258   8.331   7.655   6.977 
+  4.308   4.781   5.588   6.530   7.438   8.191   8.683   8.794   8.442   7.673   6.701   5.829   5.285   5.099   5.106   5.086   4.921   4.668   4.525   4.730   5.460   6.747   8.407  10.023  11.036  10.990   9.821   7.991   6.315   5.512   5.781   6.695   7.534   7.797   7.527   7.180 
+  3.838   4.497   5.611   6.862   7.938   8.629   8.847   8.607   8.001   7.181   6.345   5.687   5.329   5.266   5.358   5.406   5.269   4.964   4.694   4.770   5.456   6.801   8.542  10.151  11.042  10.852   9.651   7.945   6.438   5.668   5.736   6.312   6.886   7.113   7.003   6.822 
+  4.605   5.385   6.606   7.786   8.549   8.786   8.622   8.254   7.794   7.221   6.470   5.556   4.650   4.013   3.851   4.170   4.752   5.278   5.540   5.601   5.778   6.424   7.624   9.029   9.979   9.892   8.673   6.861   5.350   4.848   5.442   6.566   7.420   7.533   7.055   6.565 
+  4.530   5.267   6.352   7.256   7.636   7.484   7.044   6.586   6.231   5.942   5.635   5.280   4.923   4.625   4.397   4.197   3.981   3.757   3.617   3.725   4.266   5.345   6.862   8.439   9.506   9.566   8.526   6.840   5.326   4.692   5.102   6.082   6.884   7.026   6.606   6.158 
+  7.112   7.199   7.247   7.163   7.018   7.006   7.226   7.517   7.523   6.972   5.925   4.787   4.032   3.883   4.187   4.574   4.748   4.670   4.539   4.618   5.081   5.940   7.043   8.086   8.681   8.508   7.538   6.161   5.050   4.763   5.351   6.284   6.809   6.518   5.655   4.928 
+  8.345   8.005   7.502   7.079   6.889   6.898   6.926   6.775   6.384   5.868   5.429   5.201   5.149   5.117   4.978   4.755   4.610   4.706   5.063   5.546   5.986   6.320   6.620   6.970   7.315   7.452   7.183   6.524   5.760   5.275   5.281   5.667   6.101   6.297   6.225   6.087 
+  8.084   7.857   7.488   7.106   6.817   6.652   6.546   6.383   6.077   5.638   5.178   4.841   4.720   4.797   4.967   5.116   5.195   5.234   5.313   5.499   5.809   6.200   6.582   6.842   6.874   6.630   6.170   5.666   5.340   5.342   5.653   6.086   6.402   6.469   6.341   6.199 
+  6.188   6.204   6.274   6.432   6.655   6.831   6.806   6.479   5.891   5.237   4.769   4.634   4.772   4.956   4.958   4.728   4.442   4.369   4.663   5.237   5.815   6.128   6.092   5.842   5.601   5.518   5.579   5.665   5.668   5.575   5.451   5.365   5.338   5.343   5.351   5.352 
+  7.454   7.407   7.359   7.342   7.312   7.176   6.877   6.468   6.075   5.799   5.626   5.451   5.195   4.901   4.710   4.731   4.930   5.140   5.208   5.149   5.153   5.434   6.025   6.703   7.111   7.003   6.413   5.631   5.017   4.773   4.851   5.026   5.073   4.912   4.637   4.429 
+  9.338   9.011   8.523   8.079   7.773   7.536   7.217   6.725   6.114   5.545   5.176   5.057   5.122   5.261   5.390   5.475   5.504   5.458   5.337   5.194   5.142   5.291   5.649   6.071   6.333   6.277   5.948   5.586   5.475   5.729   6.189   6.504   6.365   5.737   4.907   4.327 
+  7.813   7.310   6.637   6.198   6.159   6.359   6.487   6.360   6.050   5.781   5.715   5.825   5.955   5.980   5.895   5.763   5.610   5.384   5.054   4.716   4.596   4.891   5.585   6.407   6.979   7.067   6.719   6.213   5.846   5.753   5.866   6.017   6.071   6.002   5.876   5.784 
+  6.775   7.137   7.558   7.700   7.480   7.110   6.875   6.853   6.864   6.667   6.211   5.694   5.381   5.362   5.486   5.514   5.339   5.065   4.900   4.989   5.353   5.943   6.703   7.530   8.202   8.397   7.904   6.850   5.733   5.134   5.302   5.956   6.505   6.515   6.058   5.610 
+  6.277   6.745   7.368   7.764   7.761   7.462   7.081   6.718   6.311   5.767   5.144   4.657   4.508   4.696   4.997   5.145   5.041   4.820   4.724   4.930   5.470   6.276   7.241   8.207   8.919   9.065   8.473   7.308   6.084   5.382   5.462   6.079   6.676   6.825   6.541   6.214 
+  5.872   6.280   6.928   7.592   8.108   8.388   8.349   7.896   7.002   5.843   4.799   4.262   4.363   4.851   5.251   5.205   4.726   4.163   3.936   4.263   5.088   6.210   7.422   8.531   9.291   9.424   8.795   7.619   6.454   5.891   6.135   6.829   7.326   7.191   6.557   5.988 
+  6.809   7.003   7.313   7.682   8.126   8.643   9.054   9.003   8.211   6.793   5.316   4.457   4.498   5.083   5.503   5.280   4.578   4.061   4.336   5.458   6.927   8.125   8.788   9.073   9.244   9.321   9.076   8.353   7.362   6.599   6.443   6.808   7.212   7.212   6.801   6.391 
+  5.463   5.935   6.614   7.186   7.511   7.648   7.700   7.655   7.415   6.960   6.444   6.091   5.969   5.910   5.680   5.265   4.970   5.191   6.040   7.190   8.107   8.494   8.508   8.556   8.835   9.094   8.860   7.947   6.739   5.953   6.040   6.786   7.481   7.537   6.993   6.438 
+  6.137   6.255   6.220   5.859   5.397   5.320   5.874   6.738   7.239   6.964   6.166   5.535   5.535   5.953   6.130   5.670   4.921   4.708   5.553   7.128   8.492   8.917   8.510   8.028   8.074   8.480   8.504   7.650   6.291   5.428   5.766   7.004   8.040   7.964   6.894   5.868 
+  6.289   6.631   6.893   6.719   6.251   6.025   6.396   7.093   7.410   6.878   5.771   4.902   4.871   5.511   6.071   5.986   5.462   5.287   6.022   7.387   8.467   8.560   7.842   7.185   7.283   7.959   8.339   7.748   6.447   5.452   5.599   6.729   7.814   7.915   7.054   6.164 
+  6.417   6.732   7.112   7.315   7.336   7.358   7.472   7.501   7.153   6.376   5.521   5.095   5.300   5.820   6.105   5.923   5.618   5.800   6.730   7.984   8.784   8.692   8.020   7.533   7.705   8.243   8.359   7.557   6.187   5.201   5.316   6.356   7.404   7.628   7.020   6.339 
+  6.533   6.376   6.148   6.026   6.202   6.726   7.385   7.787   7.650   7.057   6.423   6.141   6.224   6.308   6.046   5.541   5.350   5.983   7.338   8.641   9.045   8.368   7.303   6.825   7.301   8.132   8.285   7.281   5.716   4.791   5.257   6.708   7.917   7.912   6.834   5.782 
+  4.148   4.638   5.267   5.689   5.892   6.179   6.794   7.621   8.252   8.358   7.982   7.443   6.989   6.589   6.114   5.685   5.738   6.630   8.131   9.381   9.495   8.353   6.806   6.015   6.442   7.416   7.731   6.777   5.164   4.224   4.798   6.426   7.713   7.568   6.195   4.902 
+ 12.088  12.101  12.135  12.189  12.234  12.203  12.018  11.652  11.186  10.777  10.559  10.520  10.488  10.263   9.815   9.349   9.163   9.372   9.753   9.877   9.453   8.610   7.829   7.567   7.857   8.254   8.206   7.532   6.606   6.051   6.208   6.837   7.320   7.203   6.585   6.022 
+ 14.309  13.583  12.697  12.287  12.514  12.946  12.971  12.343  11.388  10.688  10.558  10.788  10.873  10.490   9.793   9.257   9.239   9.658  10.074  10.078   9.629   9.056   8.739   8.779   8.934   8.857   8.398   7.727   7.182   6.999   7.144   7.374   7.426   7.212   6.856   6.590 
+ 11.508  10.966  10.118   9.327   8.892   8.885   9.118   9.284   9.192   8.890   8.573   8.340   8.059   7.495   6.633   5.864   5.778   6.670   8.159   9.338   9.418   8.356   6.935   6.150   6.410   7.216   7.621   7.073   5.888   4.961   4.953   5.717   6.457   6.477   5.807   5.137 
+  9.091   8.158   6.822   5.813   5.623   6.237   7.211   8.005   8.320   8.192   7.820   7.319   6.652   5.803   5.001   4.716   5.327   6.714   8.165   8.781   8.143   6.697   5.484   5.365   6.340   7.539   7.927   7.151   5.831   5.025   5.332   6.400   7.254   7.162   6.264   5.420 
+  6.460   6.566   6.559   6.281   5.876   5.727   6.105   6.889   7.635   7.922   7.656   7.046   6.338   5.640   5.018   4.708   5.100   6.378   8.129   9.413   9.378   7.993   6.198   5.237   5.674   6.932   7.807   7.518   6.367   5.418   5.488   6.390   7.129   6.858   5.704   4.659 
+  5.033   5.551   6.174   6.485   6.459   6.451   6.791   7.420   7.932   7.974   7.575   7.068   6.710   6.441   6.051   5.586   5.475   6.159   7.532   8.806   9.059   8.047   6.514   5.622   5.954   6.993   7.592   7.046   5.757   4.869   5.172   6.323   7.122   6.634   5.097   3.758 
+  7.097   7.202   7.248   7.117   6.917   6.920   7.290   7.884   8.329   8.320   7.852   7.170   6.523   6.007   5.645   5.574   6.048   7.160   8.532   9.385   9.055   7.589   5.851   4.936   5.333   6.521   7.410   7.240   6.190   5.150   4.892   5.392   5.927   5.806   5.042   4.322 
+  8.226   8.574   9.117   9.659  10.073  10.341  10.494  10.541  10.455  10.224   9.897   9.563   9.278   9.026   8.756   8.457   8.192   8.045   8.033   8.082   8.106   8.101   8.144   8.286   8.438   8.398   8.035   7.473   7.084   7.220   7.908   8.753   9.201   8.962   8.257   7.665 
+ 10.652  10.012   9.213   8.844   9.152   9.888  10.537  10.716  10.403   9.856   9.336   8.920   8.535   8.131   7.781   7.616   7.669   7.812   7.882   7.858   7.916   8.274   8.953   9.673  10.016   9.736   8.973   8.191   7.872   8.190   8.903   9.528   9.664   9.242   8.552   8.045 
+ 10.997  10.836  10.621  10.474  10.431  10.435  10.410  10.330  10.205  10.014   9.678   9.141   8.489   7.968   7.840   8.162   8.696   9.058   9.023   8.726   8.577   8.928   9.754  10.624  11.002  10.666   9.892   9.284   9.346  10.131  11.202  11.922  11.858  11.042   9.940   9.175 
+ 11.403  10.419   9.044   8.040   7.823   8.223   8.692   8.726   8.192   7.321   6.451   5.781   5.325   5.041   4.965   5.195   5.746   6.447   7.012   7.231   7.138   6.972   6.971   7.166   7.353   7.284   6.902   6.432   6.227   6.493   7.103   7.659   7.762   7.303   6.555   5.998 
+  8.573   8.750   8.794   8.443   7.827   7.404   7.541   8.118   8.575   8.375   7.469   6.330   5.531   5.282   5.336   5.336   5.209   5.222   5.649   6.401   7.027   7.095   6.594   5.958   5.677   5.881   6.263   6.417   6.236   5.978   5.962   6.220   6.459   6.375   5.980   5.615 
+  7.320   7.564   7.841   7.900   7.649   7.203   6.773   6.497   6.371   6.302   6.209   6.058   5.839   5.545   5.211   4.963   4.987   5.384   6.034   6.609   6.784   6.490   5.977   5.616   5.595   5.773   5.841   5.629   5.292   5.166   5.441   5.945   6.268   6.120   5.609   5.163 
+  7.642   7.920   8.169   8.081   7.657   7.218   7.101   7.350   7.679   7.750   7.465   7.005   6.591   6.259   5.872   5.365   4.934   4.921   5.482   6.349   6.971   6.942   6.350   5.704   5.498   5.795   6.203   6.249   5.810   5.198   4.854   4.967   5.352   5.680   5.786   5.762 
+  8.892   8.976   9.039   8.953   8.670   8.235   7.731   7.224   6.764   6.414   6.239   6.236   6.274   6.141   5.711   5.093   4.607   4.567   5.021   5.694   6.184   6.273   6.079   5.910   5.969   6.172   6.250   6.044   5.682   5.477   5.625   5.993   6.219   6.038   5.543   5.121 
+  6.655   7.573   8.685   9.146   8.663   7.646   6.761   6.354   6.266   6.153   5.919   5.787   5.969   6.323   6.397   5.871   4.940   4.229   4.274   5.032   5.908   6.270   5.988   5.487   5.300   5.571   5.977   6.116   5.937   5.767   5.915   6.290   6.436   5.994   5.114   4.401 
+  5.701   6.283   7.117   7.773   7.988   7.782   7.354   6.899   6.500   6.164   5.900   5.736   5.660   5.575   5.362   5.008   4.675   4.606   4.927   5.518   6.077   6.336   6.248   5.975   5.716   5.538   5.364   5.118   4.861   4.759   4.925   5.273   5.568   5.618   5.445   5.258 
+  5.561   5.842   6.256   6.606   6.765   6.733   6.592   6.403   6.154   5.779   5.255   4.668   4.192   3.988   4.090   4.384   4.688   4.884   4.991   5.126   5.390   5.762   6.092   6.203   6.019   5.625   5.218   4.978   4.963   5.094   5.221   5.225   5.078   4.840   4.609   4.471 
+  5.129   5.854   6.728   7.092   6.760   6.129   5.787   5.977   6.397   6.514   6.048   5.210   4.484   4.204   4.311   4.496   4.544   4.535   4.722   5.235   5.906   6.393   6.450   6.106   5.594   5.139   4.820   4.609   4.495   4.527   4.731   4.999   5.123   4.967   4.612   4.319 
+  6.766   6.794   6.957   7.328   7.808   8.128   8.027   7.467   6.708   6.152   6.060   6.362   6.698   6.685   6.191   5.432   4.804   4.604   4.840   5.266   5.589   5.672   5.580   5.461   5.396   5.346   5.241   5.095   5.032   5.172   5.498   5.812   5.866   5.564   5.065   4.688 
+  5.759   6.276   6.961   7.372   7.282   6.805   6.266   5.970   6.043   6.425   6.944   7.380   7.503   7.148   6.333   5.340   4.615   4.499   4.971   5.636   6.009   5.880   5.450   5.110   5.073   5.176   5.076   4.619   4.049   3.814   4.141   4.776   5.161   4.917   4.197   3.581 
+  7.901   7.577   7.091   6.696   6.609   6.888   7.386   7.816   7.922   7.636   7.126   6.672   6.469   6.492   6.527   6.347   5.898   5.356   5.009   5.056   5.477   6.044   6.460   6.515   6.178   5.585   4.959   4.511   4.366   4.508   4.793   5.007   4.983   4.696   4.293   4.005 
+ 10.998  10.543   9.703   8.679   7.802   7.386   7.509   7.916   8.183   8.031   7.546   7.086   6.956   7.113   7.191   6.822   5.980   5.049   4.544   4.713   5.360   6.009   6.262   6.045   5.584   5.170   4.945   4.869   4.840   4.813   4.819   4.891   5.004   5.095   5.131   5.131 
+  9.421   8.608   7.566   6.977   7.078   7.525   7.757   7.506   6.995   6.679   6.796   7.159   7.348   7.105   6.544   6.016   5.774   5.782   5.816   5.728   5.585   5.566   5.733   5.925   5.899   5.565   5.097   4.793   4.828   5.128   5.450   5.594   5.534   5.382   5.256   5.198 
+  6.172   6.486   6.830   6.912   6.706   6.466   6.468   6.739   7.030   7.057   6.765   6.353   6.051   5.895   5.718   5.383   4.982   4.795   5.018   5.536   5.971   5.996   5.618   5.160   4.970   5.117   5.365   5.436   5.283   5.121   5.182   5.464   5.721   5.710   5.441   5.177 
+  5.832   6.160   6.523   6.591   6.280   5.827   5.600   5.800   6.311   6.799   6.964   6.723   6.207   5.624   5.117   4.749   4.559   4.598   4.889   5.349   5.783   5.986   5.879   5.565   5.253   5.104   5.134   5.229   5.262   5.182   5.031   4.885   4.790   4.742   4.720   4.710 
+  6.052   6.425   6.800   6.763   6.234   5.559   5.251   5.560   6.265   6.822   6.779   6.117   5.242   4.678   4.686   5.117   5.579   5.756   5.620   5.390   5.304   5.418   5.580   5.584   5.353   5.000   4.732   4.686   4.840   5.045   5.147   5.092   4.932   4.766   4.656   4.609 
+  5.502   5.895   6.439   6.801   6.765   6.367   5.866   5.576   5.666   6.051   6.459   6.621   6.438   6.042   5.679   5.539   5.637   5.832   5.953   5.923   5.794   5.666   5.595   5.543   5.433   5.238   5.028   4.932   5.041   5.321   5.623   5.763   5.634   5.275   4.852   4.572 
+  6.002   6.118   6.256   6.316   6.282   6.241   6.297   6.464   6.634   6.639   6.388   5.947   5.510   5.273   5.308   5.530   5.766   5.874   5.826   5.699   5.600   5.586   5.637   5.689   5.690   5.638   5.576   5.554   5.597   5.681   5.753   5.758   5.673   5.521   5.358   5.255 
+  4.802   4.998   5.263   5.471   5.626   5.840   6.187   6.588   6.861   6.888   6.733   6.586   6.572   6.636   6.614   6.428   6.190   6.102   6.234   6.411   6.358   5.970   5.446   5.142   5.247   5.598   5.827   5.707   5.385   5.259   5.606   6.306   6.925   7.099   6.849   6.545 
+  6.372   6.198   5.989   5.904   5.983   6.130   6.208   6.165   6.066   6.009   6.011   5.970   5.766   5.386   4.968   4.713   4.736   4.972   5.242   5.388   5.385   5.334   5.352   5.461   5.579   5.604   5.516   5.401   5.392   5.557   5.849   6.134   6.284   6.263   6.136   6.027 
+  6.322   5.938   5.402   5.023   4.989   5.285   5.737   6.152   6.407   6.459   6.305   5.955   5.467   4.965   4.616   4.532   4.692   4.945   5.114   5.116   5.000   4.894   4.890   4.985   5.110   5.202   5.261   5.326   5.427   5.547   5.643   5.690   5.701   5.710   5.732   5.753 
+  5.283   5.879   6.579   6.802   6.355   5.568   5.012   5.050   5.593   6.239   6.622   6.651   6.479   6.278   6.079   5.805   5.424   5.042   4.832   4.881   5.101   5.313   5.393   5.349   5.268   5.210   5.165   5.116   5.106   5.219   5.473   5.744   5.832   5.628   5.238   4.931 
+  6.663   6.182   5.458   4.847   4.649   4.942   5.528   6.043   6.171   5.844   5.288   4.863   4.821   5.132   5.519   5.658   5.414   4.923   4.488   4.370   4.627   5.102   5.543   5.753   5.682   5.423   5.141   4.996   5.075   5.356   5.709   5.950   5.938   5.667   5.283   5.009 
+  5.516   5.782   6.026   5.948   5.525   5.038   4.811   4.914   5.104   5.063   4.695   4.210   3.922   3.959   4.165   4.264   4.140   3.935   3.914   4.208   4.695   5.108   5.258   5.160   4.968   4.817   4.738   4.699   4.698   4.777   4.934   5.053   4.953   4.558   4.009   3.611 
+  6.343   6.138   5.941   5.969   6.235   6.524   6.585   6.349   5.961   5.619   5.390   5.181   4.893   4.574   4.408   4.528   4.846   5.085   5.008   4.639   4.268   4.215   4.564   5.094   5.474   5.530   5.369   5.245   5.325   5.552   5.719   5.656   5.356   4.954   4.612   4.425 
+  5.904   5.681   5.459   5.492   5.841   6.309   6.586   6.489   6.096   5.675   5.477   5.553   5.738   5.789   5.567   5.122   4.651   4.364   4.374   4.649   5.049   5.397   5.555   5.480   5.241   4.981   4.838   4.865   5.002   5.125   5.138   5.031   4.880   4.767   4.726   4.725 
+  2.912   3.766   4.923   5.719   5.873   5.630   5.452   5.590   5.902   6.066   5.931   5.661   5.554   5.725   5.982   6.012   5.678   5.153   4.766   4.710   4.904   5.104   5.133   5.016   4.892   4.849   4.854   4.836   4.805   4.856   5.029   5.206   5.163   4.779   4.197   3.762 
+  2.956   3.859   5.049   5.787   5.775   5.323   5.006   5.149   5.574   5.822   5.596   5.031   4.558   4.513   4.866   5.283   5.442   5.292   5.052   4.976   5.124   5.342   5.427   5.302   5.052   4.821   4.691   4.653   4.659   4.679   4.690   4.640   4.464   4.142   3.767   3.511 
+  5.037   5.367   5.741   5.825   5.512   5.002   4.634   4.616   4.881   5.187   5.327   5.294   5.235   5.283   5.425   5.518   5.438   5.210   5.004   4.999   5.239   5.593   5.853   5.874   5.651   5.299   4.958   4.718   4.588   4.518   4.441   4.299   4.073   3.789   3.519   3.353 
+  4.046   4.694   5.620   6.312   6.422   5.953   5.213   4.599   4.357   4.469   4.727   4.902   4.885   4.727   4.567   4.528   4.652   4.895   5.170   5.390   5.494   5.464   5.323   5.137   4.990   4.943   4.997   5.079   5.078   4.911   4.573   4.146   3.746   3.462   3.311   3.256 
+  6.831   5.809   4.429   3.524   3.509   4.163   4.893   5.217   5.054   4.639   4.239   3.961   3.783   3.703   3.781   4.046   4.385   4.592   4.559   4.408   4.404   4.692   5.117   5.322   5.059   4.429   3.820   3.578   3.718   3.931   3.888   3.537   3.125   2.940   3.033   3.194 
+  6.513   6.028   5.255   4.480   3.948   3.783   3.982   4.450   5.025   5.495   5.650   5.379   4.760   4.056   3.585   3.537   3.865   4.342   4.731   4.927   4.981   4.986   4.964   4.851   4.586   4.211   3.866   3.683   3.680   3.739   3.706   3.511   3.209   2.917   2.719   2.631 
+  4.890   5.368   5.793   5.584   4.648   3.512   2.935   3.312   4.373   5.409   5.802   5.441   4.717   4.150   4.009   4.208   4.493   4.707   4.885   5.140   5.485   5.781   5.838   5.573   5.066   4.501   4.044   3.763   3.642   3.624   3.643   3.632   3.540   3.358   3.143   2.996 
+  5.386   5.420   5.326   4.969   4.434   4.011   3.981   4.373   4.925   5.283   5.278   5.028   4.805   4.777   4.880   4.908   4.731   4.440   4.275   4.428   4.867   5.353   5.612   5.505   5.093   4.557   4.073   3.737   3.566   3.532   3.579   3.634   3.626   3.525   3.373   3.259 
+  4.004   4.402   4.934   5.272   5.252   4.954   4.605   4.398   4.395   4.561   4.822   5.094   5.253   5.146   4.696   4.024   3.449   3.309   3.716   4.443   5.065   5.264   5.038   4.660   4.418   4.388   4.423   4.344   4.128   3.911   3.819   3.807   3.683   3.315   2.795   2.411 
+  4.734   5.394   6.254   6.711   6.424   5.533   4.540   3.970   4.058   4.643   5.312   5.669   5.536   5.006   4.355   3.878   3.754   3.986   4.418   4.839   5.093   5.146   5.069   4.945   4.785   4.532   4.142   3.674   3.295   3.163   3.283   3.475   3.489   3.207   2.751   2.406 
+  5.036   5.496   5.983   6.025   5.523   4.817   4.356   4.304   4.457   4.508   4.370   4.237   4.324   4.595   4.765   4.598   4.180   3.885   4.032   4.570   5.091   5.192   4.824   4.318   4.056   4.123   4.269   4.191   3.858   3.524   3.451   3.614   3.710   3.467   2.944   2.509 
+  3.832   4.354   5.026   5.378   5.163   4.495   3.707   3.111   2.842   2.877   3.144   3.567   4.029   4.346   4.337   3.985   3.515   3.296   3.579   4.305   5.126   5.647   5.688   5.360   4.916   4.538   4.242   3.961   3.684   3.500   3.500   3.663   3.846   3.906   3.829   3.729 
+  4.860   4.748   4.567   4.383   4.271   4.280   4.410   4.601   4.747   4.744   4.548   4.213   3.868   3.652   3.632   3.767   3.949   4.092   4.198   4.347   4.612   4.972   5.295   5.420   5.271   4.926   4.571   4.380   4.407   4.567   4.708   4.717   4.578   4.357   4.150   4.029 
+  5.859   5.854   5.713   5.362   4.946   4.769   5.037   5.628   6.125   6.126   5.555   4.729   4.115   3.984   4.258   4.635   4.851   4.851   4.747   4.672   4.671   4.726   4.819   4.940   5.037   4.995   4.728   4.311   3.998   4.049   4.482   4.984   5.113   4.653   3.838   3.208 
+  6.884   6.636   6.233   5.844   5.650   5.727   5.974   6.148   6.038   5.646   5.201   4.973   5.035   5.179   5.093   4.652   4.063   3.722   3.886   4.456   5.053   5.326   5.220   4.972   4.862   4.957   5.086   5.040   4.786   4.483   4.304   4.243   4.124   3.798   3.330   2.979 
+  8.097   7.947   7.715   7.492   7.335   7.231   7.108   6.891   6.568   6.200   5.880   5.648   5.459   5.213   4.853   4.437   4.124   4.072   4.337   4.835   5.406   5.919   6.318   6.595   6.728   6.672   6.417   6.054   5.763   5.689   5.817   5.949   5.838   5.395   4.790   4.355 
+  7.685   7.338   6.878   6.602   6.654   6.915   7.088   6.910   6.336   5.571   4.929   4.621   4.639   4.797   4.886   4.826   4.701   4.668   4.839   5.218   5.729   6.285   6.817   7.255   7.502   7.452   7.075   6.479   5.883   5.492   5.359   5.349   5.252   4.954   4.543   4.243 
+  7.939   7.467   6.891   6.637   6.829   7.181   7.234   6.731   5.825   4.964   4.547   4.643   4.986   5.210   5.137   4.871   4.672   4.741   5.099   5.627   6.203   6.781   7.360   7.892   8.245   8.274   7.935   7.350   6.747   6.312   6.071   5.894   5.614   5.172   4.680   4.352 
+  6.586   6.921   7.370   7.690   7.809   7.825   7.816   7.694   7.272   6.503   5.629   5.053   5.020   5.385   5.714   5.654   5.246   4.893   5.012   5.683   6.589   7.297   7.593   7.577   7.476   7.392   7.245   6.941   6.549   6.279   6.258   6.355   6.255   5.761   5.021   4.466 
+ 10.225   9.840   9.118   8.232   7.513   7.283   7.605   8.158   8.417   8.024   7.063   5.997   5.306   5.136   5.260   5.341   5.255   5.180   5.386   5.960   6.722   7.385   7.797   8.003   8.111   8.123   7.918   7.425   6.770   6.239   6.053   6.175   6.339   6.298   6.045   5.804 
+ 11.661  11.266  10.771  10.486  10.440  10.354   9.910   9.075   8.178   7.656   7.676   7.980   8.071   7.609   6.671   5.679   5.077   5.020   5.330   5.699   5.954   6.145   6.429   6.870   7.344   7.625   7.551   7.141   6.573   6.066   5.763   5.684   5.760   5.898   6.024   6.095 
+ 10.902  10.688  10.419  10.257  10.213  10.120   9.796   9.219   8.582   8.149   8.035   8.107   8.086   7.777   7.231   6.699   6.424   6.448   6.606   6.696   6.675   6.705   6.990   7.550   8.148   8.432   8.212   7.627   7.060   6.854   7.040   7.312   7.267   6.737   5.944   5.360 
+ 10.593  10.469  10.410  10.550  10.760  10.700  10.137   9.206   8.359   8.000   8.142   8.414   8.404   8.043   7.653   7.621   8.006   8.448   8.485   7.985   7.300   6.983   7.314   8.051   8.611   8.529   7.813   6.912   6.361   6.395   6.829   7.249   7.318   6.987   6.476   6.109 
+ 11.832  11.905  12.052  12.186  12.093  11.555  10.556   9.383   8.480   8.141   8.294   8.586   8.688   8.554   8.404   8.447   8.631   8.664   8.310   7.666   7.149   7.164   7.741   8.459   8.750   8.343   7.466   6.677   6.443   6.822   7.462   7.881   7.789   7.239   6.545   6.078 
+  7.690   7.944   8.391   8.881   9.193   9.135   8.668   7.962   7.295   6.861   6.641   6.459   6.172   5.838   5.698   5.970   6.634   7.394   7.865   7.847   7.456   7.027   6.856   7.000   7.278   7.446   7.392   7.201   7.057   7.085   7.255   7.423   7.450   7.299   7.061   6.887 
+  8.226   8.077   7.918   7.901   8.062   8.280   8.375   8.245   7.937   7.595   7.350   7.244   7.241   7.301   7.415   7.588   7.794   7.963   8.048   8.088   8.207   8.518   8.996   9.441   9.583   9.275   8.628   7.983   7.708   7.968   8.614   9.278   9.609   9.491   9.103   8.781 
+  8.217   7.987   7.736   7.690   7.890   8.150   8.218   7.975   7.509   7.014   6.623   6.346   6.145   6.038   6.112   6.413   6.843   7.185   7.271   7.133   7.002   7.122   7.533   8.021   8.276   8.140   7.730   7.353   7.275   7.544   7.984   8.339   8.447   8.314   8.079   7.908 
+  7.925   7.893   7.995   8.299   8.549   8.294   7.300   5.867   4.698   4.381   4.908   5.690   6.049   5.788   5.322   5.267   5.873   6.798   7.414   7.356   6.808   6.310   6.284   6.706   7.204   7.436   7.380   7.308   7.493   7.952   8.432   8.634   8.432   7.943   7.417   7.089 
+  9.790   9.160   8.351   7.875   7.882   8.069   8.003   7.517   6.847   6.378   6.297   6.456   6.563   6.484   6.341   6.352   6.584   6.889   7.079   7.133   7.214   7.474   7.850   8.093   8.010   7.693   7.487   7.696   8.313   9.004   9.386   9.333   9.036   8.790   8.731   8.772 
+  8.772   8.929   8.999   8.735   8.144   7.511   7.172   7.227   7.449   7.480   7.128   6.520   5.980   5.767   5.887   6.138   6.306   6.331   6.309   6.359   6.499   6.641   6.693   6.655   6.622   6.703   6.948   7.329   7.779   8.221   8.570   8.732   8.638   8.311   7.897   7.611 
+  6.731   7.325   8.085   8.490   8.324   7.780   7.234   6.917   6.778   6.623   6.354   6.061   5.889   5.865   5.864   5.768   5.623   5.629   5.935   6.461   6.924   7.067   6.879   6.600   6.506   6.684   7.011   7.321   7.586   7.898   8.288   8.589   8.526   7.976   7.164   6.565 
+  6.903   7.237   7.653   7.811   7.505   6.791   5.951   5.321   5.103   5.276   5.626   5.892   5.897   5.638   5.263   4.979   4.933   5.135   5.471   5.790   6.007   6.145   6.287   6.477   6.658   6.722   6.623   6.462   6.440   6.703   7.190   7.630   7.720   7.358   6.751   6.294 
+  5.739   5.847   6.020   6.182   6.249   6.156   5.894   5.520   5.134   4.835   4.673   4.628   4.637   4.655   4.691   4.802   5.034   5.360   5.666   5.816   5.746   5.516   5.284   5.206   5.339   5.620   5.928   6.177   6.361   6.523   6.679   6.782   6.757   6.581   6.332   6.151 
+  9.270   8.871   8.161   7.274   6.341   5.477   4.797   4.419   4.427   4.798   5.370   5.890   6.148   6.100   5.887   5.730   5.763   5.929   6.030   5.879   5.463   4.973   4.680   4.761   5.180   5.728   6.170   6.391   6.438   6.444   6.501   6.597   6.648   6.594   6.462   6.352 
+  7.125   7.209   7.149   6.716   5.936   5.112   4.607   4.568   4.832   5.088   5.134   5.004   4.888   4.926   5.101   5.281   5.360   5.343   5.302   5.285   5.276   5.251   5.231   5.282   5.425   5.597   5.692   5.685   5.687   5.851   6.209   6.586   6.708   6.436   5.918   5.512 
+  4.577   5.488   6.440   6.472   5.397   3.973   3.248   3.669   4.745   5.518   5.399   4.621   3.952   3.983   4.656   5.395   5.667   5.417   5.031   4.919   5.163   5.518   5.711   5.693   5.626   5.665   5.797   5.891   5.878   5.837   5.892   6.051   6.169   6.099   5.862   5.649 
+  5.979   6.840   7.951   8.589   8.470   7.892   7.377   7.183   7.142   6.924   6.430   5.926   5.777   6.084   6.573   6.842   6.719   6.374   6.106   6.034   6.004   5.798   5.406   5.074   5.069   5.412   5.839   6.049   5.979   5.834   5.852   6.047   6.189   6.058   5.686   5.362 
+  9.770   9.687   9.629   9.699   9.881   9.995   9.801   9.167   8.183   7.138   6.354   6.002   6.019   6.186   6.282   6.220   6.041   5.828   5.607   5.340   5.007   4.676   4.487   4.543   4.809   5.111   5.261   5.203   5.059   5.019   5.179   5.454   5.649   5.630   5.439   5.262 
+  7.877   7.160   6.269   5.827   6.012   6.425   6.460   5.823   4.776   3.897   3.616   3.907   4.394   4.696   4.711   4.597   4.535   4.541   4.486   4.278   3.995   3.829   3.914   4.202   4.525   4.744   4.861   4.979   5.171   5.416   5.633   5.783   5.909   6.074   6.270   6.412 
+  4.383   4.155   3.988   4.204   4.866   5.670   6.134   5.954   5.237   4.450   4.088   4.328   4.912   5.356   5.320   4.845   4.291   4.033   4.177   4.510   4.714   4.644   4.436   4.356   4.559   4.943   5.252   5.302   5.138   4.979   5.010   5.226   5.447   5.501   5.383   5.247 
+  5.441   5.049   4.599   4.486   4.847   5.451   5.883   5.862   5.437   4.908   4.582   4.543   4.642   4.664   4.524   4.319   4.215   4.286   4.455   4.569   4.543   4.433   4.389   4.531   4.853   5.223   5.475   5.512   5.355   5.115   4.922   4.864   4.954   5.139   5.334   5.457 
+  5.255   4.554   3.689   3.315   3.702   4.533   5.161   5.096   4.364   3.455   2.942   3.081   3.674   4.277   4.543   4.437   4.189   4.068   4.176   4.415   4.603   4.630   4.516   4.362   4.251   4.204   4.192   4.193   4.220   4.298   4.431   4.579   4.683   4.711   4.681   4.644 
+  5.414   5.063   4.606   4.345   4.403   4.654   4.846   4.807   4.558   4.262   4.068   4.004   3.993   3.958   3.898   3.872   3.931   4.065   4.224   4.375   4.526   4.699   4.871   4.973   4.942   4.782   4.583   4.450   4.435   4.510   4.614   4.715   4.827   4.973   5.133   5.242 
+  4.715   4.726   4.786   4.899   4.982   4.896   4.572   4.088   3.646   3.430   3.481   3.690   3.902   4.042   4.138   4.249   4.382   4.487   4.527   4.545   4.629   4.818   5.039   5.149   5.067   4.855   4.676   4.654   4.766   4.872   4.858   4.751   4.693   4.801   5.038   5.235 
+  5.854   5.687   5.560   5.651   5.879   5.925   5.516   4.713   3.923   3.595   3.854   4.391   4.712   4.541   4.024   3.581   3.543   3.895   4.324   4.514   4.406   4.205   4.161   4.323   4.497   4.433   4.058   3.553   3.222   3.253   3.576   3.920   4.012   3.772   3.354   3.039 
+  4.241   4.573   4.963   5.117   4.971   4.708   4.525   4.435   4.292   4.022   3.777   3.818   4.226   4.734   4.904   4.524   3.841   3.388   3.523   4.113   4.642   4.687   4.290   3.902   3.944   4.406   4.864   4.887   4.437   3.890   3.658   3.800   4.002   3.918   3.531   3.169 
+  5.760   4.901   3.762   3.045   3.054   3.538   3.986   4.104   4.020   4.088   4.489   5.023   5.275   4.987   4.299   3.638   3.376   3.552   3.905   4.130   4.141   4.094   4.197   4.504   4.871   5.093   5.076   4.889   4.673   4.511   4.374   4.179   3.879   3.513   3.178   2.980 
+  4.397   4.034   3.677   3.739   4.307   5.049   5.471   5.304   4.706   4.113   3.894   4.095   4.464   4.702   4.699   4.580   4.545   4.681   4.911   5.092   5.149   5.123   5.103   5.126   5.148   5.097   4.949   4.749   4.570   4.444   4.351   4.246   4.104   3.941   3.798   3.715 
+  6.130   5.889   5.566   5.352   5.322   5.373   5.315   5.028   4.567   4.133   3.935   4.041   4.344   4.646   4.795   4.768   4.638   4.492   4.360   4.230   4.111   4.075   4.207   4.517   4.887   5.116   5.062   4.751   4.371   4.134   4.121   4.223   4.245   4.069   3.762   3.523 
+  4.518   4.262   3.991   3.958   4.192   4.465   4.501   4.236   3.898   3.806   4.080   4.508   4.696   4.394   3.713   3.058   2.825   3.111   3.658   4.068   4.104   3.838   3.551   3.490   3.686   3.955   4.068   3.929   3.629   3.355   3.240   3.283   3.382   3.433   3.413   3.374 
+  4.848   4.483   4.059   3.922   4.164   4.544   4.707   4.500   4.112   3.913   4.128   4.621   4.980   4.839   4.175   3.350   2.853   2.953   3.530   4.181   4.519   4.414   4.029   3.648   3.461   3.467   3.543   3.577   3.561   3.562   3.635   3.753   3.836   3.821   3.728   3.642 
+  4.869   4.199   3.325   2.820   2.939   3.472   3.972   4.134   4.007   3.873   3.934   4.113   4.139   3.835   3.327   2.989   3.144   3.783   4.544   4.969   4.829   4.273   3.696   3.442   3.587   3.947   4.264   4.405   4.418   4.441   4.545   4.675   4.707   4.574   4.341   4.160 
+  4.782   5.045   5.328   5.328   4.923   4.279   3.751   3.632   3.946   4.432   4.745   4.712   4.449   4.234   4.258   4.449   4.544   4.339   3.910   3.592   3.712   4.301   5.019   5.387   5.143   4.442   3.737   3.442   3.650   4.119   4.502   4.606   4.486   4.317   4.223   4.201 
+  4.474   4.660   4.963   5.243   5.328   5.106   4.626   4.109   3.846   4.005   4.521   5.120   5.491   5.462   5.066   4.470   3.858   3.364   3.080   3.075   3.377   3.909   4.475   4.836   4.856   4.600   4.292   4.157   4.270   4.523   4.733   4.780   4.678   4.524   4.406   4.350 
+  5.692   5.716   5.680   5.495   5.168   4.816   4.598   4.596   4.747   4.883   4.844   4.586   4.212   3.899   3.784   3.887   4.111   4.314   4.396   4.344   4.221   4.120   4.100   4.170   4.301   4.453   4.613   4.795   5.022   5.288   5.545   5.721   5.758   5.662   5.503   5.385 
+  5.016   5.147   5.320   5.406   5.302   4.995   4.568   4.157   3.874   3.747   3.712   3.671   3.574   3.466   3.464   3.668   4.075   4.551   4.896   4.961   4.739   4.376   4.076   3.990   4.139   4.430   4.738   4.989   5.186   5.374   5.570   5.740   5.825   5.799   5.702   5.619 
+  5.095   4.783   4.434   4.309   4.386   4.377   4.030   3.420   2.928   2.907   3.363   3.940   4.249   4.205   4.075   4.182   4.572   4.960   5.010   4.660   4.188   3.952   4.067   4.328   4.450   4.369   4.306   4.545   5.136   5.821   6.246   6.254   5.984   5.702   5.567   5.547 
+  4.870   5.057   5.395   5.715   5.711   5.142   4.104   3.090   2.679   3.065   3.863   4.406   4.310   3.805   3.506   3.827   4.573   5.115   4.986   4.339   3.830   4.013   4.818   5.606   5.749   5.206   4.560   4.484   5.149   6.101   6.681   6.587   6.049   5.533   5.301   5.277 
+  6.403   5.463   4.293   3.731   4.079   4.897   5.417   5.184   4.387   3.639   3.444   3.818   4.370   4.680   4.629   4.411   4.276   4.307   4.412   4.493   4.578   4.770   5.089   5.391   5.479   5.301   5.036   4.977   5.291   5.871   6.402   6.582   6.314   5.740   5.136   4.760 
+  6.773   6.252   5.449   4.716   4.338   4.389   4.711   5.025   5.108   4.919   4.600   4.361   4.331   4.485   4.687   4.805   4.800   4.733   4.696   4.753   4.911   5.149   5.443   5.759   6.036   6.195   6.193   6.081   5.995   6.070   6.331   6.658   6.868   6.855   6.679   6.515 
+  4.560   4.607   4.741   4.971   5.217   5.322   5.164   4.764   4.309   4.049   4.138   4.532   5.023   5.372   5.453   5.313   5.114   5.018   5.097   5.312   5.563   5.758   5.856   5.879   5.887   5.938   6.058   6.231   6.409   6.546   6.634   6.703   6.797   6.932   7.080   7.179 
+  5.099   5.636   6.220   6.305   5.771   5.013   4.578   4.689   5.077   5.270   5.031   4.562   4.286   4.431   4.823   5.060   4.890   4.452   4.147   4.282   4.812   5.391   5.680   5.612   5.403   5.334   5.513   5.818   6.033   6.031   5.841   5.584   5.363   5.215   5.129   5.089 
+  3.448   4.312   5.297   5.558   4.867   3.781   3.139   3.351   4.100   4.686   4.655   4.148   3.696   3.705   4.115   4.524   4.596   4.359   4.128   4.180   4.511   4.893   5.118   5.182   5.227   5.353   5.502   5.548   5.455   5.335   5.324   5.423   5.486   5.368   5.096   4.865 
+  4.587   4.402   4.216   4.276   4.713   5.423   6.096   6.384   6.130   5.464   4.717   4.191   3.967   3.909   3.841   3.737   3.747   4.028   4.548   5.061   5.293   5.191   4.975   4.954   5.245   5.656   5.862   5.710   5.366   5.164   5.287   5.569   5.631   5.233   4.531   3.982 
+  5.775   5.745   5.776   5.912   6.050   6.007   5.728   5.382   5.232   5.358   5.504   5.258   4.424   3.272   2.394   2.269   2.885   3.757   4.318   4.355   4.095   3.930   4.034   4.235   4.235   3.936   3.549   3.404   3.641   4.091   4.426   4.442   4.185   3.862   3.638   3.545 
+  5.867   5.727   5.525   5.321   5.082   4.732   4.291   3.931   3.868   4.144   4.532   4.674   4.370   3.762   3.238   3.122   3.422   3.855   4.108   4.100   4.002   4.029   4.219   4.420   4.488   4.462   4.547   4.891   5.398   5.759   5.713   5.270   4.707   4.331   4.233   4.272 
+  7.561   7.042   6.366   5.978   6.063   6.425   6.663   6.493   5.958   5.360   5.000   4.946   5.010   4.938   4.632   4.216   3.911   3.840   3.934   4.006   3.934   3.769   3.700   3.897   4.372   4.966   5.456   5.701   5.700   5.547   5.328   5.060   4.717   4.302   3.899   3.645 
+  8.977   8.202   7.117   6.320   6.135   6.438   6.819   6.929   6.717   6.387   6.160   6.063   5.922   5.554   4.956   4.331   3.936   3.872   4.019   4.148   4.111   3.951   3.854   3.984   4.356   4.821   5.181   5.314   5.237   5.057   4.889   4.780   4.718   4.667   4.615   4.578 
+  9.248   8.518   7.536   6.878   6.782   7.024   7.189   7.046   6.715   6.470   6.424   6.391   6.079   5.394   4.584   4.057   4.043   4.413   4.798   4.914   4.781   4.666   4.804   5.175   5.523   5.581   5.315   4.950   4.786   4.954   5.319   5.587   5.520   5.104   4.552   4.169 
+  8.487   8.254   7.821   7.305   6.907   6.813   7.041   7.392   7.580   7.454   7.112   6.793   6.637   6.544   6.270   5.690   4.968   4.458   4.419   4.785   5.228   5.434   5.369   5.271   5.403   5.795   6.224   6.422   6.321   6.088   5.929   5.890   5.828   5.594   5.223   4.934 
+  9.033   8.909   8.716   8.531   8.396   8.292   8.141   7.871   7.483   7.065   6.750   6.611   6.606   6.595   6.444   6.130   5.754   5.469   5.369   5.446   5.637   5.903   6.255   6.698   7.151   7.450   7.443   7.123   6.664   6.311   6.206   6.290   6.373   6.300   6.090   5.908 
+  8.821   8.652   8.443   8.341   8.387   8.475   8.440   8.189   7.773   7.353   7.082   7.013   7.082   7.172   7.193   7.117   6.968   6.792   6.641   6.569   6.625   6.826   7.133   7.455   7.683   7.748   7.648   7.436   7.185   6.952   6.774   6.668   6.642   6.685   6.760   6.815 
+  8.702   8.432   8.035   7.698   7.526   7.497   7.513   7.505   7.472   7.457   7.460   7.414   7.228   6.886   6.489   6.202   6.130   6.234   6.352   6.331   6.152   5.956   5.938   6.190   6.626   7.039   7.255   7.257   7.174   7.164   7.270   7.388   7.355   7.103   6.735   6.466 
+  9.071   8.349   7.411   6.857   6.913   7.319   7.620   7.595   7.401   7.351   7.546   7.745   7.598   7.015   6.309   5.949   6.146   6.635   6.879   6.526   5.723   5.027   4.967   5.637   6.625   7.344   7.458   7.093   6.674   6.564   6.793   7.074   7.055   6.611   5.952   5.471 
+  8.917   8.376   7.685   7.308   7.413   7.768   7.973   7.815   7.435   7.172   7.230   7.487   7.600   7.322   6.745   6.232   6.115   6.405   6.778   6.851   6.514   6.031   5.820   6.101   6.708   7.216   7.287   6.936   6.501   6.347   6.545   6.804   6.713   6.098   5.206   4.555 
+  8.975   8.984   8.935   8.756   8.439   8.050   7.680   7.393   7.209   7.128   7.150   7.249   7.346   7.325   7.105   6.713   6.287   5.985   5.881   5.936   6.077   6.288   6.614   7.058   7.483   7.651   7.401   6.835   6.303   6.170   6.510   7.020   7.232   6.896   6.199   5.642 
+  8.231   7.865   7.399   7.176   7.356   7.780   8.065   7.854   7.072   5.989   5.048   4.582   4.632   4.970   5.317   5.544   5.709   5.930   6.218   6.451   6.504   6.400   6.324   6.466   6.830   7.201   7.320   7.115   6.780   6.613   6.737   6.970   6.974   6.557   5.883   5.369 
+  7.668   6.219   4.672   4.538   6.168   8.455   9.788   9.369   7.760   6.248   5.705   5.978   6.276   6.063   5.566   5.453   6.075   7.069   7.695   7.550   6.958   6.650   7.072   7.987   8.722   8.794   8.321   7.856   7.861   8.331   8.877   9.116   8.974   8.653   8.382   8.253 
+  9.639   8.821   7.763   7.172   7.358   8.047   8.655   8.753   8.337   7.727   7.252   7.020   6.937   6.887   6.859   6.901   7.011   7.107   7.114   7.081   7.156   7.438   7.846   8.167   8.250   8.163   8.153   8.422   8.923   9.381   9.520   9.291   8.897   8.598   8.501   8.517 
+  8.316   8.301   8.375   8.621   8.970   9.198   9.076   8.555   7.822   7.182   6.856   6.847   6.974   7.034   6.946   6.788   6.704   6.790   7.031   7.344   7.641   7.883   8.072   8.222   8.344   8.447   8.547   8.659   8.775   8.861   8.873   8.792   8.638   8.460   8.312   8.230 
+  8.346   8.053   7.760   7.795   8.216   8.721   8.850   8.338   7.349   6.389   5.971   6.265   6.998   7.667   7.896   7.665   7.268   7.049   7.156   7.481   7.818   8.059   8.272   8.595   9.060   9.522   9.761   9.659   9.305   8.932   8.736   8.751   8.849   8.888   8.830   8.755 
+  8.669   7.807   6.789   6.442   7.037   8.085   8.760   8.562   7.681   6.779   6.432   6.716   7.246   7.571   7.536   7.325   7.216   7.310   7.496   7.626   7.697   7.858   8.243   8.810   9.352   9.656   9.660   9.472   9.256   9.099   8.984   8.849   8.669   8.477   8.324   8.244 
+  6.149   6.162   6.364   6.901   7.678   8.357   8.597   8.303   7.698   7.141   6.874   6.904   7.079   7.245   7.325   7.286   7.086   6.718   6.299   6.091   6.355   7.125   8.123   8.905   9.179   9.010   8.734   8.669   8.853   9.053   9.018   8.720   8.375   8.221   8.299   8.433 
+  6.934   7.049   7.306   7.703   8.145   8.453   8.452   8.096   7.523   6.990   6.730   6.817   7.134   7.469   7.653   7.645   7.520   7.386   7.306   7.308   7.426   7.725   8.250   8.942   9.600   9.967   9.895   9.464   8.950   8.640   8.635   8.789   8.836   8.623   8.235   7.931 
+  6.033   6.267   6.791   7.588   8.464   9.085   9.179   8.741   8.056   7.501   7.284   7.315   7.326   7.119   6.746   6.462   6.508   6.904   7.438   7.849   8.043   8.163   8.446   8.997   9.667  10.144  10.172   9.746   9.114   8.605   8.412   8.496   8.664   8.739   8.690   8.613 
+  5.301   5.256   5.396   5.949   6.885   7.851   8.387   8.245   7.577   6.825   6.410   6.460   6.763   6.971   6.881   6.561   6.269   6.233   6.504   6.960   7.455   7.936   8.445   9.014   9.557   9.887   9.838   9.404   8.769   8.202   7.888   7.835   7.910   7.967   7.951   7.911 
+  6.528   6.560   6.620   6.707   6.826   6.964   7.067   7.051   6.865   6.556   6.283   6.234   6.489   6.931   7.289   7.303   6.909   6.314   5.880   5.912   6.474   7.363   8.246   8.849   9.082   9.021   8.798   8.505   8.171   7.821   7.537   7.448   7.650   8.109   8.642   8.998 
+  6.300   6.143   5.998   6.063   6.388   6.814   7.074   6.989   6.613   6.205   6.046   6.230   6.595   6.848   6.791   6.471   6.153   6.118   6.473   7.090   7.732   8.228   8.565   8.823   9.038   9.132   8.976   8.531   7.932   7.429   7.230   7.371   7.709   8.049   8.271   8.366 
+  4.483   4.696   5.160   5.847   6.569   7.032   7.030   6.617   6.099   5.839   5.997   6.432   6.826   6.925   6.718   6.410   6.252   6.372   6.734   7.229   7.783   8.386   9.034   9.655  10.101  10.222   9.963   9.405   8.728   8.132   7.771   7.715   7.937   8.331   8.736   8.991 
+  2.875   3.069   3.566   4.431   5.513   6.425   6.742   6.294   5.338   4.455   4.201   4.751   5.789   6.744   7.194   7.140   6.944   6.994   7.389   7.891   8.180   8.164   8.063   8.195   8.652   9.179   9.372   9.027   8.336   7.751   7.622   7.940   8.380   8.609   8.556   8.420 
+  4.157   4.405   4.903   5.606   6.369   6.939   7.050   6.591   5.732   4.900   4.555   4.903   5.746   6.606   7.062   7.032   6.797   6.731   6.983   7.380   7.629   7.616   7.529   7.668   8.128   8.667   8.890   8.607   8.020   7.567   7.541   7.835   8.047   7.862   7.350   6.910 
+  4.483   4.744   5.261   5.943   6.546   6.741   6.297   5.294   4.158   3.471   3.636   4.615   5.943   7.003   7.397   7.153   6.630   6.237   6.165   6.344   6.599   6.844   7.132   7.533   7.980   8.261   8.183   7.765   7.275   7.033   7.154   7.439   7.537   7.242   6.686   6.247 
+  5.669   5.475   5.323   5.475   5.983   6.635   7.125   7.281   7.161   6.945   6.748   6.537   6.216   5.786   5.403   5.266   5.435   5.764   6.002   6.007   5.861   5.804   6.027   6.512   7.037   7.343   7.308   7.014   6.659   6.405   6.288   6.235   6.150   5.996   5.817   5.695 
+  5.732   5.682   5.699   5.896   6.254   6.616   6.807   6.770   6.595   6.417   6.292   6.156   5.912   5.533   5.096   4.707   4.408   4.171   3.965   3.848   3.942   4.327   4.937   5.562   5.982   6.111   6.036   5.926   5.890   5.911   5.894   5.775   5.574   5.370   5.226   5.160 
+  5.882   6.401   7.222   8.022   8.514   8.556   8.165   7.480   6.698   6.016   5.577   5.424   5.484   5.606   5.655   5.583   5.441   5.303   5.182   5.018   4.752   4.419   4.153   4.095   4.265   4.529   4.701   4.692   4.583   4.528   4.597   4.682   4.583   4.205   3.678   3.294 
+  7.632   7.720   8.046   8.693   9.483  10.017   9.967   9.343   8.503   7.874   7.646   7.694   7.770   7.764   7.768   7.892   8.061   8.000   7.480   6.573   5.680   5.264   5.510   6.193   6.864   7.169   7.054   6.698   6.295   5.903   5.458   4.919   4.346   3.866   3.560   3.426 
+  7.840   7.907   8.262   9.048  10.051  10.762  10.756  10.050   9.094   8.406   8.187   8.259   8.355   8.414   8.594   8.984   9.353   9.250   8.405   7.072   5.937   5.637   6.277   7.364   8.207   8.425   8.125   7.661   7.242   6.779   6.068   5.088   4.082   3.359   3.029   2.954 
+  8.232   8.188   8.391   9.068  10.049  10.801  10.846  10.159   9.189   8.476   8.242   8.318   8.438   8.553   8.817   9.289   9.676   9.475   8.433   6.890   5.657   5.435   6.288   7.595   8.544   8.724   8.321   7.810   7.478   7.217   6.744   5.956   5.061   4.384   4.066   3.993 
+  8.388   8.328   8.494   9.115  10.032  10.732  10.739  10.019   9.005   8.248   7.997   8.105   8.292   8.452   8.693   9.071   9.354   9.113   8.112   6.647   5.454   5.211   6.029   7.370   8.448   8.777   8.415   7.753   7.109   6.515   5.834   5.021   4.235   3.701   3.486   3.459 
+  8.389   8.377   8.598   9.236  10.118  10.744  10.656   9.820   8.671   7.787   7.478   7.644   7.980   8.281   8.541   8.790   8.883   8.532   7.588   6.302   5.279   5.089   5.842   7.088   8.120   8.446   8.041   7.234   6.382   5.641   4.980   4.354   3.818   3.472   3.336   3.320 
+  8.464   8.574   8.880   9.404   9.965  10.229   9.935   9.117   8.110   7.336   7.039   7.181   7.551   7.946   8.260   8.426   8.333   7.854   6.996   6.012   5.330   5.291   5.904   6.809   7.503   7.654   7.268   6.608   5.959   5.451   5.045   4.655   4.252   3.884   3.617   3.482 
+  8.285   8.499   8.901   9.374   9.680   9.565   8.944   8.009   7.142   6.679   6.698   7.016   7.375   7.641   7.839   8.009   8.059   7.782   7.060   6.063   5.233   5.023   5.565   6.544   7.384   7.617   7.159   6.309   5.503   5.010   4.811   4.683   4.408   3.939   3.418   3.076 
+  8.142   8.477   8.938   9.196   8.983   8.271   7.334   6.602   6.370   6.576   6.847   6.811   6.427   6.031   6.025   6.473   6.975   6.970   6.234   5.136   4.396   4.531   5.439   6.476   6.954   6.631   5.814   5.015   4.529   4.279   4.026   3.671   3.349   3.252   3.392   3.566 
+  8.402   8.107   7.754   7.578   7.566   7.471   7.060   6.374   5.728   5.445   5.574   5.858   5.986   5.878   5.734   5.796   6.066   6.254   6.035   5.372   4.608   4.226   4.469   5.154   5.812   6.038   5.746   5.158   4.583   4.193   3.972   3.822   3.680   3.552   3.467   3.431 
+  7.672   7.155   6.688   6.854   7.669   8.513   8.640   7.814   6.498   5.450   5.113   5.333   5.619   5.640   5.475   5.427   5.626   5.846   5.715   5.094   4.240   3.611   3.481   3.755   4.106   4.289   4.311   4.320   4.390   4.420   4.274   3.966   3.692   3.645   3.822   4.015 
+  7.575   7.119   6.680   6.748   7.337   7.930   7.906   7.065   5.782   4.672   4.103   3.993   4.026   4.027   4.110   4.466   5.054   5.527   5.502   4.918   4.125   3.620   3.652   4.057   4.448   4.556   4.407   4.200   4.064   3.949   3.736   3.429   3.194   3.192   3.399   3.606 
+  7.251   6.654   6.076   6.170   6.992   7.891   8.014   7.018   5.356   3.930   3.404   3.763   4.442   4.846   4.791   4.530   4.413   4.541   4.725   4.718   4.470   4.157   3.992   4.022   4.109   4.087   3.923   3.735   3.661   3.725   3.826   3.831   3.690   3.454   3.225   3.091 
+  6.899   6.344   5.707   5.515   5.880   6.405   6.525   5.994   5.081   4.336   4.150   4.490   5.008   5.360   5.449   5.388   5.294   5.149   4.854   4.397   3.934   3.684   3.735   3.970   4.172   4.213   4.136   4.070   4.070   4.057   3.904   3.576   3.177   2.860   2.697   2.651 
+  7.180   6.566   5.897   5.794   6.380   7.165   7.450   6.905   5.815   4.819   4.390   4.523   4.846   5.004   4.928   4.789   4.740   4.724   4.549   4.114   3.556   3.159   3.124   3.420   3.842   4.189   4.397   4.501   4.514   4.382   4.047   3.559   3.082   2.778   2.683   2.692 
+  7.848   7.344   6.690   6.293   6.294   6.477   6.499   6.191   5.691   5.292   5.185   5.327   5.530   5.644   5.657   5.617   5.513   5.250   4.760   4.137   3.618   3.424   3.582   3.908   4.162   4.233   4.184   4.134   4.106   4.006   3.744   3.361   3.030   2.903   2.975   3.088 
+  8.820   7.832   6.586   5.957   6.284   7.158   7.819   7.782   7.170   6.513   6.263   6.461   6.798   6.940   6.774   6.395   5.928   5.413   4.864   4.386   4.159   4.275   4.592   4.794   4.647   4.216   3.829   3.791   4.117   4.515   4.652   4.435   4.060   3.805   3.769   3.831 
+  9.561   8.603   7.291   6.396   6.318   6.886   7.578   7.960   7.940   7.713   7.504   7.392   7.327   7.268   7.231   7.218   7.126   6.790   6.153   5.395   4.850   4.750   5.012   5.279   5.201   4.721   4.112   3.741   3.772   4.053   4.284   4.264   4.022   3.732   3.533   3.451 
+  9.297   8.576   7.489   6.564   6.221   6.570   7.362   8.150   8.539   8.409   7.962   7.578   7.558   7.917   8.362   8.470   7.977   6.965   5.845   5.108   5.023   5.466   6.001   6.159   5.727   4.865   3.977   3.446   3.407   3.705   4.029   4.117   3.884   3.435   2.970   2.683 
+  9.038   8.453   7.621   6.996   6.863   7.200   7.747   8.204   8.395   8.317   8.092   7.884   7.843   8.038   8.395   8.685   8.611   8.000   6.967   5.903   5.254   5.213   5.577   5.881   5.739   5.109   4.310   3.755   3.651   3.868   4.079   4.007   3.599   3.010   2.469   2.156 
+  8.786   8.143   7.307   6.834   6.981   7.570   8.191   8.526   8.524   8.326   8.082   7.872   7.741   7.750   7.915   8.090   7.971   7.316   6.208   5.113   4.595   4.877   5.615   6.137   5.953   5.140   4.255   3.864   4.088   4.546   4.720   4.376   3.700   3.063   2.694   2.568 
+  8.438   7.567   6.481   5.970   6.353   7.282   8.080   8.275   7.900   7.340   6.958   6.842   6.867   6.907   6.956   7.039   7.069   6.862   6.325   5.626   5.124   5.086   5.419   5.716   5.574   4.947   4.188   3.767   3.886   4.338   4.694   4.644   4.190   3.572   3.052   2.774 
+  8.216   7.241   6.102   5.732   6.404   7.537   8.223   7.977   7.067   6.187   5.841   5.994   6.254   6.317   6.213   6.169   6.277   6.368   6.210   5.796   5.401   5.329   5.590   5.872   5.825   5.393   4.865   4.582   4.604   4.658   4.420   3.843   3.203   2.830   2.802   2.909 
+  8.901   7.603   5.966   5.141   5.580   6.744   7.611   7.503   6.545   5.438   4.840   4.911   5.346   5.738   5.889   5.823   5.607   5.256   4.809   4.452   4.451   4.910   5.596   6.051   5.943   5.358   4.728   4.453   4.552   4.670   4.431   3.794   3.087   2.681   2.661   2.786 
+  5.865   5.740   5.536   5.354   5.318   5.494   5.802   6.021   5.927   5.468   4.842   4.377   4.299   4.553   4.847   4.873   4.540   4.034   3.664   3.640   3.938   4.360   4.683   4.781   4.650   4.351   3.966   3.591   3.329   3.241   3.279   3.277   3.052   2.553   1.945   1.524 
+  7.516   6.534   5.269   4.555   4.719   5.381   5.842   5.685   5.079   4.564   4.543   4.961   5.404   5.493   5.185   4.739   4.441   4.365   4.391   4.395   4.407   4.551   4.862   5.179   5.241   4.909   4.301   3.709   3.382   3.350   3.439   3.429   3.217   2.859   2.504   2.290 
+  8.239   7.196   5.771   4.773   4.565   4.877   5.125   4.939   4.408   3.903   3.684   3.683   3.648   3.451   3.247   3.309   3.726   4.266   4.549   4.371   3.884   3.458   3.363   3.559   3.766   3.725   3.415   3.031   2.796   2.775   2.857   2.883   2.779   2.587   2.400   2.291 
+  6.485   5.857   4.962   4.262   4.015   4.128   4.286   4.221   3.907   3.545   3.376   3.496   3.819   4.180   4.478   4.711   4.902   5.006   4.911   4.532   3.937   3.349   3.022   3.064   3.358   3.644   3.707   3.518   3.230   3.029   2.971   2.939   2.756   2.351   1.849   1.499 
+  3.121   3.599   4.295   4.862   5.080   4.955   4.649   4.332   4.091   3.935   3.866   3.904   4.056   4.261   4.405   4.398   4.253   4.078   3.981   3.972   3.956   3.827   3.578   3.326   3.222   3.321   3.535   3.689   3.649   3.403   3.045   2.693   2.415   2.223   2.101   2.040 
+  4.568   4.536   4.542   4.650   4.824   4.921   4.782   4.348   3.720   3.106   2.699   2.576   2.681   2.891   3.109   3.303   3.486   3.669   3.823   3.899   3.862   3.727   3.561   3.450   3.453   3.568   3.722   3.799   3.699   3.391   2.941   2.487   2.164   2.031   2.044   2.094 
+  6.451   6.172   5.797   5.537   5.444   5.362   5.046   4.375   3.487   2.720   2.405   2.651   3.267   3.879   4.148   3.965   3.487   3.025   2.853   3.057   3.505   3.936   4.120   3.978   3.614   3.231   3.000   2.963   3.025   3.042   2.929   2.714   2.498   2.372   2.347   2.365 
+  5.853   5.292   4.596   4.264   4.470   4.945   5.220   5.009   4.398   3.732   3.328   3.290   3.521   3.878   4.262   4.594   4.763   4.652   4.259   3.765   3.441   3.436   3.635   3.735   3.505   2.991   2.487   2.287   2.438   2.716   2.833   2.678   2.378   2.142   2.066   2.081 
+  8.452   8.288   8.014   7.668   7.232   6.661   5.971   5.284   4.764   4.500   4.447   4.496   4.588   4.757   5.036   5.336   5.448   5.204   4.673   4.181   4.091   4.512   5.201   5.752   5.934   5.851   5.799   5.941   6.127   6.034   5.520   4.824   4.421   4.612   5.236   5.774 
+  9.118   8.997   8.778   8.484   8.119   7.693   7.255   6.873   6.581   6.347   6.137   6.022   6.204   6.866   7.934   8.972   9.392   8.879   7.695   6.567   6.183   6.681   7.570   8.155   8.130   7.796   7.731   8.198   8.854   9.043   8.416   7.307   6.496   6.539   7.282   7.987 
+  7.649   6.827   5.595   4.568   4.231   4.676   5.540   6.210   6.196   5.449   4.431   3.850   4.210   5.458   6.972   7.931   7.832   6.804   5.510   4.691   4.691   5.286   5.926   6.193   6.088   5.961   6.142   6.608   6.972   6.809   6.044   5.063   4.445   4.511   5.074   5.585 
+  6.414   5.447   4.161   3.340   3.327   3.825   4.224   4.127   3.629   3.153   3.052   3.341   3.758   4.037   4.109   4.073   4.024   3.961   3.839   3.688   3.628   3.745   3.972   4.120   4.060   3.865   3.763   3.913   4.230   4.429   4.278   3.812   3.311   3.053   3.081   3.201 
+  5.156   5.032   4.955   5.068   5.293   5.353   5.015   4.334   3.663   3.409   3.725   4.402   5.040   5.332   5.235   4.913   4.553   4.246   4.007   3.870   3.909   4.159   4.522   4.795   4.815   4.603   4.362   4.316   4.529   4.866   5.121   5.187   5.116   5.036   5.019   5.040 
+  5.002   4.986   5.009   5.083   5.109   4.929   4.483   3.922   3.539   3.566   3.981   4.521   4.876   4.927   4.809   4.767   4.931   5.218   5.423   5.414   5.240   5.070   5.035   5.118   5.189   5.137   4.971   4.798   4.725   4.773   4.874   4.948   4.961   4.934   4.904   4.888 
+  5.705   5.237   4.611   4.229   4.320   4.789   5.297   5.502   5.284   4.818   4.438   4.418   4.801   5.395   5.905   6.107   5.966   5.620   5.292   5.183   5.394   5.907   6.603   7.300   7.805   7.981   7.799   7.356   6.838   6.436   6.269   6.340   6.561   6.815   7.015   7.119 
+  5.752   5.788   5.800   5.765   5.751   5.864   6.106   6.312   6.267   5.919   5.490   5.336   5.653   6.270   6.736   6.654   5.996   5.137   4.596   4.683   5.347   6.284   7.187   7.889   8.346   8.531   8.406   7.994   7.452   7.016   6.840   6.867   6.882   6.710   6.385   6.121 
+  5.743   5.171   4.395   3.910   4.015   4.613   5.283   5.569   5.306   4.741   4.360   4.537   5.263   6.154   6.732   6.755   6.359   5.916   5.750   5.940   6.352   6.823   7.297   7.810   8.355   8.804   8.979   8.819   8.464   8.159   8.044   8.025   7.869   7.431   6.834   6.398 
+  7.018   6.696   6.225   5.825   5.626   5.591   5.576   5.446   5.180   4.881   4.714   4.807   5.173   5.685   6.121   6.260   6.019   5.531   5.109   5.080   5.561   6.359   7.067   7.330   7.088   6.608   6.278   6.316   6.620   6.880   6.843   6.508   6.096   5.843   5.808   5.863 
+  6.934   6.897   6.918   7.078   7.334   7.499   7.350   6.789   5.929   5.069   4.543   4.568   5.141   6.040   6.900   7.364   7.238   6.602   5.796   5.262   5.297   5.875   6.645   7.151   7.110   6.586   5.921   5.497   5.493   5.812   6.201   6.440   6.462   6.338   6.186   6.092 
+  8.204   7.489   6.573   6.080   6.267   6.856   7.283   7.142   6.463   5.629   5.045   4.855   4.921   5.013   5.019   4.985   5.003   5.087   5.158   5.150   5.095   5.114   5.307   5.664   6.068   6.382   6.530   6.524   6.413   6.249   6.080   5.965   5.963   6.089   6.281   6.423 
+  7.712   7.512   7.287   7.209   7.269   7.273   7.005   6.432   5.741   5.188   4.913   4.862   4.891   4.913   4.949   5.052   5.200   5.292   5.249   5.112   5.023   5.098   5.309   5.505   5.553   5.459   5.359   5.368   5.466   5.513   5.403   5.188   5.047   5.121   5.368   5.584 
+  5.188   5.410   5.763   6.082   6.177   5.941   5.440   4.905   4.598   4.638   4.923   5.215   5.337   5.300   5.270   5.387   5.627   5.807   5.754   5.461   5.108   4.923   5.009   5.283   5.571   5.743   5.773   5.698   5.536   5.274   4.925   4.585   4.396   4.437   4.637   4.814 
+  5.292   5.661   6.131   6.371   6.225   5.811   5.405   5.218   5.253   5.341   5.316   5.162   5.018   5.031   5.212   5.410   5.435   5.227   4.918   4.744   4.861   5.233   5.651   5.893   5.872   5.678   5.485   5.419   5.469   5.529   5.499   5.359   5.176   5.034   4.968   4.952 
+  5.254   5.866   6.541   6.682   6.178   5.478   5.155   5.380   5.794   5.891   5.506   4.961   4.725   4.958   5.352   5.444   5.059   4.473   4.144   4.295   4.741   5.100   5.165   5.053   5.027   5.182   5.343   5.256   4.872   4.427   4.227   4.372   4.683   4.893   4.901   4.826 
+  5.139   5.291   5.549   5.824   6.004   5.997   5.786   5.450   5.145   5.011   5.090   5.282   5.402   5.302   4.970   4.544   4.222   4.130   4.253   4.475   4.685   4.862   5.061   5.314   5.559   5.658   5.511   5.167   4.818   4.675   4.802   5.066   5.238   5.174   4.933   4.723 
+  6.802   6.199   5.445   5.058   5.191   5.539   5.639   5.280   4.670   4.218   4.175   4.460   4.788   4.942   4.927   4.874   4.851   4.791   4.601   4.316   4.113   4.143   4.365   4.556   4.513   4.247   3.977   3.927   4.103   4.293   4.269   4.004   3.689   3.545   3.612   3.732 
+  4.174   4.605   5.204   5.649   5.792   5.701   5.523   5.328   5.095   4.827   4.631   4.636   4.823   4.964   4.785   4.228   3.562   3.194   3.322   3.747   4.043   3.930   3.526   3.229   3.340   3.779   4.158   4.156   3.813   3.476   3.446   3.678   3.821   3.577   3.018   2.551 
+  3.680   3.760   4.024   4.518   5.092   5.448   5.366   4.916   4.429   4.251   4.460   4.816   4.980   4.810   4.474   4.293   4.439   4.787   5.020   4.909   4.520   4.160   4.139   4.530   5.136   5.646   5.857   5.767   5.518   5.251   5.011   4.758   4.445   4.082   3.749   3.547 
+  5.606   5.158   4.584   4.280   4.424   4.862   5.256   5.354   5.168   4.926   4.874   5.079   5.410   5.654   5.676   5.487   5.196   4.921   4.735   4.672   4.753   4.985   5.338   5.724   6.029   6.164   6.112   5.922   5.672   5.427   5.228   5.099   5.054   5.086   5.159   5.217 
+  6.502   5.978   5.344   5.058   5.235   5.576   5.688   5.459   5.150   5.119   5.464   5.918   6.103   5.870   5.416   5.068   4.967   4.952   4.765   4.351   3.960   3.941   4.417   5.158   5.751   5.925   5.730   5.443   5.305   5.346   5.428   5.412   5.288   5.146   5.062   5.037 
+  5.198   5.126   5.078   5.146   5.312   5.426   5.301   4.865   4.248   3.734   3.602   3.961   4.679   5.467   6.030   6.222   6.088   5.808   5.584   5.534   5.665   5.902   6.153   6.360   6.520   6.668   6.838   7.034   7.229   7.370   7.417   7.359   7.219   7.047   6.897   6.811 
+  5.520   5.136   4.683   4.542   4.869   5.466   5.927   5.926   5.445   4.768   4.275   4.194   4.488   4.928   5.266   5.377   5.285   5.102   4.938   4.862   4.909   5.086   5.372   5.706   5.995   6.161   6.187   6.128   6.077   6.096   6.171   6.225   6.179   6.018   5.807   5.660 
+  5.738   6.221   7.065   8.011   8.711   8.870   8.424   7.604   6.801   6.310   6.142   6.058   5.803   5.323   4.799   4.482   4.473   4.662   4.847   4.916   4.916   4.964   5.098   5.238   5.276   5.210   5.169   5.307   5.648   6.041   6.265   6.184   5.834   5.379   4.991   4.778 
+  5.798   5.837   6.014   6.395   6.876   7.184   7.036   6.351   5.356   4.468   4.050   4.188   4.665   5.130   5.337   5.269   5.095   4.997   5.047   5.203   5.400   5.629   5.911   6.210   6.390   6.289   5.867   5.311   4.945   5.015   5.479   6.004   6.189   5.866   5.241   4.752 
+  6.378   6.227   6.272   6.824   7.781   8.627   8.834   8.292   7.386   6.651   6.349   6.341   6.328   6.179   6.011   5.997   6.129   6.239   6.231   6.269   6.651   7.473   8.413   8.909   8.626   7.777   6.998   6.828   7.282   7.867   8.042   7.677   7.111   6.781   6.816   6.978 
+  6.177   6.310   6.638   7.189   7.861   8.434   8.686   8.517   7.996   7.290   6.581   6.013   5.688   5.655   5.863   6.135   6.237   6.045   5.689   5.518   5.867   6.784   7.942   8.833   9.115   8.830   8.333   7.987   7.904   7.918   7.797   7.478   7.103   6.867   6.827   6.872 
+  5.279   5.591   6.176   6.963   7.822   8.539   8.825   8.442   7.391   6.018   4.883   4.433   4.688   5.219   5.468   5.180   4.596   4.253   4.547   5.441   6.532   7.408   7.946   8.302   8.650   8.944   8.964   8.566   7.888   7.264   6.925   6.775   6.481   5.818   4.936   4.295 
+  5.137   5.344   5.782   6.447   7.245   7.970   8.368   8.267   7.684   6.843   6.046   5.493   5.170   4.903   4.545   4.138   3.915   4.127   4.837   5.849   6.833   7.542   7.932   8.116   8.204   8.209   8.083   7.838   7.592   7.466   7.428   7.247   6.655   5.610   4.426   3.631 
+  4.527   4.989   5.585   5.951   5.982   5.863   5.807   5.809   5.660   5.206   4.585   4.153   4.178   4.571   4.953   5.001   4.749   4.548   4.732   5.303   5.936   6.293   6.313   6.217   6.230   6.334   6.320   6.066   5.738   5.659   5.946   6.291   6.156   5.266   3.948   2.971 
+  3.937   4.404   5.132   5.830   6.277   6.405   6.275   5.979   5.576   5.089   4.553   4.047   3.678   3.516   3.552   3.703   3.869   3.998   4.110   4.283   4.586   5.028   5.521   5.904   6.018   5.802   5.362   4.946   4.810   5.044   5.486   5.793   5.655   5.028   4.195   3.609 
+  5.805   5.767   5.876   6.272   6.830   7.174   6.948   6.123   5.051   4.225   3.924   4.049   4.252   4.233   3.950   3.595   3.396   3.456   3.723   4.096   4.509   4.929   5.300   5.529   5.551   5.410   5.248   5.198   5.280   5.387   5.393   5.269   5.104   5.012   5.022   5.067 
+  6.137   6.407   6.789   7.050   6.993   6.572   5.923   5.303   4.939   4.901   5.057   5.163   5.021   4.602   4.054   3.601   3.412   3.520   3.841   4.238   4.592   4.835   4.945   4.947   4.899   4.884   4.958   5.114   5.260   5.269   5.055   4.632   4.106   3.615   3.260   3.081 
+  4.426   5.132   6.054   6.559   6.305   5.468   4.587   4.168   4.337   4.778   5.003   4.722   4.050   3.400   3.171   3.461   4.016   4.442   4.498   4.257   4.019   4.070   4.460   4.969   5.273   5.179   4.750   4.260   3.995   4.071   4.371   4.638   4.654   4.379   3.969   3.673 
+  4.713   5.028   5.613   6.317   6.866   6.988   6.617   5.982   5.473   5.347   5.525   5.668   5.475   4.951   4.401   4.166   4.324   4.637   4.780   4.644   4.434   4.476   4.910   5.546   6.006   6.018   5.621   5.108   4.792   4.789   4.984   5.167   5.193   5.062   4.873   4.744 
+  4.624   4.415   4.387   4.908   5.889   6.741   6.811   5.931   4.609   3.674   3.652   4.374   5.134   5.266   4.651   3.778   3.322   3.610   4.403   5.129   5.353   5.097   4.768   4.801   5.321   6.063   6.597   6.642   6.238   5.669   5.246   5.120   5.241   5.457   5.639   5.732 
+  4.586   4.403   4.646   5.831   7.671   9.103   9.093   7.531   5.387   3.970   3.909   4.736   5.408   5.259   4.549   4.153   4.717   6.066   7.351   7.779   7.250   6.378   5.941   6.264   7.041   7.662   7.702   7.166   6.369   5.654   5.193   4.991   4.983   5.098   5.259   5.373 
+  2.290   2.795   4.067   6.167   8.533  10.126  10.121   8.594   6.548   5.209   5.131   5.866   6.453   6.292   5.657   5.397   6.130   7.642   9.008   9.339   8.499   7.219   6.516   6.914   8.087   9.169   9.420   8.729   7.595   6.678   6.307   6.328   6.332   6.039   5.523   5.118 
+  4.173   4.698   5.780   7.308   8.884   9.922   9.976   9.072   7.746   6.704   6.339   6.493   6.663   6.495   6.141   6.157   6.972   8.400   9.635   9.816   8.744   7.139   6.181   6.624   8.204   9.812  10.339   9.521   8.094   7.147   7.215   7.860   8.106   7.327   5.833   4.645 
+  3.928   4.448   5.449   6.814   8.303   9.556  10.198  10.023   9.144   7.966   6.966   6.413   6.249   6.259   6.355   6.703   7.522   8.710   9.703   9.794   8.740   7.126   6.078   6.442   8.070   9.856  10.566   9.810   8.338   7.379   7.565   8.385   8.654   7.608   5.656   4.112 
+  4.691   5.077   5.717   6.473   7.295   8.181   9.037   9.612   9.622   8.974   7.887   6.783   6.040   5.828   6.131   6.863   7.895   8.950   9.567   9.308   8.152   6.717   5.979   6.586   8.277   9.961  10.504   9.630   8.153   7.298   7.642   8.598   8.922   7.838   5.795   4.180 
+  5.917   6.075   6.437   7.063   7.959   9.008   9.952  10.467  10.312   9.469   8.172   6.820   5.817   5.457   5.848   6.884   8.221   9.319   9.637   8.941   7.551   6.273   5.948   6.873   8.520   9.844  10.019   9.054   7.781   7.184   7.589   8.379   8.518   7.445   5.621   4.220 
+  4.072   4.709   5.785   7.024   8.211   9.230  10.008  10.441  10.403   9.839   8.848   7.690   6.701   6.179   6.300   7.038   8.119   9.043   9.269   8.522   7.075   5.714   5.308   6.208   7.916   9.363   9.646   8.700   7.342   6.610   6.920   7.726   8.000   7.130   5.498   4.212 
+  6.804   6.823   7.002   7.521   8.441   9.572  10.483  10.716  10.089   8.861   7.592   6.778   6.529   6.574   6.581   6.489   6.531   6.910   7.465   7.688   7.163   6.033   5.034   4.969   6.029   7.585   8.651   8.675   7.961   7.344   7.418   8.004   8.353   7.884   6.773   5.844 
+  5.893   6.036   6.453   7.257   8.373   9.466  10.073   9.880   8.947   7.706   6.701   6.245   6.268   6.465   6.623   6.801   7.201   7.835   8.345   8.211   7.229   5.833   4.890   5.065   6.254   7.602   8.156   7.636   6.650   6.152   6.582   7.446   7.740   6.852   5.173   3.846 
+  6.523   6.456   6.493   6.837   7.534   8.386   9.028   9.136   8.630   7.734   6.841   6.288   6.182   6.402   6.734   7.019   7.194   7.229   7.062   6.631   5.991   5.375   5.102   5.360   6.023   6.698   6.980   6.750   6.247   5.858   5.794   5.922   5.902   5.514   4.883   4.399 
+  6.245   6.228   6.204   6.222   6.367   6.711   7.228   7.748   8.018   7.843   7.214   6.344   5.569   5.192   5.342   5.923   6.647   7.152   7.152   6.585   5.676   4.852   4.519   4.807   5.474   6.048   6.153   5.771   5.240   4.974   5.114   5.408   5.427   4.941   4.146   3.542 
+  6.793   6.748   6.765   6.983   7.456   8.075   8.584   8.701   8.287   7.447   6.484   5.728   5.368   5.373   5.568   5.767   5.856   5.799   5.596   5.285   4.974   4.846   5.058   5.583   6.143   6.350   5.986   5.224   4.548   4.414   4.864   5.459   5.588   4.968   3.902   3.086 
+  5.025   5.820   6.916   7.699   7.866   7.557   7.131   6.830   6.635   6.411   6.133   5.940   5.971   6.175   6.308   6.155   5.737   5.312   5.140   5.258   5.465   5.534   5.426   5.290   5.271   5.324   5.258   4.960   4.561   4.345   4.474   4.781   4.886   4.534   3.865   3.331 
+  2.833   3.920   5.515   6.871   7.558   7.644   7.475   7.297   7.088   6.694   6.106   5.566   5.390   5.683   6.212   6.576   6.511   6.076   5.567   5.268   5.253   5.392   5.499   5.470   5.298   5.010   4.635   4.234   3.933   3.863   4.045   4.322   4.446   4.271   3.891   3.583 
+  4.411   4.623   5.095   5.826   6.666   7.354   7.656   7.514   7.068   6.548   6.125   5.855   5.725   5.716   5.807   5.929   5.941   5.711   5.244   4.737   4.475   4.621   5.082   5.555   5.748   5.583   5.226   4.931   4.834   4.873   4.882   4.748   4.495   4.232   4.050   3.969 
+  3.538   4.087   5.075   6.271   7.342   7.967   7.989   7.502   6.806   6.234   5.977   6.020   6.222   6.430   6.556   6.559   6.401   6.054   5.564   5.089   4.852   4.990   5.435   5.925   6.152   5.970   5.486   4.975   4.691   4.697   4.849   4.909   4.717   4.287   3.796   3.473 
+  4.919   5.292   5.940   6.697   7.367   7.781   7.841   7.551   7.020   6.427   5.943   5.671   5.613   5.700   5.852   6.011   6.137   6.177   6.063   5.771   5.385   5.093   5.077   5.367   5.766   5.963   5.750   5.203   4.651   4.445   4.688   5.151   5.449   5.349   4.953   4.605 
+  6.468   6.718   7.079   7.357   7.419   7.259   6.983   6.726   6.563   6.470   6.362   6.170   5.905   5.665   5.567   5.665   5.892   6.087   6.095   5.877   5.551   5.324   5.341   5.572   5.814   5.839   5.573   5.179   4.951   5.091   5.533   5.958   6.014   5.584   4.897   4.385 
+  5.958   6.293   6.863   7.455   7.787   7.640   7.024   6.223   5.654   5.591   5.981   6.484   6.738   6.619   6.306   6.095   6.130   6.286   6.300   6.026   5.585   5.282   5.355   5.768   6.228   6.404   6.167   5.681   5.259   5.131   5.288   5.514   5.561   5.336   4.961   4.680 
+  6.045   6.342   6.891   7.561   8.122   8.343   8.138   7.649   7.161   6.900   6.886   6.950   6.904   6.708   6.471   6.318   6.236   6.084   5.740   5.252   4.842   4.729   4.943   5.286   5.486   5.406   5.143   4.929   4.939   5.168   5.467   5.671   5.716   5.647   5.550   5.488 
+  5.822   6.203   6.912   7.779   8.511   8.813   8.584   8.007   7.426   7.089   6.971   6.847   6.537   6.090   5.736   5.639   5.708   5.652   5.255   4.605   4.064   3.975   4.375   4.957   5.324   5.305   5.048   4.856   4.903   5.111   5.257   5.189   4.940   4.661   4.472   4.394 
+  6.682   6.563   6.634   7.174   8.084   8.881   9.069   8.555   7.732   7.156   7.100   7.376   7.560   7.403   7.026   6.774   6.866   7.203   7.483   7.503   7.345   7.280   7.488   7.878   8.165   8.127   7.802   7.457   7.365   7.596   7.989   8.294   8.357   8.193   7.944   7.770 
+  3.629   4.187   5.217   6.504   7.697   8.449   8.610   8.333   7.964   7.776   7.772   7.715   7.369   6.737   6.081   5.709   5.726   5.957   6.126   6.096   5.978   5.995   6.255   6.637   6.884   6.833   6.547   6.270   6.225   6.452   6.793   7.027   7.023   6.808   6.524   6.331 
+  5.365   6.189   7.294   8.006   8.004   7.508   7.047   7.024   7.440   7.956   8.200   8.037   7.595   7.092   6.657   6.286   5.936   5.613   5.355   5.161   4.945   4.619   4.212   3.909   3.945   4.424   5.209   5.982   6.428   6.405   5.990   5.388   4.805   4.359   4.080   3.950 
+  5.696   6.260   7.017   7.539   7.684   7.658   7.763   8.077   8.381   8.375   7.974   7.384   6.913   6.694   6.598   6.399   6.015   5.575   5.270   5.144   5.057   4.843   4.511   4.263   4.311   4.670   5.132   5.443   5.511   5.437   5.360   5.280   5.059   4.603   4.022   3.607 
+  5.559   5.790   6.188   6.684   7.253   7.872   8.444   8.781   8.722   8.295   7.764   7.472   7.582   7.934   8.150   7.924   7.249   6.406   5.726   5.343   5.148   4.950   4.679   4.437   4.367   4.506   4.753   4.987   5.178   5.372   5.560   5.596   5.281   4.565   3.689   3.083 
+  5.897   6.285   6.813   7.222   7.479   7.765   8.231   8.772   9.069   8.884   8.328   7.838   7.833   8.365   9.050   9.361   9.014   8.135   7.099   6.224   5.596   5.145   4.821   4.683   4.807   5.148   5.533   5.790   5.888   5.919   5.928   5.799   5.329   4.459   3.443   2.749 
+  4.520   5.483   6.643   7.163   6.882   6.417   6.539   7.429   8.502   8.960   8.527   7.689   7.244   7.591   8.421   9.042   8.989   8.349   7.553   6.931   6.478   6.033   5.594   5.404   5.689   6.355   6.992   7.207   6.967   6.587   6.364   6.246   5.872   4.991   3.816   2.963 
+  5.288   5.170   5.128   5.387   6.025   6.918   7.850   8.652   9.251   9.603   9.620   9.219   8.459   7.633   7.166   7.344   8.063   8.838   9.100   8.584   7.532   6.535   6.136   6.478   7.254   7.958   8.245   8.114   7.813   7.577   7.415   7.120   6.470   5.464   4.392   3.696 
+  5.478   5.559   5.768   6.174   6.820   7.668   8.574   9.330   9.749   9.751   9.378   8.751   8.030   7.404   7.100   7.320   8.092   9.138   9.923   9.932   9.050   7.723   6.727   6.647   7.453   8.517   9.090   8.860   8.140   7.534   7.365   7.382   7.014   5.940   4.479   3.419 
+  6.047   5.689   5.319   5.380   6.098   7.316   8.604   9.530   9.902   9.804   9.438   8.931   8.301   7.591   7.009   6.901   7.493   8.630   9.750  10.212   9.752   8.718   7.837   7.682   8.241   8.955   9.201   8.816   8.205   7.935   8.168   8.448   8.068   6.722   4.888   3.569 
+  4.001   4.505   5.198   5.775   6.244   6.884   7.877   9.004   9.723   9.604   8.717   7.602   6.846   6.650   6.786   6.925   7.001   7.225   7.781   8.547   9.142   9.281   9.056   8.838   8.890   9.087   9.047   8.559   7.860   7.454   7.590   7.942   7.832   6.858   5.354   4.221 
+  5.606   5.780   6.027   6.283   6.628   7.212   8.049   8.885   9.310   9.055   8.226   7.247   6.567   6.360   6.482   6.675   6.816   6.983   7.310   7.818   8.394   8.904   9.299   9.579   9.672   9.420   8.741   7.830   7.143   7.088   7.631   8.205   8.082   6.969   5.329   4.124 
+  4.744   4.763   5.037   5.781   6.914   8.031   8.660   8.601   8.064   7.480   7.152   7.049   6.895   6.464   5.827   5.320   5.287   5.817   6.687   7.556   8.210   8.666   9.050   9.396   9.564   9.364   8.768   8.015   7.480   7.395   7.645   7.818   7.498   6.592   5.448   4.655 
+  5.284   5.162   5.132   5.422   6.050   6.767   7.228   7.246   6.917   6.527   6.300   6.226   6.095   5.723   5.153   4.672   4.616   5.115   6.005   6.957   7.714   8.240   8.650   9.020   9.252   9.134   8.558   7.685   6.898   6.543   6.662   6.949   6.975   6.532   5.810   5.263 
+  4.962   5.026   5.193   5.476   5.791   5.986   5.947   5.701   5.426   5.328   5.494   5.822   6.100   6.158   5.979   5.696   5.482   5.437   5.569   5.842   6.245   6.781   7.403   7.953   8.208   8.004   7.375   6.573   5.932   5.667   5.736   5.879   5.807   5.418   4.870   4.474 
+  5.314   5.688   6.266   6.783   7.007   6.867   6.500   6.154   6.007   6.023   5.986   5.710   5.237   4.858   4.889   5.399   6.114   6.613   6.654   6.361   6.106   6.190   6.601   7.053   7.257   7.167   6.981   6.924   7.026   7.109   6.981   6.645   6.298   6.149   6.220   6.344 
+  6.063   6.271   6.618   6.968   7.150   7.051   6.696   6.258   5.943   5.840   5.862   5.834   5.674   5.490   5.504   5.842   6.390   6.834   6.890   6.523   5.986   5.631   5.665   6.017   6.435   6.691   6.733   6.682   6.691   6.815   6.991   7.110   7.109   7.009   6.881   6.796 
+  5.688   6.576   7.833   8.779   9.014   8.605   7.930   7.342   6.942   6.626   6.301   6.037   6.018   6.356   6.957   7.559   7.923   7.989   7.882   7.778   7.771   7.838   7.918   8.005   8.150   8.398   8.713   8.985   9.104   9.031   8.813   8.541   8.292   8.098   7.968   7.902 
+  7.267   7.498   7.832   8.094   8.159   7.986   7.594   7.040   6.435   5.957   5.813   6.109   6.750   7.453   7.925   8.064   8.023   8.058   8.300   8.640   8.842   8.783   8.592   8.553   8.853   9.402   9.895  10.067   9.900   9.609   9.425   9.392   9.359   9.167   8.841   8.581 
+  7.533   7.382   7.192   7.120   7.265   7.584   7.890   7.953   7.651   7.081   6.537   6.337   6.626   7.272   7.951   8.356   8.387   8.190   8.013   8.009   8.139   8.235   8.163   7.949   7.768   7.800   8.082   8.470   8.736   8.729   8.478   8.159   7.973   8.006   8.185   8.341 
+  6.374   6.788   7.365   7.792   7.929   7.874   7.843   7.950   8.106   8.116   7.889   7.571   7.456   7.737   8.306   8.781   8.778   8.214   7.403   6.851   6.894   7.461   8.147   8.521   8.439   8.106   7.859   7.881   8.065   8.152   7.987   7.675   7.482   7.595   7.939   8.235 
+  5.884   6.081   6.363   6.600   6.749   6.884   7.111   7.452   7.795   7.963   7.854   7.539   7.222   7.079   7.121   7.176   7.042   6.675   6.264   6.111   6.407   7.068   7.774   8.190   8.190   7.927   7.678   7.620   7.699   7.696   7.425   6.887   6.257   5.744   5.446   5.331 
+  4.305   4.754   5.617   6.761   7.898   8.647   8.707   8.057   7.034   6.178   5.925   6.329   7.033   7.519   7.479   7.022   6.566   6.501   6.888   7.448   7.818   7.865   7.771   7.830   8.144   8.507   8.580   8.207   7.569   7.041   6.868   6.953   6.966   6.658   6.109   5.674 
+  7.883   7.540   7.186   7.233   7.836   8.749   9.456   9.522   8.890   7.926   7.169   6.980   7.335   7.902   8.325   8.471   8.467   8.517   8.696   8.898   8.979   8.932   8.918   9.115   9.518   9.898   9.972   9.650   9.126   8.718   8.595   8.632   8.526   8.088   7.446   6.967 
+  6.941   6.469   5.933   5.815   6.283   7.036   7.536   7.416   6.760   6.034   5.735   6.022   6.626   7.079   7.074   6.675   6.238   6.124   6.448   7.031   7.573   7.868   7.911   7.827   7.735   7.674   7.631   7.621   7.701   7.897   8.114   8.138   7.777   7.033   6.169   5.588 
+  6.147   6.026   5.958   6.133   6.562   7.011   7.147   6.774   6.010   5.244   4.900   5.152   5.808   6.428   6.615   6.269   5.631   5.113   5.033   5.438   6.118   6.766   7.158   7.242   7.099   6.857   6.622   6.455   6.382   6.387   6.402   6.325   6.075   5.662   5.215   4.922 
+  6.215   5.832   5.442   5.491   6.124   7.045   7.717   7.744   7.140   6.298   5.697   5.580   5.829   6.107   6.126   5.845   5.476   5.320   5.575   6.232   7.097   7.911   8.475   8.721   8.714   8.593   8.483   8.430   8.378   8.219   7.864   7.304   6.627   5.967   5.455   5.179 
+  6.276   6.039   5.916   6.264   7.072   7.882   8.118   7.541   6.457   5.514   5.226   5.626   6.283   6.670   6.551   6.116   5.780   5.843   6.299   6.893   7.361   7.608   7.723   7.841   8.010   8.170   8.234   8.185   8.081   7.969   7.811   7.489   6.905   6.101   5.296   4.787 
+  4.536   5.042   5.793   6.484   6.988   7.363   7.667   7.796   7.555   6.901   6.115   5.675   5.901   6.666   7.454   7.749   7.419   6.797   6.394   6.512   7.074   7.773   8.331   8.651   8.753   8.642   8.303   7.802   7.354   7.203   7.389   7.636   7.524   6.853   5.871   5.146 
+  4.169   5.473   7.275   8.532   8.656   7.823   6.712   5.953   5.733   5.831   5.951   6.006   6.125   6.426   6.829   7.077   6.963   6.528   6.063   5.922   6.297   7.114   8.095   8.891   9.228   9.002   8.332   7.534   6.988   6.929   7.269   7.622   7.555   6.914   5.979   5.296 
+  5.420   6.396   7.743   8.670   8.721   8.001   7.002   6.211   5.840   5.825   6.019   6.335   6.741   7.170   7.491   7.594   7.502   7.370   7.360   7.520   7.771   8.015   8.238   8.479   8.727   8.861   8.740   8.371   7.974   7.824   8.004   8.277   8.256   7.737   6.923   6.310 
+  5.543   6.732   8.157   8.722   8.085   6.853   5.962   5.856   6.212   6.390   6.116   5.707   5.674   6.148   6.736   6.931   6.650   6.338   6.523   7.284   8.155   8.568   8.388   8.008   7.930   8.259   8.623   8.579   8.087   7.555   7.424   7.714   7.999   7.850   7.284   6.770 
+  5.842   6.626   7.695   8.403   8.397   7.790   6.995   6.382   6.060   5.917   5.824   5.768   5.826   6.021   6.242   6.313   6.145   5.819   5.537   5.491   5.761   6.305   7.002   7.691   8.188   8.331   8.083   7.605   7.211   7.172   7.499   7.895   7.957   7.503   6.748   6.174 
+  6.692   7.075   7.577   7.870   7.798   7.443   6.999   6.581   6.159   5.657   5.107   4.685   4.589   4.854   5.280   5.553   5.455   5.024   4.531   4.329   4.661   5.541   6.750   7.910   8.635   8.692   8.141   7.342   6.781   6.775   7.248   7.758   7.796   7.176   6.199   5.473 
+  4.945   5.979   7.317   8.029   7.650   6.471   5.273   4.737   4.990   5.603   5.992   5.875   5.419   5.030   4.975   5.170   5.284   5.047   4.516   4.083   4.217   5.131   6.593   8.016   8.776   8.574   7.616   6.503   5.886   6.076   6.863   7.659   7.888   7.371   6.449   5.748 
+  6.507   7.380   8.403   8.708   7.962   6.613   5.514   5.256   5.749   6.364   6.465   5.884   4.985   4.308   4.140   4.339   4.525   4.438   4.155   4.033   4.443   5.491   6.912   8.191   8.821   8.575   7.643   6.559   5.920   6.043   6.761   7.515   7.723   7.180   6.218   5.485 
+  7.609   7.762   8.088   8.539   8.936   9.046   8.759   8.201   7.665   7.389   7.372   7.402   7.263   6.936   6.610   6.479   6.545   6.610   6.486   6.229   6.155   6.595   7.576   8.717   9.445   9.393   8.660   7.752   7.221   7.299   7.763   8.124   7.976   7.271   6.344   5.700 
+  6.293   6.933   8.008   9.146   9.921  10.042   9.516   8.680   8.002   7.800   8.040   8.395   8.497   8.199   7.643   7.099   6.740   6.545   6.391   6.229   6.162   6.351   6.846   7.499   8.046   8.293   8.239   8.053   7.928   7.935   8.003   7.999   7.841   7.557   7.258   7.068 
+  6.395   6.860   7.654   8.526   9.176   9.376   9.078   8.461   7.840   7.493   7.500   7.713   7.878   7.811   7.507   7.101   6.737   6.460   6.224   6.003   5.883   6.031   6.555   7.357   8.128   8.523   8.396   7.913   7.438   7.274   7.430   7.618   7.485   6.904   6.104   5.529 
+  5.195   5.663   6.404   7.134   7.607   7.709   7.461   6.978   6.422   5.960   5.725   5.765   5.994   6.217   6.220   5.911   5.384   4.871   4.605   4.678   5.013   5.444   5.843   6.176   6.480   6.777   7.028   7.153   7.096   6.871   6.549   6.208   5.901   5.648   5.460   5.358 
+  5.373   5.622   6.248   7.267   8.359   8.948   8.588   7.339   5.808   4.771   4.651   5.263   6.003   6.320   6.085   5.588   5.226   5.175   5.316   5.422   5.411   5.423   5.668   6.211   6.882   7.393   7.541   7.343   6.992   6.695   6.542   6.476   6.382   6.201   5.977   5.821 
+  5.883   5.420   5.018   5.253   6.218   7.391   8.024   7.725   6.743   5.756   5.337   5.565   6.062   6.372   6.329   6.107   5.977   6.020   6.086   5.993   5.766   5.665   5.967   6.691   7.529   8.044   7.983   7.458   6.836   6.455   6.377   6.374   6.141   5.563   4.832   4.321 
+  4.845   4.774   4.744   4.889   5.257   5.737   6.112   6.189   5.951   5.595   5.425   5.647   6.216   6.847   7.196   7.079   6.586   6.000   5.618   5.595   5.911   6.445   7.064   7.647   8.071   8.218   8.044   7.646   7.234   6.996   6.947   6.891   6.575   5.915   5.115   4.564 
+  2.957   3.475   4.401   5.511   6.493   7.058   7.079   6.653   6.034   5.483   5.139   5.018   5.094   5.359   5.792   6.285   6.634   6.657   6.360   5.984   5.873   6.216   6.902   7.593   7.983   8.010   7.872   7.815   7.918   8.032   7.924   7.480   6.795   6.087   5.552   5.278 
+  4.052   4.694   5.829   7.153   8.260   8.790   8.598   7.825   6.809   5.871   5.171   4.714   4.478   4.500   4.827   5.393   5.959   6.239   6.122   5.783   5.577   5.760   6.286   6.850   7.129   7.028   6.710   6.411   6.227   6.068   5.794   5.391   5.000   4.781   4.759   4.813 
+  3.330   3.849   4.660   5.419   5.835   5.800   5.421   4.930   4.540   4.325   4.218   4.102   3.930   3.774   3.762   3.955   4.269   4.517   4.546   4.366   4.159   4.162   4.488   5.028   5.509   5.672   5.437   4.948   4.461   4.166   4.065   3.997   3.775   3.346   2.842   2.500 
+  5.473   5.155   4.815   4.741   4.928   5.065   4.844   4.261   3.638   3.320   3.362   3.493   3.408   3.085   2.821   2.942   3.463   4.038   4.260   4.033   3.663   3.592   3.994   4.612   4.976   4.797   4.195   3.578   3.297   3.394   3.617   3.654   3.366   2.851   2.330   2.013 
+  5.395   5.103   4.710   4.457   4.455   4.608   4.706   4.596   4.308   4.024   3.911   3.975   4.043   3.923   3.584   3.218   3.090   3.316   3.743   4.061   4.059   3.805   3.594   3.685   4.061   4.417   4.413   3.972   3.356   2.960   2.968   3.201   3.270   2.929   2.306   1.816 
+  3.867   4.555   5.291   5.372   4.665   3.699   3.173   3.334   3.804   3.988   3.648   3.111   2.923   3.319   4.017   4.492   4.460   4.091   3.780   3.739   3.826   3.745   3.409   3.057   3.022   3.392   3.888   4.111   3.889   3.410   3.020   2.909   2.986   3.032   2.952   2.842 
+  3.838   4.438   5.019   4.932   4.104   3.109   2.641   2.901   3.466   3.748   3.560   3.265   3.371   4.003   4.763   5.101   4.820   4.215   3.755   3.642   3.693   3.617   3.380   3.238   3.430   3.856   4.121   3.915   3.350   2.887   2.892   3.261   3.494   3.178   2.416   1.774 
+  5.172   4.895   4.594   4.576   4.962   5.566   6.008   5.966   5.404   4.608   4.008   3.913   4.335   5.009   5.579   5.808   5.674   5.318   4.916   4.572   4.302   4.089   3.926   3.825   3.790   3.804   3.852   3.945   4.108   4.330   4.511   4.489   4.139   3.493   2.776   2.303 
+  5.131   5.067   5.228   5.904   7.067   8.310   9.106   9.152   8.543   7.653   6.873   6.435   6.407   6.776   7.469   8.282   8.858   8.821   8.037   6.780   5.623   5.085   5.285   5.891   6.402   6.530   6.390   6.343   6.642   7.186   7.557   7.312   6.292   4.743   3.208   2.260 
+  3.835   4.549   5.749   7.076   8.197   8.933   9.286   9.367   9.270   9.004   8.532   7.895   7.303   7.079   7.455   8.348   9.321   9.781   9.340   8.087   6.574   5.494   5.270   5.826   6.697   7.373   7.642   7.667   7.769   8.094   8.434   8.341   7.467   5.884   4.142   3.001 
+  3.200   4.301   5.962   7.465   8.364   8.685   8.753   8.848   8.973   8.916   8.510   7.849   7.285   7.202   7.753   8.737   9.690  10.112   9.717   8.582   7.135   5.976   5.586   6.068   7.089   8.088   8.636   8.697   8.589   8.645   8.851   8.793   7.979   6.325   4.380   3.058 
+  2.675   3.937   5.844   7.561   8.546   8.779   8.614   8.417   8.308   8.188   7.946   7.640   7.494   7.727   8.377   9.251   9.999  10.268   9.850   8.794   7.433   6.295   5.865   6.308   7.339   8.378   8.932   8.924   8.695   8.649   8.828   8.796   7.991   6.269   4.197   2.774 
+  4.059   5.038   6.483   7.733   8.406   8.582   8.617   8.795   9.104   9.301   9.168   8.721   8.219   7.976   8.166   8.718   9.357   9.731   9.564   8.795   7.647   6.576   6.057   6.307   7.137   8.060   8.635   8.773   8.744   8.861   9.092   8.982   7.999   6.065   3.811   2.285 
+  4.570   5.412   6.691   7.874   8.618   8.916   8.982   9.022   9.086   9.094   8.963   8.698   8.398   8.210   8.276   8.672   9.324   9.944  10.097   9.444   8.048   6.479   5.544   5.753   6.927   8.291   9.035   8.927   8.431   8.225   8.518   8.776   8.159   6.328   3.913   2.194 
+  2.081   3.515   5.659   7.565   8.666   9.005   8.997   8.999   9.065   9.048   8.839   8.496   8.175   7.996   8.021   8.311   8.916   9.731  10.373  10.312   9.269   7.575   6.101   5.694   6.536   7.972   9.021   9.162   8.704   8.399   8.643   9.022   8.654   7.066   4.794   3.124 
+  3.741   5.040   6.742   7.854   8.111   8.078   8.461   9.338  10.075   9.965   8.957   7.740   7.131   7.394   8.129   8.781   9.181   9.552  10.038  10.336   9.928   8.703   7.303   6.708   7.376   8.754   9.723   9.612   8.821   8.405   8.965   9.923   9.947   8.218   5.379   3.202 
+  3.648   4.785   6.235   7.122   7.317   7.467   8.255   9.644  10.837  11.010  10.066   8.700   7.745   7.486   7.599   7.696   7.819   8.321   9.281  10.141  10.094   8.905   7.335   6.615   7.367   8.972  10.068   9.767   8.462   7.432   7.575   8.480   8.774   7.455   4.973   2.993 
+  3.946   4.431   5.152   5.864   6.556   7.409   8.505   9.609  10.268  10.158   9.351   8.255   7.304   6.707   6.483   6.653   7.309   8.412   9.554  10.049   9.421   7.903   6.439   6.027   6.916   8.361   9.216   8.901   7.872   7.153   7.338   7.978   7.969   6.608   4.371   2.654 
+  4.538   4.635   4.881   5.375   6.203   7.310   8.419   9.114   9.101   8.433   7.503   6.753   6.373   6.238   6.168   6.212   6.643   7.612   8.806   9.510   9.133   7.773   6.270   5.606   6.126   7.258   8.017   7.857   7.121   6.649   6.925   7.539   7.530   6.303   4.302   2.770 
+  3.671   4.587   5.700   6.322   6.490   6.864   7.899   9.184   9.688   8.740   6.781   5.083   4.664   5.413   6.294   6.418   5.916   5.739   6.586   8.059   8.946   8.394   6.808   5.559   5.718   7.045   8.226   8.152   6.977   5.924   6.003   6.929   7.343   6.164   3.771   1.821 
+  5.267   4.975   4.716   4.955   5.981   7.642   9.309  10.183   9.792   8.341   6.614   5.455   5.213   5.589   6.004   6.143   6.203   6.602   7.466   8.382   8.696   8.104   6.978   6.107   6.051   6.696   7.400   7.577   7.182   6.649   6.381   6.312   5.979   5.042   3.735   2.769 
+  4.382   4.693   5.259   6.027   6.977   8.047   9.029   9.578   9.399   8.486   7.186   6.012   5.319   5.141   5.299   5.646   6.193   6.972   7.812   8.297   8.052   7.110   6.013   5.468   5.816   6.756   7.589   7.783   7.352   6.742   6.333   6.059   5.510   4.412   3.023   2.033 
+  3.801   3.940   4.406   5.374   6.753   8.125   8.942   8.869   8.017   6.882   6.022   5.695   5.752   5.848   5.797   5.754   6.047   6.818   7.780   8.357   8.126   7.198   6.197   5.821   6.322   7.323   8.127   8.249   7.732   7.005   6.436   6.018   5.443   4.500   3.375   2.590 
+  4.029   4.411   5.152   6.164   7.250   8.123   8.500   8.253   7.514   6.622   5.946   5.663   5.680   5.764   5.774   5.797   6.058   6.656   7.382   7.808   7.607   6.858   6.041   5.700   6.027   6.718   7.221   7.170   6.636   5.992   5.532   5.205   4.709   3.848   2.807   2.078 
+  5.455   5.097   4.843   5.209   6.290   7.609   8.426   8.273   7.288   6.093   5.319   5.166   5.345   5.427   5.269   5.142   5.437   6.234   7.113   7.431   6.852   5.681   4.695   4.568   5.354   6.447   7.059   6.817   6.001   5.247   4.975   5.059   5.002   4.442   3.528   2.822 
+  4.484   4.760   5.307   6.086   6.970   7.707   7.972   7.540   6.482   5.220   4.327   4.163   4.622   5.217   5.481   5.343   5.166   5.376   6.015   6.630   6.637   5.859   4.750   4.078   4.315   5.251   6.179   6.473   6.055   5.364   4.893   4.742   4.609   4.170   3.471   2.924 
+  4.795   4.970   5.209   5.401   5.539   5.705   5.950   6.190   6.239   5.958   5.388   4.740   4.256   4.070   4.169   4.474   4.909   5.391   5.781   5.889   5.606   5.037   4.505   4.348   4.666   5.220   5.618   5.616   5.301   4.963   4.805   4.734   4.460   3.807   2.951   2.335 
+  5.544   5.280   5.038   5.145   5.669   6.341   6.741   6.609   6.026   5.324   4.822   4.608   4.534   4.413   4.217   4.109   4.276   4.735   5.269   5.576   5.494   5.113   4.699   4.477   4.475   4.543   4.514   4.362   4.214   4.205   4.317   4.353   4.082   3.451   2.680   2.149 
+  3.324   3.475   3.838   4.451   5.230   5.944   6.315   6.170   5.569   4.789   4.171   3.930   4.047   4.325   4.555   4.661   4.722   4.854   5.077   5.272   5.271   4.996   4.531   4.064   3.767   3.694   3.802   4.021   4.303   4.599   4.797   4.720   4.230   3.377   2.442   1.828 
+  6.102   5.905   5.475   4.878   4.355   4.189   4.439   4.831   4.951   4.611   4.042   3.703   3.874   4.400   4.856   4.960   4.835   4.853   5.209   5.672   5.777   5.300   4.530   4.044   4.176   4.682   4.956   4.610   3.865   3.354   3.504   4.095   4.424   3.967   2.907   2.024 
+  5.084   5.107   5.087   4.999   4.934   5.017   5.242   5.394   5.203   4.605   3.869   3.425   3.525   4.032   4.535   4.708   4.564   4.395   4.446   4.665   4.759   4.510   4.027   3.677   3.753   4.196   4.641   4.750   4.498   4.143   3.923   3.779   3.420   2.649   1.657   0.945 
+  5.353   5.012   4.654   4.633   5.001   5.447   5.547   5.132   4.429   3.880   3.783   4.074   4.418   4.523   4.386   4.268   4.426   4.853   5.257   5.297   4.866   4.199   3.698   3.636   3.977   4.435   4.707   4.687   4.487   4.280   4.123   3.900   3.450   2.744   1.976   1.469 
+  4.983   4.456   3.823   3.562   3.805   4.251   4.463   4.267   3.896   3.754   4.030   4.515   4.792   4.613   4.127   3.753   3.813   4.256   4.705   4.767   4.356   3.744   3.336   3.364   3.746   4.197   4.454   4.438   4.241   3.992   3.742   3.451   3.062   2.588   2.138   1.860 
+  3.625   3.467   3.287   3.266   3.498   3.896   4.228   4.259   3.923   3.401   3.016   3.021   3.423   3.990   4.428   4.599   4.586   4.569   4.631   4.680   4.559   4.229   3.853   3.681   3.827   4.155   4.378   4.292   3.937   3.534   3.270   3.132   2.939   2.553   2.049   1.682 
+  5.523   4.364   2.859   2.015   2.297   3.338   4.303   4.555   4.092   3.434   3.131   3.332   3.765   4.064   4.117   4.122   4.333   4.777   5.198   5.280   4.933   4.382   3.989   3.965   4.220   4.454   4.398   4.000   3.432   2.931   2.627   2.484   2.376   2.212   2.008   1.862 
+  5.061   4.815   4.420   4.035   3.796   3.746   3.801   3.808   3.675   3.458   3.341   3.489   3.900   4.381   4.693   4.735   4.620   4.563   4.672   4.838   4.825   4.488   3.930   3.444   3.294   3.504   3.852   4.039   3.912   3.527   3.059   2.634   2.267   1.921   1.607   1.408 
+  6.054   5.273   4.320   3.889   4.171   4.725   4.902   4.424   3.603   3.036   3.067   3.524   3.937   4.003   3.858   3.896   4.345   4.992   5.342   5.048   4.233   3.412   3.080   3.330   3.814   4.047   3.795   3.218   2.702   2.534   2.704   2.955   3.005   2.757   2.350   2.048 
+  4.833   4.116   3.178   2.620   2.702   3.203   3.669   3.812   3.700   3.612   3.727   3.961   4.085   3.995   3.842   3.893   4.256   4.734   4.950   4.661   3.969   3.264   2.926   3.062   3.452   3.747   3.724   3.408   2.995   2.681   2.528   2.474   2.417   2.306   2.169   2.074 
+  5.429   4.673   3.751   3.337   3.638   4.263   4.613   4.408   3.876   3.472   3.431   3.593   3.631   3.436   3.243   3.379   3.881   4.377   4.374   3.699   2.695   1.972   1.942   2.521   3.240   3.638   3.589   3.311   3.109   3.104   3.173   3.107   2.801   2.326   1.862   1.581 
+  3.903   3.801   3.680   3.667   3.851   4.208   4.583   4.766   4.636   4.255   3.840   3.598   3.571   3.607   3.513   3.239   2.945   2.866   3.096   3.480   3.731   3.667   3.364   3.088   3.060   3.266   3.482   3.471   3.187   2.791   2.494   2.372   2.333   2.244   2.078   1.938 
+  3.760   3.276   2.627   2.238   2.360   2.903   3.511   3.810   3.667   3.266   2.967   3.036   3.465   4.000   4.339   4.357   4.163   3.981   3.950   4.024   4.043   3.892   3.611   3.355   3.249   3.286   3.340   3.287   3.113   2.907   2.763   2.680   2.577   2.384   2.134   1.954 
+  3.966   3.934   3.863   3.763   3.675   3.646   3.678   3.714   3.686   3.590   3.516   3.582   3.839   4.208   4.536   4.712   4.741   4.714   4.701   4.672   4.524   4.193   3.745   3.346   3.142   3.149   3.252   3.305   3.248   3.120   2.985   2.848   2.655   2.370   2.048   1.830 
+  4.896   4.316   3.646   3.430   3.796   4.335   4.454   3.897   2.980   2.358   2.508   3.375   4.426   5.068   5.051   4.577   4.063   3.799   3.784   3.811   3.695   3.421   3.119   2.935   2.915   2.991   3.052   3.018   2.875   2.662   2.451   2.321   2.327   2.464   2.658   2.797 
+  5.561   4.749   3.846   3.614   4.153   4.809   4.798   3.943   2.837   2.312   2.697   3.571   4.199   4.206   3.857   3.716   4.039   4.516   4.586   4.008   3.115   2.531   2.616   3.168   3.636   3.617   3.166   2.677   2.488   2.607   2.789   2.810   2.658   2.485   2.403   2.397 
+  4.303   4.410   4.516   4.516   4.412   4.304   4.270   4.280   4.230   4.066   3.873   3.796   3.891   4.033   4.011   3.733   3.331   3.069   3.106   3.345   3.518   3.432   3.152   2.943   3.011   3.306   3.550   3.488   3.113   2.667   2.411   2.406   2.481   2.436   2.241   2.057 
+  3.770   3.671   3.584   3.639   3.880   4.203   4.416   4.353   3.989   3.471   3.041   2.900   3.107   3.556   4.050   4.407   4.539   4.469   4.294   4.118   4.009   3.981   3.993   3.977   3.864   3.622   3.288   2.953   2.723   2.648   2.687   2.720   2.636   2.404   2.112   1.909 
+  4.280   3.754   3.057   2.626   2.658   3.026   3.450   3.738   3.878   3.933   3.901   3.717   3.395   3.116   3.139   3.555   4.144   4.503   4.362   3.832   3.324   3.210   3.505   3.860   3.869   3.418   2.772   2.334   2.311   2.578   2.823   2.829   2.611   2.339   2.154   2.080 
+  3.731   3.625   3.550   3.637   3.860   4.034   3.963   3.624   3.199   2.951   3.022   3.346   3.718   3.957   4.016   3.963   3.882   3.801   3.702   3.585   3.490   3.458   3.463   3.419   3.253   2.995   2.784   2.772   2.998   3.331   3.544   3.453   3.028   2.406   1.810   1.451 
+  4.686   4.091   3.398   3.181   3.610   4.306   4.661   4.332   3.516   2.779   2.613   3.073   3.791   4.297   4.366   4.121   3.849   3.742   3.777   3.817   3.790   3.754   3.815   3.972   4.081   3.960   3.566   3.059   2.709   2.686   2.924   3.158   3.114   2.713   2.143   1.733 
+  5.253   4.233   2.963   2.360   2.759   3.679   4.255   3.944   2.940   1.964   1.679   2.217   3.171   3.982   4.350   4.336   4.156   3.934   3.644   3.257   2.890   2.763   3.009   3.506   3.926   3.967   3.589   3.036   2.651   2.616   2.834   3.025   2.942   2.543   2.014   1.646 
+  5.029   4.434   3.757   3.581   4.046   4.713   4.916   4.316   3.195   2.254   2.084   2.738   3.734   4.451   4.574   4.253   3.885   3.757   3.847   3.925   3.815   3.568   3.401   3.479   3.749   3.976   3.943   3.631   3.232   2.976   2.931   2.951   2.805   2.391   1.843   1.453 
+  4.303   3.864   3.385   3.321   3.794   4.471   4.827   4.565   3.859   3.217   3.083   3.502   4.106   4.431   4.276   3.838   3.507   3.536   3.837   4.089   4.028   3.672   3.306   3.231   3.513   3.926   4.137   3.966   3.506   3.024   2.737   2.662   2.645   2.536   2.329   2.159 
+  4.156   3.507   2.781   2.642   3.294   4.308   4.971   4.850   4.119   3.389   3.208   3.653   4.321   4.684   4.503   3.953   3.431   3.218   3.310   3.494   3.573   3.522   3.462   3.510   3.661   3.789   3.762   3.543   3.212   2.892   2.665   2.531   2.445   2.361   2.277   2.220 
+  4.381   4.365   4.357   4.387   4.447   4.474   4.367   4.046   3.538   2.998   2.657   2.690   3.091   3.665   4.126   4.275   4.100   3.756   3.434   3.225   3.096   2.966   2.813   2.719   2.797   3.085   3.485   3.805   3.876   3.654   3.235   2.791   2.465   2.307   2.277   2.293 
+  2.995   3.193   3.430   3.544   3.522   3.490   3.546   3.626   3.542   3.185   2.684   2.357   2.457   2.954   3.535   3.848   3.769   3.469   3.235   3.222   3.354   3.449   3.416   3.331   3.332   3.459   3.595   3.584   3.376   3.074   2.822   2.665   2.527   2.314   2.042   1.842 
+  3.260   2.919   2.513   2.367   2.596   3.026   3.357   3.408   3.241   3.075   3.077   3.240   3.434   3.566   3.685   3.922   4.334   4.789   5.033   4.869   4.323   3.636   3.107   2.892   2.931   3.027   3.013   2.860   2.662   2.530   2.492   2.477   2.388   2.190   1.944   1.775 
+  3.819   3.778   3.766   3.840   3.954   3.972   3.768   3.344   2.846   2.479   2.381   2.567   2.955   3.443   3.937   4.341   4.541   4.443   4.053   3.513   3.048   2.830   2.875   3.049   3.178   3.178   3.091   3.010   2.977   2.939   2.810   2.551   2.213   1.894   1.670   1.562 
+  4.428   4.082   3.682   3.571   3.851   4.301   4.553   4.380   3.855   3.275   2.933   2.936   3.188   3.515   3.783   3.936   3.938   3.743   3.328   2.765   2.236   1.952   2.023   2.393   2.872   3.250   3.401   3.307   3.022   2.630   2.232   1.933   1.815   1.889   2.071   2.216 
+  3.322   3.255   3.258   3.490   3.983   4.569   4.954   4.885   4.332   3.524   2.846   2.617   2.913   3.539   4.160   4.497   4.473   4.200   3.861   3.580   3.362   3.146   2.903   2.678   2.564   2.613   2.774   2.914   2.897   2.675   2.319   1.974   1.766   1.736   1.819   1.903 
+  4.048   3.134   2.029   1.605   2.192   3.343   4.216   4.246   3.560   2.823   2.669   3.208   3.980   4.354   4.022   3.193   2.391   2.054   2.259   2.749   3.176   3.343   3.285   3.167   3.138   3.242   3.423   3.582   3.633   3.529   3.270   2.902   2.501   2.147   1.895   1.767 
+  5.388   4.164   2.678   2.053   2.659   3.860   4.596   4.294   3.310   2.568   2.761   3.791   4.913   5.363   4.940   4.056   3.319   3.056   3.167   3.342   3.374   3.272   3.149   3.051   2.928   2.739   2.543   2.462   2.550   2.724   2.826   2.764   2.577   2.384   2.269   2.230 
+  2.952   2.816   2.886   3.457   4.388   5.129   5.178   4.534   3.736   3.405   3.718   4.281   4.510   4.162   3.534   3.160   3.306   3.730   3.928   3.602   2.937   2.426   2.444   2.941   3.523   3.801   3.683   3.377   3.147   3.082   3.069   2.944   2.655   2.284   1.965   1.788 
+  4.967   4.651   4.172   3.769   3.658   3.894   4.322   4.644   4.611   4.195   3.621   3.211   3.163   3.433   3.803   4.053   4.096   3.968   3.730   3.412   3.054   2.784   2.781   3.129   3.668   4.027   3.878   3.216   2.414   1.966   2.101   2.593   2.950   2.827   2.317   1.863 
+  3.409   3.154   2.949   3.123   3.711   4.382   4.683   4.389   3.671   2.957   2.613   2.714   3.061   3.399   3.612   3.743   3.862   3.932   3.826   3.461   2.925   2.459   2.302   2.526   2.983   3.409   3.586   3.453   3.098   2.676   2.312   2.065   1.936   1.892   1.893   1.904 
+  5.773   4.962   3.965   3.511   3.826   4.459   4.670   4.042   2.823   1.722   1.365   1.875   2.859   3.772   4.296   4.455   4.431   4.329   4.117   3.745   3.308   3.026   3.081   3.436   3.835   3.982   3.757   3.292   2.850   2.623   2.603   2.617   2.483   2.152   1.744   1.463 
+  3.978   3.686   3.308   3.084   3.101   3.226   3.233   2.994   2.589   2.251   2.197   2.480   2.982   3.506   3.903   4.118   4.169   4.090   3.913   3.680   3.458   3.312   3.262   3.265   3.246   3.160   3.026   2.909   2.864   2.884   2.898   2.824   2.627   2.342   2.063   1.891 
+  4.411   4.263   4.180   4.349   4.694   4.889   4.636   3.954   3.213   2.858   3.070   3.637   4.141   4.288   4.094   3.798   3.627   3.628   3.700   3.740   3.744   3.762   3.799   3.778   3.623   3.359   3.117   3.013   3.030   3.028   2.873   2.573   2.277   2.139   2.174   2.257 
+  4.678   4.800   5.057   5.419   5.752   5.851   5.550   4.852   3.973   3.241   2.923   3.077   3.534   4.015   4.296   4.316   4.164   3.981   3.859   3.796   3.741   3.660   3.569   3.519   3.544   3.616   3.662   3.602   3.409   3.124   2.836   2.632   2.557   2.595   2.684   2.751 
+  2.768   3.145   3.655   4.013   4.117   4.083   4.094   4.205   4.300   4.229   3.979   3.701   3.581   3.677   3.892   4.083   4.193   4.264   4.336   4.363   4.247   3.977   3.703   3.642   3.881   4.264   4.486   4.339   3.891   3.420   3.170   3.144   3.130   2.929   2.564   2.269 
+  3.200   3.030   2.906   3.078   3.606   4.262   4.650   4.480   3.791   2.964   2.478   2.590   3.162   3.780   4.064   3.937   3.633   3.470   3.578   3.823   3.979   3.960   3.904   4.017   4.330   4.620   4.585   4.117   3.439   2.938   2.849   3.060   3.220   3.058   2.629   2.263 
+  2.402   2.583   2.924   3.372   3.839   4.197   4.321   4.149   3.758   3.362   3.206   3.410   3.865   4.285   4.393   4.118   3.638   3.244   3.127   3.253   3.436   3.512   3.470   3.425   3.473   3.590   3.658   3.594   3.446   3.339   3.340   3.362   3.228   2.846   2.335   1.966 
+  5.243   4.865   4.362   4.006   3.858   3.761   3.558   3.293   3.187   3.393   3.790   4.041   3.891   3.425   3.024   3.044   3.493   4.021   4.225   3.995   3.595   3.401   3.556   3.855   3.956   3.702   3.262   2.969   3.016   3.297   3.508   3.406   2.975   2.398   1.900   1.625 
+  4.379   4.413   4.307   3.927   3.384   2.997   3.024   3.421   3.857   3.996   3.780   3.461   3.354   3.557   3.888   4.083   4.045   3.906   3.857   3.942   4.027   3.965   3.770   3.606   3.602   3.690   3.656   3.359   2.911   2.604   2.644   2.942   3.175   3.079   2.700   2.361 
+  6.230   5.455   4.473   3.948   4.093   4.530   4.644   4.119   3.192   2.440   2.299   2.757   3.423   3.877   3.961   3.790   3.550   3.311   3.039   2.735   2.537   2.627   3.051   3.625   4.035   4.058   3.714   3.218   2.811   2.593   2.512   2.466   2.399   2.324   2.272   2.250 
+  5.726   4.913   3.841   3.192   3.260   3.781   4.207   4.166   3.730   3.285   3.174   3.432   3.818   4.061   4.083   3.989   3.911   3.857   3.735   3.493   3.214   3.060   3.119   3.303   3.408   3.283   2.951   2.584   2.360   2.331   2.401   2.428   2.328   2.123   1.903   1.766 
+  5.252   4.416   3.353   2.816   3.153   4.072   4.893   5.057   4.504   3.654   3.072   3.094   3.669   4.461   5.085   5.288   5.029   4.451   3.817   3.405   3.389   3.732   4.196   4.480   4.411   4.055   3.638   3.359   3.237   3.139   2.934   2.641   2.412   2.384   2.533   2.688 
+  3.845   3.648   3.414   3.357   3.582   3.980   4.259   4.130   3.539   2.770   2.311   2.533   3.413   4.505   5.226   5.240   4.672   3.978   3.592   3.624   3.849   3.949   3.801   3.553   3.456   3.614   3.882   3.985   3.744   3.219   2.646   2.269   2.184   2.318   2.522   2.659 
+  5.248   4.752   4.108   3.734   3.792   4.090   4.262   4.087   3.659   3.297   3.275   3.617   4.100   4.430   4.448   4.197   3.846   3.556   3.403   3.380   3.437   3.516   3.569   3.573   3.545   3.538   3.588   3.662   3.648   3.437   3.024   2.549   2.217   2.149   2.285   2.435 
+  4.039   3.975   3.929   3.947   3.955   3.816   3.491   3.143   3.041   3.334   3.906   4.456   4.741   4.763   4.715   4.751   4.812   4.688   4.255   3.659   3.227   3.193   3.479   3.754   3.720   3.375   2.987   2.831   2.928   3.041   2.916   2.533   2.120   1.931   2.001   2.139 
+  4.508   4.312   4.012   3.721   3.497   3.328   3.172   3.028   2.952   3.015   3.238   3.560   3.888   4.159   4.375   4.561   4.702   4.717   4.519   4.117   3.656   3.360   3.369   3.633   3.914   3.953   3.661   3.190   2.835   2.810   3.080   3.376   3.389   3.012   2.427   1.995 
+  4.733   4.104   3.356   3.075   3.431   4.057   4.393   4.168   3.613   3.227   3.337   3.839   4.331   4.484   4.306   4.077   4.062   4.271   4.489   4.503   4.306   4.085   4.022   4.121   4.208   4.102   3.780   3.397   3.150   3.124   3.242   3.349   3.336   3.198   3.018   2.895 
+  3.320   3.483   3.599   3.446   3.003   2.504   2.270   2.472   3.011   3.612   4.031   4.210   4.258   4.314   4.420   4.505   4.475   4.307   4.075   3.898   3.865   3.992   4.226   4.465   4.587   4.499   4.192   3.778   3.452   3.379   3.579   3.895   4.098   4.055   3.830   3.629 
+  4.291   3.695   2.939   2.544   2.716   3.221   3.609   3.596   3.262   2.948   2.962   3.365   3.975   4.538   4.885   4.968   4.810   4.472   4.077   3.819   3.880   4.290   4.851   5.239   5.228   4.862   4.425   4.216   4.329   4.607   4.802   4.784   4.614   4.444   4.366   4.357 
+  4.613   3.814   2.745   2.080   2.179   2.893   3.749   4.308   4.423   4.227   3.948   3.751   3.694   3.765   3.903   3.994   3.912   3.645   3.385   3.469   4.122   5.204   6.203   6.558   6.085   5.160   4.471   4.502   5.188   5.992   6.356   6.112   5.536   5.043   4.833   4.812 
+  4.941   4.656   4.250   3.949   3.903   4.105   4.423   4.688   4.793   4.742   4.618   4.529   4.540   4.639   4.740   4.738   4.587   4.356   4.222   4.362   4.826   5.461   5.981   6.143   5.919   5.528   5.298   5.441   5.914   6.455   6.763   6.686   6.284   5.756   5.302   5.051 
+  3.271   3.561   4.016   4.460   4.754   4.853   4.798   4.668   4.532   4.437   4.423   4.530   4.778   5.126   5.459   5.632   5.554   5.261   4.924   4.766   4.934   5.399   5.965   6.370   6.442   6.202   5.853   5.661   5.801   6.244   6.772   7.102   7.048   6.636   6.089   5.711 
+  3.573   3.862   4.235   4.451   4.414   4.233   4.114   4.188   4.424   4.682   4.840   4.885   4.885   4.909   4.966   5.020   5.041   5.038   5.044   5.093   5.209   5.428   5.783   6.265   6.773   7.137   7.220   7.039   6.782   6.688   6.868   7.214   7.489   7.519   7.342   7.161 
+  4.477   4.391   4.343   4.437   4.626   4.728   4.592   4.254   3.926   3.826   4.002   4.319   4.607   4.832   5.099   5.509   6.008   6.392   6.481   6.303   6.096   6.118   6.428   6.837   7.077   7.034   6.848   6.794   7.048   7.543   8.023   8.233   8.081   7.673   7.226   6.945 
+  4.979   4.446   3.693   3.150   3.093   3.487   4.032   4.376   4.348   4.058   3.803   3.862   4.315   5.008   5.666   6.074   6.197   6.170   6.181   6.335   6.593   6.816   6.879   6.758   6.556   6.433   6.516   6.825   7.264   7.678   7.925   7.938   7.741   7.431   7.130   6.948 
+  5.340   4.717   4.098   4.140   4.904   5.765   5.950   5.202   3.987   3.084   2.961   3.499   4.232   4.825   5.297   5.832   6.452   6.923   7.001   6.740   6.503   6.635   7.129   7.612   7.708   7.407   7.095   7.186   7.724   8.335   8.561   8.270   7.733   7.343   7.257   7.321 
+  3.975   3.853   3.735   3.781   4.062   4.495   4.884   5.045   4.934   4.689   4.552   4.711   5.177   5.767   6.208   6.304   6.061   5.682   5.464   5.635   6.238   7.106   7.939   8.440   8.447   8.010   7.377   6.883   6.794   7.167   7.817   8.417   8.683   8.542   8.169   7.869 
+  3.898   4.152   4.409   4.398   4.082   3.708   3.607   3.922   4.498   5.030   5.321   5.430   5.579   5.925   6.399   6.764   6.835   6.663   6.514   6.663   7.171   7.817   8.248   8.219   7.747   7.090   6.575   6.421   6.641   7.080   7.516   7.774   7.786   7.606   7.361   7.194 
+  3.145   3.612   4.173   4.401   4.171   3.757   3.581   3.858   4.442   4.983   5.244   5.284   5.358   5.658   6.125   6.515   6.630   6.500   6.358   6.441   6.796   7.255   7.578   7.632   7.466   7.245   7.125   7.178   7.382   7.657   7.901   8.013   7.931   7.672   7.350   7.128 
+  4.934   4.569   4.174   4.077   4.269   4.414   4.219   3.765   3.476   3.728   4.475   5.262   5.620   5.471   5.169   5.144   5.521   6.053   6.427   6.578   6.714   7.023   7.406   7.535   7.203   6.605   6.233   6.449   7.136   7.770   7.873   7.431   6.874   6.659   6.858   7.137 
+  5.197   4.666   3.972   3.542   3.526   3.729   3.843   3.746   3.587   3.607   3.890   4.292   4.604   4.758   4.864   5.065   5.369   5.652   5.827   5.966   6.247   6.740   7.278   7.571   7.472   7.151   6.977   7.189   7.670   8.035   7.981   7.564   7.147   7.064   7.320   7.602 
+  4.049   3.630   3.081   2.771   2.893   3.360   3.920   4.348   4.561   4.596   4.511   4.340   4.136   4.020   4.144   4.573   5.196   5.765   6.071   6.101   6.041   6.117   6.397   6.733   6.890   6.750   6.419   6.147   6.143   6.433   6.864   7.228   7.397   7.377   7.265   7.175 
+  4.004   4.045   4.136   4.271   4.412   4.505   4.516   4.468   4.422   4.441   4.546   4.719   4.932   5.170   5.424   5.660   5.820   5.866   5.827   5.811   5.939   6.246   6.634   6.927   6.993   6.853   6.673   6.647   6.865   7.241   7.575   7.678   7.486   7.085   6.656   6.385 
+  4.376   4.278   4.168   4.154   4.284   4.497   4.656   4.649   4.490   4.338   4.407   4.806   5.432   6.000   6.220   5.988   5.472   5.021   4.959   5.403   6.214   7.095   7.746   7.984   7.787   7.279   6.683   6.265   6.228   6.610   7.225   7.736   7.839   7.467   6.853   6.396 
+  4.464   4.248   4.018   3.998   4.234   4.548   4.681   4.514   4.167   3.914   3.985   4.405   4.991   5.480   5.674   5.538   5.193   4.856   4.754   5.031   5.667   6.450   7.061   7.240   6.949   6.406   5.950   5.821   6.018   6.331   6.528   6.516   6.375   6.246   6.202   6.210 
+  6.138   5.513   4.734   4.338   4.475   4.816   4.880   4.493   3.945   3.740   4.143   4.949   5.648   5.834   5.500   4.986   4.673   4.706   4.954   5.198   5.332   5.395   5.454   5.499   5.453   5.293   5.127   5.137   5.430   5.928   6.398   6.608   6.468   6.072   5.628   5.344 
+  5.177   5.014   4.842   4.816   4.920   4.963   4.735   4.210   3.610   3.261   3.375   3.912   4.641   5.314   5.813   6.163   6.425   6.602   6.638   6.505   6.270   6.083   6.077   6.272   6.568   6.815   6.908   6.832   6.639   6.395   6.143   5.902   5.684   5.506   5.381   5.319 
+  4.646   4.287   3.890   3.828   4.207   4.774   5.102   4.925   4.331   3.689   3.377   3.547   4.084   4.754   5.383   5.920   6.361   6.655   6.705   6.469   6.052   5.694   5.622   5.887   6.323   6.666   6.738   6.563   6.318   6.175   6.157   6.127   5.913   5.466   4.933   4.568 
+  5.329   4.864   4.198   3.708   3.658   4.026   4.503   4.692   4.382   3.717   3.120   3.001   3.476   4.278   4.959   5.206   5.019   4.651   4.364   4.243   4.202   4.141   4.074   4.098   4.252   4.424   4.432   4.205   3.885   3.716   3.828   4.091   4.210   3.992   3.534   3.161 
+  5.568   5.436   5.111   4.586   4.005   3.605   3.538   3.727   3.913   3.871   3.606   3.351   3.356   3.662   4.054   4.240   4.097   3.757   3.484   3.445   3.591   3.731   3.716   3.554   3.377   3.307   3.361   3.471   3.560   3.602   3.596   3.515   3.310   2.973   2.593   2.338 
+  5.927   5.558   5.234   5.341   5.797   6.076   5.696   4.700   3.663   3.212   3.507   4.167   4.665   4.793   4.749   4.822   5.047   5.211   5.178   5.145   5.499   6.370   7.354   7.757   7.194   5.996   5.005   4.898   5.643   6.581   7.057   6.998   6.903   7.282   8.100   8.788 
+  5.896   5.313   4.652   4.446   4.747   5.089   4.934   4.181   3.248   2.693   2.747   3.197   3.680   4.033   4.346   4.718   5.031   5.052   4.758   4.511   4.801   5.760   6.914   7.504   7.130   6.139   5.363   5.405   6.126   6.818   6.898   6.471   6.213   6.692   7.765   8.659 
+  5.132   4.487   3.720   3.409   3.673   4.079   4.047   3.398   2.544   2.164   2.631   3.701   4.706   5.083   4.770   4.162   3.716   3.569   3.509   3.268   2.850   2.562   2.741   3.413   4.208   4.613   4.357   3.615   2.877   2.588   2.844   3.366   3.738   3.725   3.419   3.134 
+  3.116   3.249   3.583   4.116   4.660   4.897   4.600   3.847   3.029   2.611   2.823   3.515   4.280   4.745   4.795   4.575   4.309   4.113   3.951   3.753   3.539   3.434   3.557   3.891   4.262   4.466   4.427   4.262   4.194   4.383   4.801   5.250   5.508   5.484   5.275   5.088 
+  5.408   4.821   4.117   3.826   4.080   4.496   4.517   3.893   2.903   2.143   2.073   2.700   3.633   4.413   4.808   4.868   4.748   4.528   4.187   3.726   3.268   3.021   3.121   3.522   4.034   4.482   4.827   5.155   5.551   5.980   6.287   6.309   5.997   5.462   4.917   4.579 
+  5.242   5.123   5.004   5.013   5.158   5.283   5.174   4.734   4.091   3.549   3.386   3.648   4.107   4.427   4.411   4.141   3.886   3.858   4.026   4.157   4.035   3.680   3.341   3.276   3.508   3.785   3.810   3.522   3.181   3.151   3.563   4.160   4.487   4.270   3.669   3.163 
+  5.033   4.669   4.312   4.352   4.826   5.348   5.421   4.862   3.970   3.288   3.179   3.559   4.010   4.151   3.934   3.635   3.568   3.799   4.107   4.204   3.996   3.671   3.522   3.698   4.076   4.373   4.371   4.080   3.706   3.467   3.424   3.451   3.361   3.070   2.677   2.396 
+  6.310   6.059   5.747   5.616   5.769   6.077   6.246   6.037   5.455   4.778   4.370   4.414   4.768   5.088   5.107   4.855   4.615   4.658   4.985   5.322   5.376   5.132   4.889   5.009   5.568   6.258   6.629   6.480   6.028   5.707   5.760   5.998   5.972   5.402   4.486   3.786 
+ 12.298  12.027  11.617  11.245  11.022  10.898  10.692  10.227   9.498   8.720   8.199   8.097   8.289   8.461   8.386   8.144   8.072   8.454   9.225   9.957  10.192   9.838   9.285   9.103   9.573  10.446  11.152  11.279  10.898  10.474  10.434  10.817  11.281  11.460  11.303  11.080 
+ 13.360  13.943  14.649  14.924  14.531  13.661  12.693  11.876  11.213  10.622  10.136   9.904  10.011  10.327  10.597  10.703  10.816  11.247  12.102  13.079  13.651  13.506  12.843  12.243  12.195  12.711  13.358  13.677  13.579  13.367  13.373  13.608  13.758  13.527  12.976  12.509 
+ 13.651  14.398  15.424  16.117  16.115  15.459  14.449  13.401  12.513  11.899  11.643  11.749  12.056  12.275  12.205  11.969  11.994  12.674  13.972  15.335  16.065  15.870  15.102  14.468  14.449  14.945  15.460  15.630  15.555  15.627  16.003  16.299  15.845  14.346  12.321  10.863 
+ 14.029  14.855  16.002  16.814  16.914  16.348  15.423  14.436  13.547  12.851  12.459  12.434  12.664  12.856  12.769  12.493  12.470  13.154  14.558  16.115  17.047  16.961  16.169  15.420  15.290  15.763  16.368  16.696  16.781  16.954  17.341  17.548  16.919  15.194  12.953  11.364 
+ 13.851  14.875  16.254  17.163  17.187  16.495  15.528  14.596  13.755  12.998  12.461  12.337  12.611  12.944  12.945  12.606  12.439  13.072  14.622  16.433  17.510  17.327  16.275  15.343  15.277  16.009  16.837  17.177  17.101  17.157  17.632  18.060  17.534  15.607  12.937  10.996 
+ 13.756  14.852  16.318  17.261  17.249  16.482  15.448  14.474  13.592  12.775  12.171  12.016  12.322  12.734  12.803  12.478  12.282  12.898  14.488  16.395  17.576  17.461  16.440  15.529  15.498  16.251  17.039  17.258  17.039  17.022  17.555  18.147  17.793  15.958  13.289  11.316 
+ 13.677  14.809  16.296  17.203  17.106  16.266  15.228  14.309  13.480  12.652  11.975  11.751  12.062  12.556  12.724  12.436  12.183  12.683  14.162  16.001  17.159  17.050  16.060  15.211  15.251  16.031  16.756  16.836  16.491  16.464  17.138  17.931  17.696  15.809  12.962  10.837 
+ 13.690  14.657  15.894  16.564  16.312  15.404  14.358  13.478  12.734  12.030  11.475  11.313  11.598  12.018  12.153  11.934  11.827  12.438  13.873  15.483  16.328  15.983  14.956  14.255  14.502  15.397  16.070  15.977  15.454  15.357  16.094  17.040  16.959  15.170  12.357  10.234 
+ 12.616  13.186  13.904  14.269  14.090  13.572  13.074  12.794  12.664  12.508  12.247  11.930  11.609  11.246  10.808  10.432  10.441  11.089  12.257  13.412  13.966  13.752  13.174  12.855  13.084  13.570  13.765  13.454  13.025  13.114  13.921  14.865  14.975  13.754  11.737  10.201 
+ 12.757  12.753  12.522  11.869  10.868   9.862   9.209   8.999   9.014   8.938   8.618   8.139   7.680   7.348   7.145   7.075   7.218   7.657   8.313   8.913   9.166   9.022   8.734   8.634   8.808   9.007   8.907   8.507   8.225   8.560   9.554  10.602  10.842   9.874   8.194   6.903 
+ 12.075  12.032  11.668  10.770   9.494   8.315   7.637   7.452   7.391   7.100   6.558   6.026   5.715   5.567   5.391   5.203   5.342   6.151   7.507   8.715   8.991   8.155   6.866   6.112   6.367   7.191   7.689   7.405   6.803   6.809   7.825   9.156   9.495   8.094   5.584   3.627 
+ 12.786  12.432  11.677  10.593   9.463   8.629   8.196   7.907   7.374   6.467   5.481   4.869   4.801   4.986   4.989   4.731   4.648   5.277   6.635   8.024   8.532   7.838   6.556   5.746   6.001   6.939   7.604   7.396   6.658   6.313   6.904   7.943   8.273   7.142   5.019   3.337 
+ 12.371  12.014  11.290  10.287   9.243   8.427   7.927   7.575   7.112   6.453   5.776   5.328   5.143   4.998   4.680   4.322   4.385   5.238   6.687   7.955   8.239   7.396   6.122   5.399   5.667   6.468   6.923   6.595   5.929   5.809   6.626   7.745   7.962   6.592   4.222   2.391 
+ 11.872  11.896  11.745  11.220  10.305   9.189   8.096   7.147   6.374   5.846   5.716   6.081   6.800   7.489   7.776   7.619   7.351   7.386   7.807   8.269   8.315   7.853   7.295   7.196   7.701   8.343   8.428   7.707   6.687   6.248   6.869   8.158   9.144   9.112   8.224   7.374 
+ 11.854  12.617  13.463  13.627  12.904  11.761  10.868  10.521  10.496  10.409  10.159   9.992  10.159  10.578  10.888  10.849  10.651  10.748  11.373  12.209  12.624  12.272  11.484  11.017  11.361  12.256  12.914  12.757  11.981  11.395  11.655  12.640  13.553  13.671  13.021  12.337 
+ 12.346  12.779  13.289  13.464  13.154  12.538  11.915  11.440  11.075  10.744  10.485  10.422  10.580  10.792  10.845  10.736  10.769  11.310  12.403  13.608  14.277  14.068  13.256  12.526  12.425  12.934  13.557  13.804  13.636  13.443  13.622  14.165  14.666  14.729  14.364  13.980 
+ 12.629  13.600  14.813  15.403  15.028  14.028  13.024  12.376  12.011  11.696  11.381  11.232  11.357  11.583  11.603  11.365  11.260  11.822  13.168  14.734  15.640  15.421  14.453  13.634  13.603  14.194  14.662  14.457  13.779  13.380  13.777  14.659  15.102  14.440  12.956  11.733 
+ 13.321  14.278  15.499  16.164  15.940  15.110  14.182  13.404  12.684  11.905  11.234  11.031  11.444  12.136  12.518  12.317  11.913  12.058  13.167  14.849  16.158  16.368  15.585  14.617  14.241  14.547  14.973  14.955  14.511  14.189  14.435  15.040  15.266  14.564  13.190  12.083 
+ 13.437  14.456  15.750  16.444  16.194  15.331  14.420  13.726  13.103  12.347  11.572  11.170  11.385  11.978  12.387  12.283  11.953  12.092  13.131  14.750  16.065  16.352  15.665  14.749  14.363  14.634  15.056  15.083  14.693  14.360  14.478  14.840  14.772  13.801  12.236  11.034 
+ 13.339  14.428  15.804  16.531  16.260  15.377  14.517  13.959  13.501  12.854  12.081  11.589  11.683  12.179  12.541  12.429  12.108  12.242  13.239  14.764  15.946  16.120  15.421  14.647  14.520  15.049  15.592  15.545  14.945  14.397  14.390  14.720  14.627  13.568  11.860  10.547 
+ 13.119  14.246  15.631  16.274  15.844  14.821  13.931  13.467  13.145  12.577  11.790  11.242  11.316  11.864  12.315  12.271  11.971  12.104  13.107  14.634  15.768  15.817  14.946  14.030  13.853  14.410  14.993  14.935  14.284  13.702  13.721  14.101  14.002  12.823  10.923   9.463 
+ 12.637  13.673  14.882  15.290  14.611  13.388  12.404  11.979  11.823  11.503  10.974  10.609  10.725  11.163  11.421  11.224  10.920  11.211  12.425  14.054  15.082  14.862  13.720  12.682  12.548  13.188  13.733  13.477  12.593  11.951  12.200  13.036  13.413  12.548  10.759   9.301 
+ 11.651  12.021  12.384  12.329  11.768  10.969  10.268   9.776   9.370   8.932   8.546   8.397   8.510   8.649   8.547   8.265   8.259   8.994  10.419  11.841  12.410  11.832  10.660   9.839   9.885  10.453  10.715  10.202   9.305   8.918   9.538  10.685  11.239  10.452   8.704   7.271 
+ 12.335  12.173  11.630  10.570   9.207   8.029   7.415   7.322   7.337   7.069   6.478   5.839   5.407   5.161   4.907   4.619   4.607   5.270   6.619   8.072   8.810   8.433   7.328   6.365   6.169   6.614   7.007   6.789   6.083   5.561   5.773   6.579   7.254   7.171   6.407   5.682 
+ 11.465  11.402  10.891   9.629   7.858   6.339   5.803   6.371   7.443   8.174   8.099   7.384   6.547   5.970   5.663   5.453   5.302   5.409   5.963   6.848   7.628   7.868   7.497   6.865   6.421   6.346   6.470   6.524   6.450   6.435   6.650   6.987   7.102   6.743   6.048   5.491 
+ 10.803  10.935  10.829  10.138   8.933   7.727   7.073   7.114   7.485   7.635   7.273   6.532   5.765   5.219   4.903   4.736   4.746   5.075   5.756   6.539   6.990   6.833   6.206   5.584   5.394   5.681   6.120   6.359   6.351   6.355   6.617   7.075   7.380   7.244   6.747   6.305 
+  8.983   9.160   9.277   9.069   8.481   7.719   7.073   6.696   6.508   6.314   6.002   5.637   5.373   5.298   5.349   5.391   5.352   5.286   5.303   5.440   5.612   5.690   5.624   5.494   5.434   5.504   5.643   5.732   5.721   5.683   5.760   6.046   6.515   7.038   7.469   7.706 
+  9.353   9.759  10.090   9.799   8.744   7.307   6.077   5.404   5.201   5.136   4.981   4.781   4.712   4.823   4.941   4.847   4.540   4.294   4.434   5.030   5.791   6.281   6.272   5.918   5.606   5.626   5.947   6.284   6.373   6.202   6.020   6.127   6.657   7.483   8.306   8.812 
+  9.143   9.656   9.971   9.350   7.766   5.989   4.956   5.001   5.629   6.020   5.752   5.086   4.599   4.573   4.762   4.713   4.305   3.920   4.084   4.918   5.953   6.500   6.245   5.518   5.003   5.168   5.923   6.774   7.275   7.350   7.243   7.220   7.339   7.485   7.553   7.556 
+ 10.512  10.498  10.235   9.562   8.667   8.019   7.983   8.467   8.977   9.034   8.588   8.037   7.841   8.092   8.457   8.508   8.134   7.629   7.389   7.549   7.884   8.083   8.068   8.061   8.327   8.879   9.449   9.762   9.813   9.857  10.128  10.561  10.825  10.652  10.133   9.685 
+ 11.543  11.830  12.058  11.878  11.285  10.630  10.283  10.295  10.377  10.215   9.792   9.399   9.320   9.532   9.723   9.615   9.263   9.018   9.178   9.678  10.139  10.234  10.018   9.880  10.170  10.856  11.548  11.881  11.859  11.830  12.117  12.668  13.091  13.040  12.575  12.136 
+ 11.387  12.172  13.114  13.495  13.089  12.264  11.562  11.208  11.006  10.674  10.202   9.849   9.794   9.877   9.742   9.288   8.932   9.312  10.667  12.453  13.666  13.629  12.581  11.499  11.294  12.082  13.171  13.743  13.570  13.133  13.076  13.570  14.199  14.433  14.174  13.823 
+ 12.718  13.571  14.642  15.182  14.896  14.074  13.220  12.593  12.096  11.552  11.016  10.749  10.902  11.279  11.496  11.402  11.319  11.786  12.990  14.452  15.321  15.088  14.053  13.104  12.970  13.612  14.319  14.398  13.812  13.171  13.113  13.694  14.359  14.511  14.096  13.624 
+ 13.401  14.142  15.137  15.782  15.766  15.200  14.399  13.602  12.887  12.299  11.967  12.017  12.365  12.668  12.577  12.102  11.720  12.027  13.200  14.750  15.839  15.935  15.230  14.448  14.223  14.597  15.093  15.244  15.043  14.880  15.044  15.326  15.156  14.178  12.711  11.612 
+ 13.549  14.464  15.706  16.532  16.548  15.873  14.899  13.947  13.132  12.487  12.108  12.100  12.394  12.688  12.676  12.384  12.248  12.774  14.030  15.479  16.349  16.269  15.586  15.051  15.145  15.681  16.047  15.863  15.376  15.201  15.613  16.132  15.850  14.296  12.023  10.343 
+ 13.547  14.525  15.861  16.771  16.832  16.161  15.176  14.232  13.460  12.884  12.564  12.574  12.830  13.047  12.960  12.635  12.528  13.129  14.473  15.986  16.876  16.777  16.052  15.468  15.512  15.995  16.300  16.048  15.500  15.282  15.677  16.203  15.942  14.410  12.152  10.479 
+ 13.434  14.477  15.914  16.917  17.025  16.346  15.321  14.342  13.574  13.036  12.759  12.777  12.992  13.142  13.002  12.668  12.589  13.215  14.543  15.988  16.789  16.630  15.914  15.409  15.569  16.143  16.463  16.123  15.400  14.985  15.251  15.800  15.746  14.556  12.656  11.210 
+ 13.488  14.494  15.857  16.758  16.751  15.959  14.839  13.795  13.004  12.494  12.286  12.381  12.635  12.769  12.601  12.318  12.429  13.346  14.913  16.367  16.884  16.270  15.167  14.533  14.811  15.559  15.897  15.373  14.430  13.987  14.508  15.440  15.619  14.341  12.117  10.388 
+ 13.497  14.191  15.175  15.894  15.952  15.295  14.180  12.997  12.100  11.676  11.697  11.922  12.015  11.773  11.331  11.157  11.744  13.173  14.908  16.071  16.065  15.057  13.892  13.442  13.914  14.720  15.025  14.523  13.722  13.469  14.120  15.121  15.428  14.437  12.602  11.161 
+ 13.016  13.584  14.315  14.693  14.462  13.773  13.032  12.594  12.527  12.614  12.536  12.090  11.310  10.463   9.936  10.068  10.956  12.342  13.675  14.387  14.230  13.466  12.693  12.428  12.734  13.220  13.417  13.218  12.979  13.164  13.841  14.502  14.420  13.291  11.596  10.345 
+ 12.867  13.628  14.687  15.424  15.442  14.757  13.707  12.693  11.964  11.560  11.377  11.265  11.106  10.886  10.735  10.894  11.558  12.660  13.804  14.449  14.290  13.530  12.774  12.591  13.065  13.746  14.063  13.845  13.483  13.548  14.194  14.909  14.883  13.733  11.946  10.608 
+ 13.719  13.997  14.553  15.237  15.654  15.338  14.117  12.370  10.880  10.327  10.790  11.679  12.190  11.940  11.271  10.965  11.589  13.011  14.474  15.176  14.875  14.041  13.443  13.529  14.106  14.567  14.446  13.835  13.295  13.359  14.039  14.758  14.790  13.854  12.397  11.316 
+ 13.991  14.303  14.869  15.502  15.871  15.635  14.687  13.303  12.038  11.384  11.427  11.797  11.965  11.687  11.221  11.139  11.846  13.205  14.585  15.305  15.150  14.514  14.067  14.210  14.756  15.119  14.845  14.026  13.253  13.105  13.620  14.194  14.040  12.848  11.116   9.852 
+ 13.935  14.402  15.133  15.797  16.061  15.730  14.838  13.668  12.638  12.100  12.138  12.497  12.747  12.594  12.131  11.816  12.141  13.217  14.613  15.612  15.729  15.081  14.290  13.993  14.344  14.927  15.164  14.837  14.268  13.980  14.152  14.375  13.975  12.649  10.850   9.556 
+ 13.873  14.529  15.460  16.168  16.329  15.921  15.127  14.175  13.269  12.599  12.322  12.444  12.747  12.888  12.689  12.369  12.435  13.257  14.659  15.940  16.382  15.848  14.919  14.425  14.733  15.453  15.832  15.474  14.714  14.264  14.457  14.820  14.434  12.813  10.504   8.808 
+ 13.667  14.483  15.538  16.157  16.071  15.511  14.871  14.313  13.730  13.027  12.365  12.053  12.201  12.545  12.689  12.558  12.562  13.224  14.588  16.007  16.611  16.078  14.979  14.307  14.598  15.445  15.908  15.440  14.433  13.822  14.098  14.689  14.383  12.487   9.647   7.527 
+ 13.766  14.492  15.366  15.731  15.391  14.692  14.112  13.805  13.523  12.971  12.173  11.487  11.249  11.463  11.852  12.212  12.645  13.399  14.470  15.426  15.719  15.221  14.442  14.121  14.549  15.255  15.444  14.782  13.782  13.337  13.792  14.451  14.080  12.043   9.069   6.873 
+ 12.975  13.741  14.626  14.879  14.267  13.218  12.416  12.219  12.426  12.532  12.205  11.527  10.865  10.548  10.676  11.178  11.952  12.883  13.762  14.272  14.188  13.620  13.038  12.934  13.389  13.946  13.987  13.300  12.309  11.702  11.750  11.967  11.479   9.847   7.603   5.974 
+ 10.590  11.649  12.717  12.636  11.173   9.233   8.079   8.281   9.307  10.076   9.916   9.073   8.370   8.419   9.119   9.855  10.110   9.891   9.606   9.594   9.813   9.939   9.731   9.249   8.733   8.329   7.984   7.602   7.244   7.107   7.257   7.431   7.173   6.250   4.968   4.033 
+ 10.192  10.958  11.627  11.272   9.757   7.870   6.625   6.404   6.710   6.719   6.075   5.188   4.795   5.259   6.276   7.206   7.666   7.771   7.869   8.078   8.151   7.784   7.010   6.237   5.875   5.944   6.073   5.908   5.497   5.239   5.428   5.866   5.973   5.341   4.194   3.287 
+ 11.038  11.550  11.882  11.310   9.788   8.020   6.861   6.610   6.842   6.898   6.512   5.998   5.856   6.249   6.874   7.313   7.452   7.517   7.720   7.938   7.801   7.126   6.219   5.660   5.751   6.169   6.231   5.573   4.568   4.036   4.462   5.459   6.043   5.509   4.126   2.958 
+ 10.495  10.927  11.132  10.448   8.887   7.182   6.163   6.042   6.290   6.185   5.510   4.718   4.461   4.956   5.798   6.371   6.424   6.241   6.275   6.649   7.032   6.996   6.459   5.763   5.315   5.187   5.096   4.782   4.357   4.231   4.655   5.359   5.697   5.223   4.162   3.289 
+  9.213   9.671  10.076   9.853   8.856   7.477   6.307   5.677   5.488   5.426   5.298   5.171   5.206   5.434   5.725   5.964   6.207   6.611   7.188   7.676   7.704   7.149   6.320   5.748   5.736   6.086   6.283   5.983   5.347   4.893   4.981   5.440   5.696   5.315   4.442   3.717 
+  9.447   9.304   8.845   7.968   6.879   6.038   5.832   6.245   6.857   7.162   6.951   6.434   6.010   5.928   6.130   6.381   6.514   6.553   6.619   6.760   6.901   6.949   6.908   6.865   6.857   6.773   6.453   5.885   5.309   5.055   5.249   5.642   5.782   5.393   4.645   4.051 
+  8.714   9.394  10.070  10.005   9.106   8.049   7.725   8.478   9.801  10.743  10.668   9.724   8.669   8.238   8.612   9.379   9.949  10.022   9.739   9.465   9.461   9.729  10.074  10.287  10.243   9.916   9.355   8.687   8.104   7.781   7.752   7.847   7.798   7.454   6.930   6.536 
+  8.356   8.712   8.931   8.505   7.438   6.326   5.901   6.425   7.454   8.177   8.039   7.148   6.137   5.648   5.865   6.452   6.891   6.896   6.575   6.267   6.244   6.521   6.898   7.128   7.066   6.718   6.207   5.703   5.363   5.264   5.348   5.436   5.332   4.967   4.477   4.127 
+  8.685   7.914   6.855   6.124   6.022   6.331   6.497   6.065   5.052   3.949   3.355   3.527   4.185   4.739   4.758   4.294   3.813   3.790   4.309   5.006   5.389   5.245   4.792   4.447   4.446   4.657   4.741   4.511   4.125   3.933   4.127   4.520   4.684   4.343   3.649   3.089 
+  6.327   6.151   5.882   5.638   5.497   5.458   5.451   5.390   5.226   4.974   4.690   4.439   4.254   4.142   4.098   4.133   4.273   4.535   4.889   5.245   5.474   5.459   5.168   4.684   4.182   3.853   3.808   4.026   4.354   4.590   4.572   4.251   3.699   3.069   2.534   2.229 
+  4.034   4.600   5.338   5.768   5.672   5.201   4.679   4.319   4.119   3.978   3.876   3.909   4.139   4.465   4.665   4.601   4.386   4.307   4.568   5.069   5.460   5.429   4.971   4.392   4.041   4.027   4.166   4.190   4.008   3.757   3.628   3.649   3.661   3.495   3.174   2.910 
+  3.869   4.431   5.159   5.567   5.434   4.927   4.410   4.141   4.105   4.105   3.982   3.746   3.528   3.427   3.438   3.499   3.602   3.817   4.199   4.682   5.077   5.199   5.009   4.630   4.239   3.933   3.704   3.519   3.410   3.450   3.643   3.848   3.852   3.548   3.065   2.700 
+  4.660   4.849   5.029   4.994   4.718   4.352   4.057   3.852   3.647   3.415   3.299   3.499   4.036   4.642   4.929   4.727   4.268   4.027   4.322   5.031   5.684   5.857   5.498   4.922   4.489   4.292   4.149   3.874   3.521   3.341   3.495   3.817   3.908   3.502   2.754   2.161 
+  5.511   5.103   4.650   4.534   4.797   5.091   5.002   4.445   3.765   3.451   3.714   4.303   4.722   4.658   4.235   3.894   4.009   4.581   5.258   5.639   5.581   5.260   4.961   4.819   4.736   4.524   4.119   3.673   3.427   3.503   3.778   3.959   3.791   3.245   2.557   2.084 
+  4.873   4.800   4.759   4.845   5.029   5.143   5.000   4.561   3.999   3.597   3.535   3.752   3.983   3.969   3.675   3.334   3.265   3.609   4.191   4.635   4.643   4.233   3.726   3.501   3.707   4.160   4.499   4.468   4.084   3.585   3.204   2.995   2.837   2.600   2.294   2.067 
+  6.073   5.269   4.199   3.540   3.624   4.213   4.714   4.654   4.047   3.364   3.147   3.559   4.250   4.636   4.380   3.668   3.073   3.095   3.766   4.620   5.061   4.814   4.107   3.451   3.232   3.448   3.784   3.929   3.819   3.618   3.495   3.418   3.198   2.706   2.067   1.607 
+  6.035   5.258   4.218   3.553   3.561   4.022   4.435   4.432   4.037   3.576   3.367   3.469   3.689   3.801   3.750   3.671   3.728   3.954   4.224   4.378   4.356   4.226   4.092   3.989   3.874   3.698   3.491   3.354   3.374   3.529   3.680   3.653   3.360   2.861   2.339   2.009 
+  3.699   3.979   4.418   4.798   4.882   4.538   3.854   3.146   2.805   3.068   3.840   4.729   5.279   5.251   4.760   4.180   3.879   3.991   4.361   4.696   4.773   4.572   4.242   3.966   3.834   3.814   3.814   3.765   3.666   3.550   3.444   3.332   3.187   3.000   2.812   2.691 
+  4.305   4.174   4.103   4.268   4.621   4.880   4.756   4.219   3.565   3.212   3.379   3.912   4.410   4.533   4.258   3.868   3.713   3.932   4.372   4.734   4.807   4.604   4.302   4.067   3.930   3.800   3.586   3.305   3.069   2.983   3.037   3.093   2.992   2.683   2.281   1.999 
+  4.100   3.994   3.901   3.947   4.147   4.371   4.437   4.252   3.911   3.636   3.631   3.941   4.421   4.842   5.048   5.032   4.901   4.761   4.641   4.503   4.323   4.142   4.039   4.042   4.063   3.952   3.623   3.151   2.749   2.608   2.735   2.924   2.908   2.567   2.046   1.659 
+  5.534   5.462   5.302   5.036   4.663   4.215   3.763   3.403   3.234   3.318   3.638   4.081   4.469   4.640   4.538   4.256   3.986   3.906   4.068   4.373   4.639   4.725   4.607   4.363   4.099   3.868   3.663   3.458   3.257   3.099   3.019   3.002   2.996   2.952   2.873   2.810 
+  5.202   4.572   3.783   3.403   3.658   4.271   4.705   4.582   3.958   3.240   2.856   2.958   3.368   3.777   3.978   3.973   3.891   3.845   3.859   3.900   3.938   3.970   3.976   3.899   3.675   3.317   2.947   2.746   2.830   3.148   3.494   3.626   3.412   2.909   2.338   1.964 
+  5.796   5.169   4.338   3.833   3.897   4.305   4.546   4.221   3.380   2.510   2.196   2.682   3.688   4.609   4.946   4.643   4.070   3.693   3.704   3.920   3.994   3.743   3.294   2.946   2.885   3.027   3.130   3.047   2.874   2.847   3.081   3.412   3.514   3.193   2.595   2.123 
+  6.703   5.829   4.664   3.914   3.870   4.209   4.300   3.753   2.768   1.999   2.046   2.977   4.263   5.159   5.231   4.623   3.888   3.545   3.728   4.165   4.471   4.454   4.217   3.986   3.874   3.795   3.594   3.247   2.929   2.866   3.118   3.483   3.639   3.409   2.925   2.536 
+  5.619   6.502   7.891   9.250  10.165  10.504  10.362   9.915   9.299   8.622   8.034   7.744   7.921   8.551   9.377  10.004  10.127   9.711   8.995   8.335   7.972   7.926   8.036   8.111   8.070   7.959   7.876   7.871   7.901   7.869   7.698   7.381   6.984   6.601   6.312   6.159 
+  5.627   6.114   7.143   8.664  10.357  11.683  12.133  11.520  10.093   8.410   7.080   6.531   6.900   8.022   9.467  10.657  11.062  10.474   9.155   7.735   6.848   6.738   7.149   7.567   7.647   7.451   7.317   7.488   7.857   8.058   7.815   7.213   6.641   6.444   6.627   6.874 
+  4.668   4.282   3.968   4.333   5.697   7.809   9.892  11.009  10.570   8.682   6.147   4.084   3.354   4.112   5.742   7.240   7.822   7.371   6.456   5.886   6.131   7.013   7.888   8.161   7.730   7.024   6.614   6.744   7.166   7.411   7.238   6.868   6.784   7.280   8.154   8.834 
+  4.736   4.814   4.893   4.974   5.246   5.963   7.159   8.466   9.274   9.160   8.250   7.189   6.696   7.061   7.965   8.763   8.980   8.609   8.016   7.585   7.422   7.358   7.178   6.836   6.475   6.271   6.275   6.397   6.515   6.576   6.601   6.615   6.599   6.521   6.397   6.299 
+  6.202   6.096   6.131   6.599   7.592   8.916  10.205  11.135  11.576  11.604  11.424  11.278  11.373  11.799  12.450  13.025  13.155  12.656  11.703  10.764  10.289  10.368  10.646  10.594   9.945   8.931   8.118   7.965   8.462   9.144   9.441   9.076   8.202   7.212   6.449   6.061 
+ 11.136  11.305  11.572  11.859  12.163  12.580  13.240  14.171  15.198  15.991  16.263  15.999  15.513  15.247  15.432  15.872  16.056  15.552  14.373  13.010  12.070  11.803  11.902  11.762  11.000   9.812   8.867   8.813   9.772  11.213  12.282  12.326  11.243   9.481   7.753   6.705 
+ 11.454  11.725  12.102  12.390  12.544  12.741  13.269  14.283  15.611  16.772  17.268  16.942  16.147  15.528  15.558  16.165  16.753  16.654  15.658  14.208  13.076  12.773  13.145  13.500  13.160  12.013  10.625   9.828  10.104  11.220  12.358  12.639  11.651   9.684   7.557   6.195 
+ 11.782  11.905  12.123  12.388  12.681  13.061  13.672  14.622  15.807  16.840  17.230  16.749  15.704  14.829  14.793  15.670  16.818  17.320  16.692  15.279  14.011  13.674  14.294  15.120  15.229  14.256  12.676  11.424  11.186  11.897  12.811  13.031  12.095  10.236   8.221   6.931 
+ 12.185  12.358  12.646  12.972  13.310  13.722  14.334  15.208  16.211  16.997  17.189  16.669  15.743  15.015  14.982  15.659  16.527  16.902  16.448  15.442  14.551  14.308  14.679  15.104  14.950  14.018  12.703  11.687  11.424  11.824  12.339  12.357  11.595  10.248   8.844   7.961 
+ 12.617  12.790  13.062  13.360  13.698  14.186  14.931  15.903  16.866  17.456  17.392  16.675  15.646  14.839  14.683  15.249  16.205  17.016  17.277  16.952  16.362  15.934  15.869  15.998  15.909  15.280  14.165  13.009  12.360  12.464  13.047  13.461  13.115  11.910  10.356   9.274 
+ 12.879  13.032  13.305  13.687  14.222  14.948  15.794  16.543  16.935  16.831  16.308  15.590  14.907  14.397  14.141  14.227  14.726  15.564  16.434  16.916  16.761  16.115  15.422  15.051  14.947  14.671  13.829  12.546  11.486  11.339  12.160  13.174  13.305  12.057  10.005   8.450 
+ 13.166  13.449  13.951  14.592  15.304  15.997  16.512  16.662  16.360  15.731  15.056  14.575  14.308  14.097  13.845  13.710  14.023  14.945  16.189  17.125  17.239  16.575  15.704  15.214  15.155  14.998  14.186  12.801  11.656  11.635  12.799  14.107  14.121  12.210   9.217   6.978 
+ 12.892  13.305  14.011  14.829  15.565  16.037  16.087  15.651  14.854  14.013  13.467  13.330  13.388  13.286  12.908  12.573  12.820  13.900  15.419  16.540  16.628  15.804  14.863  14.556  14.879  15.039  14.216  12.448  10.788  10.454  11.682  13.307  13.589  11.666   8.421   5.940 
+ 13.066  13.665  14.531  15.225  15.463  15.217  14.649  13.966  13.355  12.963  12.861  12.966  13.036  12.836  12.389  12.077  12.392  13.479  14.877  15.779  15.673  14.824  14.103  14.213  14.987  15.439  14.626  12.608  10.578   9.944  11.068  12.794  13.291  11.585   8.489   6.076 
+ 13.322  13.858  14.676  15.436  15.884  15.915  15.523  14.771  13.818  12.951  12.466  12.454  12.678  12.739  12.459  12.115  12.261  13.201  14.594  15.620  15.653  14.850  14.073  14.105  14.866  15.371  14.598  12.527  10.353   9.575  10.659  12.486  13.169  11.642   8.658   6.291 
+ 13.842  14.378  15.150  15.793  16.114  16.122  15.874  15.355  14.547  13.600  12.852  12.595  12.801  13.099  13.113  12.857  12.778  13.346  14.541  15.769  16.333  16.058  15.456  15.216  15.498  15.714  15.093  13.528  11.867  11.255  12.068  13.407  13.740  12.212   9.497   7.386 
+ 13.825  14.384  15.163  15.764  16.021  16.024  15.893  15.594  15.006  14.161  13.354  12.939  13.000  13.236  13.244  12.958  12.780  13.234  14.423  15.843  16.761  16.844  16.423  16.114  16.157  16.141  15.443  13.976  12.471  11.934  12.672  13.842  14.030  12.466   9.811   7.770 
+ 13.686  14.347  15.257  15.921  16.115  15.956  15.664  15.304  14.779  14.048  13.292  12.814  12.749  12.903  12.932  12.707  12.503  12.778  13.729  15.048  16.134  16.586  16.493  16.253  16.112  15.901  15.271  14.189  13.147  12.798  13.289  13.955  13.766  12.217   9.901   8.183 
+ 14.171  14.535  15.042  15.439  15.626  15.647  15.532  15.189  14.491  13.489  12.490  11.875  11.789  12.011  12.164  12.086  12.006  12.339  13.275  14.551  15.645  16.205  16.298  16.240  16.207  16.028  15.423  14.427  13.542  13.356  13.936  14.588  14.317  12.688  10.329   8.599 
+ 14.319  14.586  14.862  14.890  14.660  14.404  14.336  14.407  14.337  13.887  13.110  12.319  11.810  11.615  11.532  11.393  11.285  11.491  12.200  13.285  14.367  15.116  15.471  15.583  15.550  15.278  14.623  13.694  12.928  12.785  13.268  13.761  13.433  11.945   9.863   8.353 
+ 14.579  14.525  14.334  13.973  13.559  13.311  13.360  13.600  13.739  13.523  12.938  12.206  11.593  11.201  10.940  10.695  10.498  10.543  11.021  11.928  13.034  14.014  14.628  14.792  14.528  13.896  13.024  12.153  11.603  11.577  11.950  12.260  11.990  10.978   9.619   8.651 
+ 15.472  15.280  14.772  13.896  12.847  12.010  11.681  11.822  12.068  12.017  11.543  10.865  10.335  10.137  10.179  10.229  10.166  10.085  10.195  10.616  11.280  11.980  12.497  12.668  12.394  11.658  10.598   9.571   9.047   9.322  10.234  11.163  11.402  10.677   9.402   8.427 
+ 15.687  15.277  14.500  13.491  12.495  11.796  11.564  11.727  11.984  11.970  11.489  10.650   9.806   9.336   9.409   9.876  10.371  10.557  10.357  10.022   9.977  10.508  11.502  12.412  12.546  11.521   9.601   7.654   6.683   7.196   8.843  10.596  11.401  10.871   9.537   8.456 
+ 15.551  15.194  14.546  13.732  12.916  12.273  11.933  11.913  12.065  12.119  11.816  11.096  10.182   9.485   9.342   9.767  10.418  10.833  10.781  10.461  10.359  10.851  11.827  12.674  12.653  11.447   9.469   7.697   7.081   7.948   9.763  11.458  12.091  11.428  10.062   9.003 
+ 15.247  14.980  14.488  13.841  13.132  12.486  12.044  11.889  11.950  11.981  11.677  10.915   9.905   9.120   8.983   9.533  10.359  10.894  10.857  10.495  10.391  10.967  12.071  13.003  12.995  11.796   9.919   8.351   7.924   8.798  10.384  11.741  12.158  11.546  10.431   9.596 
+ 14.873  14.676  14.316  13.853  13.355  12.894  12.528  12.266  12.041  11.717  11.175  10.428   9.672   9.200   9.200   9.597  10.076  10.302  10.197  10.035  10.260  11.120  12.419  13.569  13.964  13.393  12.212  11.128  10.754  11.229  12.146  12.843  12.819  12.042  10.953  10.184 
+ 14.652  14.396  13.971  13.537  13.266  13.256  13.444  13.598  13.425  12.754  11.684  10.565   9.816   9.661   9.974  10.351  10.382   9.953   9.359   9.141   9.741  11.181  12.999  14.486  15.080  14.682  13.699  12.782  12.441  12.754  13.352  13.669  13.308  12.292  11.064  10.235 
+ 13.832  13.884  13.874  13.706  13.439  13.259  13.296  13.454  13.426  12.924  11.946  10.840  10.087   9.946  10.247  10.503  10.284   9.576   8.837   8.703   9.552  11.221  13.083  14.415  14.822  14.431  13.764  13.382  13.543  14.065  14.457  14.221  13.158  11.500   9.820   8.767 
+ 13.438  13.760  14.108  14.147  13.788  13.258  12.892  12.822  12.845  12.591  11.855  10.813   9.918   9.546   9.689   9.944   9.840   9.251   8.549   8.367   9.137  10.740  12.556  13.855  14.274  14.002  13.596  13.555  13.984  14.558  14.783  14.327  13.214  11.779  10.487   9.733 
+ 13.338  13.706  14.126  14.226  13.870  13.254  12.720  12.454  12.329  12.029  11.351  10.414   9.597   9.230   9.317   9.510   9.403   8.894   8.328   8.273   9.096  10.646  12.320  13.450  13.748  13.463  13.162  13.298  13.903  14.585  14.831  14.339  13.185  11.747  10.485   9.762 
+ 13.150  13.502  13.916  14.048  13.771  13.245  12.735  12.357  11.990  11.425  10.615   9.776   9.243   9.173   9.384   9.474   9.150   8.502   7.994   8.151   9.176  10.781  12.355  13.349  13.597  13.377  13.171  13.334  13.878  14.493  14.760  14.406  13.440  12.147  10.947  10.232 
+ 13.016  13.416  13.907  14.115  13.889  13.374  12.847  12.452  12.099  11.586  10.837  10.016   9.401   9.150   9.145   9.099   8.818   8.414   8.275   8.791  10.052  11.734  13.264  14.148  14.241  13.795  13.276  13.085  13.341  13.844  14.208  14.076  13.321  12.124  10.907  10.144 
+ 13.226  13.590  14.074  14.351  14.225  13.737  13.110  12.567  12.163  11.776  11.247  10.554   9.863   9.403   9.275   9.367   9.477   9.542   9.760  10.456  11.765  13.394  14.692  15.038  14.274  12.854  11.568  11.039  11.352  12.069  12.587  12.534  11.945  11.131  10.429  10.043 
+ 13.129  13.529  14.098  14.490  14.434  13.888  13.062  12.277  11.731  11.371  10.977  10.404   9.763   9.362   9.438   9.924  10.490  10.847  11.042  11.424  12.276  13.410  14.157  13.822  12.288  10.232   8.737   8.546   9.565  10.981  11.890  11.904  11.288  10.583  10.149   9.996 
+ 13.246  13.621  14.173  14.578  14.539  13.946  12.957  11.906  11.086  10.566  10.199   9.828   9.493   9.424   9.811  10.561  11.302  11.671  11.645  11.580  11.867  12.503  12.972  12.621  11.226   9.291   7.758   7.354   8.083   9.278  10.132  10.262   9.856   9.363   9.081   9.001 
+ 13.395  13.742  14.247  14.602  14.514  13.893  12.948  12.080  11.600  11.485  11.392  10.975  10.231   9.569   9.491  10.154  11.197  12.018  12.260  12.083  11.946  12.122  12.380  12.172  11.152   9.580   8.201   7.695   8.165   9.080   9.714   9.680   9.111   8.430   7.959   7.759 
+ 13.372  13.726  14.257  14.655  14.618  14.046  13.159  12.388  12.048  12.060  11.993  11.442  10.445   9.537   9.338  10.023  11.144  11.995  12.210  12.037  12.025  12.419  12.839  12.606  11.414   9.740   8.558   8.572   9.638  10.891  11.464  11.145  10.432   9.981  10.012  10.221 
+ 13.439  13.797  14.311  14.684  14.680  14.265  13.618  13.002  12.566  12.240  11.819  11.184  10.462   9.972   9.969  10.426  11.048  11.539  11.871  12.287  13.003  13.877  14.373  13.933  12.474  10.577   9.158   8.853   9.586  10.667  11.315  11.182  10.482   9.689   9.145   8.911 
+ 13.830  14.100  14.468  14.709  14.682  14.396  13.958  13.468  12.952  12.377  11.733  11.085  10.553  10.241  10.179  10.333  10.674  11.229  12.047  13.114  14.254  15.149  15.459  15.009  13.909  12.538  11.374  10.774  10.814  11.266  11.729  11.833  11.418  10.602   9.718   9.151 
+ 14.427  14.338  14.220  14.129  14.054  13.919  13.647  13.227  12.718  12.191  11.669  11.127  10.557  10.027   9.676   9.637   9.953  10.561  11.349  12.221  13.104  13.887  14.386  14.395  13.819  12.813  11.768  11.133  11.157  11.718  12.368  12.578  12.048  10.889   9.580   8.723 
+ 14.840  14.815  14.604  14.049  13.180  12.238  11.523  11.164  11.034  10.847  10.375   9.624   8.830   8.320   8.314   8.806   9.568  10.262  10.621  10.589  10.364  10.267  10.507  10.978  11.274  10.968   9.986   8.781   8.098   8.452   9.678  10.962  11.372  10.548   9.012   7.824 
+ 15.049  14.886  14.507  13.879  13.069  12.239  11.546  11.052  10.693  10.338   9.882   9.295   8.645   8.087   7.832   8.066   8.815   9.847  10.714  10.997  10.608   9.903   9.461   9.651  10.300  10.802  10.588   9.632   8.526   8.047   8.533   9.603  10.461  10.542   9.963   9.377 
+ 14.995  14.826  14.479  13.936  13.202  12.340  11.504  10.891  10.626  10.640  10.672  10.412   9.739   8.854   8.193   8.139   8.741   9.640  10.300  10.371   9.936   9.429   9.296   9.648  10.168  10.363   9.953   9.110   8.348   8.157   8.647   9.480  10.134  10.283  10.017   9.717 
+ 14.546  14.560  14.359  13.731  12.743  11.745  11.106  10.917  10.936  10.801  10.322   9.602   8.897   8.406   8.163   8.104   8.186   8.406   8.734   9.069   9.310   9.471   9.683  10.032  10.384  10.410   9.869   8.924   8.152   8.159   9.071  10.344  11.132  10.936  10.024   9.217 
+ 13.976  13.834  13.418  12.654  11.713  10.966  10.717  10.938  11.245  11.164  10.471   9.339   8.196   7.436   7.203   7.395   7.804   8.262   8.678   9.015   9.267   9.468   9.670   9.869   9.938   9.678   8.992   8.066   7.339   7.243   7.869   8.848   9.592   9.725   9.357   8.962 
+ 12.628  12.534  12.102  11.167   9.945   8.979   8.734   9.189   9.816   9.991   9.479   8.590   7.883   7.700   7.940   8.225   8.267   8.094   7.948   8.024   8.304   8.622   8.842   8.943   8.941   8.778   8.343   7.629   6.855   6.378   6.434   6.935   7.523   7.857   7.870   7.763 
+ 11.098  10.969  10.496   9.552   8.378   7.526   7.452   8.101   8.877   9.055   8.318   6.985   5.764   5.227   5.455   6.072   6.596   6.776   6.682   6.545   6.545   6.717   6.987   7.238   7.345   7.188   6.711   6.011   5.352   5.037   5.201   5.696   6.188   6.406   6.337   6.196 
+  8.207   8.317   8.170   7.456   6.358   5.550   5.699   6.884   8.426   9.319   8.933   7.449   5.707   4.608   4.548   5.266   6.135   6.626   6.596   6.266   5.994   6.033   6.404   6.900   7.194   7.009   6.290   5.291   4.475   4.244   4.668   5.418   5.984   6.049   5.706   5.358 
+  6.107   6.664   7.227   7.192   6.470   5.606   5.341   5.995   7.179   8.072   8.034   7.046   5.674   4.622   4.270   4.510   4.942   5.206   5.189   5.012   4.890   4.977   5.294   5.712   6.003   5.944   5.473   4.778   4.237   4.182   4.640   5.273   5.606   5.382   4.778   4.275 
+  8.132   8.377   8.726   9.004   9.127   9.141   9.147   9.202   9.273   9.288   9.221   9.120   9.065   9.091   9.163   9.226   9.272   9.353   9.524   9.768   9.984  10.072  10.041  10.039  10.272  10.842  11.645  12.398  12.791  12.656  12.050  11.206  10.395   9.797   9.454   9.313 
+  9.116   9.633  10.352  10.898  11.119  11.137  11.157  11.234  11.246  11.065  10.751  10.537  10.630  11.011  11.451  11.721  11.787  11.795  11.884  12.025  12.077  11.995  11.968  12.294  13.099  14.156  15.011  15.335  15.181  14.909  14.845  14.990  15.057  14.790  14.257  13.822 
+  9.737   9.908  10.150  10.350  10.467  10.537  10.593  10.596  10.463  10.166   9.809   9.586   9.648   9.984  10.435  10.822  11.081  11.290  11.559  11.916  12.287  12.597  12.884  13.307  14.019  15.022  16.118  17.023  17.536  17.648  17.514  17.323  17.196  17.150  17.152  17.162 
+  9.767   9.569   9.291   9.109   9.167   9.473   9.868  10.111  10.039   9.708   9.370   9.302   9.593  10.077  10.456  10.543  10.402  10.293  10.466  10.984  11.730  12.561  13.450  14.482  15.705  16.994  18.065  18.657  18.715  18.431  18.104  17.946  17.986  18.122  18.245  18.306 
+  9.804  10.047  10.356  10.503  10.374  10.045   9.719   9.587   9.709   9.994  10.284  10.455  10.476  10.394  10.291  10.243  10.319  10.580  11.072  11.798  12.702  13.688  14.670  15.608  16.506  17.354  18.089  18.591  18.754  18.573  18.184  17.813  17.656  17.768  18.030  18.239 
+ 10.153  10.466  10.787  10.810  10.514  10.165  10.028  10.094  10.117   9.915   9.616   9.570   9.989  10.675  11.144  11.062  10.591  10.303  10.713  11.844  13.226  14.320  14.968  15.465  16.191  17.196  18.118  18.516  18.276  17.711  17.278  17.193  17.314  17.365  17.241  17.085 
+ 11.537  11.206  10.621   9.958   9.465   9.330   9.530   9.822   9.929   9.772   9.549   9.545   9.846  10.240  10.416  10.306  10.221  10.625  11.720  13.203  14.473  15.096  15.156  15.155  15.561  16.399  17.254  17.648  17.456  16.979  16.648  16.651  16.835  16.930  16.839  16.701 
+ 13.473  12.571  11.381  10.644  10.658  11.101  11.370  11.111  10.491   9.996   9.967  10.296  10.550  10.380   9.856   9.435   9.608  10.520  11.885  13.216  14.172  14.736  15.137  15.609  16.215  16.837  17.301  17.499  17.443  17.228  16.972  16.772  16.680  16.698  16.775  16.841 
+ 11.627  11.140  10.583  10.410  10.703  11.105  11.153  10.707  10.085   9.769   9.951  10.341  10.416   9.906   9.090   8.630   9.062  10.369  11.988  13.236  13.814  13.979  14.273  15.051  16.191  17.202  17.618  17.340  16.678  16.083  15.810  15.777  15.707  15.409  14.952  14.605 
+ 12.549  11.913  10.994  10.249   9.930   9.950  10.006   9.850   9.478   9.094   8.897   8.893   8.897   8.729   8.419   8.239   8.501   9.298  10.411  11.461  12.207  12.715  13.264  14.052  14.966  15.628  15.683  15.112  14.271  13.634  13.428  13.476  13.381  12.894  12.158  11.604 
+ 13.639  13.678  13.835  14.185  14.698  15.200  15.443  15.257  14.673  13.926  13.296  12.921  12.723  12.521  12.245  12.052  12.209  12.841  13.753  14.512  14.763  14.512  14.118  13.979  14.178  14.392  14.178  13.378  12.301  11.494  11.299  11.579  11.861  11.757  11.298  10.880 
+ 14.041  14.001  14.131  14.671  15.657  16.802  17.619  17.714  17.063  16.050  15.208  14.841  14.836  14.827  14.581  14.255  14.291  14.994  16.191  17.282  17.694  17.349  16.704  16.329  16.373  16.429  15.937  14.771  13.451  12.748  12.995  13.745  14.105  13.505  12.221  11.177 
+ 13.309  13.475  13.830  14.439  15.376  16.589  17.786  18.503  18.383  17.467  16.223  15.230  14.776  14.715  14.708  14.634  14.733  15.349  16.495  17.705  18.351  18.172  17.492  16.922  16.783  16.834  16.562  15.775  14.893  14.602  15.156  16.008  16.179  15.117  13.273  11.847 
+ 12.611  13.037  13.725  14.524  15.437  16.523  17.664  18.474  18.532  17.755  16.553  15.554  15.126  15.135  15.181  15.081  15.102  15.683  16.902  18.238  18.916  18.561  17.530  16.595  16.248  16.301  16.177  15.589  14.925  14.885  15.691  16.654  16.629  15.030  12.506  10.605 
+ 12.437  12.928  13.582  14.108  14.585  15.365  16.624  18.017  18.837  18.582  17.408  16.030  15.147  14.935  15.065  15.175  15.288  15.744  16.732  17.933  18.689  18.560  17.719  16.770  16.179  15.881  15.491  14.878  14.475  14.903  16.223  17.577  17.709  16.036  13.321  11.268 
+ 12.536  12.826  13.211  13.568  14.048  14.944  16.302  17.689  18.405  18.020  16.760  15.363  14.518  14.392  14.644  14.888  15.095  15.559  16.471  17.584  18.322  18.267  17.521  16.587  15.893  15.450  14.997  14.467  14.227  14.764  16.056  17.299  17.387  15.837  13.367  11.510 
+ 12.329  12.628  13.052  13.486  14.043  14.955  16.237  17.486  18.085  17.675  16.484  15.186  14.392  14.235  14.402  14.555  14.697  15.125  16.035  17.191  18.029  18.100  17.435  16.473  15.640  15.031  14.489  13.987  13.833  14.401  15.620  16.749  16.809  15.397  13.169  11.502 
+ 12.722  12.846  13.079  13.478  14.191  15.298  16.590  17.551  17.652  16.766  15.331  14.077  13.498  13.538  13.759  13.817  13.806  14.126  15.022  16.247  17.188  17.352  16.740  15.782  14.917  14.251  13.631  13.019  12.711  13.100  14.185  15.328  15.621  14.632  12.871  11.509 
+ 12.591  12.735  13.013  13.470  14.205  15.236  16.321  16.981  16.781  15.682  14.150  12.854  12.199  12.078  12.076  11.929  11.796  12.089  13.017  14.306  15.368  15.773  15.555  15.086  14.644  14.152  13.361  12.292  11.435  11.418  12.397  13.749  14.463  13.944  12.564  11.409 
+ 10.902  10.951  11.238  11.947  13.036  14.152  14.789  14.594  13.601  12.224  11.004  10.275   9.999   9.885   9.681   9.400   9.305   9.676  10.565  11.734  12.825  13.587  13.969  14.026  13.768  13.138  12.154  11.068  10.325  10.295  10.963  11.871  12.403  12.233  11.569  10.994 
+  9.908   9.219   8.273   7.713   8.032   9.257  10.872  12.072  12.236  11.310   9.835   8.568   7.981   8.003   8.199   8.199   8.027   8.045   8.586   9.616  10.714  11.371  11.339  10.744   9.919   9.138   8.511   8.059   7.844   7.947   8.329   8.739   8.838   8.457   7.786   7.267 
+  6.644   6.767   7.000   7.418   8.200   9.431  10.843  11.809  11.726  10.504   8.721   7.225   6.489   6.311   6.130   5.680   5.335   5.765   7.224   9.126  10.397  10.319   9.125   7.788   7.197   7.464   7.969   8.053   7.660   7.310   7.471   7.984   8.165   7.483   6.167   5.109 
+  6.980   6.623   6.242   6.294   7.052   8.370   9.701  10.386  10.064   8.909   7.510   6.454   5.942   5.742   5.509   5.189   5.128   5.758   7.145   8.792   9.921  10.016   9.178   7.999   7.092   6.686   6.601   6.574   6.559   6.720   7.143   7.614   7.720   7.222   6.343   5.659 
+  5.782   6.029   6.414   6.841   7.319   7.894   8.484   8.809   8.554   7.651   6.424   5.417   5.023   5.232   5.720   6.183   6.605   7.202   8.099   9.088   9.723   9.696   9.157   8.656   8.734   9.503  10.576  11.383  11.590  11.256  10.664  10.025   9.354   8.606   7.870   7.391 
+  5.989   6.107   6.217   6.279   6.483   7.105   8.150   9.162   9.458   8.671   7.127   5.698   5.189   5.768   6.909   7.873   8.295   8.360   8.489   8.860   9.249   9.320   9.028   8.746   8.955   9.809  10.964  11.837  12.038  11.604  10.866  10.131   9.494   8.912   8.390   8.060 
+  4.960   5.035   5.207   5.556   6.210   7.214   8.374   9.245   9.345   8.491   6.978   5.445   4.497   4.360   4.829   5.513   6.131   6.635   7.085   7.465   7.637   7.477   7.027   6.502   6.128   5.974   5.943   5.919   5.905   5.996   6.226   6.447   6.406   5.977   5.329   4.846 
+  5.003   4.728   4.354   4.202   4.604   5.707   7.287   8.766   9.480   9.069   7.713   6.048   4.788   4.326   4.593   5.219   5.844   6.308   6.635   6.875   6.995   6.909   6.588   6.118   5.659   5.348   5.243   5.352   5.661   6.121   6.591   6.841   6.662   6.044   5.247   4.691 
+  4.575   4.709   4.933   5.266   5.824   6.709   7.798   8.682   8.877   8.174   6.842   5.465   4.557   4.259   4.386   4.718   5.234   6.044   7.109   8.078   8.446   7.953   6.828   5.653   4.926   4.741   4.842   4.975   5.166   5.621   6.375   7.059   7.109   6.264   4.909   3.887 
+  7.539   7.688   8.009   8.466   8.915   9.164   9.129   8.927   8.811   8.951   9.283   9.547   9.524   9.260   9.075   9.321  10.078  11.047  11.731  11.790  11.273  10.578  10.174  10.303  10.877  11.612  12.256  12.730  13.097  13.435  13.731  13.883  13.796  13.487  13.099  12.834 
+  7.505   7.433   7.577   8.197   9.195  10.123  10.530  10.341   9.918   9.735   9.976  10.408  10.644  10.535  10.323  10.416  10.994  11.821  12.414  12.440  11.968  11.398  11.140  11.339  11.854  12.451  13.007  13.545  14.112  14.656  15.028  15.097  14.858  14.444  14.041  13.801 
+  5.196   5.161   5.213   5.476   5.944   6.468   6.861   7.045   7.095   7.147   7.266   7.389   7.401   7.272   7.121   7.133   7.410   7.863   8.259   8.384   8.199   7.867   7.642   7.712   8.111   8.745   9.497  10.296  11.112  11.897  12.541  12.901  12.890  12.561  12.113  11.801 
+  6.856   7.324   7.994   8.529   8.743   8.699   8.593   8.575   8.630   8.628   8.470   8.186   7.915   7.788   7.824   7.938   8.016   8.001   7.909   7.786   7.662   7.551   7.492   7.568   7.887   8.522   9.467  10.626  11.842  12.936  13.737  14.120  14.055  13.651  13.139  12.791 
+ 10.462  11.153  12.061  12.596  12.473  11.842  11.081  10.461   9.998   9.573   9.149   8.834   8.744   8.826   8.872   8.713   8.415   8.254   8.465   9.003   9.546   9.764   9.614   9.389   9.482  10.070  10.993  11.914  12.590  13.008  13.294  13.536  13.697  13.702  13.571  13.439 
+ 11.966  12.655  13.602  14.280  14.424  14.117  13.564  12.854  11.951  10.889   9.914   9.349   9.295   9.491   9.529   9.265   9.017   9.313  10.377  11.838  12.950  13.166  12.549  11.669  11.098  11.004  11.199  11.530  12.132  13.234  14.696  15.798  15.657  13.987  11.541   9.752 
+ 12.461  12.873  13.589  14.413  15.105  15.422  15.193  14.409  13.276  12.164  11.421  11.161  11.187  11.156  10.874  10.502  10.464  11.093  12.303  13.576  14.297  14.186  13.470  12.665  12.170  12.040  12.095  12.227  12.551  13.231  14.155  14.822  14.637  13.428  11.724  10.494 
+ 12.752  12.932  13.360  14.071  14.951  15.707  15.995  15.625  14.708  13.614  12.744  12.271  12.059  11.833  11.463  11.132  11.205  11.901  13.045  14.115  14.600  14.364  13.716  13.150  12.954  13.055  13.198  13.261  13.392  13.809  14.458  14.900  14.593  13.377  11.738  10.569 
+ 12.783  12.782  12.959  13.528  14.529  15.683  16.463  16.396  15.415  13.986  12.826  12.397  12.572  12.794  12.618  12.173  12.083  12.881  14.414  15.828  16.208  15.338  13.907  12.930  12.899  13.434  13.741  13.454  13.021  13.230  14.308  15.468  15.450  13.646  10.818   8.696 
+ 12.640  12.650  12.758  13.133  13.931  15.105  16.273  16.852  16.452  15.220  13.803  12.876  12.639  12.736  12.695  12.488  12.603  13.534  15.133  16.513  16.699  15.487  13.704  12.560  12.637  13.431  13.905  13.528  12.820  12.825  13.977  15.474  15.832  14.213  11.345   9.116 
+ 12.635  12.491  12.436  12.791  13.734  15.096  16.360  16.921  16.478  15.269  13.917  12.997  12.650  12.607  12.574  12.605  13.066  14.181  15.603  16.500  16.181  14.736  13.076  12.237  12.544  13.362  13.725  13.268  12.593  12.690  13.889  15.363  15.707  14.179  11.492   9.414 
+ 12.834  12.589  12.431  12.783  13.821  15.273  16.517  16.943  16.351  15.079  13.761  12.887  12.537  12.484  12.550  12.833  13.553  14.648  15.565  15.566  14.371  12.569  11.317  11.461  12.789  14.131  14.310  13.179  11.808  11.583  12.939  14.848  15.594  14.233  11.496   9.318 
+ 12.657  12.261  11.882  12.008  12.794  13.936  14.887  15.241  14.951  14.256  13.435  12.640  11.949  11.517  11.602  12.361  13.585  14.652  14.864  13.961  12.408  11.169  11.049  12.091  13.505  14.226  13.711  12.368  11.259  11.290  12.502  14.014  14.685  13.992  12.441  11.194 
+ 10.664  10.716  10.883  11.232  11.779  12.476  13.230  13.919  14.383  14.428  13.910  12.888  11.721  10.972  11.107  12.148  13.560  14.516  14.406  13.256  11.728  10.694  10.658  11.442  12.358  12.730  12.375  11.696  11.348  11.725  12.663  13.557  13.796  13.206  12.176  11.399 
+ 10.570  10.204   9.712   9.405   9.464   9.863  10.438  11.006  11.411  11.516  11.218  10.536   9.709   9.157   9.250  10.025  11.097  11.869  11.932  11.343  10.562  10.107  10.198  10.675  11.217  11.646  12.040  12.595  13.388  14.278  15.016  15.443  15.591  15.611  15.620  15.639 
+ 10.224   9.925   9.510   9.196   9.069   9.064   9.077   9.097   9.202   9.445   9.752   9.956   9.950   9.807   9.733   9.884  10.216  10.505  10.544  10.321  10.034   9.926  10.108  10.520  11.047  11.654  12.396  13.304  14.281  15.142  15.769  16.226  16.703  17.326  17.999  18.453 
+  9.585   9.108   8.527   8.263   8.429   8.779   8.980   8.942   8.872   9.025   9.393   9.663   9.507   8.915   8.270   8.044   8.401   9.040   9.449   9.330   8.849   8.495   8.692   9.495  10.595  11.606  12.351  12.933  13.575  14.403  15.359  16.270  16.987  17.460  17.722  17.834 
+  7.805   7.930   8.276   8.863   9.496   9.838   9.671   9.113   8.569   8.417   8.701   9.095   9.190   8.862   8.384   8.195   8.514   9.145   9.637   9.665   9.301   8.952   9.027   9.623  10.483  11.248  11.768  12.218  12.925  14.069  15.498  16.799  17.570  17.691  17.391  17.084 
+  7.842   8.201   8.629   8.826   8.762   8.680   8.823   9.160   9.390   9.229   8.683   8.060   7.699   7.690   7.854   7.986   8.084   8.328   8.844   9.497   9.967  10.049   9.871   9.810  10.151  10.845  11.581  12.129  12.592  13.302  14.446  15.797  16.829  17.154  16.875  16.502 
+  6.879   6.620   6.418   6.620   7.271   8.036   8.439   8.232   7.585   6.961   6.762   7.052   7.552   7.893   7.909   7.727   7.624   7.784   8.163   8.557   8.785   8.827   8.820   8.930   9.230   9.689  10.241  10.871  11.618  12.504  13.459  14.314  14.898  15.143  15.140  15.068 
+  3.674   4.655   6.260   7.924   9.107   9.504   9.150   8.367   7.602   7.196   7.233   7.511   7.698   7.561   7.130   6.686   6.548   6.827   7.325   7.676   7.632   7.270   6.942   7.010   7.566   8.378   9.100   9.567   9.914  10.419  11.214  12.122  12.786  12.964  12.748  12.486 
+  4.034   5.513   7.522   8.870   8.975   8.170   7.305   7.020   7.322   7.740   7.838   7.584   7.290   7.255   7.491   7.763   7.844   7.722   7.549   7.463   7.461   7.472   7.496   7.644   8.033   8.648   9.349  10.015  10.662  11.377  12.125  12.643  12.589  11.860  10.793  10.012 
+  4.082   5.796   8.093   9.575   9.593   8.603   7.642   7.433   7.899   8.406   8.431   8.007   7.599   7.599   7.966   8.323   8.355   8.108   7.894   7.966   8.279   8.584   8.726   8.831   9.200  10.024  11.205  12.430  13.403  14.009  14.274  14.235  13.886  13.265  12.563  12.089 
+  7.020   7.541   8.245   8.700   8.687   8.325   7.947   7.820   7.959   8.143   8.123   7.829   7.421   7.155   7.192   7.496   7.891   8.218   8.449   8.698   9.114   9.774  10.639  11.594  12.534  13.416  14.247  15.032  15.727  16.232  16.427  16.244  15.721  15.010  14.339  13.933 
+  8.535   9.127   9.948  10.559  10.773  10.748  10.783  11.028  11.375  11.598  11.576  11.397  11.236  11.175  11.132  10.983  10.730  10.537  10.600  10.970  11.521  12.081  12.602  13.187  13.968  14.931  15.892  16.623  17.024  17.159  17.153  17.055  16.817  16.408  15.931  15.601 
+  9.203   9.751  10.626  11.511  12.156  12.472  12.520  12.428  12.323  12.280  12.319  12.392  12.407  12.278  12.004  11.704  11.566  11.709  12.085  12.502  12.791  12.956  13.198  13.743  14.630  15.637  16.420  16.766  16.731  16.561  16.450  16.384  16.188  15.745  15.168  14.752 
+ 12.832  12.846  13.015  13.424  13.926  14.180  13.913  13.155  12.247  11.571  11.258  11.123  10.900  10.548  10.328  10.577  11.362  12.337  12.962  12.926  12.404  11.948  12.068  12.843  13.861  14.541  14.550  14.030  13.440  13.198  13.376  13.686  13.741  13.369  12.751  12.284 
+ 13.071  13.419  14.069  14.851  15.443  15.506  14.923  13.918  12.929  12.293  12.017  11.829  11.486  11.053  10.883  11.309  12.301  13.422  14.123  14.155  13.724  13.268  13.060  12.970  12.625  11.804  10.734  10.002  10.140  11.174  12.513  13.276  12.842  11.269   9.302   7.961 
+ 13.382  13.495  13.823  14.384  14.962  15.175  14.755  13.797  12.720  11.961  11.647  11.542  11.321  10.921  10.648  10.928  11.916  13.295  14.458  14.906  14.560  13.725  12.797  11.981  11.262  10.609  10.190  10.336  11.261  12.744  14.080  14.409  13.232  10.801   8.086   6.309 
+ 13.178  13.133  13.294  13.819  14.461  14.663  14.023  12.699  11.339  10.574  10.508  10.699  10.634  10.261  10.056  10.569  11.850  13.310  14.157  14.027  13.240  12.489  12.242  12.400  12.487  12.161  11.554  11.158  11.361  12.069  12.723  12.683  11.667   9.938   8.157   7.042 
+ 11.530  11.514  11.721  12.272  12.860  12.885  11.975  10.397   8.919   8.210   8.297   8.615   8.584   8.200   8.047   8.726  10.227  11.847  12.736  12.582  11.817  11.169  11.015  11.111  10.928  10.224   9.314   8.793   8.987   9.660  10.201  10.102   9.299   8.137   7.087   6.488 
+ 11.762  11.022  10.051   9.380   9.079   8.776   8.136   7.285   6.713   6.737   7.092   7.129   6.469   5.489   5.088   5.894   7.629   9.251   9.800   9.184   8.208   7.825   8.301   9.054   9.267   8.674   7.772   7.315   7.596   8.218   8.513   8.161   7.423   6.806   6.569   6.574 
+ 11.448  11.429  11.119  10.226   8.752   7.088   5.817   5.331   5.561   6.026   6.180   5.807   5.167   4.788   5.063   5.954   7.044   7.852   8.182   8.209   8.275   8.568   8.974   9.201   9.056   8.616   8.160   7.927   7.932   7.992   7.919   7.700   7.492   7.454   7.585   7.728 
+ 11.008  10.743  10.284   9.729   9.157   8.622   8.170   7.852   7.688   7.625   7.543   7.349   7.074   6.907   7.078   7.672   8.519   9.257   9.570   9.401   9.005   8.771   8.945   9.470  10.031  10.289  10.105   9.606   9.062   8.677   8.462   8.263   7.912   7.374   6.798   6.421 
+ 12.640  12.635  12.795  13.247  13.869  14.295  14.172  13.455  12.474  11.704  11.413  11.485  11.576  11.466  11.288  11.434  12.186  13.399  14.532  15.019  14.701  13.953  13.387  13.376  13.782  14.113  13.986  13.473  13.043  13.107  13.588  13.873  13.271  11.613   9.517   8.057 
+ 13.107  12.733  12.523  13.032  14.258  15.550  16.089  15.531  14.254  13.017  12.354  12.228  12.215  12.015  11.775  11.949  12.823  14.173  15.367  15.834  15.494  14.767  14.184  13.949  13.820  13.416  12.639  11.843  11.574  12.107  13.149  13.974  13.911  12.833  11.293  10.190 
+ 13.021  12.563  12.267  12.800  14.229  15.860  16.720  16.284  14.850  13.272  12.299  12.072  12.183  12.176  12.016  12.104  12.846  14.181  15.523  16.183  15.909  15.072  14.321  14.018  13.947  13.559  12.555  11.273  10.517  10.910  12.305  13.768  14.210  13.209  11.379   9.972 
+ 12.998  12.664  12.511  13.098  14.483  16.070  16.991  16.726  15.461  13.928  12.847  12.458  12.478  12.486  12.360  12.384  12.934  14.058  15.335  16.153  16.182  15.610  14.944  14.548  14.331  13.885  12.951  11.794  11.091  11.394  12.581  13.813  14.091  13.030  11.215   9.836 
+ 13.237  12.885  12.699  13.229  14.524  15.993  16.797  16.467  15.222  13.770  12.769  12.396  12.362  12.286  12.087  12.040  12.493  13.503  14.740  15.709  16.097  15.951  15.544  15.100  14.630  14.019  13.262  12.598  12.384  12.793  13.588  14.198  14.087  13.145  11.827  10.885 
+ 13.238  12.916  12.754  13.257  14.436  15.708  16.307  15.852  14.613  13.258  12.344  11.968  11.843  11.669  11.432  11.395  11.833  12.772  13.958  15.039  15.754  16.005  15.781  15.114  14.113  13.041  12.287  12.175  12.740  13.643  14.321  14.301  13.452  12.056  10.650   9.781 
+ 13.121  12.850  12.744  13.247  14.343  15.469  15.909  15.335  14.035  12.676  11.799  11.489  11.451  11.378  11.246  11.302  11.790  12.704  13.774  14.674  15.233  15.467  15.439  15.133  14.487  13.556  12.623  12.104  12.283  13.061  13.944  14.306  13.764  12.431  10.883   9.858 
+ 12.790  12.682  12.772  13.350  14.341  15.254  15.510  14.864  13.595  12.298  11.463  11.184  11.202  11.210  11.122  11.117  11.438  12.172  13.182  14.218  15.063  15.583  15.685  15.275  14.334  13.047  11.848  11.263  11.602  12.691  13.888  14.393  13.718  12.003   9.993   8.656 
+ 12.449  12.604  13.005  13.683  14.471  15.015  14.983  14.292  13.185  12.087  11.343  11.034  11.001  11.030  11.029  11.088  11.389  12.063  13.096  14.312  15.426  16.108  16.077  15.218  13.695  11.972  10.681  10.340  11.073  12.483  13.814  14.312  13.621  11.980  10.117   8.898 
+ 12.364  12.936  13.810  14.596  14.983  14.857  14.301  13.500  12.651  11.907  11.357  11.029  10.895  10.899  11.019  11.303  11.837  12.662  13.680  14.655  15.303  15.421  14.947  13.944  12.566  11.061   9.810   9.272   9.787  11.289  13.165  14.465  14.425  12.986  10.930   9.459 
+ 12.437  13.290  14.445  15.192  15.145  14.440  13.537  12.828  12.387  12.036  11.627  11.250  11.168  11.551  12.261  12.894  13.067  12.720  12.178  11.913  12.183  12.813  13.281  13.054  11.951  10.300   8.797   8.137   8.636  10.038  11.623  12.568  12.379  11.161   9.573   8.480 
+ 12.597  13.029  13.703  14.299  14.493  14.116  13.264  12.282  11.596  11.473  11.860  12.426  12.761  12.631  12.081  11.365  10.753  10.386  10.261  10.319  10.516  10.804  11.040  10.976  10.379   9.249   7.954   7.115   7.258   8.437  10.102  11.356  11.485  10.416   8.797   7.626 
+ 12.201  12.593  13.233  13.848  14.116  13.832  13.071  12.202  11.681  11.744  12.219  12.633  12.534  11.810  10.733   9.740   9.121   8.884   8.868   8.957   9.180   9.591  10.075  10.297   9.908   8.858   7.563   6.728   6.916   8.142   9.808  11.022  11.132  10.121   8.625   7.555 
+ 12.030  12.599  13.440  14.113  14.260  13.806  13.010  12.307  12.039  12.231  12.578  12.658  12.220  11.336  10.322   9.499   9.003   8.787   8.763   8.923   9.314   9.877  10.340  10.314   9.571   8.294   7.068   6.580   7.184   8.650  10.255  11.186  10.985   9.798   8.284   7.254 
+ 11.779  12.455  13.497  14.416  14.771  14.411  13.579  12.784  12.480  12.749  13.238  13.405  12.902  11.814  10.562   9.592   9.095   8.986   9.101   9.380   9.848  10.436  10.852  10.702   9.814   8.483   7.391   7.202   8.115   9.699  11.133  11.689  11.118   9.739   8.221   7.254 
+ 12.030  12.569  13.494  14.498  15.191  15.267  14.704  13.823  13.124  12.967  13.327  13.805  13.895  13.315  12.164  10.827   9.735   9.161   9.164   9.647  10.398  11.109  11.410  11.005   9.873   8.393   7.236   7.024   7.957   9.634  11.234  11.939  11.373   9.798   7.971   6.771 
+ 12.899  13.096  13.583  14.377  15.263  15.831  15.740  14.989  13.974  13.251  13.160  13.595  14.084  14.121  13.492  12.395  11.285  10.597  10.523  10.964  11.623  12.141  12.226  11.737  10.758   9.607   8.749   8.604   9.305  10.576  11.806  12.337  11.822  10.431   8.802   7.721 
+ 13.122  12.869  12.787  13.327  14.516  15.830  16.529  16.191  15.036  13.791  13.189  13.484  14.314  14.982  14.923  14.038  12.706  11.520  10.945  11.103  11.759  12.467  12.780  12.450  11.530  10.367   9.447   9.169   9.635  10.576  11.471  11.808  11.349  10.256   9.018   8.210 
+ 12.761  12.596  12.607  13.168  14.333  15.697  16.620  16.638  15.780  14.565  13.680  13.574  14.201  15.083  15.602  15.358  14.381  13.095  12.079  11.741  12.099  12.776  13.223  13.051  12.260  11.234  10.492  10.368  10.812  11.455  11.850  11.739  11.154  10.349   9.625   9.209 
+ 12.902  12.624  12.423  12.758  13.834  15.399  16.813  17.399  16.848  15.444  13.948  13.172  13.505  14.665  15.854  16.242  15.485  13.941  12.448  11.788  12.192  13.213  14.046  14.071  13.239  12.058  11.199  11.039  11.451  11.966  12.140  11.842  11.265  10.711  10.362  10.220 
+ 12.869  12.721  12.640  12.927  13.760  15.035  16.332  17.088  16.893  15.767  14.238  13.107  13.006  13.990  15.451  16.452  16.308  15.041  13.391  12.334  12.436  13.484  14.649  15.077  14.463  13.210  12.084  11.647  11.901  12.384  12.571  12.255  11.615  10.988  10.590  10.429 
+ 12.673  12.458  12.317  12.610  13.495  14.798  16.090  16.917  17.008  16.384  15.335  14.312  13.761  13.926  14.693  15.593  16.031  15.647  14.597  13.492  13.017  13.443  14.416  15.184  15.127  14.182  12.873  11.915  11.719  12.153  12.695  12.813  12.297  11.329  10.325   9.699 
+ 12.850  12.628  12.486  12.786  13.649  14.854  15.975  16.630  16.648  16.082  15.148  14.161  13.495  13.466  14.148  15.221  16.055  16.068  15.140  13.773  12.797  12.800  13.702  14.803  15.296  14.851  13.829  12.978  12.857  13.433  14.116  14.188  13.274  11.581   9.773   8.620 
+ 12.895  12.532  12.240  12.515  13.496  14.837  15.954  16.414  16.151  15.394  14.463  13.632  13.134  13.170  13.802  14.790  15.589  15.630  14.744  13.382  12.371  12.342  13.247  14.375  14.870  14.371  13.253  12.322  12.189  12.836  13.651  13.877  13.118  11.569   9.880   8.796 
+ 12.595  12.102  11.708  12.077  13.356  15.021  16.257  16.526  15.854  14.682  13.505  12.646  12.280  12.529  13.401  14.611  15.535  15.521  14.391  12.709  11.497  11.522  12.701  14.122  14.722  14.080  12.720  11.680  11.709  12.721  13.879  14.201  13.203  11.174   8.976   7.572 
+ 12.091  11.864  11.857  12.517  13.811  15.154  15.818  15.453  14.289  12.910  11.843  11.342  11.443  12.098  13.173  14.310  14.928  14.529  13.143  11.492  10.602  11.079  12.595  14.068  14.451  13.520  12.044  11.189  11.638  13.085  14.474  14.726  13.421  11.002   8.477   6.894 
+ 11.546  11.821  12.337  12.976  13.518  13.721  13.466  12.832  12.050  11.357  10.900  10.742  10.928  11.477  12.275  12.991  13.185  12.597  11.427  10.315   9.951  10.569  11.728  12.599  12.565  11.691  10.668  10.296  10.889  12.052  12.970  12.960  11.867  10.103   8.370   7.318 
+ 11.723  11.959  12.441  13.094  13.691  13.941  13.678  12.996  12.192  11.563  11.233  11.171  11.326  11.728  12.399  13.182  13.691  13.521  12.594  11.333  10.452  10.464  11.287  12.284  12.732  12.372  11.600  11.151  11.524  12.576  13.590  13.738  12.620  10.520   8.273   6.837 
+ 12.304  12.232  12.384  13.013  13.994  14.829  15.019  14.451  13.458  12.526  11.937  11.691  11.707  12.027  12.759  13.798  14.664  14.738  13.764  12.191  10.968  10.876  11.924  13.317  14.060  13.721  12.736  12.024  12.245  13.283  14.329  14.467  13.280  11.101   8.806   7.356 
+ 12.477  12.203  12.152  12.805  14.095  15.369  15.878  15.364  14.200  13.025  12.247  11.876  11.775  11.976  12.658  13.808  14.952  15.346  14.565  12.974  11.583  11.328  12.325  13.763  14.540  14.137  13.004  12.169  12.396  13.585  14.846  15.142  13.981  11.707   9.273   7.725 
+ 12.616  12.209  12.018  12.673  14.148  15.697  16.426  15.986  14.768  13.483  12.588  12.095  11.857  11.936  12.584  13.837  15.190  15.798  15.140  13.553  12.099  11.772  12.709  14.071  14.740  14.233  13.060  12.262  12.543  13.712  14.863  15.061  13.969  11.994   9.975   8.729 
+ 12.522  12.313  12.355  13.088  14.432  15.758  16.364  15.997  14.977  13.842  12.924  12.247  11.796  11.759  12.420  13.756  15.203  15.922  15.447  14.142  12.987  12.823  13.669  14.712  14.998  14.231  12.993  12.222  12.434  13.331  14.085  13.996  12.946  11.381   9.936   9.099 
+ 12.598  12.649  12.928  13.588  14.544  15.450  15.894  15.661  14.850  13.787  12.829  12.226  12.099  12.471  13.265  14.271  15.158  15.614  15.528  15.067  14.553  14.197  13.939  13.525  12.773  11.816  11.067  10.942  11.526  12.474  13.199  13.233  12.479  11.233   9.997   9.244 
+ 12.471  12.661  13.064  13.683  14.447  15.159  15.537  15.347  14.576  13.508  12.606  12.251  12.528  13.219  14.004  14.691  15.269  15.751  15.989  15.694  14.675  13.097  11.477  10.374  10.004  10.123  10.293  10.293  10.293  10.611  11.284  11.879  11.776  10.721   9.162   8.014 
+ 12.171  12.421  12.923  13.640  14.432  15.049  15.205  14.736  13.751  12.636  11.871  11.758  12.257  13.054  13.823  14.423  14.889  15.213  15.188  14.503  13.054  11.183   9.569   8.778   8.842   9.246   9.375   9.057   8.703   8.895   9.764  10.744  10.964  10.001   8.327   7.041 
+ 11.826  12.050  12.573  13.406  14.350  15.016  15.042  14.345  13.218  12.176  11.655  11.780  12.365  13.106  13.794  14.361  14.758  14.826  14.318  13.115  11.423   9.763   8.681   8.379   8.566   8.688   8.369   7.728   7.287   7.522   8.412   9.378   9.690   9.036   7.813   6.863 
+ 11.909  12.118  12.640  13.503  14.486  15.148  15.096  14.289  13.127  12.218  11.996  12.454  13.206  13.809  14.060  14.049  13.948  13.747  13.211  12.105  10.497   8.833   7.692   7.378   7.684   8.050   7.996   7.495   6.962   6.880   7.353   7.978   8.154   7.587   6.567   5.778 
+ 12.007  12.294  12.914  13.824  14.774  15.358  15.256  14.494  13.494  12.832  12.860  13.467  14.174  14.495  14.287  13.811  13.444  13.314  13.152  12.524  11.240   9.593   8.193   7.522   7.559   7.816   7.751   7.219   6.579   6.357   6.754   7.435   7.789   7.448   6.619   5.934 
+ 11.978  12.195  12.729  13.602  14.573  15.189  15.061  14.198  13.082  12.393  12.540  13.357  14.212  14.476  13.985  13.135  12.534  12.476  12.687  12.553  11.637  10.073   8.485   7.506   7.295   7.470   7.488   7.142   6.723   6.719   7.305   8.115   8.503   8.095   7.148   6.372 
+ 10.830  11.122  11.810  12.899  14.099  14.867  14.733  13.681  12.279  11.372  11.516  12.560  13.722  14.147  13.544  12.394  11.558  11.566  12.167  12.519  11.876  10.213   8.272   6.990   6.782   7.276   7.704   7.575   7.065   6.769   7.104   7.888   8.502   8.454   7.841   7.258 
+ 11.219  11.686  12.546  13.629  14.651  15.258  15.172  14.387  13.280  12.480  12.503  13.360  14.469  15.019  14.560  13.375  12.285  11.996  12.507  13.084  12.858  11.545   9.681   8.162   7.502   7.468   7.402   6.920   6.316   6.281   7.201   8.691   9.849  10.005   9.307   8.580 
+ 11.624  12.021  12.706  13.514  14.258  14.744  14.778  14.268  13.367  12.511  12.222  12.737  13.751  14.549  14.498  13.554  12.335  11.650  11.841  12.490  12.737  11.983  10.358   8.601   7.456   7.140   7.312   7.501   7.565   7.737   8.281   9.117   9.833  10.052   9.798   9.475 
+ 10.430  11.086  12.113  13.152  13.967  14.460  14.537  14.077  13.098  11.965  11.327  11.686  12.911  14.189  14.565  13.693  12.166  11.064  11.069  11.889  12.503  12.017  10.406   8.492   7.238   6.987   7.312   7.541   7.399   7.184   7.361   8.034   8.828   9.271   9.246   9.057 
+ 10.860  11.615  12.744  13.804  14.595  15.142  15.420  15.208  14.308  12.938  11.830  11.773  12.923  14.523  15.402  14.901  13.429  12.128  11.902  12.642  13.357  13.056  11.596   9.751   8.478   8.108   8.183   8.033   7.481   6.972   7.071   7.844   8.766   9.230   9.108   8.814 
+ 11.967  12.405  13.120  13.915  14.654  15.246  15.542  15.323  14.474  13.203  12.067  11.680  12.263  13.422  14.380  14.524  13.846  12.920  12.422  12.595  13.084  13.260  12.727  11.604  10.373   9.483   9.060   8.920   8.819   8.667   8.544   8.555   8.705   8.900   9.048   9.117 
+ 12.124  12.425  13.008  13.793  14.611  15.214  15.366  14.955  14.075  13.018  12.166  11.833  12.126  12.896  13.801  14.454  14.594  14.199  13.485  12.791  12.395  12.374  12.563  12.660  12.406  11.744  10.858  10.068   9.646   9.656   9.926  10.159  10.115   9.757   9.265   8.917 
+ 12.204  12.194  12.479  13.306  14.505  15.497  15.705  14.987  13.732  12.543  11.820  11.611  11.782  12.255  13.034  13.998  14.768  14.872  14.138  12.957  12.074  12.041  12.757  13.522  13.598  12.808  11.681  11.016  11.249  12.133  12.955  13.067  12.296  10.977   9.679   8.897 
+ 12.303  12.287  12.564  13.377  14.545  15.490  15.667  14.993  13.883  12.881  12.259  11.952  11.831  11.975  12.594  13.674  14.748  15.116  14.418  13.028  11.868  11.711  12.557  13.617  13.961  13.278  12.113  11.403  11.718  12.823  13.895  14.132  13.274  11.690  10.080   9.093 
+ 12.780  12.637  12.654  13.085  13.807  14.362  14.353  13.791  13.055  12.508  12.186  11.883  11.524  11.394  11.910  13.105  14.363  14.775  13.887  12.189  10.839  10.777  11.962  13.400  13.953  13.245  11.925  11.082  11.357  12.483  13.572  13.819  13.034  11.634  10.273   9.468 
+ 11.557  11.878  12.441  13.056  13.450  13.407  12.930  12.273  11.752  11.489  11.320  10.988  10.458  10.056  10.240  11.175  12.473  13.381  13.308  12.276  10.921  10.029   9.983  10.561  11.208  11.536  11.604  11.794  12.414  13.394  14.305  14.669  14.278  13.320  12.257  11.575 
+ 10.059  10.391  10.941  11.475  11.699  11.406  10.638   9.703   8.999   8.734   8.791   8.859   8.740   8.566   8.709   9.446  10.645  11.771  12.235  11.828  10.879  10.020   9.734  10.052  10.621  11.059  11.299  11.626  12.407  13.725  15.230  16.322  16.536  15.864  14.787  14.001 
+  9.504   9.772  10.262  10.811  11.125  10.923  10.160   9.128   8.292   7.950   8.018   8.132   7.996   7.685   7.597   8.089   9.103  10.130  10.574  10.222   9.430   8.858   8.980   9.752  10.717  11.417  11.769  12.107  12.859  14.156  15.669  16.805  17.101  16.541  15.577  14.863 
+  9.140   9.394   9.852  10.383  10.776  10.817  10.407   9.652   8.823   8.204   7.927   7.923   8.015   8.089   8.187   8.438   8.905   9.462   9.850   9.864   9.533   9.137   9.026   9.388  10.135  11.009  11.814  12.571  13.464  14.620  15.899  16.913  17.270  16.886  16.101  15.490 
+ 10.893  10.871  10.808  10.695  10.555  10.451  10.435  10.500  10.548  10.432  10.050   9.443   8.826   8.498   8.683   9.367  10.265  10.944  11.060  10.562   9.738   9.056   8.900   9.368  10.262  11.271  12.199  13.075  14.050  15.185  16.295  17.005  17.000  16.286  15.266  14.538 
+ 10.982  10.381   9.798   9.860  10.572  11.278  11.260  10.400   9.279   8.635   8.697   9.036   9.058   8.640   8.283   8.618   9.743  11.026  11.582  11.017   9.758   8.712   8.569   9.358  10.583  11.744  12.717  13.695  14.824  15.927  16.588  16.484  15.646  14.444  13.349  12.717 
+ 11.689  10.860   9.924   9.667  10.232  11.007  11.199  10.529   9.425   8.564   8.236   8.156   7.872   7.329   7.011   7.491   8.816  10.319  11.087  10.680   9.490   8.432   8.268   9.119  10.513  11.832  12.724  13.168  13.271  13.081  12.608  11.953  11.347  11.007  10.958  11.026 
+ 11.916  11.495  10.982  10.744  10.881  11.181  11.343  11.241  10.959  10.605  10.141   9.433   8.500   7.662   7.387   7.896   8.891   9.697   9.749   9.040   8.135   7.723   8.080   8.884   9.513   9.554   9.094   8.580   8.426   8.700   9.148   9.443   9.434   9.195   8.907   8.726 
+ 12.922  12.844  12.590  12.061  11.267  10.387   9.683   9.344   9.340   9.420   9.272   8.756   8.038   7.511   7.534   8.175   9.143   9.967  10.287  10.057   9.518   8.994   8.671   8.530   8.440   8.308   8.144   8.023   7.997   8.060   8.187   8.386   8.693   9.103   9.525   9.798 
+ 13.422  13.437  13.230  12.601  11.651  10.770  10.331  10.361  10.507  10.341   9.727   8.942   8.441   8.483   8.948   9.475   9.766   9.788   9.715   9.708   9.772   9.785   9.645   9.366   9.027   8.676   8.297   7.897   7.581   7.524   7.825   8.385   8.949   9.288   9.365   9.325 
+ 13.972  13.724  13.161  12.310  11.415  10.833  10.743  10.944  10.966  10.449   9.475   8.551   8.233   8.690   9.580  10.328  10.570  10.376  10.116  10.097  10.319  10.526  10.457  10.071   9.544   9.099   8.847   8.766   8.801   8.936   9.176   9.482   9.753   9.893   9.896   9.852 
+ 14.154  13.920  13.442  12.777  12.092  11.586  11.338  11.216  10.969  10.443   9.745   9.195   9.089   9.468  10.092  10.637  10.941  11.097  11.315  11.693  12.107  12.297  12.068  11.429  10.573   9.729   9.052   8.603   8.394   8.427   8.672   9.030   9.354   9.534   9.565   9.536 
+ 13.889  13.727  13.315  12.623  11.791  11.072  10.621  10.354  10.023   9.479   8.865   8.539   8.767   9.465  10.221  10.609  10.525  10.260  10.251  10.721  11.506  12.184  12.364  11.904  10.937   9.757   8.710   8.125   8.241   9.077  10.319  11.385  11.721  11.171  10.135   9.337 
+ 13.743  13.460  13.001  12.502  12.035  11.580  11.078  10.514   9.961   9.547   9.374   9.451   9.689   9.942  10.079  10.039   9.866   9.705   9.745  10.118  10.788  11.500  11.863  11.546  10.499   9.050   7.779   7.238   7.653   8.806  10.154  11.114  11.358  10.944  10.247   9.741 
+ 13.746  13.429  13.020  12.791  12.848  13.048  13.112  12.821  12.178  11.404  10.808  10.617  10.860  11.355  11.789  11.870  11.493  10.833  10.281  10.208  10.694  11.406  11.765  11.321  10.103   8.645   7.668   7.613   8.382   9.451  10.264  10.577  10.520  10.376  10.320  10.335 
+ 13.303  13.018  12.781  12.954  13.590  14.338  14.682  14.301  13.297  12.116  11.265  11.041  11.416  12.101  12.702  12.884  12.523  11.785  11.086  10.869  11.288  12.026  12.420  11.894  10.412   8.592   7.353   7.325   8.434   9.991  11.170  11.518  11.126  10.420   9.805   9.479 
+ 13.685  13.420  13.197  13.346  13.907  14.551  14.807  14.400  13.429  12.288  11.423  11.121  11.427  12.161  12.982  13.480  13.347  12.583  11.575  10.919  11.008  11.681  12.249  11.954  10.575   8.681   7.315   7.292   8.646  10.626  12.221  12.792  12.350  11.382  10.451   9.916 
+ 13.720  13.488  13.326  13.533  14.088  14.625  14.714  14.187  13.229  12.199  11.404  11.010  11.104  11.707  12.665  13.555  13.829  13.215  12.047  11.151  11.233  12.228  13.210  13.047  11.343   8.873   7.097   7.096   8.780  11.008  12.473  12.605  11.788  10.824  10.241  10.047 
+ 13.446  13.460  13.568  13.826  14.172  14.423  14.391  13.993  13.287  12.436  11.660  11.197  11.256  11.895  12.893  13.761  13.994  13.434  12.473  11.828  12.005  12.836  13.517  13.185  11.630   9.553   8.128   8.176   9.596  11.471  12.747  12.918  12.213  11.247  10.515  10.168 
+ 13.076  13.203  13.467  13.835  14.190  14.364  14.222  13.731  12.975  12.114  11.351  10.912  10.993  11.635  12.609  13.435  13.629  13.050  12.082  11.422  11.573  12.403  13.151  12.959  11.543   9.486   7.890   7.636   8.796  10.628  12.120  12.628  12.166  11.212  10.310   9.797 
+ 12.687  13.032  13.573  14.086  14.372  14.341  14.015  13.472  12.787  12.029  11.317  10.865  10.917  11.565  12.585  13.474  13.726  13.200  12.283  11.657  11.789  12.526  13.134  12.805  11.288   9.149   7.448   7.050   8.077   9.873  11.465  12.164  11.869  10.973  10.023   9.446 
+ 12.566  13.052  13.789  14.427  14.687  14.477  13.897  13.129  12.327  11.582  10.986  10.701  10.914  11.679  12.760  13.664  13.917  13.416  12.558  12.006  12.183  12.904  13.437  13.028  11.485   9.397   7.778   7.400   8.305   9.829  11.092  11.544  11.196  10.446   9.737   9.337 
+ 12.321  12.846  13.677  14.450  14.809  14.584  13.884  13.014  12.273  11.775  11.471  11.326  11.456  12.036  13.021  13.988  14.333  13.747  12.576  11.665  11.711  12.636  13.541  13.378  11.826   9.632   8.096   8.087   9.398  10.964  11.723  11.387  10.493   9.802   9.627   9.722 
+ 13.251  13.532  13.954  14.291  14.340  14.022  13.428  12.755  12.178  11.756  11.463  11.300  11.376  11.812  12.567  13.323  13.639  13.273  12.442  11.728  11.653  12.220  12.834  12.716  11.525   9.690   8.173   7.816   8.758  10.371  11.698  12.065  11.409  10.175   8.969   8.254 
+ 13.333  13.509  13.717  13.770  13.569  13.162  12.695  12.290  11.949  11.583  11.155  10.801  10.788  11.303  12.216  13.064  13.322  12.801  11.845  11.128  11.146  11.805  12.449  12.350  11.289   9.768   8.661   8.586   9.473  10.664  11.423  11.431  10.891  10.250   9.820   9.644 
+ 12.922  12.748  12.533  12.435  12.506  12.645  12.666  12.417  11.877  11.177  10.556  10.271  10.482  11.145  11.975  12.542  12.509  11.878  11.045  10.574  10.788  11.489  12.038  11.802  10.647   9.093   7.989   7.941   8.904  10.243  11.187  11.312  10.711   9.807   9.026   8.601 
+ 10.733  11.143  11.792  12.433  12.872  13.031  12.920  12.561  11.958  11.154  10.323   9.785   9.854  10.602  11.708  12.575  12.699  12.036  11.088  10.567  10.862  11.703  12.314  11.983  10.628   8.922   7.855   8.059   9.381  11.017  12.064  12.068  11.193   9.976   8.940   8.376 
+ 11.404  11.525  11.733  11.969  12.164  12.278  12.316  12.282  12.127  11.750  11.111  10.368   9.889  10.044  10.898  12.056  12.873  12.913  12.299  11.632  11.497  11.934  12.357  12.032  10.729   9.013   7.876   7.994   9.220  10.697  11.502  11.268  10.313   9.261   8.546   8.238 
+ 11.907  11.964  12.137  12.453  12.830  13.111  13.177  13.025  12.732  12.358  11.920  11.469  11.173  11.264  11.833  12.653  13.261  13.291  12.797  12.256  12.171  12.595  13.018  12.756  11.575   9.994   8.969   9.190  10.538  12.151  13.042  12.740  11.505  10.000   8.812   8.201 
+ 11.071  11.128  11.416  12.062  12.933  13.681  13.997  13.837  13.395  12.887  12.381  11.861  11.426  11.345  11.845  12.813  13.751  14.130  13.842  13.330  13.186  13.553  13.903  13.457  11.937   9.967   8.719   9.024  10.698  12.648  13.670  13.267  11.856  10.282   9.170   8.662 
+ 13.009  12.333  11.710  11.929  13.104  14.561  15.412  15.250  14.362  13.340  12.547  11.973  11.529  11.366  11.792  12.866  14.133  14.892  14.795  14.201  13.854  14.141  14.631  14.416  12.991  10.880   9.361   9.468  11.124  13.164  14.237  13.786  12.302  10.744   9.752   9.363 
+ 13.029  12.129  11.276  11.510  13.015  14.958  16.181  16.119  15.105  13.906  13.016  12.406  11.859  11.442  11.532  12.382  13.716  14.854  15.297  15.167  15.038  15.275  15.562  15.155  13.666  11.616  10.165  10.174  11.449  12.872  13.324  12.576  11.346  10.555  10.502  10.750 
+ 13.998  13.287  12.553  12.573  13.544  14.941  15.974  16.190  15.690  14.860  13.965  13.051  12.167  11.582  11.671  12.548  13.846  14.952  15.503  15.665  15.873  16.267  16.422  15.705  13.976  11.951  10.780  11.136  12.614  14.019  14.313  13.419  12.161  11.459  11.540  11.882 
+ 14.243  13.334  12.294  12.042  12.903  14.386  15.602  15.934  15.388  14.423  13.499  12.798  12.298  12.007  12.052  12.538  13.359  14.232  14.915  15.400  15.822  16.190  16.233  15.594  14.238  12.667  11.669  11.734  12.640  13.584  13.774  12.994  11.674  10.468   9.752   9.484 
+ 14.214  13.228  12.000  11.463  12.063  13.473  14.876  15.548  15.285  14.405  13.408  12.636  12.162  11.916  11.846  11.975  12.340  12.938  13.723  14.633  15.557  16.286  16.517  16.011  14.814  13.351  12.252  11.974  12.491  13.286  13.658  13.144  11.760   9.945   8.304   7.345 
+ 13.940  13.093  12.017  11.507  11.981  13.219  14.548  15.299  15.187  14.386  13.320  12.380  11.765  11.482  11.438  11.533  11.718  12.031  12.588  13.490  14.681  15.843  16.475  16.165  14.905  13.201  11.834  11.410  11.982  13.014  13.716  13.508  12.314  10.548   8.861   7.849 
+ 13.901  13.193  12.272  11.794  12.145  13.195  14.395  15.126  15.053  14.271  13.183  12.226  11.642  11.416  11.371  11.338  11.287  11.353  11.753  12.636  13.935  15.308  16.231  16.223  15.134  13.297  11.449  10.380  10.510  11.611  12.878  13.353  12.463  10.382   7.986   6.401 
+ 13.998  13.361  12.507  11.986  12.116  12.797  13.621  14.141  14.120  13.600  12.816  12.058  11.548  11.364  11.411  11.465  11.315  10.950  10.654  10.874  11.891  13.502  14.998  15.533  14.673  12.738  10.672   9.484   9.641  10.819  12.136  12.711  12.147  10.693   9.048   7.983 
+ 13.707  13.084  12.297  11.877  12.016  12.474  12.862  12.979  12.903  12.776  12.572  12.126  11.390  10.615  10.218  10.408  10.937  11.272  11.083  10.596  10.446  11.098  12.338  13.323  13.199  11.811   9.898   8.614   8.724  10.095  11.835  12.909  12.770  11.603  10.120   9.124 
+ 12.933  12.303  11.513  11.132  11.392  12.050  12.632  12.810  12.593  12.205  11.822  11.436  10.966  10.442  10.066  10.048  10.397  10.878  11.205  11.282  11.265  11.358  11.542  11.508  10.893   9.646   8.191   7.240   7.334   8.469  10.064  11.304  11.619  10.993   9.936   9.159 
+ 12.647  12.067  11.307  10.835  10.817  11.035  11.148  11.013  10.770  10.636  10.631  10.538  10.134   9.469   8.892   8.789   9.250   9.992  10.595  10.845  10.854  10.864  10.936  10.833  10.229   9.064   7.709   6.793   6.792   7.711   9.085  10.280  10.862  10.795  10.381  10.034 
+  9.477  10.002  10.644  10.900  10.555   9.839   9.223   9.050   9.263   9.462   9.234   8.480   7.509   6.810   6.705   7.145   7.791   8.300   8.576   8.792   9.178   9.768  10.309  10.418   9.867   8.790   7.643   6.965   7.078   7.927   9.147  10.274  10.987  11.224  11.154  11.030 
+  8.986   9.065   9.223   9.420   9.559   9.535   9.326   9.011   8.688   8.357   7.891   7.167   6.242   5.398   4.996   5.220   5.941   6.817   7.551   8.076   8.504   8.921   9.229   9.214   8.780   8.115   7.616   7.595   8.032   8.576   8.801   8.509   7.829   7.068   6.489   6.198 
+  7.061   7.735   8.720   9.484   9.602   9.003   8.017   7.181   6.905   7.203   7.678   7.783   7.204   6.080   4.931   4.333   4.580   5.548   6.831   7.993   8.773   9.115   9.095   8.831   8.456   8.122   7.972   8.063   8.305   8.485   8.386   7.917   7.165   6.339   5.661   5.287 
+  7.433   7.852   8.432   8.815   8.753   8.247   7.531   6.920   6.624   6.635   6.761   6.760   6.499   6.025   5.532   5.254   5.347   5.827   6.582   7.428   8.173   8.676   8.873   8.793   8.542   8.270   8.107   8.108   8.213   8.278   8.135   7.681   6.940   6.062   5.280   4.819 
+  8.301   8.596   9.026   9.332   9.264   8.725   7.849   6.952   6.351   6.166   6.249   6.306   6.125   5.727   5.342   5.227   5.498   6.084   6.822   7.561   8.191   8.606   8.696   8.420   7.905   7.455   7.382   7.783   8.422   8.854   8.702   7.903   6.718   5.543   4.680   4.245 
+  7.422   7.812   8.529   9.346   9.845   9.619   8.588   7.151   5.963   5.477   5.610   5.845   5.692   5.124   4.597   4.657   5.471   6.690   7.740   8.254   8.279   8.111   7.982   7.893   7.733   7.496   7.345   7.448   7.759   7.990   7.822   7.163   6.222   5.338   4.743   4.471 
+  7.198   8.126   9.350  10.024   9.649   8.371   6.854   5.814   5.559   5.851   6.151   6.040   5.504   4.892   4.618   4.861   5.479   6.175   6.735   7.139   7.481   7.796   7.975   7.863   7.436   6.884   6.519   6.547   6.908   7.299   7.373   6.954   6.128   5.163   4.352   3.900 
+  7.154   7.911   8.894   9.403   9.026   7.897   6.574   5.638   5.324   5.418   5.485   5.227   4.703   4.256   4.234   4.724   5.506   6.229   6.664   6.810   6.822   6.831   6.832   6.736   6.500   6.217   6.056   6.115   6.321   6.461   6.335   5.897   5.274   4.668   4.230   4.013 
+  6.190   6.920   8.009   8.887   9.070   8.423   7.235   6.050   5.323   5.143   5.226   5.185   4.862   4.452   4.311   4.642   5.313   5.986   6.405   6.575   6.681   6.836   6.944   6.806   6.390   5.946   5.837   6.202   6.769   7.032   6.654   5.750   4.797   4.242   4.159   4.269 
+  7.511   7.673   7.973   8.288   8.378   8.028   7.264   6.411   5.887   5.861   6.087   6.100   5.641   4.928   4.521   4.863   5.889   7.054   7.743   7.723   7.254   6.794   6.607   6.610   6.565   6.373   6.174   6.167   6.357   6.506   6.329   5.757   4.997   4.355   3.992   3.863 
+  7.888   7.590   7.214   6.989   6.949   6.924   6.749   6.450   6.229   6.247   6.417   6.454   6.149   5.616   5.271   5.506   6.340   7.348   7.952   7.853   7.240   6.631   6.480   6.884   7.569   8.148   8.382   8.269   7.944   7.526   7.050   6.517   5.958   5.448   5.071   4.874 
+  8.025   7.762   7.489   7.466   7.697   7.918   7.829   7.369   6.758   6.291   6.073   5.958   5.752   5.460   5.336   5.651   6.412   7.269   7.746   7.596   6.994   6.406   6.252   6.632   7.308   7.915   8.201   8.128   7.799   7.333   6.807   6.270   5.778   5.393   5.150   5.039 
+  7.438   7.841   8.495   9.108   9.334   8.968   8.127   7.221   6.686   6.646   6.808   6.711   6.144   5.373   4.943   5.219   6.064   6.924   7.264   6.965   6.351   5.869   5.729   5.828   5.971   6.116   6.380   6.814   7.221   7.245   6.693   5.767   4.958   4.658   4.842   5.121 
+  7.507   8.198   9.220  10.027  10.180   9.593   8.584   7.668   7.209   7.165   7.156   6.807   6.112   5.489   5.463   6.214   7.366   8.221   8.259   7.505   6.478   5.782   5.687   6.033   6.460   6.724   6.811   6.796   6.664   6.300   5.655   4.900   4.358   4.252   4.501   4.775 
+  6.392   7.595   9.282  10.473  10.536   9.550   8.184   7.197   6.910   7.043   7.015   6.473   5.624   5.096   5.440   6.653   8.117   9.001   8.827   7.761   6.431   5.465   5.107   5.200   5.452   5.706   5.973   6.259   6.413   6.193   5.493   4.509   3.644   3.212   3.205   3.339 
+  5.922   7.138   8.890  10.225  10.475   9.605   8.153   6.835   6.102   5.941   6.030   6.068   6.024   6.121   6.583   7.390   8.235   8.714   8.609   8.019   7.261   6.635   6.248   6.018   5.823   5.648   5.579   5.688   5.913   6.064   5.943   5.490   4.818   4.132   3.609   3.338 
+  5.347   6.212   7.588   8.915   9.681   9.639   8.911   7.883   6.982   6.459   6.319   6.428   6.679   7.059   7.580   8.142   8.509   8.438   7.878   7.053   6.335   5.982   5.971   6.046   5.953   5.663   5.379   5.350   5.638   6.044   6.243   6.010   5.358   4.508   3.750   3.314 
+  5.047   5.905   7.295   8.663   9.439   9.324   8.480   7.466   6.894   7.024   7.609   8.109   8.120   7.667   7.123   6.854   6.909   7.031   6.932   6.568   6.146   5.879   5.762   5.596   5.240   4.825   4.690   5.076   5.856   6.574   6.763   6.289   5.411   4.549   3.977   3.728 
+  6.198   7.081   8.333   9.232   9.274   8.455   7.249   6.298   6.023   6.404   7.049   7.490   7.480   7.101   6.632   6.313   6.197   6.177   6.143   6.089   6.102   6.224   6.365   6.343   6.047   5.581   5.244   5.351   5.989   6.910   7.639   7.728   7.015   5.725   4.368   3.510 
+  7.178   8.005   9.018   9.452   9.012   8.064   7.286   7.112   7.433   7.767   7.702   7.197   6.531   6.008   5.728   5.605   5.560   5.647   5.973   6.518   7.049   7.255   6.970   6.317   5.619   5.199   5.208   5.611   6.260   6.954   7.446   7.474   6.871   5.730   4.457   3.617 
+  7.318   7.954   8.796   9.277   9.073   8.313   7.473   7.050   7.231   7.793   8.271   8.272   7.711   6.827   6.006   5.546   5.524   5.817   6.226   6.586   6.801   6.826   6.630   6.220   5.679   5.189   4.974   5.179   5.769   6.510   7.061   7.134   6.648   5.769   4.849   4.268 
+  7.221   7.932   8.811   9.199   8.829   7.998   7.286   7.102   7.409   7.837   8.021   7.847   7.453   7.022   6.626   6.236   5.847   5.555   5.492   5.695   6.048   6.359   6.492   6.433   6.255   6.042   5.874   5.862   6.128   6.704   7.402   7.827   7.603   6.677   5.449   4.584 
+  6.771   7.663   8.848   9.524   9.223   8.098   6.802   6.062   6.229   7.108   8.120   8.667   8.449   7.569   6.416   5.433   4.924   4.962   5.424   6.079   6.690   7.087   7.193   7.018   6.648   6.227   5.928   5.908   6.228   6.792   7.345   7.574   7.283   6.529   5.635   5.035 
+  6.847   7.342   8.181   9.042   9.507   9.270   8.389   7.337   6.752   7.001   7.888   8.756   8.930   8.183   6.865   5.635   5.012   5.106   5.664   6.335   6.889   7.243   7.371   7.241   6.875   6.433   6.185   6.348   6.903   7.565   7.952   7.825   7.222   6.398   5.661   5.240 
+  7.686   7.597   7.586   7.823   8.289   8.738   8.863   8.549   8.010   7.668   7.840   8.461   9.071   9.116   8.355   7.065   5.883   5.381   5.687   6.430   7.036   7.131   6.749   6.228   5.899   5.874   6.054   6.309   6.621   7.033   7.497   7.795   7.658   7.016   6.138   5.509 
+  7.715   7.890   8.112   8.274   8.414   8.653   8.994   9.236   9.122   8.622   8.045   7.820   8.101   8.572   8.672   8.083   7.042   6.186   6.036   6.568   7.260   7.548   7.283   6.784   6.494   6.572   6.827   6.987   7.006   7.073   7.330   7.617   7.554   6.913   5.926   5.181 
+  8.147   8.192   8.273   8.406   8.633   8.949   9.228   9.261   8.923   8.353   7.923   7.982   8.527   9.127   9.206   8.498   7.303   6.303   6.059   6.595   7.391   7.802   7.531   6.799   6.111   5.859   6.089   6.582   7.089   7.486   7.740   7.798   7.566   7.033   6.379   5.923 
+  7.802   7.455   7.028   6.940   7.533   8.777  10.148  10.857  10.390   8.953   7.437   6.807   7.376   8.545   9.273   8.922   7.754   6.681   6.473   7.134   7.964   8.216   7.732   6.997   6.632   6.825   7.253   7.493   7.463   7.441   7.666   7.968   7.850   6.998   5.695   4.713 
+  5.841   6.464   7.341   8.057   8.470   8.743   9.048   9.304   9.209   8.571   7.590   6.787   6.595   6.990   7.515   7.675   7.366   6.932   6.821   7.166   7.677   7.917   7.692   7.180   6.729   6.548   6.606   6.773   7.020   7.413   7.914   8.239   8.006   7.081   5.820   4.914 
+  6.545   6.723   6.905   6.958   6.969   7.167   7.653   8.207   8.429   8.105   7.451   6.964   6.995   7.424   7.768   7.638   7.123   6.728   6.918   7.673   8.473   8.722   8.229   7.330   6.572   6.284   6.422   6.758   7.155   7.629   8.154   8.484   8.263   7.358   6.115   5.219 
+  6.761   6.945   7.036   6.828   6.490   6.459   6.988   7.798   8.226   7.796   6.690   5.657   5.398   5.987   6.832   7.228   6.973   6.501   6.420   6.929   7.641   7.959   7.624   6.916   6.364   6.279   6.562   6.915   7.186   7.468   7.867   8.250   8.276   7.732   6.832   6.141 
+  7.364   7.241   7.097   7.115   7.463   8.142   8.894   9.291   9.032   8.206   7.279   6.765   6.822   7.125   7.178   6.775   6.230   6.112   6.733   7.820   8.701   8.839   8.260   7.495   7.117   7.297   7.755   8.112   8.243   8.310   8.471   8.597   8.345   7.524   6.394   5.572 
+  7.179   7.083   6.877   6.671   6.759   7.414   8.557   9.641   9.973   9.260   7.916   6.794   6.541   7.101   7.823   8.059   7.728   7.333   7.445   8.143   8.934   9.195   8.726   7.897   7.292   7.213   7.518   7.866   8.084   8.265   8.523   8.729   8.552   7.799   6.724   5.931 
+  7.334   7.152   6.818   6.503   6.553   7.276   8.611   9.999  10.667  10.186   8.842   7.483   6.915   7.325   8.193   8.756   8.620   8.010   7.500   7.488   7.897   8.312   8.376   8.081   7.710   7.562   7.723   8.071   8.435   8.716   8.858   8.775   8.359   7.617   6.774   6.205 
+  6.453   6.089   5.557   5.232   5.536   6.679   8.407  10.036  10.814  10.427   9.230   8.000   7.382   7.469   7.843   8.014   7.844   7.589   7.575   7.841   8.109   8.078   7.744   7.416   7.420   7.794   8.260   8.513   8.497   8.410   8.434   8.484   8.261   7.580   6.640   5.952 
+  5.911   6.054   6.207   6.332   6.646   7.452   8.758  10.083  10.726  10.330   9.224   8.188   7.824   8.087   8.415   8.317   7.854   7.547   7.809   8.478   8.929   8.662   7.804   7.020   6.911   7.480   8.171   8.434   8.244   8.060   8.274   8.732   8.828   8.120   6.851   5.849 
+  6.319   6.523   6.787   6.993   7.200   7.613   8.358   9.293  10.033  10.206   9.720   8.829   7.954   7.419   7.321   7.574   8.038   8.576   9.027   9.200   8.968   8.398   7.771   7.421   7.490   7.827   8.139   8.262   8.302   8.487   8.871   9.184   9.012   8.186   7.024   6.179 
+  7.252   7.206   7.074   6.892   6.856   7.222   8.071   9.138   9.904   9.911   9.081   7.792   6.648   6.140   6.418   7.292   8.387   9.305   9.737   9.540   8.804   7.872   7.208   7.138   7.626   8.286   8.668   8.601   8.319   8.215   8.451   8.765   8.677   7.938   6.826   5.998 
+  8.129   7.944   7.596   7.199   6.988   7.192   7.828   8.608   9.078   8.924   8.190   7.239   6.496   6.202   6.355   6.850   7.594   8.494   9.342   9.806   9.610   8.794   7.774   7.107   7.094   7.585   8.137   8.412   8.434   8.479   8.715   8.950   8.773   7.969   6.817   5.970 
+  8.354   7.949   7.296   6.678   6.406   6.665   7.379   8.208   8.718   8.637   8.001   7.116   6.352   5.957   5.999   6.429   7.161   8.068   8.934   9.476   9.485   8.984   8.261   7.701   7.534   7.711   8.009   8.258   8.475   8.770   9.125   9.295   8.959   8.036   6.861   6.037 
+  8.285   7.661   6.891   6.570   6.987   7.949   8.960   9.582   9.668   9.325   8.710   7.896   6.932   6.008   5.495   5.749   6.810   8.253   9.379   9.648   9.035   8.034   7.301   7.196   7.579   7.999   8.104   7.922   7.802   8.061   8.659   9.166   9.086   8.269   7.092   6.239 
+  7.513   6.988   6.354   6.147   6.650   7.687   8.737   9.272   9.080   8.348   7.469   6.750   6.255   5.900   5.661   5.697   6.226   7.264   8.480   9.329   9.415   8.784   7.907   7.336   7.309   7.638   7.935   7.990   7.934   8.061   8.472   8.900   8.903   8.263   7.256   6.499 
+  6.013   5.923   5.769   5.645   5.703   6.066   6.688   7.319   7.630   7.433   6.813   6.069   5.500   5.247   5.290   5.579   6.128   6.961   7.970   8.859   9.283   9.099   8.492   7.865   7.550   7.597   7.810   7.980   8.075   8.208   8.435   8.605   8.448   7.843   7.005   6.398 
+  5.177   5.243   5.385   5.649   6.105   6.756   7.436   7.830   7.656   6.906   5.916   5.180   5.028   5.423   6.044   6.583   6.985   7.423   8.055   8.795   9.329   9.361   8.862   8.105   7.452   7.114   7.070   7.197   7.422   7.745   8.109   8.322   8.137   7.482   6.611   5.990 
+  6.135   5.771   5.334   5.227   5.689   6.583   7.407   7.584   6.872   5.597   4.488   4.191   4.809   5.858   6.666   6.927   6.904   7.146   7.936   8.982   9.632   9.419   8.461   7.371   6.765   6.817   7.226   7.580   7.736   7.858   8.132   8.469   8.544   8.127   7.378   6.788 
+  5.171   5.067   4.969   5.049   5.430   6.074   6.737   7.069   6.844   6.154   5.399   5.043   5.296   5.974   6.654   7.015   7.077   7.138   7.475   8.063   8.568   8.614   8.112   7.352   6.808   6.801   7.301   7.992   8.518   8.700   8.577   8.301   8.003   7.745   7.552   7.446 
+  4.099   3.813   3.591   3.879   4.881   6.345   7.660   8.207   7.746   6.586   5.385   4.735   4.809   5.331   5.874   6.217   6.475   6.904   7.586   8.277   8.578   8.280   7.568   6.913   6.723   7.064   7.666   8.181   8.450   8.544   8.594   8.595   8.414   7.964   7.372   6.947 
+  6.221   5.843   5.325   5.017   5.165   5.746   6.444   6.833   6.673   6.092   5.504   5.298   5.535   5.915   6.061   5.881   5.688   5.947   6.843   8.053   8.937   9.008   8.304   7.353   6.779   6.865   7.428   8.053   8.441   8.570   8.584   8.578   8.507   8.294   7.978   7.737 
+  5.727   5.038   4.172   3.782   4.190   5.154   6.038   6.269   5.739   4.872   4.291   4.366   4.962   5.582   5.781   5.519   5.180   5.255   5.937   6.967   7.824   8.108   7.813   7.283   6.938   6.986   7.348   7.798   8.159   8.386   8.497   8.479   8.271   7.866   7.387   7.059 
+  5.623   4.991   4.188   3.811   4.173   5.080   5.973   6.322   5.989   5.297   4.761   4.692   4.993   5.300   5.341   5.206   5.288   5.942   7.135   8.402   9.153   9.092   8.416   7.644   7.223   7.258   7.534   7.788   7.938   8.080   8.301   8.505   8.470   8.073   7.466   7.010 
+  6.203   5.622   4.800   4.236   4.312   5.052   6.082   6.839   6.916   6.322   5.454   4.806   4.629   4.817   5.097   5.340   5.702   6.446   7.609   8.831   9.529   9.322   8.341   7.181   6.499   6.590   7.253   8.011   8.483   8.587   8.479   8.338   8.223   8.100   7.956   7.849 
+  3.528   4.075   4.775   5.198   5.249   5.196   5.358   5.767   6.146   6.209   5.958   5.678   5.632   5.796   5.917   5.846   5.779   6.130   7.093   8.343   9.181   9.072   8.096   6.913   6.260   6.414   7.072   7.710   8.039   8.144   8.235   8.323   8.180   7.624   6.811   6.202 
+  4.599   4.173   3.741   3.788   4.458   5.418   6.124   6.243   5.892   5.511   5.473   5.788   6.125   6.145   5.832   5.540   5.715   6.513   7.630   8.502   8.696   8.207   7.431   6.857   6.742   7.004   7.382   7.685   7.911   8.154   8.413   8.519   8.250   7.562   6.704   6.109 
+  4.230   4.010   3.869   4.128   4.819   5.620   6.094   6.025   5.568   5.100   4.913   5.023   5.225   5.336   5.377   5.551   6.046   6.848   7.723   8.367   8.594   8.421   8.015   7.576   7.258   7.141   7.243   7.521   7.863   8.119   8.162   7.957   7.575   7.152   6.812   6.628 
+  4.717   5.032   5.472   5.850   6.157   6.513   6.957   7.304   7.266   6.740   5.981   5.440   5.401   5.740   6.074   6.156   6.146   6.462   7.339   8.493   9.264   9.123   8.128   6.907   6.187   6.268   6.882   7.512   7.831   7.874   7.838   7.790   7.585   7.087   6.411   5.913 
+  6.914   6.753   6.787   7.330   8.257   9.012   9.046   8.290   7.231   6.508   6.412   6.707   6.929   6.845   6.647   6.732   7.293   8.120   8.777   8.951   8.661   8.158   7.674   7.283   6.973   6.800   6.905   7.353   7.971   8.407   8.374   7.889   7.261   6.829   6.702   6.732 
+  6.906   6.861   7.041   7.689   8.709   9.654  10.035   9.691   8.890   8.103   7.661   7.596   7.750   7.990   8.302   8.687   9.032   9.120   8.816   8.225   7.643   7.331   7.301   7.348   7.276   7.112   7.090   7.399   7.962   8.454   8.558   8.227   7.706   7.307   7.158   7.158 
+  5.776   6.077   6.656   7.470   8.444   9.442  10.254  10.642  10.455   9.749   8.806   8.017   7.689   7.891   8.450   9.089   9.581   9.825   9.815   9.559   9.057   8.343   7.541   6.862   6.505   6.552   6.922   7.424   7.864   8.117   8.138   7.933   7.542   7.045   6.577   6.291 
+  5.870   6.169   6.794   7.756   8.978  10.240  11.186  11.450  10.853   9.564   8.089   7.056   6.881   7.536   8.574   9.410   9.672   9.390   8.900   8.552   8.448   8.412   8.194   7.726   7.219   7.012   7.291   7.911   8.468   8.572   8.121   7.362   6.700   6.409   6.462   6.604 
+  7.450   7.359   7.427   7.944   8.970  10.217  11.170  11.383  10.751   9.585   8.436   7.801   7.870   8.467   9.190   9.653   9.676   9.329   8.835   8.400   8.108   7.907   7.710   7.495   7.339   7.357   7.584   7.916   8.150   8.110   7.772   7.282   6.861   6.654   6.647   6.704 
+  7.648   7.435   7.297   7.593   8.471   9.698  10.746  11.089  10.542   9.396   8.263   7.705   7.909   8.614   9.329   9.680   9.619   9.367   9.185   9.156   9.155   9.010   8.670   8.258   7.963   7.889   8.001   8.179   8.322   8.387   8.354   8.174   7.797   7.243   6.662   6.286 
+  6.268   6.673   7.514   8.735  10.089  11.165  11.582  11.210  10.268   9.200   8.437   8.182   8.374   8.796   9.240   9.584   9.772   9.761   9.513   9.053   8.509   8.089   7.956   8.116   8.398   8.563   8.470   8.171   7.857   7.700   7.714   7.743   7.593   7.196   6.690   6.337 
+  5.575   6.496   8.014   9.641  10.939  11.649  11.715  11.217  10.325   9.282   8.376   7.868   7.889   8.371   9.088   9.770  10.219  10.349  10.150   9.653   8.942   8.179   7.592   7.374   7.558   7.977   8.365   8.527   8.449   8.259   8.071   7.879   7.582   7.123   6.604   6.252 
+  7.320   7.561   8.098   8.945   9.963  10.854  11.269  10.999  10.104   8.902   7.825   7.222   7.224   7.733   8.501   9.254   9.785   9.989   9.864   9.494   9.013   8.570   8.277   8.176   8.228   8.350   8.455   8.496   8.459   8.339   8.118   7.763   7.274   6.710   6.200   5.894 
+  7.416   7.948   8.799   9.663  10.293  10.579  10.514  10.124   9.441   8.552   7.661   7.070   7.046   7.647   8.644   9.616  10.169  10.155   9.722   9.192   8.837   8.733   8.759   8.736   8.574   8.330   8.142   8.106   8.191   8.257   8.146   7.780   7.205   6.560   6.014   5.705 
+  8.440   8.653   9.068   9.628  10.206  10.617  10.671  10.255   9.386   8.226   7.050   6.171   5.845   6.172   7.036   8.133   9.092   9.644   9.743   9.563   9.361   9.308   9.403   9.517   9.524   9.403   9.235   9.101   8.994   8.812   8.446   7.872   7.183   6.532   6.048   5.798 
+  8.565   8.165   7.800   7.966   8.775   9.812  10.410  10.125   9.051   7.736   6.797   6.542   6.855   7.391   7.872   8.229   8.539   8.841   9.048   9.016   8.707   8.278   8.000   8.084   8.523   9.105   9.544   9.651   9.411   8.932   8.341   7.708   7.057   6.420   5.884   5.571 
+  8.175   8.300   8.611   9.144   9.805  10.355  10.498  10.050   9.062   7.816   6.699   6.018   5.884   6.212   6.812   7.494   8.115   8.575   8.801   8.768   8.528   8.219   8.001   7.950   8.004   8.005   7.826   7.485   7.134   6.940   6.934   6.972   6.847   6.472   5.972   5.614 
+  8.167   7.662   7.028   6.747   7.063   7.800   8.480   8.632   8.080   7.041   5.978   5.345   5.371   5.995   6.936   7.847   8.453   8.636   8.449   8.065   7.678   7.422   7.319   7.306   7.309   7.300   7.305   7.357   7.437   7.463   7.331   6.988   6.470   5.895   5.406   5.129 
+  7.451   7.202   6.978   7.125   7.786   8.757   9.565   9.740   9.101   7.876   6.581   5.734   5.596   6.087   6.893   7.677   8.230   8.505   8.537   8.376   8.067   7.670   7.282   6.995   6.844   6.790   6.770   6.758   6.788   6.892   7.020   7.030   6.775   6.245   5.622   5.200 
+  5.865   6.270   6.980   7.794   8.441   8.698   8.513   8.029   7.460   6.939   6.466   6.031   5.755   5.888   6.593   7.707   8.726   9.100   8.646   7.712   6.936   6.768   7.135   7.549   7.539   7.049   6.462   6.246   6.548   7.086   7.394   7.193   6.558   5.800   5.206   4.903 
+  5.959   6.194   6.590   7.036   7.433   7.717   7.851   7.802   7.543   7.081   6.504   5.978   5.712   5.859   6.441   7.313   8.212   8.866   9.102   8.917   8.463   7.963   7.598   7.434   7.411   7.410   7.346   7.221   7.110   7.086   7.152   7.230   7.220   7.079   6.870   6.715 
+  4.883   5.639   6.881   8.158   9.017   9.193   8.730   7.941   7.218   6.794   6.624   6.482   6.193   5.834   5.716   6.156   7.208   8.540   9.597   9.922   9.430   8.445   7.490   6.974   6.996   7.355   7.725   7.872   7.758   7.512   7.320   7.306   7.484   7.776   8.062   8.236 
+  4.732   5.552   6.867   8.158   8.929   8.947   8.362   7.607   7.114   7.028   7.132   7.063   6.651   6.111   5.910   6.389   7.440   8.522   9.019   8.685   7.827   7.091   7.004   7.622   8.525   9.133   9.095   8.477   7.657   7.044   6.839   6.981   7.262   7.494   7.608   7.638 
+  5.624   6.231   7.164   8.018   8.463   8.377   7.846   7.083   6.320   5.739   5.423   5.348   5.422   5.569   5.818   6.291   7.078   8.068   8.913   9.214   8.831   8.069   7.529   7.691   8.536   9.519   9.967   9.583   8.656   7.800   7.444   7.511   7.549   7.187   6.500   5.946 
+  6.454   7.193   8.292   9.249   9.745   9.745   9.375   8.750   7.936   7.033   6.247   5.803   5.779   6.044   6.401   6.788   7.327   8.121   9.002   9.536   9.352   8.542   7.725   7.632   8.511   9.872  10.830  10.788   9.885   8.816   8.208   8.110   8.051   7.573   6.728   6.050 
+  7.371   7.185   7.077   7.348   8.052   8.879   9.313   8.988   7.971   6.744   5.875   5.614   5.755   5.884   5.812   5.796   6.312   7.551   9.094  10.114  10.011   8.958   7.852   7.656   8.635  10.129  11.080  10.871   9.774   8.650   8.174   8.287   8.349   7.810   6.775   5.937 
+  7.630   7.532   7.554   7.945   8.739   9.610   9.993   9.440   7.982   6.204   4.912   4.596   5.098   5.781   6.087   6.014   6.085   6.811   8.129   9.351   9.707   9.046   8.030   7.619   8.267   9.529  10.449  10.373   9.478   8.539   8.179   8.297   8.218   7.407   6.061   5.013 
+  6.570   6.639   6.958   7.691   8.737   9.658   9.885   9.104   7.537   5.887   4.913   4.930   5.609   6.265   6.427   6.216   6.214   6.909   8.195   9.382   9.748   9.158   8.222   7.811   8.351   9.478  10.371  10.445   9.798   9.031   8.640   8.552   8.249   7.346   6.054   5.091 
+  5.218   6.033   7.315   8.586   9.488   9.879   9.742   9.099   8.036   6.796   5.784   5.366   5.620   6.254   6.836   7.145   7.327   7.705   8.393   9.112   9.400   9.047   8.360   7.960   8.285   9.214  10.161  10.550  10.245   9.568   8.917   8.397   7.793   6.901   5.864   5.141 
+  3.593   5.032   7.130   8.913   9.865  10.103  10.008   9.753   9.206   8.245   7.082   6.201   5.945   6.195   6.507   6.584   6.606   7.036   8.072   9.301   9.967   9.642   8.675   7.944   8.106   9.019   9.898  10.046   9.467   8.783   8.551   8.671   8.484   7.481   5.920   4.727 
+  4.796   5.245   6.079   7.155   8.247   9.072   9.367   9.012   8.121   7.013   6.059   5.484   5.281   5.297   5.431   5.750   6.400   7.381   8.406   9.020   8.931   8.282   7.593   7.391   7.801   8.459   8.832   8.672   8.205   7.884   7.928   8.077   7.813   6.864   5.542   4.578 
+  5.602   6.484   7.739   8.717   9.059   8.852   8.430   8.054   7.746   7.388   6.922   6.432   6.068   5.922   6.007   6.330   6.920   7.731   8.524   8.910   8.618   7.766   6.874   6.517   6.873   7.577   8.031   7.928   7.503   7.280   7.524   7.919   7.819   6.858   5.384   4.277 
+  5.403   6.381   7.837   9.092   9.691   9.576   8.985   8.207   7.435   6.776   6.306   6.080   6.071   6.174   6.307   6.526   6.993   7.766   8.610   9.056   8.744   7.772   6.718   6.241   6.564   7.302   7.805   7.728   7.312   7.108   7.385   7.795   7.642   6.545   4.901   3.676 
+  5.527   6.621   8.187   9.381   9.658   9.027   7.939   6.922   6.283   6.028   5.984   5.967   5.888   5.776   5.761   6.019   6.658   7.588   8.471   8.870   8.540   7.659   6.770   6.427   6.792   7.522   8.053   8.051   7.650   7.268   7.171   7.201   6.929   6.099   4.953   4.117 
+  4.311   5.382   6.951   8.253   8.800   8.572   7.876   7.056   6.323   5.784   5.509   5.521   5.713   5.867   5.833   5.718   5.854   6.488   7.450   8.160   8.049   7.081   5.889   5.333   5.812   6.933   7.835   7.906   7.259   6.547   6.303   6.432   6.341   5.568   4.311   3.339 
+  5.853   6.353   7.176   8.021   8.571   8.617   8.156   7.395   6.644   6.143   5.939   5.897   5.846   5.750   5.763   6.098   6.804   7.632   8.134   7.956   7.124   6.078   5.405   5.441   6.040   6.697   6.933   6.643   6.137   5.837   5.903   6.087   5.957   5.297   4.343   3.643 
+  4.522   5.466   6.891   8.166   8.840   8.818   8.285   7.501   6.670   5.937   5.419   5.197   5.251   5.466   5.736   6.073   6.600   7.365   8.165   8.586   8.299   7.374   6.329   5.789   6.016   6.716   7.295   7.354   6.992   6.648   6.627   6.783   6.650   5.924   4.827   4.001 
+  4.635   5.645   7.130   8.360   8.834   8.511   7.714   6.864   6.236   5.898   5.772   5.728   5.656   5.514   5.375   5.418   5.815   6.553   7.341   7.750   7.522   6.815   6.140   5.983   6.408   6.995   7.192   6.807   6.181   5.876   6.136   6.616   6.650   5.858   4.552   3.553 
+  4.939   5.532   6.449   7.302   7.791   7.825   7.514   7.051   6.584   6.165   5.779   5.416   5.119   4.976   5.074   5.440   6.007   6.624   7.107   7.315   7.203   6.845   6.381   5.948   5.617   5.397   5.281   5.285   5.439   5.715   5.975   6.009   5.655   4.945   4.138   3.601 
+  4.701   5.377   6.351   7.136   7.444   7.300   6.911   6.467   6.052   5.693   5.431   5.292   5.222   5.099   4.883   4.745   4.998   5.803   6.910   7.712   7.667   6.757   5.569   4.866   4.981   5.568   5.939   5.697   5.090   4.752   5.058   5.719   6.001   5.410   4.199   3.220 
+  5.430   5.961   6.666   7.126   7.178   6.971   6.728   6.491   6.102   5.443   4.655   4.121   4.177   4.849   5.834   6.749   7.383   7.729   7.816   7.570   6.894   5.890   4.954   4.571   4.940   5.773   6.494   6.692   6.429   6.111   6.057   6.167   6.021   5.328   4.288   3.505 
+  5.138   5.229   5.588   6.296   7.096   7.476   7.065   5.997   4.887   4.388   4.692   5.406   5.914   5.931   5.736   5.903   6.738   7.932   8.744   8.567   7.426   5.987   5.075   5.098   5.805   6.553   6.822   6.567   6.154   5.988   6.146   6.328   6.124   5.390   4.405   3.704 
+  3.532   4.716   6.284   7.264   7.242   6.592   6.062   6.104   6.539   6.795   6.464   5.670   4.950   4.801   5.306   6.132   6.828   7.138   7.071   6.768   6.338   5.843   5.374   5.076   5.069   5.331   5.684   5.930   5.993   5.937   5.831   5.633   5.215   4.531   3.756   3.231 
+  4.938   5.631   6.475   6.870   6.668   6.268   6.207   6.632   7.155   7.203   6.548   5.543   4.852   4.937   5.724   6.710   7.358   7.434   7.045   6.444   5.832   5.325   5.022   5.031   5.376   5.909   6.356   6.499   6.337   6.047   5.791   5.538   5.107   4.397   3.570   2.999 
+  5.351   5.744   6.225   6.472   6.454   6.473   6.867   7.644   8.367   8.441   7.589   6.138   4.866   4.502   5.234   6.598   7.809   8.273   7.925   7.164   6.502   6.206   6.194   6.203   6.056   5.793   5.595   5.596   5.747   5.846   5.690   5.216   4.532   3.834   3.297   3.014 
+  4.913   5.364   5.889   6.119   6.070   6.134   6.668   7.560   8.224   8.065   7.030   5.746   5.103   5.592   6.948   8.361   9.060   8.798   7.895   6.890   6.148   5.719   5.478   5.348   5.361   5.570   5.925   6.267   6.428   6.333   5.998   5.472   4.799   4.050   3.372   2.960 
+  5.535   5.681   5.847   5.923   5.958   6.154   6.682   7.455   8.089   8.118   7.358   6.137   5.179   5.177   6.313   8.081   9.564   9.990   9.192   7.682   6.277   5.589   5.710   6.288   6.864   7.198   7.343   7.466   7.629   7.695   7.450   6.785   5.795   4.731   3.865   3.389 
+  6.690   6.180   5.586   5.421   5.889   6.776   7.656   8.192   8.261   7.887   7.151   6.232   5.511   5.494   6.491   8.246   9.916  10.541   9.718   7.935   6.259   5.572   5.986   6.873   7.475   7.518   7.329   7.404   7.868   8.331   8.246   7.389   6.039   4.721   3.815   3.399 
+  7.357   6.874   6.281   6.075   6.552   7.594   8.721   9.360   9.164   8.204   6.920   5.898   5.585   6.099   7.203   8.432   9.292   9.465   8.929   7.959   6.997   6.438   6.437   6.834   7.277   7.452   7.297   7.029   6.961   7.223   7.600   7.635   6.947   5.558   3.969   2.910 
+  6.985   6.703   6.422   6.479   6.999   7.794   8.485   8.735   8.402   7.563   6.444   5.366   4.695   4.747   5.614   7.018   8.354   8.982   8.616   7.531   6.393   5.815   5.955   6.457   6.777   6.612   6.115   5.725   5.784   6.243   6.685   6.614   5.794   4.412   2.979   2.076 
+  6.157   6.656   7.359   7.892   8.050   7.898   7.646   7.422   7.158   6.670   5.881   4.982   4.377   4.441   5.252   6.497   7.628   8.162   7.937   7.164   6.266   5.619   5.361   5.380   5.448   5.413   5.306   5.296   5.530   5.969   6.344   6.291   5.587   4.339   2.990   2.115 
+  3.280   4.616   6.479   7.864   8.275   7.963   7.557   7.445   7.474   7.188   6.340   5.200   4.384   4.370   5.136   6.197   6.968   7.144   6.800   6.228   5.695   5.324   5.116   5.018   4.958   4.856   4.679   4.499   4.488   4.769   5.243   5.556   5.318   4.427   3.241   2.400 
+  3.009   3.870   5.060   5.936   6.232   6.193   6.275   6.668   7.085   7.007   6.166   4.865   3.838   3.743   4.687   6.139   7.292   7.595   7.060   6.169   5.481   5.260   5.361   5.419   5.150   4.555   3.902   3.536   3.646   4.151   4.741   5.056   4.881   4.270   3.520   3.013 
+  5.636   5.592   5.588   5.705   5.942   6.217   6.435   6.546   6.524   6.328   5.912   5.330   4.808   4.674   5.120   5.980   6.758   6.931   6.350   5.377   4.641   4.562   5.030   5.511   5.482   4.844   3.977   3.421   3.461   3.948   4.482   4.731   4.635   4.358   4.095   3.954 
+  5.802   6.040   6.355   6.550   6.541   6.390   6.212   6.044   5.805   5.397   4.847   4.360   4.211   4.546   5.248   5.988   6.423   6.406   6.052   5.627   5.361   5.323   5.440   5.616   5.828   6.124   6.535   6.986   7.306   7.330   7.016   6.485   5.942   5.553   5.362   5.303 
+  4.954   5.489   6.170   6.542   6.449   6.098   5.809   5.693   5.584   5.259   4.719   4.240   4.131   4.442   4.902   5.151   5.049   4.773   4.623   4.742   5.000   5.160   5.124   5.024   5.079   5.361   5.715   5.899   5.802   5.522   5.255   5.102   5.008   4.865   4.656   4.492 
+  3.822   4.445   5.360   6.096   6.310   5.954   5.265   4.586   4.160   4.029   4.078   4.171   4.256   4.361   4.515   4.678   4.752   4.676   4.503   4.384   4.461   4.751   5.117   5.371   5.406   5.272   5.111   5.035   5.033   5.001   4.848   4.585   4.315   4.144   4.097   4.108 
+  5.195   5.179   5.250   5.487   5.816   6.013   5.858   5.309   4.563   3.927   3.631   3.695   3.974   4.292   4.564   4.797   5.016   5.195   5.271   5.225   5.131   5.122   5.290   5.603   5.924   6.103   6.079   5.909   5.706   5.540   5.389   5.174   4.833   4.389   3.958   3.690 
+  5.683   6.075   6.688   7.216   7.337   6.887   6.000   5.050   4.422   4.233   4.271   4.204   3.897   3.549   3.520   3.983   4.734   5.338   5.495   5.291   5.106   5.262   5.741   6.229   6.430   6.340   6.225   6.329   6.602   6.728   6.421   5.710   4.929   4.432   4.308   4.360 
+  4.358   5.104   6.148   6.872   6.857   6.121   5.077   4.233   3.873   3.915   4.053   4.047   3.925   3.938   4.305   4.994   5.710   6.130   6.158   5.990   5.926   6.095   6.348   6.415   6.171   5.784   5.570   5.713   6.079   6.308   6.111   5.501   4.767   4.229   4.000   3.963 
+  2.222   3.484   5.266   6.587   6.862   6.219   5.302   4.757   4.805   5.194   5.478   5.386   4.974   4.524   4.306   4.422   4.795   5.282   5.757   6.145   6.404   6.514   6.487   6.372   6.231   6.097   5.955   5.773   5.539   5.285   5.052   4.856   4.678   4.497   4.329   4.221 
+  3.648   4.591   5.856   6.637   6.490   5.612   4.657   4.253   4.579   5.295   5.846   5.875   5.446   4.934   4.723   4.937   5.411   5.872   6.152   6.267   6.340   6.453   6.587   6.669   6.664   6.610   6.550   6.455   6.214   5.736   5.065   4.402   3.993   3.950   4.163   4.375 
+  4.915   5.387   5.931   6.081   5.692   5.061   4.686   4.877   5.538   6.259   6.630   6.498   6.006   5.437   5.037   4.932   5.156   5.675   6.381   7.071   7.509   7.553   7.264   6.878   6.649   6.671   6.830   6.912   6.767   6.401   5.925   5.445   4.999   4.587   4.238   4.029 
+  4.010   5.357   6.898   7.345   6.390   4.925   4.212   4.772   6.011   6.842   6.669   5.834   5.171   5.181   5.642   5.967   5.876   5.690   5.963   6.852   7.890   8.383   8.053   7.283   6.751   6.816   7.238   7.468   7.181   6.522   5.882   5.474   5.169   4.733   4.155   3.718 
+  5.014   6.105   7.339   7.697   7.027   6.156   6.094   7.061   8.255   8.560   7.533   5.772   4.383   4.054   4.599   5.294   5.631   5.723   6.053   6.872   7.881   8.496   8.401   7.821   7.287   7.140   7.271   7.320   7.072   6.636   6.250   5.969   5.596   4.941   4.112   3.513 
+  4.906   5.429   6.074   6.447   6.555   6.764   7.365   8.178   8.628   8.262   7.212   6.149   5.734   6.073   6.674   6.942   6.739   6.481   6.694   7.472   8.358   8.746   8.424   7.736   7.245   7.234   7.514   7.678   7.501   7.089   6.660   6.249   5.661   4.748   3.689   2.955 
+  4.825   5.190   5.707   6.120   6.327   6.427   6.595   6.886   7.162   7.197   6.876   6.313   5.780   5.516   5.559   5.757   5.925   6.015   6.146   6.473   7.011   7.572   7.881   7.770   7.317   6.799   6.500   6.517   6.697   6.753   6.445   5.728   4.756   3.778   3.018   2.612 
+  4.027   4.895   5.981   6.563   6.466   6.165   6.301   7.053   7.957   8.307   7.774   6.666   5.642   5.171   5.233   5.478   5.639   5.765   6.092   6.717   7.449   7.959   8.083   7.946   7.809   7.804   7.834   7.721   7.413   7.026   6.675   6.294   5.677   4.726   3.658   2.934 
+  5.188   5.495   5.834   5.942   5.856   5.908   6.404   7.297   8.145   8.435   7.976   7.028   6.083   5.493   5.280   5.255   5.279   5.407   5.796   6.494   7.338   8.059   8.467   8.545   8.383   8.061   7.616   7.109   6.684   6.481   6.480   6.432   6.015   5.122   4.030   3.273 
+  5.475   5.964   6.570   6.891   6.857   6.782   7.050   7.730   8.476   8.783   8.379   7.405   6.272   5.348   4.769   4.493   4.474   4.746   5.341   6.164   6.988   7.594   7.916   8.047   8.091   8.046   7.841   7.484   7.138   6.994   7.044   6.984   6.417   5.226   3.787   2.794 
+  5.381   5.972   6.677   6.967   6.717   6.305   6.271   6.845   7.752   8.436   8.468   7.802   6.720   5.583   4.653   4.072   3.928   4.242   4.889   5.594   6.074   6.256   6.339   6.601   7.106   7.596   7.710   7.348   6.814   6.559   6.725   6.931   6.555   5.313   3.625   2.408 
+  5.825   5.906   6.010   6.099   6.216   6.446   6.811   7.178   7.314   7.044   6.391   5.585   4.914   4.541   4.439   4.463   4.492   4.516   4.618   4.886   5.353   5.972   6.642   7.217   7.535   7.481   7.079   6.532   6.142   6.099   6.310   6.414   6.025   5.055   3.855   3.024 
+  3.706   4.146   4.788   5.342   5.684   5.915   6.217   6.643   7.022   7.080   6.662   5.883   5.079   4.581   4.508   4.709   4.904   4.898   4.725   4.618   4.838   5.489   6.426   7.306   7.768   7.625   6.980   6.171   5.585   5.429   5.606   5.784   5.628   5.049   4.279   3.736 
+  5.005   5.210   5.456   5.571   5.538   5.509   5.654   5.985   6.324   6.440   6.243   5.856   5.503   5.323   5.273   5.200   5.010   4.765   4.649   4.807   5.232   5.756   6.167   6.326   6.228   5.965   5.669   5.451   5.372   5.413   5.465   5.366   4.994   4.370   3.694   3.251 
+  4.900   5.374   5.953   6.206   5.995   5.577   5.374   5.603   6.083   6.374   6.124   5.350   4.436   3.868   3.917   4.502   5.299   5.973   6.366   6.518   6.574   6.644   6.736   6.766   6.632   6.287   5.786   5.281   4.936   4.833   4.895   4.922   4.716   4.237   3.653   3.251 
+  6.435   6.101   5.606   5.157   4.848   4.648   4.510   4.487   4.695   5.171   5.753   6.151   6.159   5.852   5.560   5.631   6.160   6.913   7.511   7.715   7.579   7.356   7.263   7.305   7.311   7.113   6.712   6.281   6.020   5.996   6.102   6.143   5.986   5.641   5.251   4.995 
+  5.023   4.894   4.767   4.775   4.932   5.129   5.253   5.314   5.434   5.705   6.055   6.265   6.159   5.795   5.493   5.619   6.292   7.259   8.033   8.233   7.847   7.230   6.845   6.942   7.415   7.923   8.163   8.072   7.828   7.676   7.728   7.899   8.004   7.926   7.714   7.537 
+  3.450   4.057   4.983   5.793   6.124   5.884   5.303   4.791   4.682   5.014   5.533   5.898   5.961   5.875   5.961   6.418   7.137   7.765   7.990   7.795   7.486   7.459   7.894   8.628   9.283   9.552   9.397   9.043   8.779   8.757   8.917   9.080   9.091   8.926   8.685   8.513 
+  3.692   4.527   5.638   6.350   6.376   5.965   5.600   5.572   5.788   5.954   5.897   5.710   5.612   5.715   5.958   6.237   6.574   7.097   7.855   8.669   9.229   9.363   9.219   9.153   9.402   9.854  10.155  10.052   9.659   9.358   9.432   9.770   9.957   9.672   9.022   8.481 
+  4.905   5.051   5.304   5.600   5.889   6.151   6.394   6.632   6.843   6.961   6.905   6.648   6.277   5.988   6.009   6.463   7.277   8.186   8.858   9.078   8.864   8.465   8.209   8.327   8.829   9.520  10.129  10.460  10.476  10.283  10.034   9.847   9.755   9.734   9.742   9.751 
+  6.817   6.534   6.163   5.957   6.059   6.396   6.731   6.828   6.614   6.226   5.911   5.855   6.070   6.436   6.831   7.239   7.735   8.363   9.031   9.539   9.731   9.643   9.500   9.553   9.868  10.277  10.512  10.433  10.148   9.916   9.924  10.136  10.341  10.353  10.181  10.007 
+  5.433   5.693   6.176   6.736   7.118   7.102   6.709   6.262   6.171   6.587   7.226   7.558   7.265   6.560   6.094   6.456   7.687   9.205  10.224  10.334   9.777   9.212   9.181   9.717  10.377  10.654  10.380   9.824   9.440   9.503   9.923  10.350  10.450  10.141   9.627   9.246 
+  7.254   6.881   6.521   6.557   6.974   7.370   7.354   6.960   6.648   6.866   7.597   8.326   8.497   8.048   7.519   7.606   8.544   9.857  10.721  10.618   9.734   8.779   8.402   8.710   9.272   9.554   9.372   9.007   8.904   9.259   9.840  10.159   9.841   8.902   7.762   6.993 
+  9.132   8.504   7.681   7.166   7.149   7.405   7.564   7.464   7.269   7.256   7.506   7.812   7.893   7.704   7.524   7.714   8.356   9.117   9.482   9.170   8.378   7.640   7.402   7.689   8.112   8.211   7.837   7.256   6.923   7.114   7.703   8.264   8.380   7.941   7.221   6.687 
+ 12.534  12.085  11.609  11.575  12.077  12.746  13.039  12.661  11.739  10.644   9.664   8.851   8.157   7.659   7.606   8.186   9.229  10.174  10.410   9.741   8.593   7.733   7.707   8.425   9.238   9.453   8.881   7.987   7.526   7.956   9.059  10.086  10.285   9.449   8.080   7.062 
+ 13.410  12.899  12.419  12.577  13.508  14.719  15.449  15.221  14.141  12.737  11.538  10.771  10.391  10.323  10.600  11.262  12.125  12.731  12.606  11.652  10.321   9.358   9.271   9.950  10.746  10.979  10.480   9.735   9.496  10.172  11.453  12.478  12.435  11.162   9.321   7.997 
+ 12.829  12.566  12.402  12.765  13.782  15.113  16.132  16.301  15.505  14.096  12.654  11.662  11.311  11.529  12.137  12.945  13.735  14.211  14.068  13.190  11.828  10.551   9.910  10.049  10.588  10.917  10.726  10.312  10.364  11.342  12.934  14.109  13.806  11.787   8.981   6.976 
+ 12.500  12.331  12.178  12.314  12.930  13.975  15.100  15.762  15.486  14.140  12.073  10.003   8.698   8.612   9.677  11.357  12.914  13.746  13.612  12.676  11.366  10.144   9.316   8.939   8.880   8.963   9.113   9.381   9.853  10.482  11.004  11.037  10.321   8.956   7.441   6.446 
+ 12.630  12.333  12.045  12.141  12.786  13.794  14.727  15.132  14.751  13.612  12.009  10.407   9.324   9.146   9.940  11.354  12.729  13.425  13.182  12.257  11.229  10.588  10.417  10.412  10.196   9.684   9.182   9.139   9.768  10.813  11.669  11.734  10.784   9.105   7.358   6.258 
+ 12.294  12.129  11.894  11.800  12.121  12.994  14.193  15.118  15.109  13.916  11.964  10.167   9.373   9.847  11.150  12.488  13.226  13.195  12.626  11.867  11.145  10.534  10.049   9.706   9.499   9.378   9.299   9.322   9.609  10.246  11.036  11.483  11.089   9.775   8.076   6.887 
+ 12.413  12.136  11.752  11.573  11.921  12.907  14.245  15.289  15.377  14.280  12.434  10.734  10.003  10.487  11.754  13.023  13.666  13.521  12.841  12.010  11.287  10.733  10.300   9.937   9.624   9.372   9.236   9.335   9.795  10.601  11.463  11.866  11.373   9.980   8.255   7.070 
+ 12.582  12.310  11.936  11.760  12.100  13.082  14.456  15.622  15.925  15.081  13.423  11.768  10.940  11.273  12.433  13.667  14.288  14.054  13.210  12.232  11.502  11.117  10.930  10.720  10.363   9.918   9.599   9.663  10.245  11.207  12.117  12.415  11.729  10.170   8.362   7.156 
+ 12.741  12.548  12.262  12.110  12.399  13.310  14.669  15.901  16.318  15.579  13.993  12.395  11.629  12.021  13.194  14.362  14.849  14.464  13.514  12.520  11.881  11.699  11.794  11.854  11.602  10.961  10.151   9.638   9.883  10.983  12.455  13.391  13.006  11.220   8.853   7.191 
+ 12.758  12.588  12.319  12.146  12.369  13.204  14.526  15.794  16.302  15.656  14.118  12.525  11.776  12.248  13.557  14.833  15.294  14.719  13.500  12.318  11.694  11.723  12.108  12.395  12.258  11.668  10.913  10.445  10.626  11.469  12.544  13.160  12.768  11.362   9.569   8.329 
+ 12.710  12.569  12.328  12.153  12.344  13.146  14.466  15.762  16.308  15.692  14.189  12.657  11.999  12.545  13.844  14.990  15.244  14.487  13.218  12.155  11.771  12.059  12.628  12.973  12.754  11.961  10.917  10.137  10.070  10.803  11.927  12.697  12.466  11.151   9.370   8.111 
+ 12.433  12.336  12.118  11.893  11.992  12.755  14.151  15.589  16.220  15.556  13.918  12.307  11.715  12.419  13.800  14.829  14.808  13.803  12.486  11.588  11.428  11.824  12.328  12.533  12.238  11.478  10.499   9.719   9.579  10.265  11.471  12.448  12.436  11.230   9.430   8.114 
+ 12.334  12.216  11.971  11.739  11.863  12.675  14.105  15.526  16.086  15.338  13.674  12.132  11.667  12.460  13.805  14.665  14.435  13.310  12.030  11.284  11.275  11.719  12.162  12.280  11.971  11.297  10.448   9.751   9.598  10.207  11.350  12.341  12.428  11.363   9.688   8.442 
+ 12.473  12.342  12.086  11.858  12.010  12.860  14.311  15.715  16.218  15.405  13.720  12.231  11.882  12.791  14.177  14.962  14.568  13.266  11.882  11.138  11.206  11.739  12.238  12.383  12.111  11.512  10.754  10.089   9.839  10.217  11.078  11.874  11.961  11.092   9.699   8.654 
+ 12.597  12.503  12.288  12.072  12.202  13.007  14.406  15.744  16.168  15.294  13.617  12.236  12.049  13.067  14.416  15.027  14.446  13.094  11.839  11.304  11.486  11.936  12.210  12.151  11.830  11.342  10.740  10.169   9.928  10.283  11.125  11.845  11.688  10.374   8.460   7.059 
+ 12.881  12.705  12.390  12.128  12.278  13.113  14.477  15.698  15.989  15.066  13.477  12.264  12.195  13.168  14.302  14.640  13.878  12.522  11.412  11.062  11.379  11.904  12.251  12.312  12.138  11.735  11.079  10.325   9.883  10.152  11.078  11.990  12.001  10.737   8.765   7.291 
+ 12.976  12.646  12.149  11.820  12.051  13.015  14.410  15.521  15.668  14.758  13.433  12.628  12.840  13.730  14.396  14.123  12.948  11.588  10.819  10.891  11.451  11.973  12.211  12.243  12.170  11.866  11.118  10.022   9.134   9.110  10.060  11.264  11.622  10.560   8.607   7.081 
+ 12.946  12.387  11.663  11.334  11.794  12.983  14.369  15.241  15.173  14.330  13.359  12.927  13.216  13.798  13.978  13.349  12.098  10.835  10.129  10.135  10.601  11.173  11.650  11.988  12.110  11.822  10.995   9.835   8.915   8.813   9.607  10.697  11.196  10.626   9.344   8.304 
+ 12.809  12.010  11.081  10.835  11.607  13.007  14.243  14.715  14.421  13.858  13.561  13.665  13.845  13.641  12.860  11.733  10.718  10.160  10.092  10.318  10.637  10.995  11.416  11.833  12.007  11.664  10.759   9.610   8.764   8.643   9.236  10.090  10.622  10.531   9.999   9.526 
+ 12.870  12.008  11.013  10.715  11.362  12.476  13.346  13.666  13.715  13.944  14.393  14.546  13.771  11.970   9.806   8.287   8.031   8.847   9.944  10.583  10.587  10.326  10.281  10.588  10.960  10.974  10.434   9.496   8.525   7.856   7.661   7.959   8.668   9.612  10.520  11.082 
+ 12.174  11.726  11.163  10.866  10.956  11.265  11.565  11.809  12.115  12.510  12.726  12.318  11.058   9.251   7.646   6.946   7.291   8.169   8.827   8.854   8.461   8.240   8.623   9.508  10.340  10.542   9.941   8.860   7.867   7.412   7.621   8.334   9.269  10.171  10.863  11.235 
+ 10.146   9.798   9.270   8.817   8.650   8.827   9.230   9.630   9.810   9.670   9.257   8.711   8.189   7.808   7.636   7.695   7.944   8.274   8.545   8.674   8.719   8.864   9.265   9.867  10.355  10.329   9.620   8.494   7.553   7.351   7.996   9.066   9.899  10.083   9.729   9.334 
+  9.573   9.110   8.360   7.598   7.086   6.979   7.283   7.865   8.512   8.989   9.118   8.844   8.275   7.654   7.259   7.254   7.580   7.981   8.160   7.991   7.628   7.411   7.621   8.244   8.943   9.277   9.023   8.359   7.763   7.670   8.162   8.904   9.404   9.382   8.971   8.587 
+ 10.976   9.910   8.327   6.981   6.396   6.621   7.322   8.063   8.557   8.722   8.600   8.258   7.786   7.335   7.099   7.198   7.558   7.908   7.963   7.647   7.184   6.949   7.190   7.823   8.487   8.810   8.693   8.383   8.280   8.617   9.271   9.838   9.918   9.415   8.622   8.038 
+ 11.136   9.902   8.332   7.475   7.689   8.430   8.800   8.342   7.362   6.561   6.372   6.630   6.838   6.706   6.423   6.408   6.845   7.461   7.789   7.635   7.279   7.218   7.687   8.426   8.907   8.812   8.324   7.966   8.166   8.917   9.811  10.366  10.358   9.908   9.339   8.966 
+ 10.665   9.749   8.487   7.614   7.520   8.014   8.511   8.491   7.867   7.000   6.383   6.256   6.465   6.645   6.557   6.277   6.111   6.310   6.862   7.521   8.034   8.348   8.601   8.933   9.291   9.453   9.251   8.796   8.471   8.654   9.390  10.305  10.856  10.750  10.179   9.671 
+ 10.038   9.745   9.153   8.333   7.485   6.873   6.658   6.775   6.979   7.031   6.876   6.653   6.544   6.597   6.695   6.683   6.545   6.442   6.598   7.117   7.900   8.704   9.294   9.548   9.466   9.131   8.685   8.323   8.261   8.632   9.373  10.213  10.809  10.978  10.813  10.606 
+  9.710   9.221   8.452   7.704   7.216   7.064   7.165   7.346   7.436   7.329   7.017   6.596   6.229   6.072   6.182   6.467   6.739   6.857   6.853   6.937   7.341   8.110   9.007   9.624   9.650   9.095   8.315   7.799   7.875   8.525   9.419  10.138  10.412  10.241   9.857   9.562 
+ 10.080   8.978   7.523   6.608   6.587   7.075   7.366   7.056   6.338   5.732   5.583   5.780   5.939   5.815   5.535   5.436   5.704   6.192   6.587   6.756   6.904   7.382   8.305   9.367  10.028   9.942   9.255   8.513   8.269   8.698   9.504  10.168  10.308   9.901   9.251   8.782 
+ 10.051   9.665   9.028   8.342   7.793   7.491   7.446   7.572   7.705   7.654   7.295   6.668   5.993   5.566   5.560   5.894   6.283   6.458   6.402   6.377   6.721   7.541   8.572   9.334   9.472   9.026   8.412   8.124   8.405   9.107   9.842  10.257  10.235   9.906   9.508   9.253 
+ 10.181   9.611   8.688   7.775   7.242   7.309   7.937   8.811   9.477   9.571   9.014   8.070   7.192   6.751   6.810   7.102   7.235   6.991   6.495   6.133   6.277   7.002   8.013   8.839   9.135   8.896   8.428   8.120   8.193   8.599   9.105   9.473   9.597   9.524   9.375   9.268 
+  9.649   9.005   8.057   7.301   7.138   7.655   8.582   9.438   9.797   9.513   8.795   8.060   7.671   7.714   7.955   8.016   7.650   6.929   6.223   5.957   6.334   7.192   8.105   8.649   8.651   8.264   7.825   7.626   7.751   8.087   8.453   8.736   8.934   9.096   9.241   9.334 
+  8.293   7.769   7.077   6.716   7.025   7.993   9.270  10.360  10.883  10.744  10.156   9.509   9.154   9.211   9.499   9.638   9.281   8.364   7.185   6.265   6.033   6.551   7.472   8.256   8.521   8.258   7.792   7.517   7.629   8.026   8.428   8.598   8.472   8.161   7.836   7.640 
+  9.234   8.609   7.765   7.299   7.658   8.872  10.486  11.781  12.165  11.510  10.231   9.045   8.545   8.863   9.623  10.212  10.163   9.418   8.320   7.373   6.951   7.121   7.658   8.205   8.470   8.354   7.978   7.599   7.461   7.652   8.046   8.372   8.385   8.031   7.501   7.115 
+  7.685   7.583   7.503   7.650   8.211   9.231  10.512  11.641  12.171  11.876  10.918   9.793   9.067   9.042   9.582  10.202  10.369   9.825   8.732   7.560   6.808   6.730   7.219   7.900   8.358   8.366   7.987   7.506   7.240   7.346   7.730   8.119   8.246   8.028   7.620   7.307 
+  9.217   8.402   7.395   6.988   7.588   8.971  10.493  11.540  11.856  11.555  10.916  10.183   9.524   9.091   9.000   9.227   9.510   9.445   8.769   7.620   6.533   6.104   6.570   7.602   8.525   8.776   8.288   7.501   7.009   7.134   7.715   8.255   8.294   7.728   6.874   6.255 
+  8.554   7.932   7.210   7.040   7.735   9.065  10.444  11.327  11.504  11.107  10.434   9.756   9.247   9.011   9.065   9.292   9.421   9.152   8.390   7.384   6.637   6.578   7.240   8.204   8.868   8.851   8.232   7.455   6.995   7.035   7.387   7.668   7.586   7.118   6.503   6.079 
+  9.075   8.373   7.574   7.420   8.237   9.699  11.079  11.742  11.511  10.673   9.714   9.024   8.769   8.921   9.327   9.731   9.826   9.376   8.407   7.281   6.541   6.570   7.311   8.270   8.846   8.729   8.093   7.427   7.167   7.394   7.825   8.045   7.801   7.147   6.385   5.884 
+  7.816   7.764   7.809   8.162   8.960  10.140  11.392  12.246  12.289  11.401   9.894   8.414   7.630   7.856   8.842   9.895  10.284   9.698   8.440   7.226   6.708   7.055   7.878   8.528   8.560   8.010   7.315   6.961   7.137   7.637   8.043   8.024   7.521   6.736   5.983   5.535 
+  7.881   7.685   7.507   7.651   8.330   9.504  10.832  11.797  11.952  11.173   9.768   8.356   7.553   7.637   8.392   9.231   9.537   9.024   7.900   6.730   6.090   6.240   6.991   7.858   8.364   8.310   7.849   7.337   7.085   7.172   7.422   7.544   7.334   6.803   6.175   5.754 
+  5.879   6.188   6.672   7.210   7.822   8.627   9.627  10.549  10.906  10.337   8.951   7.396   6.511   6.785   7.991   9.303   9.825   9.180   7.734   6.323   5.680   5.989   6.850   7.635   7.936   7.772   7.462   7.309   7.370   7.470   7.403   7.116   6.731   6.424   6.272   6.232 
+  6.952   6.819   6.600   6.430   6.521   7.055   8.015   9.096   9.820   9.818   9.100   8.091   7.380   7.333   7.847   8.416   8.490   7.850   6.759   5.785   5.423   5.796   6.609   7.369   7.694   7.512   7.045   6.619   6.454   6.558   6.768   6.883   6.785   6.500   6.162   5.939 
+  7.416   6.872   6.248   6.134   6.811   8.069   9.355  10.125  10.124   9.462   8.497   7.657   7.289   7.527   8.209   8.891   9.039   8.360   7.050   5.749   5.157   5.557   6.604   7.573   7.873   7.445   6.733   6.286   6.332   6.671   6.919   6.851   6.540   6.218   6.040   5.990 
+  8.432   7.945   7.310   7.004   7.350   8.308   9.478  10.309  10.417   9.803   8.854   8.111   7.939   8.315   8.858   9.077   8.690   7.789   6.774   6.095   5.978   6.323   6.806   7.106   7.099   6.886   6.681   6.635   6.749   6.899   6.951   6.850   6.645   6.429   6.273   6.197 
+  7.767   7.031   6.119   5.761   6.347   7.656   9.003   9.695   9.469   8.622   7.765   7.397   7.611   8.114   8.491   8.494   8.156   7.681   7.253   6.943   6.742   6.656   6.720   6.926   7.150   7.197   6.951   6.521   6.205   6.275   6.742   7.298   7.529   7.236   6.613   6.115 
+  7.434   7.568   7.717   7.789   7.846   8.036   8.396   8.732   8.745   8.318   7.688   7.305   7.470   8.068   8.637   8.736   8.278   7.555   6.960   6.678   6.620   6.618   6.631   6.746   6.994   7.221   7.184   6.822   6.390   6.287   6.685   7.317   7.649   7.342   6.574   5.935 
+  8.009   7.981   7.964   8.045   8.322   8.809   9.340   9.604   9.342   8.571   7.652   7.083   7.159   7.742   8.347   8.493   8.043   7.279   6.669   6.527   6.839   7.332   7.713   7.841   7.742   7.519   7.272   7.088   7.051   7.210   7.494   7.699   7.595   7.115   6.457   5.984 
+  7.777   7.756   7.849   8.195   8.775   9.375   9.684   9.490   8.819   7.929   7.168   6.806   6.909   7.343   7.847   8.151   8.086   7.662   7.076   6.638   6.626   7.119   7.916   8.613   8.834   8.463   7.749   7.174   7.154   7.758   8.638   9.228   9.093   8.222   7.057   6.244 
+  7.279   7.295   7.568   8.273   9.216   9.859   9.691   8.634   7.134   5.859   5.251   5.316   5.754   6.276   6.770   7.229   7.570   7.613   7.276   6.788   6.651   7.292   8.663  10.162  10.985  10.697   9.581   8.468   8.168   8.901  10.142  10.975  10.704   9.318   7.507   6.255 
+  6.905   6.458   6.339   7.315   9.302  11.260  11.950  10.903   8.773   6.788   5.832   5.915   6.415   6.745   6.807   6.859   7.063   7.244   7.111   6.697   6.504   7.127   8.668  10.495  11.626  11.459  10.253   8.954   8.499   9.143  10.319  11.065  10.704   9.270   7.471   6.249 
+  7.966   7.531   7.460   8.495  10.432  12.089  12.216  10.558   8.110   6.342   6.068   6.924   7.845   8.030   7.516   6.926   6.756   6.930   7.020   6.846   6.777   7.410   8.917  10.717  11.829  11.644  10.439   9.191   8.847   9.626  10.898  11.672  11.288   9.826   8.019   6.802 
+  7.955   7.949   8.326   9.417  11.020  12.371  12.642  11.569   9.681   7.942   7.094   7.207   7.773   8.177   8.140   7.797   7.441   7.239   7.185   7.271   7.637   8.482   9.801  11.209  12.089  12.004  11.070   9.947   9.417   9.827  10.810  11.510  11.175   9.704   7.767   6.414 
+  8.987   8.616   8.542   9.416  11.133  12.751  13.164  11.977   9.828   7.897   7.046   7.290   7.980   8.434   8.426   8.175   7.967   7.864   7.767   7.713   7.999   8.949  10.516  12.125  12.992  12.700  11.562  10.440  10.141  10.831  11.916  12.456  11.804  10.041   7.944   6.542 
+  7.959   7.713   7.838   8.923  10.840  12.669  13.331  12.412  10.470   8.593   7.603   7.570   7.971   8.244   8.216   8.071   8.014   8.032   8.001   7.959   8.213   9.078  10.495  11.904  12.572  12.157  11.024  10.037   9.952  10.868  12.143  12.830  12.300  10.653   8.658   7.318 
+  7.907   8.152   8.845  10.106  11.669  12.907  13.192  12.341  10.762   9.192   8.225   7.990   8.193   8.428   8.463   8.306   8.070   7.835   7.651   7.640   8.016   8.932  10.259  11.520  12.117  11.748  10.687   9.682   9.484  10.321  11.685  12.628  12.377  10.873   8.858   7.446 
diff --git a/test/regression/chan3.2chan.wav b/test/regression/chan3.2chan.wav
new file mode 100644 (file)
index 0000000..fcc8b69
Binary files /dev/null and b/test/regression/chan3.2chan.wav differ
diff --git a/test/regression/chan3.cepview b/test/regression/chan3.cepview
new file mode 100644 (file)
index 0000000..5a7b001
--- /dev/null
@@ -0,0 +1,2190 @@
+  6.527  -1.576   0.212   0.163  -0.132   0.155   0.062   0.060  -0.166  -0.093  -0.090  -0.043   0.028 
+  6.580  -1.617   0.267   0.095  -0.232   0.101  -0.184  -0.056  -0.243  -0.201  -0.064  -0.001  -0.118 
+  6.787  -1.367   0.280   0.030  -0.339  -0.004  -0.209   0.050  -0.200  -0.107  -0.097  -0.035  -0.197 
+  6.833  -1.400   0.087   0.101  -0.386   0.172  -0.168  -0.191  -0.145  -0.007  -0.139  -0.060   0.011 
+  6.604  -1.366   0.049   0.178  -0.321  -0.034  -0.122  -0.117  -0.093   0.102  -0.214  -0.072   0.057 
+  6.752  -1.445   0.071   0.264  -0.229  -0.181  -0.077  -0.108  -0.209   0.069  -0.254  -0.209  -0.028 
+  6.551  -1.400   0.037   0.175  -0.225  -0.126   0.072  -0.003  -0.294   0.024  -0.273  -0.017  -0.029 
+  6.268  -1.333   0.095   0.301   0.026  -0.069  -0.129  -0.171  -0.173  -0.007  -0.182  -0.162  -0.102 
+  6.378  -1.177   0.009   0.228  -0.127  -0.070  -0.317  -0.114  -0.123   0.092  -0.095  -0.170  -0.073 
+  6.334  -1.275  -0.197   0.101   0.078  -0.074  -0.254  -0.120  -0.065   0.139  -0.074  -0.048   0.008 
+  6.125  -1.225  -0.070  -0.042  -0.091  -0.025  -0.122  -0.214  -0.278  -0.101  -0.136  -0.123  -0.044 
+  5.942  -0.978   0.098   0.038  -0.091  -0.141  -0.171   0.010   0.001   0.093   0.014  -0.085  -0.038 
+  6.246  -0.575   0.512   0.362  -0.002   0.096   0.085  -0.153  -0.096  -0.083  -0.054  -0.007  -0.156 
+  5.614  -0.336   0.285   0.198  -0.020   0.020   0.026   0.021   0.018   0.021   0.004  -0.111  -0.222 
+  5.514  -0.452   0.211   0.030  -0.064   0.021  -0.043  -0.032   0.054   0.118  -0.075  -0.026  -0.202 
+  5.175  -0.549   0.098   0.068  -0.024  -0.038  -0.018  -0.150  -0.170  -0.038  -0.170   0.033   0.055 
+  4.895  -0.130   0.032   0.116   0.132  -0.039  -0.026  -0.092  -0.166   0.214  -0.042  -0.147  -0.124 
+  4.424  -0.038   0.045   0.170   0.032  -0.175  -0.314  -0.100  -0.157   0.106  -0.040  -0.164  -0.066 
+  3.939   0.097  -0.248  -0.008   0.015  -0.029  -0.222  -0.119  -0.110   0.150   0.098  -0.034   0.021 
+  3.849   0.105  -0.269   0.013  -0.062  -0.013  -0.251  -0.244  -0.233  -0.108   0.072   0.044   0.046 
+  4.145   0.262  -0.109  -0.014  -0.222  -0.001  -0.152  -0.178  -0.151  -0.020  -0.101  -0.123  -0.113 
+  4.230   0.273   0.040  -0.017   0.029  -0.053   0.003  -0.123  -0.081  -0.140  -0.154  -0.192  -0.260 
+  4.000   0.417   0.057   0.206   0.011  -0.019  -0.297  -0.288  -0.173  -0.044  -0.098  -0.226   0.020 
+  4.173   0.361   0.156   0.078   0.105  -0.123  -0.172  -0.406  -0.208  -0.038   0.040   0.004   0.076 
+  7.068  -0.518   0.568   0.066  -0.482   0.103  -0.074  -0.271  -0.027  -0.074  -0.134   0.030  -0.173 
+  9.454  -0.227   0.593   0.302  -0.427  -0.153  -0.260  -0.208  -0.062  -0.302  -0.196   0.076  -0.287 
+ 10.594   0.197   0.328   0.570  -0.235  -0.480  -0.531  -0.003  -0.256  -0.318  -0.225  -0.048  -0.306 
+ 12.189  -0.192   0.303   0.566  -0.308  -0.556  -0.614  -0.056  -0.362  -0.315  -0.271   0.042  -0.256 
+ 13.377  -0.265   0.159   0.461  -0.377  -0.571  -0.597   0.003  -0.469  -0.268  -0.343   0.133  -0.288 
+ 13.760   0.015  -0.072   0.453  -0.386  -0.609  -0.711   0.037  -0.530  -0.191  -0.385   0.157  -0.249 
+ 14.185   0.091  -0.206   0.450  -0.436  -0.700  -0.730   0.009  -0.565  -0.071  -0.394   0.210  -0.213 
+ 14.378   0.113  -0.290   0.420  -0.431  -0.819  -0.712   0.044  -0.584   0.018  -0.387   0.235  -0.179 
+ 14.016   0.468  -0.549   0.433  -0.415  -0.788  -0.774   0.163  -0.605   0.025  -0.276   0.066  -0.040 
+ 14.132   0.576  -0.706   0.340  -0.337  -0.784  -0.781   0.064  -0.441   0.006  -0.198  -0.055   0.032 
+ 14.319   0.637  -0.726   0.197  -0.352  -0.568  -0.962   0.037  -0.492   0.174  -0.233  -0.131   0.007 
+ 14.131   0.726  -0.589  -0.049  -0.335  -0.392  -0.815  -0.154  -0.672   0.294  -0.139  -0.296  -0.057 
+ 13.575   0.980  -0.518  -0.145  -0.465  -0.244  -0.520  -0.262  -0.968   0.211  -0.036  -0.226  -0.129 
+ 13.009   1.092  -0.339  -0.249  -0.467  -0.304  -0.327  -0.239  -1.013   0.053  -0.044  -0.151  -0.061 
+ 12.814   1.204  -0.443  -0.215  -0.482  -0.216  -0.385  -0.132  -1.119   0.074  -0.137  -0.053  -0.182 
+ 12.960   1.093  -0.399  -0.174  -0.407  -0.230  -0.421  -0.185  -1.105   0.142  -0.150  -0.093  -0.283 
+ 13.230   0.902  -0.401  -0.141  -0.223  -0.252  -0.485  -0.272  -0.984   0.209  -0.133  -0.221  -0.292 
+ 13.508   0.776  -0.563   0.027  -0.061  -0.372  -0.665  -0.239  -0.787   0.213  -0.228  -0.339  -0.197 
+ 13.814   0.426  -0.512   0.193   0.094  -0.613  -0.737  -0.085  -0.640   0.116  -0.382  -0.233  -0.100 
+ 14.000   0.195  -0.498   0.445  -0.012  -0.827  -0.669   0.099  -0.700  -0.014  -0.330  -0.113  -0.086 
+ 14.293  -0.074  -0.376   0.566  -0.210  -0.917  -0.531   0.125  -0.770  -0.008  -0.287  -0.059  -0.109 
+ 14.128  -0.094  -0.313   0.611  -0.375  -0.869  -0.491   0.066  -0.729  -0.005  -0.291   0.021  -0.119 
+ 14.074  -0.145  -0.189   0.514  -0.457  -0.826  -0.436  -0.063  -0.559  -0.064  -0.263   0.085  -0.159 
+ 14.085   0.032  -0.328   0.440  -0.499  -0.804  -0.465  -0.041  -0.460  -0.120  -0.215   0.134  -0.152 
+ 13.946   0.158  -0.383   0.321  -0.547  -0.699  -0.607   0.081  -0.419  -0.121  -0.194   0.198  -0.241 
+ 13.902   0.222  -0.457   0.219  -0.549  -0.652  -0.654   0.144  -0.382  -0.057  -0.269   0.254  -0.265 
+ 13.927   0.312  -0.595   0.181  -0.554  -0.547  -0.717   0.093  -0.251  -0.113  -0.233   0.165  -0.182 
+ 13.848   0.440  -0.698   0.088  -0.473  -0.528  -0.766   0.022  -0.203  -0.061  -0.289   0.142  -0.122 
+ 13.671   0.429  -0.567  -0.132  -0.273  -0.574  -0.757  -0.110  -0.175   0.027  -0.369   0.108  -0.050 
+ 13.321   0.282  -0.354  -0.267  -0.203  -0.553  -0.555  -0.489  -0.047   0.124  -0.464   0.029   0.028 
+ 13.222   0.088  -0.128  -0.297  -0.402  -0.135  -0.604  -0.629  -0.048   0.139  -0.307  -0.061  -0.114 
+ 13.318   0.361  -0.024  -0.383  -0.632   0.261  -0.864  -0.492  -0.175   0.136  -0.269   0.128  -0.394 
+ 13.509   0.506   0.011  -0.533  -0.810   0.290  -0.814  -0.360  -0.419   0.291  -0.286   0.286  -0.435 
+ 13.473   0.481   0.188  -0.727  -0.879   0.224  -0.753  -0.204  -0.557   0.239  -0.276   0.467  -0.456 
+ 13.061   0.688   0.283  -0.867  -0.916   0.140  -0.650  -0.042  -0.658   0.043  -0.249   0.498  -0.407 
+ 12.807   0.670   0.473  -0.902  -0.966   0.103  -0.596   0.052  -0.699   0.016  -0.358   0.398  -0.260 
+ 12.435   0.810   0.452  -0.701  -1.162   0.066  -0.430  -0.085  -0.521  -0.035  -0.482   0.411  -0.308 
+ 11.783   0.872   0.644  -0.626  -1.193   0.002  -0.431  -0.080  -0.377  -0.072  -0.657   0.329  -0.278 
+ 11.266   0.871   0.799  -0.588  -1.177  -0.010  -0.445  -0.018  -0.356  -0.087  -0.759   0.249  -0.301 
+ 11.068   0.825   0.921  -0.594  -1.104  -0.080  -0.431   0.003  -0.360  -0.154  -0.758   0.170  -0.364 
+ 10.991   0.794   1.013  -0.584  -1.091  -0.126  -0.451  -0.003  -0.354  -0.128  -0.705   0.124  -0.462 
+ 11.031   0.716   1.035  -0.597  -1.116  -0.131  -0.500  -0.067  -0.273  -0.060  -0.625   0.001  -0.476 
+ 11.417   0.621   0.932  -0.582  -1.119  -0.178  -0.524  -0.057  -0.203  -0.063  -0.640   0.008  -0.343 
+ 12.427   0.378   0.817  -0.769  -1.205  -0.132  -0.443  -0.021  -0.353   0.020  -0.494   0.013  -0.140 
+ 13.176   0.323   0.412  -0.930  -1.227  -0.046  -0.403   0.066  -0.341  -0.105  -0.357   0.200  -0.073 
+ 13.232   0.294   0.339  -0.990  -1.243   0.102  -0.468   0.050  -0.309  -0.024  -0.295   0.256  -0.094 
+ 13.323   0.252   0.255  -1.041  -1.249   0.199  -0.501   0.147  -0.300   0.020  -0.225   0.222  -0.174 
+ 13.446   0.273   0.132  -1.090  -1.193   0.274  -0.552   0.233  -0.348   0.078  -0.184   0.211  -0.270 
+ 13.566   0.337  -0.012  -1.098  -1.119   0.280  -0.477   0.190  -0.344   0.104  -0.152   0.165  -0.316 
+ 13.716   0.251  -0.063  -1.068  -1.043   0.278  -0.430   0.133  -0.304   0.097  -0.067   0.047  -0.370 
+ 13.443   0.471  -0.236  -0.990  -0.952   0.252  -0.411   0.038  -0.254   0.057   0.048  -0.010  -0.373 
+ 13.269   0.537  -0.385  -0.847  -0.834   0.209  -0.394  -0.011  -0.228   0.027   0.125  -0.066  -0.381 
+ 12.757   0.534  -0.347  -0.719  -0.776   0.156  -0.404  -0.024  -0.244   0.046   0.148   0.003  -0.445 
+ 12.691   0.456  -0.356  -0.612  -0.703   0.084  -0.305  -0.253  -0.111   0.073   0.040   0.107  -0.552 
+ 12.648   0.409  -0.479  -0.283  -0.694   0.025  -0.386  -0.335  -0.073   0.229  -0.097   0.086  -0.576 
+ 12.394   0.423  -0.637   0.077  -0.518  -0.282  -0.510  -0.189   0.028   0.177  -0.256   0.123  -0.461 
+ 11.791   0.449  -0.605   0.361  -0.430  -0.418  -0.622  -0.005   0.058   0.023  -0.355   0.282  -0.518 
+ 11.195   0.313  -0.265   0.536  -0.454  -0.498  -0.549   0.100   0.148  -0.269  -0.280   0.349  -0.569 
+ 10.704   0.176   0.114   0.199  -0.132  -0.506  -0.416   0.131   0.038  -0.342  -0.106  -0.078  -0.404 
+  9.875   0.420   0.326   0.087   0.020  -0.447  -0.418   0.261  -0.356  -0.261   0.099  -0.356  -0.292 
+  8.935   0.715   0.237   0.170   0.106  -0.371  -0.464   0.321  -0.442  -0.101  -0.136  -0.345  -0.257 
+  7.719   0.828   0.622   0.204  -0.009  -0.387  -0.324   0.087  -0.207  -0.149  -0.366  -0.160  -0.170 
+  7.406   0.627   0.742  -0.123   0.168  -0.478   0.071  -0.171  -0.009  -0.117  -0.429  -0.195  -0.090 
+  8.612  -0.126   0.533  -0.142   0.169  -0.265   0.129  -0.086  -0.024  -0.270  -0.224  -0.069  -0.179 
+  9.818  -0.292   0.134   0.080  -0.077  -0.182  -0.055  -0.034  -0.072  -0.160  -0.265   0.062  -0.185 
+  9.895  -0.311   0.268   0.210   0.077  -0.419  -0.238  -0.206   0.076  -0.168  -0.364   0.009  -0.105 
+ 10.841  -0.049   0.223   0.126  -0.033  -0.448  -0.442  -0.329  -0.056  -0.053  -0.447   0.014  -0.114 
+ 11.381  -0.048   0.069   0.073   0.097  -0.444  -0.636  -0.469  -0.104  -0.080  -0.497  -0.025  -0.019 
+ 11.139   0.120   0.125  -0.070  -0.031  -0.302  -0.566  -0.495  -0.108  -0.049  -0.448  -0.090  -0.054 
+ 10.764  -0.162   0.386  -0.013   0.000  -0.294  -0.556  -0.511  -0.034  -0.174  -0.297  -0.213  -0.001 
+ 10.827  -0.993   0.581  -0.042   0.172  -0.133  -0.162  -0.060   0.031  -0.140  -0.304  -0.178  -0.041 
+ 10.619  -1.211   0.666  -0.024   0.125  -0.253  -0.037  -0.040  -0.020  -0.083  -0.338  -0.229  -0.175 
+ 10.766  -1.313   0.644  -0.033   0.365  -0.075   0.041  -0.018  -0.060  -0.091  -0.292  -0.052  -0.265 
+ 10.855  -1.277   0.577  -0.097   0.494  -0.249  -0.261  -0.101  -0.080  -0.255  -0.201  -0.045  -0.163 
+ 11.207  -1.251   0.536  -0.160   0.398  -0.322  -0.129   0.003  -0.105  -0.221  -0.203  -0.111  -0.142 
+ 11.529  -1.056   0.595  -0.083   0.384  -0.329  -0.026  -0.063  -0.019  -0.282  -0.221   0.061  -0.105 
+ 11.263  -1.528   0.452  -0.138   0.324  -0.268  -0.004  -0.054  -0.121  -0.394  -0.233  -0.039  -0.127 
+ 11.468  -1.644   0.387   0.003   0.358  -0.190  -0.078  -0.090  -0.156  -0.108  -0.169  -0.029  -0.046 
+ 10.859  -1.522   0.104   0.203   0.295  -0.591   0.033   0.027  -0.182  -0.279   0.051  -0.024  -0.071 
+  7.399  -1.040  -0.014   0.330   0.622  -0.541  -0.018   0.134  -0.105  -0.346   0.104   0.060  -0.239 
+  4.866  -0.548   0.099  -0.173   0.379  -0.225   0.120  -0.000  -0.115  -0.022   0.012  -0.062  -0.191 
+  4.760  -0.447   0.163  -0.280   0.182  -0.481  -0.019  -0.147  -0.201  -0.189  -0.056   0.045   0.007 
+  9.003  -0.451  -0.045   0.373  -0.654  -0.571  -0.147  -0.138  -0.101  -0.003  -0.163  -0.100  -0.079 
+ 12.107  -0.746  -0.282  -0.041  -0.724  -0.550  -0.057  -0.245  -0.220  -0.025  -0.189   0.009  -0.036 
+ 12.612  -0.523  -0.082   0.401  -0.351  -0.707  -0.301  -0.237  -0.254  -0.218  -0.094  -0.005  -0.160 
+ 13.774  -0.172  -0.485   0.317  -0.451  -0.712  -0.651  -0.093  -0.198  -0.093  -0.236   0.244  -0.321 
+ 14.097  -0.142  -0.631   0.094  -0.515  -0.672  -0.732   0.010  -0.165   0.104  -0.321   0.276  -0.315 
+ 14.146  -0.083  -0.704  -0.105  -0.601  -0.638  -0.699   0.072  -0.046   0.196  -0.273   0.043  -0.223 
+ 14.273  -0.159  -0.688  -0.189  -0.566  -0.508  -0.761   0.126  -0.053   0.246  -0.315  -0.038  -0.240 
+ 14.437  -0.040  -0.761  -0.223  -0.603  -0.398  -0.765   0.205  -0.130   0.264  -0.346  -0.165  -0.223 
+ 14.378  -0.092  -0.719  -0.181  -0.671  -0.290  -0.869   0.188  -0.187   0.328  -0.405  -0.042  -0.302 
+ 14.160   0.013  -0.725  -0.177  -0.680  -0.315  -0.913   0.185  -0.126   0.295  -0.424   0.018  -0.291 
+ 13.665   0.079  -0.683  -0.203  -0.648  -0.444  -0.951   0.142  -0.018   0.262  -0.385   0.094  -0.236 
+ 12.462   0.396  -0.529  -0.100  -0.493  -0.570  -0.812  -0.034   0.164  -0.067  -0.176   0.221  -0.128 
+ 11.095  -0.243  -0.057   0.182  -0.541  -0.396  -0.368   0.047   0.142  -0.147  -0.353   0.002   0.063 
+ 11.625  -1.083   0.450   0.685  -0.330  -0.111  -0.313  -0.200   0.132  -0.120  -0.238  -0.015  -0.075 
+ 12.127  -1.375   0.614   0.761  -0.319  -0.037   0.035  -0.179   0.005  -0.094  -0.393  -0.065  -0.156 
+ 12.332  -1.614   0.649   0.659  -0.412  -0.027   0.022  -0.145  -0.093  -0.032  -0.275  -0.108  -0.179 
+ 12.348  -2.053   0.287   0.509  -0.533  -0.158   0.051  -0.061   0.079   0.043  -0.315  -0.140  -0.183 
+ 12.363  -2.284   0.303   0.799  -0.438  -0.209  -0.168  -0.019   0.062  -0.086  -0.196  -0.049  -0.101 
+ 12.124  -2.227   0.167   0.564  -0.558  -0.210  -0.098   0.069   0.141   0.034  -0.054  -0.166  -0.026 
+ 12.496  -1.767   0.330   0.879  -0.144  -0.098  -0.049  -0.132  -0.023  -0.047  -0.231  -0.183   0.054 
+ 11.892  -1.213   0.346   0.812  -0.148  -0.355  -0.004   0.009   0.019  -0.014  -0.310  -0.114   0.057 
+ 11.102  -1.048   0.308   0.695   0.019  -0.157  -0.082   0.003   0.044  -0.135  -0.208  -0.040  -0.013 
+ 11.998   0.326  -0.408   0.208  -0.422  -0.335  -0.273  -0.069   0.039   0.096  -0.180  -0.069  -0.030 
+ 12.207   0.709  -0.540   0.019  -0.360  -0.332  -0.431  -0.111   0.020   0.092  -0.444   0.182  -0.279 
+ 12.091   0.492  -0.500   0.100  -0.447  -0.301  -0.466  -0.219   0.087   0.190  -0.399   0.136  -0.224 
+ 11.442   0.457  -0.433   0.205  -0.384  -0.306  -0.310  -0.421   0.086   0.254  -0.395   0.035  -0.263 
+ 11.004   0.015   0.111   0.295  -0.332  -0.341  -0.138  -0.310  -0.084   0.215  -0.474  -0.008  -0.196 
+ 11.169  -0.158   0.157   0.242  -0.170  -0.403  -0.140  -0.217  -0.174   0.325  -0.536   0.029  -0.326 
+ 11.282   0.088  -0.387   0.061   0.049  -0.144  -0.564  -0.270  -0.151   0.374  -0.255   0.032  -0.221 
+ 12.184   0.235  -0.538  -0.087  -0.100  -0.334  -0.644  -0.121  -0.122   0.299  -0.205  -0.049  -0.251 
+ 12.222   0.260  -0.570  -0.091  -0.272  -0.345  -0.735  -0.086  -0.074   0.417  -0.282   0.015  -0.343 
+ 12.563   0.264  -0.713  -0.056  -0.458  -0.328  -0.708  -0.126   0.024   0.384  -0.216  -0.005  -0.286 
+ 12.558   0.443  -0.703  -0.121  -0.344  -0.459  -0.471  -0.318  -0.120   0.343  -0.268   0.008  -0.232 
+ 11.133   0.722  -0.475  -0.305  -0.183  -0.410  -0.361  -0.510  -0.285   0.234  -0.116  -0.208  -0.269 
+  9.966   0.908  -0.464  -0.158  -0.165  -0.351  -0.316  -0.530  -0.449   0.210   0.006  -0.218  -0.285 
+  6.511   0.764  -0.019  -0.009  -0.015  -0.062  -0.213  -0.159  -0.103   0.229  -0.058  -0.275  -0.254 
+  6.005   0.772  -0.044   0.064  -0.176   0.024  -0.175  -0.224   0.069   0.183  -0.007  -0.279  -0.255 
+  5.644   0.899   0.246   0.175  -0.237  -0.270  -0.371  -0.340  -0.000   0.101  -0.084  -0.186  -0.092 
+  5.558   0.597   0.367   0.171  -0.195  -0.345  -0.295  -0.205  -0.067   0.222  -0.199  -0.155  -0.118 
+  8.199   0.001   0.321  -0.178  -0.128  -0.370  -0.359  -0.103  -0.185  -0.043  -0.355  -0.145  -0.189 
+  8.766   0.111  -0.148  -0.094  -0.027  -0.264  -0.166  -0.089   0.081   0.164  -0.070  -0.203  -0.041 
+ 12.074   0.000  -0.661  -0.012  -0.394  -0.400  -0.437  -0.172  -0.042   0.119  -0.165  -0.143  -0.007 
+ 13.145  -0.034  -0.662  -0.098  -0.572  -0.558  -0.579  -0.128  -0.003   0.310  -0.223  -0.100   0.001 
+ 13.351  -0.007  -0.782  -0.020  -0.602  -0.581  -0.502  -0.104   0.073   0.217  -0.311  -0.081  -0.007 
+ 13.622  -0.133  -0.854  -0.005  -0.648  -0.526  -0.533  -0.047   0.074   0.204  -0.347  -0.046  -0.098 
+ 13.418  -0.098  -0.892  -0.049  -0.710  -0.422  -0.639   0.111  -0.063   0.336  -0.493   0.046  -0.131 
+ 13.653  -0.206  -0.873  -0.129  -0.708  -0.401  -0.680   0.207  -0.106   0.435  -0.636   0.003  -0.190 
+ 13.786  -0.049  -0.940  -0.169  -0.612  -0.421  -0.583   0.182  -0.142   0.425  -0.603  -0.116  -0.147 
+ 13.769   0.004  -0.991  -0.287  -0.577  -0.349  -0.522   0.192  -0.247   0.420  -0.570  -0.188  -0.123 
+ 13.393   0.038  -1.072  -0.435  -0.580  -0.332  -0.466   0.213  -0.223   0.462  -0.652  -0.232  -0.123 
+ 13.445  -0.002  -0.975  -0.431  -0.661  -0.277  -0.528   0.238  -0.253   0.557  -0.629  -0.251  -0.143 
+ 13.744   0.037  -0.976  -0.422  -0.681  -0.182  -0.553   0.220  -0.294   0.537  -0.580  -0.305  -0.135 
+ 13.752  -0.083  -0.888  -0.530  -0.651  -0.197  -0.484   0.218  -0.334   0.484  -0.505  -0.347  -0.123 
+ 13.300  -0.004  -0.820  -0.603  -0.755  -0.119  -0.535   0.231  -0.350   0.616  -0.507  -0.424  -0.136 
+ 13.696  -0.039  -0.734  -0.594  -0.742  -0.083  -0.541   0.167  -0.408   0.611  -0.449  -0.379  -0.143 
+ 13.688   0.045  -0.610  -0.685  -0.681  -0.078  -0.590   0.083  -0.467   0.563  -0.328  -0.312  -0.205 
+ 13.030   0.163  -0.422  -0.806  -0.677  -0.117  -0.593  -0.020  -0.361   0.515  -0.242  -0.320  -0.208 
+ 12.805   0.193  -0.398  -0.867  -0.696  -0.164  -0.565  -0.085  -0.360   0.550  -0.215  -0.221  -0.223 
+ 12.574   0.527  -0.422  -0.803  -0.736  -0.223  -0.481  -0.359  -0.351   0.544  -0.276   0.014  -0.192 
+ 12.487   0.279  -0.194  -0.749  -0.608  -0.210  -0.481  -0.507  -0.429   0.501  -0.394   0.170  -0.218 
+ 11.090   0.251   0.011  -0.808  -0.512  -0.249  -0.441  -0.698  -0.409   0.663  -0.304   0.251  -0.126 
+ 11.251   0.371   0.060  -0.654  -0.326  -0.215  -0.343  -0.758  -0.492   0.280  -0.390   0.127  -0.209 
+  7.809   0.619   0.267  -0.567  -0.392  -0.224  -0.378  -0.713  -0.376   0.494  -0.544   0.135  -0.254 
+  6.426   0.810   0.139  -0.174  -0.377  -0.234  -0.255  -0.062   0.098   0.344  -0.138  -0.130  -0.138 
+  6.248   0.884   0.194  -0.076  -0.404  -0.184  -0.336  -0.034  -0.004   0.393  -0.119  -0.115  -0.021 
+  5.638   0.677  -0.093  -0.358  -0.553  -0.278  -0.317  -0.091  -0.011   0.446  -0.038  -0.126  -0.090 
+  5.239   0.604  -0.117  -0.269  -0.449  -0.187  -0.369   0.044  -0.008   0.199  -0.044  -0.280  -0.158 
+  4.960   0.496  -0.017  -0.200  -0.551  -0.161  -0.101   0.060   0.055   0.382   0.059  -0.086  -0.069 
+  6.617   0.047  -0.288   0.123  -0.577  -0.462   0.012  -0.012  -0.099  -0.093  -0.201   0.076  -0.027 
+  5.999   0.139  -0.295  -0.052  -0.645  -0.348   0.040  -0.164  -0.138  -0.094  -0.217   0.057  -0.046 
+  4.453   0.368  -0.094  -0.038  -0.535  -0.202  -0.140  -0.122  -0.100   0.215   0.070   0.133  -0.081 
+  4.253   0.341  -0.357   0.015  -0.292  -0.165  -0.106  -0.125   0.062   0.311   0.011   0.016   0.037 
+  4.338   0.374  -0.219  -0.125  -0.335  -0.165  -0.122  -0.249  -0.027   0.121   0.130   0.211  -0.079 
+  4.038   0.117  -0.302  -0.166  -0.311  -0.095  -0.013  -0.162  -0.183   0.131   0.137   0.028   0.052 
+  4.005   0.303  -0.339  -0.130  -0.183  -0.052  -0.111  -0.021  -0.067   0.090   0.048   0.109  -0.036 
+  3.883   0.253  -0.213   0.179  -0.094  -0.112  -0.258  -0.182  -0.125   0.238   0.165   0.101  -0.018 
+  3.748   0.203  -0.263  -0.017  -0.197  -0.126  -0.205  -0.236  -0.186   0.195   0.068   0.038  -0.025 
+  3.788   0.249  -0.293   0.027  -0.304  -0.101  -0.083  -0.180  -0.178  -0.076  -0.116   0.133   0.054 
+  3.804   0.307  -0.223   0.066  -0.112   0.115  -0.246  -0.253  -0.111   0.068  -0.044   0.079  -0.203 
+  3.777   0.447  -0.175   0.056  -0.142  -0.114  -0.155  -0.120  -0.165   0.100   0.051   0.054  -0.104 
+  3.657   0.365  -0.121   0.193  -0.096  -0.138  -0.206  -0.236  -0.084   0.121   0.027  -0.141  -0.041 
+  3.873   0.518   0.092   0.193  -0.159  -0.026  -0.022  -0.131  -0.108  -0.021  -0.007   0.093   0.060 
+  3.813   0.633   0.021  -0.058  -0.159   0.176  -0.105  -0.220  -0.199  -0.066   0.088   0.065  -0.142 
+  4.497   0.388   0.128  -0.155  -0.085  -0.162   0.039  -0.327  -0.063  -0.079  -0.231  -0.180   0.019 
+  6.254   0.517   0.428  -0.139  -0.010  -0.316   0.152  -0.331   0.025  -0.074  -0.508  -0.356   0.037 
+  5.443   0.172   0.251   0.242  -0.028  -0.217   0.082   0.106  -0.151  -0.060  -0.250  -0.154  -0.286 
+  5.412   0.072   0.159   0.151  -0.100  -0.223   0.044  -0.074  -0.135  -0.108  -0.212  -0.041  -0.337 
+  4.915  -0.019  -0.166  -0.302  -0.376  -0.266   0.144  -0.183  -0.145   0.146  -0.209  -0.095  -0.148 
+  5.157   0.321  -0.265  -0.135  -0.328  -0.246   0.153  -0.025  -0.182   0.008  -0.399  -0.059  -0.013 
+  5.292   0.214  -0.355  -0.162  -0.383  -0.256   0.123   0.015  -0.142  -0.163  -0.347  -0.209   0.018 
+  5.599   0.151  -0.491  -0.098  -0.238  -0.256  -0.055  -0.106  -0.148  -0.165  -0.517  -0.141   0.115 
+  5.552  -0.266  -0.521   0.066  -0.198  -0.177  -0.074  -0.190  -0.110  -0.092  -0.289   0.022   0.072 
+  5.827  -0.799  -0.145   0.380  -0.075  -0.077  -0.069  -0.330  -0.209  -0.054  -0.170   0.054   0.140 
+  5.780  -0.486  -0.472   0.234  -0.235  -0.268  -0.070  -0.199  -0.212  -0.206  -0.492  -0.051   0.097 
+  5.148   0.456  -0.234   0.033  -0.438  -0.379  -0.028   0.106   0.070  -0.015  -0.452  -0.270  -0.051 
+  4.839   0.313  -0.072  -0.224  -0.524  -0.301   0.149  -0.004   0.098   0.080  -0.473  -0.146  -0.190 
+  4.253   0.076  -0.032  -0.164  -0.329  -0.228   0.262   0.091   0.005   0.035  -0.323  -0.067  -0.306 
+  4.281  -0.090   0.054   0.045   0.059  -0.208  -0.021  -0.098  -0.099   0.027  -0.141  -0.033  -0.301 
+  4.514  -0.172   0.197   0.091  -0.180  -0.225   0.073  -0.240  -0.178  -0.004  -0.066   0.129  -0.112 
+  4.582  -0.172   0.245   0.037  -0.068  -0.208   0.022  -0.291  -0.136  -0.085  -0.121  -0.007  -0.110 
+  4.418  -0.105   0.150   0.085  -0.034  -0.212   0.128  -0.100  -0.158   0.011  -0.102   0.019  -0.122 
+  4.346  -0.106   0.042  -0.014  -0.204  -0.338  -0.050  -0.134  -0.112   0.093  -0.032   0.046  -0.127 
+  4.244   0.069   0.159   0.001  -0.124  -0.168   0.034  -0.193  -0.099   0.054  -0.037   0.058  -0.072 
+  4.285   0.059   0.157   0.021  -0.136  -0.293  -0.083  -0.058  -0.097   0.233  -0.024  -0.082  -0.185 
+  4.120   0.215  -0.094  -0.074  -0.247  -0.399  -0.021  -0.091  -0.090   0.171   0.021   0.012  -0.005 
+  4.455   0.476   0.033   0.081  -0.394  -0.278   0.127   0.025   0.030  -0.005  -0.033  -0.027  -0.108 
+  4.287   0.732  -0.056  -0.023  -0.540  -0.042   0.159   0.147  -0.062  -0.046  -0.253  -0.124  -0.150 
+  4.476   0.570  -0.280  -0.090  -0.539  -0.214   0.078   0.159   0.147   0.143  -0.219  -0.220  -0.012 
+  4.193   0.361  -0.335  -0.045  -0.428  -0.256   0.066   0.188   0.221   0.239  -0.303  -0.184  -0.015 
+  3.596   0.430  -0.179   0.076  -0.277  -0.032   0.085   0.015  -0.125  -0.068  -0.188  -0.098   0.028 
+  4.239   0.522  -0.357   0.215   0.042  -0.234  -0.090  -0.253  -0.115   0.111  -0.047  -0.007   0.020 
+  4.022   0.152  -0.347   0.256  -0.268  -0.244  -0.109  -0.059  -0.061   0.236  -0.069   0.088  -0.004 
+  3.610   0.272  -0.149   0.177  -0.083  -0.177  -0.062   0.007  -0.320   0.068   0.047   0.009  -0.001 
+  5.081   0.840  -0.847  -0.176   0.012  -0.324  -0.243  -0.031  -0.225  -0.029  -0.032  -0.076  -0.106 
+  4.316   0.540  -0.599   0.031  -0.042  -0.185  -0.169  -0.092  -0.141   0.039  -0.009  -0.015  -0.039 
+  3.581   0.347  -0.119   0.238   0.097   0.026  -0.160  -0.127  -0.122  -0.053  -0.058  -0.019  -0.188 
+  3.896   0.544  -0.146   0.024  -0.105  -0.089  -0.079  -0.066  -0.297  -0.078  -0.084  -0.002  -0.069 
+  5.302   0.901  -0.432  -0.206  -0.379  -0.207  -0.042   0.039  -0.635  -0.117  -0.013   0.049  -0.054 
+  4.048   0.366  -0.238   0.020  -0.238  -0.023   0.053  -0.121  -0.202   0.004   0.133   0.093   0.044 
+  3.709   0.417   0.102   0.187  -0.112  -0.056  -0.279  -0.105  -0.068   0.073   0.032   0.022  -0.098 
+  3.586   0.195  -0.180  -0.020  -0.210  -0.021  -0.095  -0.133  -0.144   0.119  -0.006  -0.041  -0.004 
+  3.516   0.399  -0.139  -0.035  -0.121   0.032  -0.045  -0.048  -0.248   0.189   0.070  -0.015   0.113 
+  3.444   0.248  -0.120   0.283  -0.182  -0.034  -0.025  -0.062  -0.199   0.178   0.129   0.026  -0.013 
+  3.320   0.202   0.113   0.330  -0.123  -0.079  -0.254  -0.205  -0.103   0.111   0.013  -0.122  -0.082 
+  3.597   0.395  -0.019   0.298  -0.087  -0.044  -0.142  -0.243  -0.232   0.093   0.082  -0.044  -0.109 
+  3.508   0.370  -0.149   0.082  -0.064  -0.165  -0.270  -0.278  -0.180   0.197   0.215  -0.002  -0.153 
+  3.183   0.267  -0.120   0.202  -0.115   0.060  -0.130  -0.287  -0.060   0.062   0.076  -0.030  -0.042 
+  3.266   0.394  -0.156   0.103  -0.002  -0.037  -0.039  -0.162  -0.157   0.105  -0.089  -0.121  -0.018 
+  3.376   0.372  -0.317  -0.004  -0.091  -0.161  -0.134  -0.080  -0.258   0.052  -0.077   0.025   0.040 
+  3.249   0.173  -0.184   0.214  -0.205  -0.191  -0.173  -0.033  -0.001   0.094   0.038  -0.028   0.045 
+  3.238   0.314  -0.152   0.223   0.027  -0.017  -0.026  -0.045  -0.087   0.021   0.058   0.037   0.075 
+  3.845   0.563  -0.007   0.281  -0.000  -0.128  -0.177  -0.275  -0.278  -0.018   0.049   0.220   0.133 
+  6.223   1.203   0.312  -0.003  -0.133  -0.226  -0.305  -0.168  -0.263  -0.051  -0.115  -0.103  -0.157 
+  7.483   1.243   0.361   0.100  -0.113  -0.280  -0.358  -0.200  -0.330  -0.053  -0.094  -0.109  -0.220 
+  6.799   1.408  -0.079   0.517  -0.201  -0.622  -0.154  -0.211  -0.412   0.114  -0.099  -0.172  -0.181 
+  5.804   1.122   0.307   0.438  -0.185  -0.424  -0.204  -0.231  -0.334   0.051   0.043  -0.139  -0.140 
+  4.883   0.514   0.505   0.398  -0.272  -0.006  -0.366  -0.298  -0.325   0.009   0.017  -0.047  -0.140 
+  3.711   0.415   0.231   0.022  -0.320  -0.083  -0.267  -0.322  -0.153  -0.036   0.022  -0.049   0.059 
+  5.384   0.281  -0.098   0.083  -0.433  -0.315  -0.071  -0.151  -0.160  -0.060  -0.148  -0.104  -0.066 
+  8.235   0.145  -0.281   0.074  -0.529  -0.287   0.085   0.036  -0.025   0.070  -0.247  -0.231  -0.208 
+  5.642   0.078   0.079   0.011  -0.337  -0.244   0.304   0.033   0.139   0.035  -0.270  -0.262  -0.199 
+  4.873  -0.745   0.087   0.070  -0.156  -0.287   0.143  -0.130  -0.039  -0.148  -0.177  -0.050  -0.155 
+  5.557  -0.726   0.007   0.014  -0.086  -0.311  -0.179  -0.054   0.103   0.003  -0.138  -0.025  -0.050 
+  5.830  -0.801  -0.297  -0.166  -0.201  -0.462  -0.230   0.056   0.348   0.025  -0.191   0.074  -0.054 
+  6.114  -0.563  -0.247  -0.146  -0.193  -0.473  -0.118   0.203   0.311  -0.052  -0.349  -0.096  -0.120 
+  5.266  -0.339  -0.281  -0.082  -0.214  -0.425  -0.037  -0.049   0.148   0.064  -0.259  -0.087  -0.253 
+  4.731  -0.028  -0.073  -0.197  -0.320  -0.152   0.119   0.163  -0.050  -0.048  -0.031   0.019  -0.043 
+  4.477   0.333   0.165   0.103  -0.096  -0.065  -0.098  -0.032  -0.193  -0.032  -0.092  -0.187  -0.114 
+  4.116   0.370  -0.031   0.060   0.005  -0.034  -0.131   0.017  -0.178  -0.080  -0.021  -0.087  -0.149 
+  3.712   0.288  -0.059  -0.087  -0.100  -0.007  -0.086   0.070  -0.149  -0.038  -0.065   0.010  -0.150 
+  3.856   0.305  -0.132   0.166  -0.093  -0.054  -0.063  -0.202  -0.221  -0.008  -0.078  -0.153  -0.084 
+  3.873   0.359  -0.116   0.091  -0.217  -0.065   0.014  -0.054  -0.215  -0.178  -0.059  -0.082  -0.016 
+  4.076  -0.025   0.182   0.103  -0.235  -0.081   0.011   0.033  -0.007  -0.034  -0.052  -0.000  -0.026 
+  6.221  -0.417   0.130   0.143  -0.266  -0.222   0.100  -0.274   0.215  -0.216  -0.045  -0.099  -0.179 
+  5.068  -0.308   0.259   0.021  -0.281  -0.113   0.102  -0.310   0.064  -0.268  -0.021   0.038  -0.148 
+  5.483   0.434   0.085   0.151  -0.390  -0.145  -0.032  -0.080   0.110  -0.205  -0.171  -0.170  -0.124 
+  4.623   0.219   0.056   0.123  -0.111  -0.069   0.043  -0.067   0.106  -0.268  -0.083  -0.192  -0.014 
+  4.589   0.190  -0.031   0.120  -0.232  -0.107  -0.001  -0.191  -0.028  -0.306  -0.145  -0.220  -0.083 
+  5.438   0.600   0.052  -0.042  -0.296  -0.089  -0.093   0.091   0.114  -0.233  -0.245  -0.227  -0.063 
+  5.147   0.276   0.113   0.116  -0.118  -0.005  -0.047   0.025   0.019  -0.176  -0.312  -0.235  -0.192 
+  5.476   0.022   0.009  -0.064  -0.255  -0.184  -0.023   0.174  -0.084   0.156  -0.039  -0.016  -0.198 
+  5.620  -0.263   0.078  -0.162  -0.205  -0.164   0.072   0.024  -0.160  -0.073  -0.223  -0.110  -0.077 
+  5.936  -0.223   0.014  -0.115  -0.084  -0.042   0.028  -0.047  -0.013  -0.049  -0.280  -0.028   0.039 
+  6.053  -0.286  -0.107  -0.221  -0.183  -0.093   0.161  -0.044  -0.082  -0.033  -0.140  -0.152  -0.087 
+  5.707  -0.573  -0.347  -0.421  -0.342  -0.335   0.059   0.035   0.100   0.201  -0.034  -0.063   0.062 
+  5.097  -0.637  -0.203  -0.130  -0.210  -0.198   0.053  -0.115  -0.027   0.102  -0.089  -0.094   0.035 
+  4.941  -0.377  -0.129  -0.147  -0.217  -0.201  -0.029  -0.242  -0.081  -0.039  -0.247  -0.095   0.149 
+  4.514  -0.051  -0.117  -0.254  -0.215  -0.177  -0.007   0.063  -0.049  -0.120  -0.150   0.023   0.118 
+  4.270   0.357  -0.094  -0.253  -0.166  -0.109  -0.137  -0.135  -0.097   0.011  -0.159  -0.193  -0.166 
+  3.395   0.033  -0.256   0.160   0.086  -0.013  -0.075  -0.088  -0.084   0.144  -0.029   0.012  -0.002 
+  3.314   0.116  -0.053   0.148  -0.089  -0.141  -0.190   0.023  -0.157   0.000   0.037  -0.049  -0.063 
+  3.606   0.162  -0.102   0.045  -0.056  -0.015   0.063  -0.114  -0.107   0.019  -0.093  -0.056  -0.134 
+  4.365  -0.468   0.184  -0.135   0.106   0.092  -0.109  -0.102  -0.127  -0.157  -0.066  -0.054  -0.110 
+  4.364  -0.383   0.080  -0.105   0.005  -0.185  -0.182  -0.005  -0.018   0.032   0.092   0.011   0.036 
+  3.457   0.014  -0.508  -0.020   0.043  -0.008  -0.172   0.005  -0.251   0.025   0.003  -0.068  -0.064 
+  3.557   0.100  -0.361  -0.053   0.016   0.122  -0.083  -0.088  -0.174   0.002   0.018  -0.116  -0.036 
+  3.500   0.161  -0.221   0.211   0.077   0.149  -0.066  -0.209  -0.168   0.010   0.091   0.088  -0.025 
+  3.652   0.177  -0.167   0.044  -0.211  -0.065  -0.161  -0.114   0.014  -0.081  -0.082  -0.034   0.012 
+  3.690   0.247   0.026   0.116  -0.095   0.147  -0.170  -0.181  -0.118   0.075   0.101   0.031   0.009 
+  3.701   0.302  -0.093   0.156   0.054   0.045  -0.176  -0.078  -0.170   0.062   0.033   0.054  -0.028 
+  3.762   0.319  -0.181   0.055   0.020   0.035  -0.143  -0.125  -0.300   0.001   0.085   0.112  -0.068 
+  3.725   0.374  -0.239  -0.085  -0.251  -0.118  -0.084  -0.096  -0.119   0.063   0.127   0.163  -0.033 
+  3.362   0.074  -0.259  -0.140   0.036  -0.075  -0.182  -0.219   0.066   0.172   0.010   0.106  -0.037 
+  3.582   0.317   0.002   0.041  -0.142  -0.018  -0.279  -0.187  -0.057  -0.045   0.085   0.017  -0.093 
+  3.569   0.228  -0.133   0.153   0.002  -0.173  -0.289  -0.306  -0.271   0.039   0.133  -0.034  -0.081 
+  3.557   0.283  -0.391   0.075  -0.111  -0.017  -0.273  -0.307  -0.052  -0.002  -0.083   0.066  -0.203 
+  3.391   0.165  -0.285   0.232   0.006   0.198  -0.162  -0.123   0.080   0.092  -0.062  -0.048  -0.220 
+  3.849   0.379  -0.035   0.256  -0.001  -0.054  -0.169  -0.150  -0.069  -0.026   0.126   0.027  -0.103 
+  3.810   0.420   0.017   0.125   0.085  -0.058  -0.342  -0.363  -0.109   0.035   0.073  -0.016  -0.157 
+  5.467  -0.262  -0.204   0.047   0.105  -0.025  -0.400   0.130  -0.042  -0.189  -0.050  -0.050  -0.058 
+  7.243  -0.515  -0.287   0.042  -0.027  -0.213  -0.542   0.281   0.064  -0.332  -0.112  -0.024   0.004 
+  4.698  -0.377  -0.474   0.192   0.089   0.047  -0.522   0.142  -0.061  -0.333   0.086   0.041   0.001 
+  3.341  -0.287  -0.407   0.064   0.097  -0.098  -0.187  -0.016  -0.227  -0.195   0.114   0.185  -0.154 
+  3.876  -0.221  -0.296  -0.049   0.054   0.099  -0.027   0.015  -0.202   0.008   0.011  -0.013  -0.073 
+  5.993  -0.544  -0.488  -0.061  -0.214  -0.079  -0.034   0.117  -0.166  -0.100   0.194   0.164  -0.170 
+  7.275  -0.702  -1.124  -0.041  -0.277  -0.272  -0.219   0.293  -0.049  -0.221   0.012   0.178  -0.294 
+  8.926  -0.730  -1.063  -0.144  -0.057  -0.244  -0.148   0.050  -0.160  -0.101   0.069   0.182  -0.311 
+ 10.360  -0.536  -1.073  -0.240   0.042  -0.313   0.118   0.085  -0.090  -0.146  -0.168   0.011  -0.231 
+ 12.029   0.356  -0.981  -0.446  -0.103  -0.497   0.013  -0.106  -0.252  -0.027  -0.386   0.071  -0.240 
+ 13.179   0.833  -1.360  -0.356  -0.237  -0.376  -0.254   0.110  -0.161   0.005  -0.366  -0.075  -0.166 
+ 14.184   0.461  -1.719  -0.169  -0.351  -0.285  -0.186   0.265  -0.087   0.028  -0.376  -0.255  -0.064 
+ 14.020   0.481  -1.810  -0.253  -0.343  -0.274  -0.172   0.239  -0.040  -0.028  -0.322  -0.308   0.005 
+ 14.369   0.379  -1.739  -0.180  -0.456  -0.149  -0.254   0.283  -0.092   0.034  -0.344  -0.330   0.023 
+ 14.575   0.387  -1.614  -0.259  -0.568  -0.028  -0.328   0.244  -0.190   0.160  -0.359  -0.345  -0.061 
+ 14.540   0.658  -1.502  -0.356  -0.681   0.078  -0.305   0.176  -0.350   0.318  -0.307  -0.316  -0.244 
+ 13.866   1.162  -1.241  -0.395  -0.726  -0.103  -0.208   0.022  -0.486   0.277  -0.143  -0.232  -0.255 
+ 12.655   1.025  -0.915  -0.068  -0.635  -0.307   0.099  -0.065  -0.435   0.226  -0.281   0.112  -0.074 
+ 11.561   0.590  -0.686   0.238  -0.158  -0.135   0.430  -0.047  -0.548   0.102  -0.782   0.087  -0.118 
+ 11.483   0.600  -0.650   0.227  -0.197  -0.192   0.432  -0.073  -0.446   0.065  -0.726   0.046  -0.038 
+ 11.485   0.424  -0.560   0.221  -0.149  -0.071   0.370   0.005  -0.546  -0.009  -0.782  -0.017   0.056 
+ 11.156   0.490  -0.540   0.293  -0.113  -0.079   0.404   0.053  -0.692  -0.020  -0.816   0.004   0.088 
+ 10.864   0.726  -0.570   0.324  -0.247  -0.097   0.293   0.221  -0.690   0.015  -0.696  -0.139   0.056 
+ 12.016   0.997  -0.489  -0.182  -0.439  -0.260  -0.162  -0.009  -0.662   0.059  -0.097   0.002   0.127 
+ 13.444   0.993  -1.041  -0.416  -0.622  -0.137  -0.361  -0.101  -0.578   0.355  -0.003  -0.100  -0.111 
+ 13.935   0.852  -1.315  -0.323  -0.685  -0.152  -0.532  -0.125  -0.388   0.472  -0.097  -0.319  -0.254 
+ 14.013   0.714  -1.278  -0.248  -0.461  -0.371  -0.499  -0.265  -0.079   0.465  -0.160  -0.370  -0.123 
+ 13.561   0.695  -0.999  -0.307  -0.141  -0.690  -0.403  -0.365   0.040   0.479  -0.408  -0.042  -0.033 
+ 12.310   0.282  -0.437   0.311  -0.259  -0.718  -0.481  -0.118   0.098  -0.035  -0.350  -0.025  -0.048 
+  9.903   0.008  -0.147   0.203  -0.339  -0.181  -0.513  -0.079   0.160   0.181  -0.162   0.035  -0.081 
+  8.475   0.423  -0.583  -0.054  -0.363  -0.410  -0.077  -0.229   0.204   0.215  -0.245  -0.332  -0.132 
+  8.829  -0.275  -0.560  -0.154  -0.447  -0.309  -0.017  -0.085   0.379   0.298  -0.215  -0.348  -0.253 
+  7.755   0.050  -0.369  -0.266  -0.395  -0.362  -0.029  -0.134   0.300   0.317  -0.244  -0.193  -0.067 
+ 11.030  -1.260  -0.351   0.088  -0.833   0.087  -0.237  -0.149   0.055  -0.214  -0.122  -0.152  -0.161 
+ 11.286  -1.691  -0.145   0.108  -0.878  -0.082  -0.129  -0.224  -0.086  -0.202  -0.096  -0.147  -0.126 
+ 11.207  -2.470  -0.017   0.466  -0.308  -0.278  -0.052  -0.091  -0.044   0.023  -0.180  -0.185  -0.009 
+ 12.503  -1.752  -0.431   0.012  -0.259  -0.420  -0.304  -0.148  -0.166  -0.142  -0.161  -0.014   0.045 
+ 12.091  -1.207  -0.266   0.584   0.183  -0.174  -0.405  -0.100  -0.222  -0.209  -0.198  -0.187  -0.025 
+ 11.912  -0.279  -0.135   0.334   0.648   0.097  -0.246  -0.297  -0.185  -0.374  -0.377  -0.286  -0.278 
+ 11.920   0.288  -0.181   0.053   0.328  -0.191  -0.386  -0.285  -0.149  -0.042  -0.050  -0.182  -0.383 
+ 11.788   0.831  -0.058   0.248   0.256  -0.091  -0.206  -0.245  -0.202  -0.022  -0.107  -0.306  -0.275 
+ 11.454   0.959  -0.046   0.382   0.121   0.045  -0.262  -0.309  -0.192  -0.049  -0.223  -0.101  -0.279 
+ 11.435   1.128   0.003   0.284  -0.073   0.018  -0.307  -0.178  -0.073  -0.118  -0.273  -0.132  -0.143 
+ 10.549   1.151   0.099   0.246  -0.050   0.090  -0.219  -0.184  -0.340  -0.205  -0.245  -0.160  -0.321 
+  9.962   0.658  -0.179   0.178   0.090   0.213   0.032  -0.070  -0.376  -0.451  -0.142  -0.008  -0.160 
+ 10.064   0.591  -0.461   0.102   0.146   0.242   0.119  -0.108  -0.461  -0.399  -0.015   0.049  -0.117 
+  9.167   0.346  -0.679  -0.105   0.092   0.485   0.075  -0.404  -0.592  -0.270   0.034  -0.063  -0.009 
+  8.346   0.692  -0.262   0.146  -0.031   0.095  -0.192  -0.548  -0.402  -0.181  -0.051   0.031  -0.123 
+  6.416   0.391  -0.171  -0.036   0.132   0.026  -0.266  -0.509  -0.359   0.021   0.104  -0.099  -0.152 
+  5.692   0.146  -0.247   0.050   0.225  -0.088  -0.064  -0.252  -0.337   0.005   0.044  -0.270  -0.074 
+  5.639  -0.263  -0.598   0.415  -0.012   0.002  -0.222  -0.276  -0.124  -0.124  -0.093  -0.177   0.065 
+  6.381  -0.318  -0.690   0.474  -0.096  -0.215  -0.367  -0.172   0.062  -0.140   0.155  -0.103   0.205 
+  7.245  -0.612  -0.715   0.309  -0.367  -0.208  -0.227  -0.104   0.117  -0.061   0.254  -0.062   0.131 
+  8.271  -0.552  -1.006   0.080  -0.202  -0.186  -0.148   0.136   0.213  -0.250   0.063  -0.064   0.097 
+  9.811  -0.114  -0.781   0.011  -0.113  -0.277  -0.465   0.175   0.019  -0.066  -0.137  -0.007  -0.055 
+ 10.414  -0.670  -1.047  -0.248  -0.153  -0.124  -0.177   0.295  -0.072  -0.238  -0.233   0.040  -0.113 
+ 11.265  -0.644  -1.311  -0.391  -0.055  -0.315   0.022   0.359   0.076  -0.379  -0.187   0.176  -0.147 
+ 11.826  -0.641  -1.307  -0.273  -0.023  -0.474   0.010   0.073  -0.069  -0.315  -0.059   0.280  -0.138 
+ 12.105  -0.669  -1.318  -0.213   0.015  -0.305   0.055   0.095  -0.182  -0.239  -0.291  -0.041  -0.214 
+ 12.256  -0.618  -1.185  -0.324   0.061  -0.097  -0.012   0.056  -0.161  -0.268  -0.418   0.089  -0.168 
+ 13.065   0.108  -1.003  -0.385  -0.112  -0.298  -0.271   0.117  -0.183  -0.086  -0.474   0.023  -0.144 
+ 14.045   0.485  -1.378  -0.574  -0.164  -0.388  -0.241   0.212  -0.169  -0.082  -0.371  -0.003  -0.229 
+ 14.692   0.318  -1.641  -0.428  -0.251  -0.288  -0.366   0.359  -0.162  -0.003  -0.358  -0.162  -0.241 
+ 14.664   0.382  -1.599  -0.445  -0.330  -0.335  -0.354   0.322  -0.129  -0.007  -0.381  -0.286  -0.083 
+ 14.916   0.300  -1.398  -0.405  -0.357  -0.332  -0.475   0.395  -0.252   0.155  -0.431  -0.293  -0.158 
+ 14.957   0.425  -1.296  -0.585  -0.284  -0.355  -0.477   0.250  -0.285   0.314  -0.350  -0.341  -0.302 
+ 14.663   0.785  -1.246  -0.603  -0.297  -0.420  -0.452   0.045  -0.382   0.529  -0.322  -0.292  -0.469 
+ 14.671   0.894  -0.861  -0.818  -0.441  -0.410  -0.301  -0.001  -0.610   0.501  -0.309  -0.185  -0.357 
+ 14.328   0.992  -0.464  -0.841  -0.542  -0.355  -0.200  -0.264  -0.764   0.286  -0.238   0.123  -0.239 
+ 13.830   0.921  -0.034  -0.748  -0.614  -0.243  -0.330  -0.289  -0.785   0.114  -0.446   0.338  -0.233 
+ 13.317   0.903   0.311  -0.795  -0.549  -0.244  -0.184  -0.343  -0.834  -0.075  -0.603   0.266  -0.167 
+ 12.810   1.012   0.377  -0.817  -0.461  -0.316  -0.129  -0.328  -0.758   0.004  -0.681   0.153  -0.205 
+ 12.165   1.174   0.334  -0.789  -0.308  -0.301  -0.029  -0.332  -0.751   0.024  -0.659   0.020  -0.268 
+ 11.358   1.468   0.030  -0.762   0.090  -0.362   0.165  -0.464  -0.866   0.036  -0.537  -0.094  -0.376 
+ 11.298   1.238  -0.293  -0.315   0.422  -0.506   0.003  -0.599  -0.684   0.069  -0.408  -0.430  -0.274 
+ 11.535   0.855  -0.438   0.280   0.361  -0.725  -0.310  -0.327  -0.484   0.123  -0.525  -0.481  -0.189 
+ 11.610   0.313  -0.282   0.608   0.133  -0.845  -0.040  -0.167  -0.615  -0.045  -0.327  -0.324  -0.222 
+ 11.525  -0.381   0.265   0.801  -0.157  -0.392   0.055  -0.350  -0.514  -0.040  -0.473  -0.307  -0.374 
+ 11.094  -0.426   0.660   0.556  -0.207  -0.345  -0.094  -0.176  -0.495  -0.018  -0.395  -0.355  -0.302 
+ 11.135  -0.548   0.842   0.501  -0.029  -0.282  -0.142  -0.113  -0.526  -0.031  -0.321  -0.421  -0.368 
+ 11.877  -0.778   0.960   0.514  -0.252  -0.143  -0.272   0.050  -0.577   0.035  -0.364  -0.325  -0.307 
+ 12.478  -1.113   0.942   0.633  -0.141  -0.214  -0.427   0.045  -0.531   0.142  -0.316  -0.249  -0.278 
+ 12.529  -1.186   1.071   0.609  -0.234  -0.167  -0.297   0.111  -0.705   0.116  -0.286  -0.300  -0.270 
+ 12.590  -1.105   1.013   0.635  -0.266  -0.078  -0.299   0.143  -0.768   0.112  -0.314  -0.292  -0.219 
+ 12.554  -0.969   0.947   0.634  -0.334  -0.087  -0.367   0.179  -0.667   0.088  -0.356  -0.280  -0.185 
+ 12.386  -0.783   0.816   0.743  -0.363  -0.134  -0.419   0.100  -0.639   0.110  -0.291  -0.335  -0.184 
+ 12.479  -0.757   0.754   0.764  -0.368  -0.083  -0.445   0.010  -0.774   0.149  -0.302  -0.269  -0.183 
+ 12.317  -0.668   0.668   0.807  -0.301  -0.156  -0.381  -0.099  -0.785   0.066  -0.357  -0.146  -0.256 
+ 12.350  -0.764   0.662   0.916  -0.233  -0.296  -0.270  -0.304  -0.668  -0.064  -0.344  -0.141  -0.245 
+ 12.608  -0.836   0.637   0.695  -0.293  -0.125  -0.123  -0.279  -0.771  -0.291  -0.262  -0.036  -0.402 
+ 12.735  -0.788   0.537   0.520  -0.068  -0.411  -0.163  -0.291  -0.551  -0.215  -0.254  -0.179  -0.444 
+ 12.546  -0.792   0.332   0.527  -0.070  -0.591  -0.164  -0.318  -0.236  -0.401  -0.272   0.033  -0.463 
+ 12.520  -0.746   0.412   0.296   0.064  -0.616  -0.170  -0.275  -0.339  -0.435  -0.230  -0.074  -0.459 
+ 12.665  -0.924   0.554   0.161   0.068  -0.502  -0.219  -0.204  -0.449  -0.492  -0.317  -0.077  -0.303 
+ 12.901  -0.761   0.506   0.164   0.055  -0.630  -0.133  -0.216  -0.291  -0.513  -0.225  -0.112  -0.384 
+ 13.037  -0.694   0.406   0.223   0.062  -0.480  -0.295  -0.166  -0.478  -0.411  -0.256  -0.120  -0.437 
+ 13.198  -0.830   0.439   0.490  -0.052  -0.450  -0.168  -0.174  -0.479  -0.361  -0.201  -0.161  -0.435 
+ 13.201  -0.601   0.347   0.510  -0.113  -0.380  -0.299  -0.070  -0.546  -0.370  -0.186  -0.320  -0.368 
+ 13.156  -0.677   0.516   0.709  -0.271  -0.447  -0.213  -0.018  -0.621  -0.168  -0.247  -0.391  -0.312 
+ 13.048  -0.669   0.382   0.952  -0.430  -0.233  -0.284   0.070  -0.707  -0.038  -0.414  -0.249  -0.325 
+ 12.951  -0.771   0.407   0.917  -0.259  -0.264  -0.275   0.026  -0.708   0.027  -0.420  -0.239  -0.285 
+ 12.753  -0.661   0.347   0.793  -0.106  -0.398  -0.223   0.067  -0.692   0.094  -0.405  -0.217  -0.244 
+ 12.530  -0.519   0.227   0.720   0.057  -0.470  -0.265   0.160  -0.662   0.094  -0.406  -0.159  -0.240 
+ 12.256  -0.405   0.170   0.554   0.276  -0.468  -0.381   0.190  -0.630   0.113  -0.399  -0.177  -0.149 
+ 11.710  -0.185   0.144   0.374   0.423  -0.355  -0.420   0.116  -0.671   0.175  -0.455  -0.184  -0.011 
+ 11.291  -0.038   0.130   0.262   0.420  -0.224  -0.329  -0.045  -0.696   0.276  -0.545  -0.213   0.091 
+ 11.049   0.063   0.125   0.176   0.420  -0.113  -0.358  -0.125  -0.666   0.363  -0.542  -0.288   0.026 
+ 11.024   0.062   0.208   0.072   0.445  -0.090  -0.416  -0.128  -0.655   0.370  -0.476  -0.298  -0.065 
+ 11.275   0.050   0.119   0.127   0.441  -0.126  -0.456  -0.046  -0.737   0.418  -0.569  -0.267  -0.090 
+ 11.412   0.105   0.086   0.194   0.415  -0.224  -0.491  -0.015  -0.666   0.384  -0.654  -0.196  -0.107 
+ 11.608   0.166  -0.079   0.401   0.302  -0.310  -0.489   0.017  -0.595   0.299  -0.674  -0.170  -0.085 
+ 11.492   0.298  -0.214   0.518   0.315  -0.450  -0.406   0.021  -0.480   0.084  -0.621  -0.127  -0.152 
+ 11.511   0.126  -0.143   0.555   0.379  -0.568  -0.355   0.082  -0.522   0.105  -0.576  -0.141  -0.135 
+ 11.405   0.096  -0.078   0.528   0.281  -0.549  -0.319   0.239  -0.694   0.143  -0.502  -0.183  -0.089 
+ 10.981   0.165  -0.044   0.498   0.304  -0.611  -0.244   0.261  -0.771   0.261  -0.552  -0.069  -0.283 
+ 10.724   0.097  -0.076   0.511   0.293  -0.543  -0.197   0.237  -0.656   0.034  -0.450  -0.180  -0.175 
+ 10.816  -0.010   0.071   0.416   0.277  -0.433  -0.259   0.137  -0.472  -0.018  -0.502  -0.387   0.013 
+ 10.935   0.338   0.067   0.246   0.374  -0.257  -0.382   0.004  -0.390   0.135  -0.525  -0.583  -0.081 
+ 10.748   0.515   0.058   0.007   0.479  -0.290  -0.255  -0.114  -0.440   0.313  -0.335  -0.578  -0.012 
+ 10.714   0.653   0.326  -0.342   0.309  -0.185  -0.246  -0.138  -0.535   0.317  -0.071  -0.337  -0.007 
+ 10.792   0.997   0.347  -0.582   0.246  -0.240  -0.224  -0.230  -0.716   0.033  -0.072  -0.473  -0.007 
+ 10.898   1.274  -0.004  -0.535   0.019  -0.224   0.002  -0.304  -0.564  -0.021   0.042  -0.283   0.042 
+ 11.220   1.250   0.063  -0.537  -0.149  -0.487   0.170  -0.469  -0.271  -0.201   0.056  -0.268   0.110 
+ 11.582   1.234   0.048  -0.599  -0.472  -0.357   0.056  -0.381  -0.211  -0.211   0.013  -0.212   0.206 
+ 11.841   1.116   0.007  -0.420  -0.861  -0.237   0.033  -0.267  -0.089  -0.250  -0.102  -0.078   0.141 
+ 11.848   0.911   0.086  -0.466  -0.911  -0.346   0.092  -0.254   0.152  -0.330  -0.022  -0.119   0.072 
+ 11.399   1.177  -0.082  -0.425  -0.953  -0.320   0.043  -0.252   0.305  -0.407   0.058  -0.132  -0.119 
+ 11.767   1.186  -0.198  -0.588  -1.055  -0.035  -0.053  -0.118   0.060  -0.270  -0.012  -0.035  -0.149 
+ 12.176   1.080  -0.378  -0.677  -0.994   0.112   0.006  -0.198  -0.055  -0.123   0.024   0.030  -0.257 
+ 12.152   1.202  -0.518  -0.764  -0.805   0.096  -0.055  -0.177  -0.058  -0.028  -0.039   0.065  -0.414 
+ 12.495   0.951  -0.636  -0.595  -0.727   0.053   0.023  -0.398   0.019   0.137  -0.104   0.097  -0.574 
+ 12.236   1.090  -0.871  -0.392  -0.664   0.082  -0.111  -0.435   0.054   0.198  -0.138   0.070  -0.614 
+ 12.079   1.062  -0.806  -0.416  -0.552   0.092  -0.361  -0.369   0.071   0.236  -0.152   0.112  -0.584 
+ 10.639   0.778  -0.354  -0.060  -0.343   0.183  -0.324  -0.388   0.067   0.091  -0.343   0.123  -0.327 
+ 10.522   0.824  -0.117   0.205  -0.401  -0.041  -0.286  -0.372  -0.033   0.107  -0.438   0.096  -0.274 
+ 10.798   0.690  -0.247   0.312  -0.347  -0.169  -0.210  -0.367  -0.101   0.108  -0.399   0.042  -0.193 
+ 13.088   0.409  -0.934   0.002  -0.122  -0.394  -0.583   0.061  -0.284   0.504  -0.323   0.090  -0.359 
+ 13.010   0.655  -0.938  -0.109  -0.354  -0.260  -0.629   0.025  -0.206   0.459  -0.350   0.026  -0.356 
+ 12.771   0.731  -0.835  -0.083  -0.606  -0.181  -0.618   0.022  -0.009   0.345  -0.363   0.008  -0.285 
+ 12.688   0.808  -0.910   0.009  -0.634  -0.191  -0.682   0.043   0.093   0.209  -0.345   0.075  -0.237 
+ 12.279   0.891  -0.720   0.092  -0.637  -0.191  -0.706  -0.138   0.092   0.200  -0.230   0.030  -0.152 
+ 11.848   1.019  -0.602   0.103  -0.429  -0.259  -0.655  -0.212  -0.146   0.259  -0.256  -0.091  -0.168 
+  9.766   0.977   0.000   0.139   0.064  -0.174  -0.410  -0.152  -0.237   0.143  -0.179  -0.383  -0.342 
+  9.682   0.850  -0.052   0.256   0.106  -0.122  -0.397  -0.027  -0.253   0.005  -0.261  -0.577  -0.071 
+  9.760   0.721   0.040   0.218   0.182  -0.365  -0.367   0.085  -0.392   0.168  -0.254  -0.588   0.033 
+  9.765   0.631   0.052   0.239   0.167  -0.364  -0.336   0.069  -0.389   0.216  -0.301  -0.534   0.017 
+  9.706   0.540   0.165   0.204   0.197  -0.410  -0.229  -0.029  -0.355   0.258  -0.336  -0.607   0.159 
+  9.865   0.502   0.089   0.172   0.239  -0.313  -0.180  -0.063  -0.454   0.300  -0.352  -0.465   0.080 
+ 12.095   0.315  -0.348   0.149  -0.028  -0.357  -0.574   0.041  -0.177   0.151  -0.264  -0.124   0.063 
+ 12.757   0.091  -0.212   0.214  -0.459  -0.589  -0.577   0.081  -0.339   0.155  -0.038  -0.021   0.019 
+ 13.028  -0.015  -0.130   0.316  -0.784  -0.515  -0.470   0.049  -0.403   0.344  -0.163   0.027  -0.100 
+ 13.285  -0.104  -0.122   0.318  -0.793  -0.581  -0.489   0.081  -0.457   0.369  -0.153   0.021  -0.193 
+ 13.480  -0.230   0.010   0.240  -0.830  -0.423  -0.654   0.144  -0.525   0.445  -0.302   0.139  -0.266 
+ 13.294  -0.244   0.192   0.184  -0.869  -0.387  -0.579   0.022  -0.550   0.395  -0.242   0.086  -0.201 
+ 13.238  -0.364   0.321   0.253  -0.856  -0.369  -0.602  -0.011  -0.544   0.338  -0.228   0.082  -0.196 
+ 13.109  -0.436   0.495   0.290  -0.868  -0.349  -0.516  -0.130  -0.514   0.275  -0.273   0.030  -0.158 
+ 12.559  -0.370   0.580   0.353  -0.753  -0.260  -0.495  -0.214  -0.548   0.213  -0.345   0.009  -0.121 
+ 11.825  -0.392   0.684   0.474  -0.769  -0.314  -0.347  -0.215  -0.618   0.192  -0.405  -0.121  -0.169 
+  9.920  -0.599   0.707   0.523  -0.594  -0.258  -0.277  -0.111  -0.377   0.167  -0.319  -0.090   0.021 
+  7.759  -0.253   0.701   0.264  -0.250  -0.199   0.091  -0.176   0.077  -0.023  -0.215  -0.254  -0.266 
+  6.636  -0.149   0.944   0.266  -0.026  -0.174  -0.156  -0.498  -0.025  -0.154   0.004  -0.019  -0.299 
+  5.583   0.407   0.483   0.104  -0.265  -0.229  -0.544  -0.253  -0.314   0.256  -0.171  -0.103  -0.107 
+  5.470   0.367   0.372   0.158  -0.268  -0.213  -0.514  -0.161  -0.399   0.146  -0.053   0.082  -0.212 
+  6.473  -0.090   0.063   0.190  -0.514  -0.095  -0.328  -0.234  -0.150  -0.096  -0.110   0.113  -0.145 
+ 10.795  -1.212  -0.458   0.039  -0.484   0.027  -0.148  -0.173   0.136   0.037  -0.073  -0.107  -0.284 
+ 12.236  -1.468  -0.485  -0.036  -0.681  -0.081  -0.283  -0.268  -0.058  -0.159  -0.221  -0.216  -0.164 
+ 11.931  -0.789   0.719   0.011  -0.521   0.011  -0.392  -0.248  -0.460  -0.085  -0.191  -0.202  -0.106 
+ 11.852  -0.128   0.794   0.177  -0.448  -0.415  -0.628  -0.014  -0.567  -0.170  -0.196  -0.068  -0.090 
+ 12.058   0.232   0.319   0.305  -0.489  -0.557  -0.679   0.067  -0.560  -0.237  -0.085   0.146  -0.292 
+ 12.161   0.217   0.005   0.255  -0.446  -0.506  -0.712  -0.005  -0.414  -0.205  -0.180   0.256  -0.397 
+ 12.160   0.102  -0.099   0.326  -0.522  -0.409  -0.847  -0.052  -0.407  -0.219  -0.234   0.303  -0.324 
+ 11.888   0.017  -0.281   0.450  -0.359  -0.243  -0.755  -0.031  -0.329  -0.183  -0.361   0.256  -0.319 
+  8.344  -0.193   0.162   0.473  -0.166  -0.204  -0.802  -0.058  -0.080  -0.199  -0.133   0.301  -0.071 
+  7.621  -0.071   0.175   0.599  -0.163   0.009  -0.628   0.124  -0.027  -0.026  -0.016   0.100  -0.013 
+  6.744   0.341  -0.450   0.227  -0.044  -0.085  -0.367  -0.053  -0.122   0.051  -0.043   0.131  -0.119 
+  8.969   0.212  -1.324  -0.275  -0.164  -0.153  -0.370  -0.235  -0.243  -0.233  -0.170  -0.138  -0.041 
+  8.961  -0.683  -0.484  -0.220  -0.082  -0.103  -0.381  -0.103  -0.141  -0.208  -0.077  -0.298  -0.021 
+  8.720  -0.551  -0.055  -0.258  -0.303  -0.164  -0.271   0.025  -0.177  -0.006  -0.145  -0.099  -0.017 
+  9.854  -0.831  -0.372  -0.017  -0.220  -0.115  -0.170   0.061  -0.046  -0.107  -0.170   0.043  -0.098 
+ 11.528  -0.776  -0.600  -0.008  -0.193  -0.126  -0.180   0.096  -0.007  -0.125  -0.309  -0.163  -0.126 
+ 11.804  -0.439  -0.424   0.014  -0.055  -0.026  -0.189  -0.034  -0.036  -0.008  -0.229  -0.260  -0.122 
+ 12.330   0.080  -0.137   0.163   0.104  -0.173  -0.363  -0.246  -0.040  -0.159  -0.332  -0.309  -0.106 
+ 13.202   0.238   0.081   0.428   0.023  -0.121  -0.511  -0.404  -0.113  -0.168  -0.310  -0.440  -0.384 
+ 12.612  -0.042  -0.082   0.367   0.090   0.118  -0.449  -0.213  -0.139  -0.125  -0.331  -0.365  -0.246 
+ 11.890   0.264  -0.273   0.340   0.226   0.023  -0.552  -0.303  -0.267  -0.264  -0.127  -0.474  -0.132 
+ 12.191   1.023  -0.770  -0.404  -0.103  -0.062  -0.726  -0.331  -0.235  -0.177  -0.072  -0.180  -0.158 
+ 11.507   1.690  -0.757  -0.283  -0.078   0.119  -0.668  -0.502  -0.158  -0.113  -0.154  -0.044  -0.116 
+ 10.314   1.912  -0.357  -0.336   0.081   0.233  -0.503  -0.366  -0.108  -0.242  -0.085  -0.194  -0.153 
+  7.912   1.708   0.150  -0.192   0.017   0.018  -0.275  -0.091  -0.042  -0.051  -0.055  -0.031  -0.178 
+  5.775   1.021   0.079   0.042   0.146   0.246  -0.209  -0.276  -0.136   0.019   0.029   0.021  -0.090 
+  5.310   0.815  -0.052  -0.049   0.003   0.091  -0.154  -0.242  -0.078  -0.004   0.047   0.039  -0.107 
+  5.079   0.547  -0.156  -0.058  -0.118  -0.108  -0.376  -0.279  -0.113   0.173   0.124   0.021   0.091 
+  4.811   0.386  -0.048  -0.091   0.061  -0.047  -0.353  -0.231  -0.081  -0.010   0.037  -0.051  -0.030 
+  4.971   0.469  -0.075  -0.049   0.025  -0.012  -0.205  -0.287  -0.238   0.150  -0.150  -0.011  -0.079 
+  7.530  -0.796   0.057   0.219   0.044  -0.106  -0.381  -0.043  -0.151  -0.182   0.051  -0.149   0.107 
+ 12.366   0.466   0.285   0.086  -0.414  -0.260  -0.169  -0.107  -0.336  -0.364  -0.143  -0.286  -0.046 
+ 13.528   1.184   0.076   0.444  -0.464  -0.391   0.159  -0.258  -0.389  -0.315  -0.225  -0.184  -0.120 
+ 11.661   0.851   0.385   0.525  -0.552  -0.467   0.047  -0.213  -0.227  -0.116  -0.284  -0.161  -0.087 
+ 10.374  -0.200   0.553   0.622  -0.196  -0.427   0.168  -0.334  -0.501  -0.188  -0.301  -0.148  -0.162 
+ 11.225  -0.094   0.315   0.440  -0.497  -0.292  -0.193  -0.341  -0.374  -0.263  -0.263  -0.210  -0.150 
+ 11.926  -0.146   0.255   0.729  -0.265  -0.454  -0.287  -0.072  -0.643  -0.133  -0.237  -0.236  -0.111 
+ 12.178  -0.337   0.338   0.720  -0.300  -0.286  -0.211  -0.162  -0.763  -0.011  -0.386  -0.166  -0.169 
+ 11.918  -0.383   0.362   0.779  -0.227  -0.470  -0.016  -0.092  -0.881  -0.005  -0.326  -0.275  -0.125 
+ 11.270  -0.191   0.001   0.692   0.175  -0.551  -0.208   0.164  -0.981  -0.110  -0.395  -0.232  -0.102 
+  9.960   0.374   0.085   0.542   0.468  -0.477  -0.340   0.415  -0.794   0.058  -0.229  -0.235  -0.151 
+  7.602   0.407   0.396   0.074   0.220  -0.055  -0.085   0.095  -0.331   0.111  -0.065  -0.194  -0.075 
+  9.281  -0.975   0.381   0.284   0.436  -0.407  -0.020   0.035   0.090  -0.202  -0.494   0.024  -0.064 
+  9.442  -1.264   0.132   0.389   0.235  -0.277   0.074  -0.073   0.099  -0.323  -0.448   0.103  -0.084 
+  8.476  -0.979  -0.099   0.242   0.094  -0.082   0.071  -0.059   0.056  -0.325  -0.353   0.012   0.002 
+ 11.798  -0.537   0.068   0.160  -0.081  -0.028  -0.105  -0.126  -0.189  -0.154  -0.149  -0.027  -0.068 
+ 12.674   1.024   0.173  -0.237  -0.396  -0.219  -0.186  -0.051  -0.189  -0.273  -0.188  -0.014   0.086 
+ 12.600   1.014   0.358  -0.034  -0.403  -0.080  -0.309  -0.199  -0.252  -0.322  -0.226  -0.169   0.005 
+ 12.121   1.093   0.523  -0.126  -0.532   0.118  -0.154  -0.151  -0.089  -0.376  -0.168  -0.209  -0.039 
+ 11.901   0.941   0.711  -0.355  -0.899   0.010  -0.016  -0.318  -0.140  -0.517  -0.091  -0.226   0.040 
+ 11.241   1.003   0.838  -0.724  -0.711   0.001  -0.078  -0.330  -0.087  -0.420  -0.079  -0.062   0.119 
+ 10.908   0.447   0.859  -0.710  -0.569  -0.035  -0.146  -0.171  -0.271  -0.324  -0.238   0.129  -0.209 
+  8.469   0.404   0.787  -0.206  -0.417   0.053   0.008   0.060  -0.236  -0.133  -0.357   0.061  -0.100 
+  6.604   0.313   0.716   0.235  -0.202  -0.151  -0.084  -0.184  -0.050   0.010  -0.226  -0.028  -0.112 
+  6.068   0.273   0.504   0.136  -0.061  -0.040  -0.002  -0.299  -0.028  -0.183  -0.093   0.140  -0.088 
+  9.418  -0.964   0.037   0.220  -0.368   0.040  -0.377   0.027   0.126   0.058  -0.099  -0.207  -0.138 
+ 11.343  -1.154   0.054   0.003  -0.386   0.020  -0.389   0.000   0.100   0.103  -0.111  -0.223  -0.207 
+ 10.525  -0.572   0.732  -0.097  -0.400  -0.035  -0.466  -0.298  -0.408  -0.135  -0.193  -0.062  -0.302 
+ 11.268   0.213   0.411  -0.026  -0.292   0.281  -0.122  -0.459  -0.562  -0.187  -0.026   0.105  -0.277 
+  9.156   0.728   0.629  -0.299  -0.119   0.446  -0.234  -0.524  -0.389  -0.193   0.156   0.102  -0.228 
+  6.426   0.721   0.339   0.102  -0.001   0.234   0.142  -0.269  -0.381  -0.156  -0.011  -0.317  -0.139 
+  6.052   0.780   0.665  -0.126   0.027   0.239   0.254  -0.077  -0.309  -0.277  -0.172  -0.061  -0.072 
+  6.047   0.894   0.448  -0.049   0.038   0.173   0.092  -0.148  -0.241  -0.134  -0.107  -0.191  -0.014 
+  6.145   0.839   0.366   0.194  -0.153   0.083   0.184  -0.066  -0.293  -0.195  -0.047   0.031  -0.045 
+  5.444   0.543   0.404   0.229   0.051  -0.048   0.145   0.019  -0.087  -0.047  -0.035  -0.029  -0.236 
+  5.041   0.580   0.375   0.043   0.163   0.034  -0.002  -0.026   0.021   0.028  -0.182  -0.031  -0.094 
+  4.591   0.471   0.167   0.210   0.414   0.201   0.163   0.037  -0.195   0.043  -0.073  -0.193  -0.135 
+ 10.275   0.467   0.554   0.124   0.064  -0.047  -0.369  -0.209  -0.318  -0.293  -0.068  -0.198  -0.121 
+ 12.052   1.117   0.730  -0.031  -0.135  -0.132  -0.426  -0.125  -0.280  -0.446  -0.165  -0.323  -0.134 
+ 10.756   0.964   0.812   0.003  -0.113   0.035  -0.451  -0.181  -0.157  -0.181  -0.034  -0.248  -0.166 
+  9.270   0.534   0.792   0.054  -0.157  -0.072  -0.296  -0.074  -0.192   0.034  -0.075  -0.268  -0.164 
+  9.030   0.717   1.087  -0.634  -0.603  -0.323  -0.418  -0.155  -0.286  -0.041  -0.457  -0.121  -0.293 
+  9.908   0.497   1.128  -0.480  -0.765  -0.182  -0.509  -0.152  -0.165  -0.010  -0.535  -0.082  -0.292 
+ 10.238   0.365   1.120  -0.597  -0.994  -0.164  -0.173  -0.093  -0.189  -0.334  -0.319  -0.227  -0.255 
+ 11.283   0.273   0.362  -0.246  -0.890   0.012  -0.251  -0.313  -0.016  -0.527  -0.438  -0.236  -0.210 
+ 11.692   0.506  -0.099  -0.063  -0.513   0.252  -0.163  -0.806  -0.065  -0.300  -0.373  -0.108  -0.152 
+ 12.161   0.510  -0.560   0.619  -0.263  -0.062  -0.458  -0.621  -0.122  -0.208  -0.283  -0.175  -0.131 
+ 12.321   0.110  -0.324   0.987  -0.301  -0.401  -0.506  -0.252  -0.360  -0.183  -0.378  -0.150  -0.094 
+ 11.821  -0.130   0.066   0.948  -0.215  -0.585  -0.191  -0.214  -0.642   0.089  -0.546  -0.045  -0.343 
+ 11.531  -0.432   0.411   0.730  -0.098  -0.308  -0.314  -0.183  -0.572   0.110  -0.435  -0.153  -0.307 
+ 11.045  -0.317   0.268   1.031  -0.380  -0.165  -0.224  -0.180  -0.525  -0.014  -0.269  -0.204  -0.285 
+ 10.828  -0.355   0.409   0.861  -0.192  -0.232  -0.092  -0.199  -0.678   0.038  -0.292  -0.150  -0.136 
+ 11.215  -0.641   0.438   0.850  -0.189  -0.331  -0.203   0.012  -0.647   0.123  -0.370  -0.149  -0.148 
+ 10.825  -0.468  -0.029   1.060  -0.054  -0.453  -0.203   0.096  -0.813   0.266  -0.288  -0.164  -0.239 
+  8.779   0.016  -0.042   0.789   0.052  -0.373  -0.063   0.476  -0.764   0.081  -0.425  -0.239  -0.290 
+  5.929   0.762   0.287   0.377  -0.112   0.033   0.253   0.191  -0.377  -0.018  -0.257  -0.164  -0.060 
+  5.711   0.694   0.129   0.566  -0.178  -0.278   0.265   0.043  -0.342   0.148  -0.073  -0.240  -0.127 
+  5.127   0.531   0.137   0.529   0.112  -0.157   0.110   0.025  -0.446   0.165  -0.147  -0.040  -0.040 
+  4.736   0.344  -0.050   0.376   0.048  -0.139  -0.023  -0.112  -0.432   0.015  -0.166  -0.007  -0.067 
+  4.006   0.321  -0.253   0.218   0.073  -0.084   0.045  -0.117  -0.408   0.123   0.015   0.132  -0.106 
+  7.082  -0.575   0.019   0.161   0.041   0.017  -0.074  -0.044  -0.124  -0.155  -0.077  -0.021  -0.110 
+ 12.746   0.859   0.178  -0.052  -0.231  -0.334  -0.342  -0.081   0.029  -0.160  -0.243  -0.188  -0.359 
+ 13.085   1.134   0.200   0.131  -0.218  -0.278  -0.354  -0.145   0.036  -0.219  -0.278  -0.134  -0.308 
+ 11.496   0.753   0.743   0.217  -0.239  -0.195  -0.201  -0.010  -0.037  -0.221  -0.308  -0.065  -0.323 
+ 10.007   0.036   0.666   0.416   0.012  -0.055   0.004  -0.010  -0.016  -0.179  -0.120   0.008  -0.248 
+  8.808  -0.438   0.497   0.174  -0.088   0.081  -0.026   0.079  -0.083  -0.172  -0.154  -0.060  -0.176 
+  8.432  -0.820   0.415   0.261   0.138  -0.243  -0.243  -0.084   0.072  -0.107  -0.242  -0.081  -0.038 
+  9.211  -0.506   0.248   0.199   0.015  -0.129  -0.125   0.019  -0.018  -0.204  -0.271  -0.064  -0.026 
+ 10.402  -0.288   0.188   0.116  -0.021  -0.177  -0.101   0.025   0.104  -0.390  -0.310  -0.018  -0.093 
+  9.486  -0.437   0.321   0.079  -0.048  -0.214  -0.275  -0.127   0.042  -0.039  -0.339   0.067  -0.216 
+ 10.450  -0.062  -0.144   0.317  -0.426  -0.468  -0.455  -0.206  -0.105   0.135  -0.322   0.044  -0.161 
+ 12.103   0.316  -0.467   0.010  -0.456  -0.376  -0.722   0.169  -0.055   0.183  -0.456   0.244  -0.226 
+ 12.300   0.347  -0.355  -0.059  -0.547  -0.331  -0.995   0.367   0.051   0.111  -0.250   0.307  -0.348 
+ 12.170   0.214  -0.225   0.246  -0.844  -0.151  -0.770   0.294  -0.013   0.030  -0.124   0.240  -0.444 
+ 12.464   0.153  -0.113   0.030  -0.638  -0.180  -0.826   0.485  -0.263   0.092  -0.097   0.175  -0.507 
+ 12.623  -0.091  -0.025   0.251  -0.690  -0.265  -0.590   0.356  -0.360   0.179  -0.012  -0.042  -0.396 
+ 12.333  -0.227   0.226   0.267  -0.818  -0.187  -0.408   0.130  -0.272   0.179   0.001  -0.148  -0.298 
+ 11.705  -0.262   0.304   0.291  -0.833  -0.188  -0.204  -0.087  -0.154   0.248  -0.137  -0.160  -0.078 
+ 11.118  -0.112   0.372  -0.040  -0.293  -0.367  -0.217  -0.004  -0.074   0.009  -0.148  -0.212   0.007 
+ 10.723   0.217   0.325  -0.165   0.073  -0.557  -0.219   0.148  -0.223   0.022  -0.144  -0.284   0.063 
+ 10.647   0.372   0.283  -0.221   0.107  -0.580  -0.248   0.254  -0.404   0.150  -0.196  -0.301   0.047 
+ 10.440   0.372   0.315  -0.219   0.192  -0.610  -0.174   0.245  -0.482   0.156  -0.280  -0.293   0.080 
+  9.859   0.384   0.413  -0.085  -0.061  -0.734   0.150   0.109  -0.422   0.121  -0.242  -0.377   0.121 
+  9.427   0.275   0.408   0.128   0.015  -0.902   0.085   0.124  -0.335  -0.017  -0.244  -0.340   0.141 
+  9.541   0.340  -0.049   0.412  -0.086  -0.701  -0.224   0.135  -0.145   0.119  -0.138  -0.366   0.115 
+ 10.135   0.279  -0.321   0.185   0.260  -0.529  -0.453  -0.232  -0.131   0.121  -0.228  -0.294   0.062 
+ 10.325  -0.096  -0.075  -0.036   0.194  -0.613  -0.414  -0.152   0.116  -0.027  -0.290  -0.150   0.023 
+  9.650  -0.747   0.310  -0.056   0.057  -0.523  -0.213  -0.034   0.078  -0.173  -0.208  -0.118   0.067 
+  9.240  -1.212   0.327  -0.012   0.140  -0.282  -0.289  -0.217  -0.069  -0.152  -0.164  -0.010   0.096 
+  9.496  -1.173   0.138  -0.444   0.186  -0.250  -0.159  -0.078  -0.083  -0.136  -0.162  -0.024  -0.118 
+  9.556  -1.479   0.156  -0.400   0.147  -0.204  -0.131  -0.059  -0.047  -0.008  -0.119  -0.107  -0.163 
+  9.990  -1.559  -0.027  -0.461   0.159  -0.260  -0.072  -0.059   0.008  -0.021  -0.088  -0.075  -0.049 
+ 10.594  -1.248   0.211  -0.078   0.219  -0.277  -0.309  -0.172   0.069  -0.088  -0.175  -0.040  -0.103 
+ 11.538  -0.551   0.297  -0.117  -0.043  -0.543  -0.366  -0.374  -0.167   0.094  -0.257  -0.072  -0.184 
+ 11.986   0.391  -0.068  -0.142  -0.464  -0.604  -0.355  -0.441   0.042   0.014  -0.411   0.208  -0.074 
+ 12.331   0.760  -0.569  -0.187  -0.397  -0.569  -0.403  -0.366   0.121   0.140  -0.384   0.224  -0.093 
+ 13.091   0.407  -0.744  -0.191  -0.431  -0.481  -0.474  -0.061   0.120   0.032  -0.275   0.038  -0.074 
+ 13.413   0.176  -0.762  -0.132  -0.446  -0.616  -0.524   0.142   0.104   0.017  -0.335   0.142  -0.126 
+ 13.039   0.156  -0.556  -0.202  -0.575  -0.568  -0.547   0.293  -0.001   0.162  -0.467   0.192  -0.248 
+ 13.351   0.295  -0.704  -0.403  -0.540  -0.307  -0.770   0.230   0.172   0.049  -0.410   0.079  -0.239 
+ 13.397   0.339  -0.838  -0.447  -0.428  -0.435  -0.661   0.326   0.039  -0.003  -0.263  -0.078  -0.150 
+ 13.724   0.042  -0.914  -0.267  -0.546  -0.465  -0.467   0.256   0.034   0.123  -0.404  -0.082  -0.126 
+ 13.189   0.325  -0.897  -0.444  -0.534  -0.302  -0.677   0.315  -0.066   0.282  -0.455  -0.090  -0.144 
+ 13.655   0.112  -1.024  -0.300  -0.543  -0.496  -0.469   0.269   0.022   0.197  -0.441  -0.135  -0.149 
+ 13.423   0.237  -0.982  -0.324  -0.603  -0.398  -0.494   0.285  -0.080   0.257  -0.400  -0.208  -0.139 
+ 13.769   0.202  -0.995  -0.362  -0.539  -0.373  -0.511   0.312  -0.198   0.320  -0.419  -0.250  -0.091 
+ 13.621   0.176  -1.005  -0.352  -0.591  -0.266  -0.589   0.321  -0.136   0.230  -0.370  -0.255  -0.018 
+ 13.280   0.378  -1.097  -0.448  -0.487  -0.292  -0.564   0.362  -0.139   0.232  -0.427  -0.220  -0.040 
+ 13.165   0.340  -0.983  -0.650  -0.425  -0.348  -0.428   0.283  -0.140   0.310  -0.414  -0.397  -0.021 
+ 13.357   0.425  -1.170  -0.586  -0.384  -0.272  -0.559   0.310  -0.170   0.383  -0.438  -0.456   0.007 
+ 13.367   0.559  -1.215  -0.663  -0.339  -0.112  -0.588   0.176  -0.202   0.449  -0.418  -0.447  -0.027 
+ 13.318   0.665  -1.374  -0.534  -0.411  -0.252  -0.380  -0.004  -0.099   0.347  -0.300  -0.384  -0.152 
+ 12.812   0.701  -1.053  -0.814  -0.431  -0.131  -0.440   0.046  -0.199   0.413  -0.237  -0.458  -0.116 
+ 12.626   0.684  -0.899  -0.920  -0.476  -0.069  -0.476   0.031  -0.278   0.525  -0.202  -0.418  -0.181 
+ 12.848   0.710  -0.803  -0.823  -0.596  -0.045  -0.481  -0.010  -0.376   0.495  -0.082  -0.341  -0.228 
+ 12.497   0.903  -0.706  -0.967  -0.415  -0.075  -0.555   0.042  -0.385   0.324   0.049  -0.298  -0.217 
+ 12.039   0.854  -0.525  -0.958  -0.479  -0.116  -0.374  -0.125  -0.400   0.295   0.109  -0.209  -0.283 
+ 11.924   0.803  -0.553  -0.805  -0.569  -0.162  -0.392  -0.190  -0.454   0.344   0.178  -0.200  -0.288 
+ 12.190   0.725  -0.612  -0.558  -0.654  -0.119  -0.447  -0.213  -0.507   0.342   0.141  -0.198  -0.214 
+ 12.057   0.711  -0.525  -0.733  -0.445  -0.352  -0.403  -0.503  -0.306   0.177   0.058  -0.150  -0.173 
+ 10.171   0.700  -0.298  -0.766  -0.296  -0.363  -0.389  -0.673  -0.177   0.232   0.220  -0.072  -0.085 
+  9.989   0.782  -0.154  -0.884  -0.001  -0.298  -0.486  -0.721  -0.130   0.015   0.032  -0.077  -0.106 
+  6.991   0.464  -0.116  -0.510  -0.133  -0.539  -0.444  -0.701   0.006   0.499   0.170  -0.076  -0.115 
+  6.334   0.534  -0.366  -0.294  -0.158  -0.398  -0.407  -0.255   0.013   0.383  -0.011  -0.129  -0.173 
+  5.773   0.814  -0.365  -0.329  -0.323  -0.325  -0.284  -0.144   0.027   0.376   0.058  -0.080  -0.097 
+  5.233   0.611  -0.340  -0.400  -0.384  -0.338  -0.399  -0.093   0.133   0.278   0.071  -0.065  -0.060 
+  4.735   0.671  -0.205  -0.428  -0.282  -0.258  -0.450   0.033   0.204   0.323   0.003  -0.008  -0.151 
+  4.397   0.593  -0.135  -0.135  -0.438  -0.461  -0.510  -0.105  -0.011   0.300   0.011  -0.037  -0.181 
+  4.423   0.678  -0.305  -0.288  -0.199  -0.181  -0.284   0.044   0.160   0.241  -0.056   0.047  -0.084 
+  4.588   0.788  -0.183  -0.212  -0.211  -0.133  -0.335  -0.204  -0.032   0.315   0.011   0.066  -0.298 
+  4.323   0.410  -0.368  -0.213  -0.126  -0.068  -0.043  -0.221   0.037   0.268  -0.010   0.133  -0.343 
+  8.492  -0.407  -0.232  -0.462  -0.183  -0.266  -0.367  -0.174  -0.056  -0.044   0.009  -0.063  -0.171 
+  8.791  -0.352  -0.020  -0.405  -0.044  -0.278  -0.398  -0.205   0.011  -0.040   0.028  -0.079  -0.227 
+  7.791  -1.156   0.156  -0.324   0.109  -0.214  -0.202  -0.186  -0.105   0.005   0.054  -0.218  -0.049 
+  8.919  -1.667  -0.171  -0.370   0.293  -0.136   0.057  -0.056  -0.065  -0.153  -0.085  -0.060   0.024 
+  9.738  -1.547  -0.258  -0.313   0.135  -0.217  -0.097  -0.044   0.048   0.051  -0.011  -0.011   0.045 
+  9.997  -1.382  -0.077  -0.299   0.106  -0.239  -0.239  -0.250  -0.082  -0.158  -0.081  -0.012   0.001 
+ 10.140  -1.330  -0.039  -0.275   0.215  -0.187   0.004  -0.121  -0.052  -0.158  -0.204  -0.123  -0.107 
+ 10.196  -1.112   0.101  -0.461   0.096  -0.296  -0.179   0.054  -0.092  -0.099  -0.151   0.010  -0.148 
+ 10.168  -1.238  -0.022  -0.379   0.018  -0.290  -0.240  -0.017   0.135   0.053  -0.185  -0.006   0.036 
+ 10.147  -1.246  -0.082  -0.443  -0.043  -0.334  -0.193  -0.072   0.070   0.136  -0.334   0.073  -0.120 
+ 10.342  -0.275   0.432  -0.255  -0.174  -0.510  -0.522  -0.463   0.008   0.096  -0.384  -0.085  -0.071 
+ 10.970   0.451   0.197  -0.406  -0.322  -0.202  -0.567  -0.776   0.115  -0.014  -0.211   0.075  -0.042 
+ 11.530   0.471   0.143  -0.499  -0.521   0.078  -0.762  -0.785   0.044   0.269  -0.403   0.189  -0.140 
+ 12.201   0.332   0.089  -0.435  -0.484  -0.187  -0.663  -0.623   0.031   0.353  -0.494   0.127  -0.114 
+ 12.477   0.161  -0.104  -0.415  -0.413  -0.304  -0.631  -0.561   0.160   0.241  -0.414   0.073  -0.143 
+ 12.607  -0.020  -0.214  -0.374  -0.466  -0.458  -0.580  -0.463   0.233   0.218  -0.353   0.064  -0.074 
+ 12.560   0.043  -0.230  -0.323  -0.526  -0.421  -0.610  -0.383   0.184   0.291  -0.365   0.034  -0.070 
+ 12.728   0.073  -0.272  -0.280  -0.616  -0.315  -0.568  -0.354   0.165   0.273  -0.336  -0.145  -0.025 
+ 12.855   0.066  -0.552  -0.298  -0.539  -0.266  -0.536  -0.380   0.211   0.222  -0.323  -0.150  -0.032 
+ 11.920   0.387  -0.449  -0.515  -0.578  -0.097  -0.704  -0.319   0.234   0.292  -0.278  -0.107  -0.025 
+ 12.792   0.151  -0.622  -0.419  -0.546  -0.271  -0.557  -0.306   0.196   0.253  -0.240  -0.210  -0.008 
+ 12.717   0.316  -0.531  -0.467  -0.541  -0.252  -0.487  -0.369   0.188   0.259  -0.288  -0.289   0.033 
+ 12.149   0.669  -0.649  -0.472  -0.537  -0.134  -0.586  -0.267   0.105   0.228  -0.242  -0.256  -0.078 
+ 11.866   0.729  -0.684  -0.547  -0.504  -0.106  -0.590  -0.395   0.188   0.294  -0.250  -0.262  -0.014 
+ 12.407   0.554  -0.817  -0.422  -0.482  -0.230  -0.510  -0.441   0.218   0.252  -0.179  -0.274  -0.018 
+ 12.633   0.488  -0.752  -0.401  -0.521  -0.178  -0.514  -0.343   0.137   0.145  -0.134  -0.276  -0.032 
+ 12.511   0.487  -0.815  -0.280  -0.606  -0.207  -0.308  -0.384   0.113   0.160  -0.210  -0.211  -0.092 
+ 12.284   0.408  -0.961  -0.280  -0.613  -0.201  -0.183  -0.422   0.244   0.090  -0.117  -0.252  -0.063 
+ 12.434   0.179  -0.915  -0.286  -0.583  -0.217  -0.095  -0.433   0.307   0.039  -0.110  -0.257  -0.219 
+ 11.977   0.170  -0.742  -0.240  -0.392  -0.229  -0.193  -0.343   0.370   0.065  -0.024  -0.141  -0.283 
+ 11.485   0.324  -0.707  -0.265  -0.293  -0.123  -0.119  -0.551   0.348  -0.100   0.038  -0.144  -0.444 
+ 10.476   0.528  -0.595  -0.405  -0.163  -0.015  -0.099  -0.487   0.317  -0.144   0.057  -0.274  -0.494 
+  9.434   0.514  -0.431  -0.354  -0.172   0.040   0.002  -0.408   0.323  -0.157   0.139  -0.233  -0.464 
+  8.292   0.286  -0.253  -0.216  -0.052   0.056  -0.004  -0.274   0.230  -0.231  -0.097  -0.114  -0.343 
+  7.660  -0.093  -0.421  -0.500  -0.029   0.292   0.078   0.054   0.167  -0.032  -0.124  -0.253  -0.264 
+  6.829  -0.220  -0.096  -0.443  -0.017   0.124  -0.166  -0.038   0.291   0.045  -0.123  -0.157  -0.280 
+  6.105  -0.243  -0.226  -0.544  -0.130  -0.148  -0.133  -0.035  -0.088   0.080  -0.013  -0.100  -0.048 
+  5.625  -0.158   0.063  -0.290  -0.270  -0.252  -0.110  -0.082  -0.066   0.142  -0.151  -0.138   0.005 
+  5.430  -0.005  -0.249  -0.047  -0.035  -0.213  -0.318  -0.212  -0.073   0.135  -0.065   0.035  -0.146 
+  5.831  -0.252  -0.034  -0.133   0.205  -0.329  -0.387  -0.077  -0.005   0.267  -0.096  -0.024  -0.038 
+  5.551  -0.494  -0.258  -0.157   0.317  -0.146  -0.415  -0.144   0.170   0.262  -0.258  -0.034  -0.013 
+  5.219  -0.377  -0.287  -0.185   0.368  -0.131  -0.304   0.026   0.010   0.174  -0.167   0.001   0.034 
+  4.121  -0.039  -0.315  -0.008   0.068  -0.136  -0.079  -0.049  -0.046   0.191   0.024  -0.105  -0.004 
+  5.803  -0.389  -0.213  -0.020   0.018  -0.075  -0.301  -0.030   0.028  -0.025  -0.110  -0.080   0.071 
+  9.541  -0.630  -0.361  -0.113   0.029  -0.077  -0.456  -0.105   0.000  -0.133  -0.177  -0.120  -0.005 
+  7.334  -0.595  -0.246   0.042   0.154  -0.061  -0.469  -0.054   0.073  -0.164  -0.218  -0.130  -0.024 
+  7.256  -0.652  -0.232   0.216   0.228  -0.023  -0.260  -0.055  -0.117  -0.284  -0.502  -0.181   0.038 
+  7.696  -0.661  -0.394  -0.043   0.051  -0.049  -0.334  -0.060   0.047  -0.124  -0.201   0.046  -0.150 
+  7.960  -0.808  -0.497  -0.050   0.096  -0.168  -0.301  -0.130  -0.185  -0.153  -0.114   0.054  -0.069 
+  8.374  -0.976  -0.518   0.071   0.256  -0.127  -0.245  -0.023  -0.072   0.023  -0.331  -0.176  -0.111 
+  8.592  -1.097  -0.582  -0.037   0.015  -0.080  -0.210   0.103  -0.114  -0.103  -0.169   0.186   0.032 
+  8.835  -1.035  -0.647   0.029  -0.004  -0.220  -0.405  -0.042  -0.262  -0.254  -0.233   0.164  -0.061 
+  8.839  -1.057  -0.473   0.007   0.041  -0.338  -0.321  -0.041  -0.162  -0.175  -0.195   0.157  -0.084 
+  8.680  -1.109  -0.514   0.265   0.128  -0.324  -0.380  -0.076  -0.040  -0.248  -0.315   0.074  -0.159 
+  9.164  -0.951  -0.392  -0.033  -0.035  -0.305  -0.297   0.052  -0.058  -0.305  -0.118   0.111  -0.113 
+  9.296  -1.178  -0.564   0.028   0.016  -0.171  -0.211   0.047   0.003  -0.306  -0.172   0.156   0.049 
+  9.325  -1.117  -0.531  -0.072   0.041  -0.194  -0.256  -0.034  -0.010  -0.157  -0.125   0.244   0.083 
+  9.170  -0.938  -0.470  -0.032   0.040  -0.270  -0.395  -0.098  -0.103   0.074  -0.046   0.206  -0.155 
+  9.071  -0.903  -0.521  -0.102  -0.095  -0.228  -0.230   0.046  -0.072   0.127  -0.173   0.170  -0.185 
+  9.377  -0.826  -0.480  -0.110  -0.282  -0.355  -0.562  -0.027  -0.029   0.028  -0.130   0.169  -0.081 
+  9.534  -0.763  -0.250   0.000  -0.119  -0.466  -0.477  -0.114  -0.018  -0.120  -0.345   0.007  -0.108 
+  9.577  -0.827  -0.473   0.124  -0.232  -0.531  -0.469  -0.041   0.125  -0.064  -0.356  -0.005  -0.099 
+  9.489  -1.082  -0.487  -0.085  -0.379  -0.500  -0.554  -0.027  -0.033  -0.102  -0.255   0.044   0.135 
+  9.560  -0.996  -0.382  -0.240  -0.241  -0.304  -0.411   0.134  -0.043  -0.095  -0.202  -0.059  -0.033 
+  9.452  -0.877  -0.283  -0.281  -0.209  -0.222  -0.450   0.121   0.130   0.110  -0.208  -0.076  -0.048 
+  9.609  -0.976  -0.374  -0.133  -0.129  -0.392  -0.532  -0.018   0.156  -0.179  -0.219   0.065  -0.068 
+  9.722  -0.822  -0.455  -0.269  -0.070  -0.396  -0.482   0.001   0.047  -0.147  -0.187   0.112  -0.221 
+ 10.282  -0.682  -0.321  -0.210  -0.161  -0.222  -0.432   0.232   0.040   0.113  -0.261   0.044  -0.058 
+ 10.203  -0.915  -0.388  -0.091  -0.126  -0.360  -0.407   0.281   0.027   0.059  -0.231  -0.053  -0.114 
+  9.987  -1.038  -0.378  -0.131  -0.033  -0.657  -0.717   0.076  -0.131  -0.128  -0.247   0.107  -0.242 
+  9.771  -1.230  -0.301  -0.129  -0.146  -0.518  -0.582   0.095   0.006  -0.014  -0.211   0.239  -0.060 
+  9.511  -0.978  -0.373  -0.001  -0.114  -0.566  -0.602  -0.004  -0.007   0.044  -0.094   0.261  -0.040 
+  9.594  -0.623  -0.337  -0.030  -0.081  -0.495  -0.625   0.040  -0.237  -0.060  -0.088   0.311  -0.057 
+  9.299  -0.720  -0.486  -0.061   0.038  -0.570  -0.643  -0.112  -0.143  -0.027   0.014   0.482  -0.005 
+  9.218  -0.920  -0.219  -0.022   0.083  -0.622  -0.673  -0.193  -0.084  -0.044  -0.189   0.371   0.046 
+  9.259  -0.801  -0.081   0.127   0.107  -0.708  -0.716  -0.071  -0.164  -0.020  -0.086   0.265   0.045 
+  9.458  -0.712  -0.122  -0.067  -0.044  -0.551  -0.574  -0.052  -0.202  -0.012  -0.232   0.252   0.162 
+  9.138  -0.735  -0.014  -0.020   0.104  -0.577  -0.703   0.043  -0.283  -0.175  -0.208   0.247   0.111 
+  8.993  -0.591  -0.305  -0.018   0.099  -0.316  -0.637   0.011  -0.310  -0.052  -0.285   0.140   0.072 
+  9.131  -0.488  -0.222  -0.093   0.111  -0.184  -0.618  -0.127  -0.080   0.075  -0.046   0.283  -0.034 
+  9.084  -0.516  -0.014   0.009   0.204  -0.121  -0.481  -0.141  -0.060  -0.065  -0.231   0.178  -0.054 
+  8.692  -0.621  -0.099  -0.073   0.276  -0.438  -0.709  -0.101  -0.193  -0.210  -0.106   0.190   0.086 
+  8.247  -0.636  -0.040   0.004   0.280  -0.504  -0.555  -0.187  -0.139  -0.044  -0.227   0.178  -0.045 
+  8.536  -0.543  -0.122   0.038   0.376  -0.424  -0.405  -0.005  -0.079  -0.270  -0.328   0.220  -0.005 
+  8.373  -0.448  -0.291   0.087   0.229  -0.245  -0.383   0.044   0.046  -0.130  -0.300   0.348  -0.036 
+  8.137  -0.339  -0.112   0.210   0.185  -0.122  -0.381   0.067   0.050  -0.027  -0.150   0.188  -0.179 
+  7.827  -0.388  -0.310   0.127   0.189  -0.112  -0.428  -0.153  -0.138  -0.176  -0.230   0.156   0.080 
+  7.305  -0.149  -0.273   0.289   0.280  -0.261  -0.365  -0.065  -0.064  -0.380  -0.240   0.144  -0.013 
+  6.750  -0.393  -0.277   0.033   0.438  -0.308  -0.400   0.126  -0.086  -0.320  -0.113   0.297   0.145 
+  9.175   1.149   0.010  -0.013  -0.205  -0.601  -0.193  -0.114  -0.234  -0.078  -0.230  -0.079  -0.103 
+ 10.258   1.463   0.016   0.100  -0.352  -0.678  -0.155  -0.265  -0.199  -0.101  -0.203  -0.108  -0.151 
+  7.877   1.304   0.321  -0.197  -0.556  -0.778  -0.360  -0.219  -0.126  -0.182  -0.269   0.075   0.090 
+  7.484   0.997   0.512  -0.012  -0.511  -0.459  -0.289   0.094   0.078  -0.085  -0.045  -0.034  -0.174 
+  6.991   0.854   0.574   0.055  -0.389  -0.337  -0.156   0.002  -0.151  -0.248  -0.050   0.047  -0.145 
+  5.940   0.404   0.400   0.132  -0.173  -0.384  -0.303  -0.088   0.068  -0.012  -0.011   0.022  -0.132 
+  5.413   0.533   0.156   0.015  -0.031  -0.060  -0.200   0.013  -0.170  -0.115  -0.081  -0.060  -0.161 
+  5.178   0.402  -0.063   0.184  -0.024  -0.011  -0.151   0.081  -0.001  -0.018  -0.157  -0.172  -0.384 
+  5.414   0.485   0.090   0.228   0.060  -0.106  -0.173   0.017  -0.264   0.060  -0.097  -0.031  -0.261 
+  5.287   0.242  -0.051   0.045  -0.047  -0.123  -0.109   0.116  -0.165  -0.112  -0.102   0.111  -0.236 
+  5.117   0.199  -0.036   0.161  -0.108  -0.218  -0.212   0.062  -0.183  -0.083  -0.053   0.109  -0.067 
+  5.107   0.299  -0.199  -0.017  -0.064  -0.170  -0.182  -0.003  -0.068  -0.226  -0.075   0.043  -0.045 
+  5.620   0.659   0.027   0.031  -0.067  -0.326  -0.289  -0.042  -0.016  -0.075  -0.087  -0.009   0.090 
+  5.658   0.699   0.045   0.145  -0.188  -0.425  -0.360  -0.150  -0.043  -0.010  -0.192  -0.072  -0.120 
+  5.799   0.647  -0.029   0.066  -0.044  -0.275  -0.326  -0.030  -0.116  -0.035  -0.188   0.103  -0.071 
+  8.352   1.151   0.117  -0.346  -0.006  -0.067  -0.440  -0.204  -0.225   0.053  -0.232  -0.004  -0.015 
+  7.499   1.001   0.250   0.042  -0.061  -0.056  -0.203  -0.264  -0.133   0.107  -0.200  -0.140  -0.164 
+  6.329   0.165   0.131  -0.010  -0.295  -0.235  -0.342  -0.243  -0.154   0.009  -0.102  -0.190  -0.185 
+  7.384  -0.085   0.050  -0.026  -0.280  -0.270  -0.375  -0.249  -0.176  -0.086  -0.187  -0.179  -0.109 
+  8.004  -0.159   0.141   0.077  -0.238  -0.143  -0.342  -0.168  -0.138  -0.106  -0.141  -0.174  -0.072 
+  7.600  -0.026  -0.010  -0.022  -0.163  -0.284  -0.334  -0.208  -0.166   0.177  -0.039   0.001  -0.053 
+  7.698   0.045   0.171  -0.039  -0.224  -0.336  -0.418  -0.424  -0.229  -0.223  -0.063   0.154  -0.087 
+  8.693   0.141   0.476   0.192  -0.258  -0.261  -0.436  -0.302  -0.247  -0.144  -0.123  -0.075  -0.080 
+  8.741  -0.195   0.318   0.067  -0.248   0.044  -0.368  -0.274  -0.048  -0.190  -0.177  -0.073  -0.209 
+  8.898   0.036   0.279   0.047  -0.033  -0.043  -0.390  -0.306   0.026  -0.032  -0.254  -0.235  -0.095 
+  8.409   0.427   0.018   0.007   0.080  -0.010  -0.435  -0.351  -0.022  -0.241  -0.365  -0.106  -0.018 
+  7.230   0.633  -0.081   0.002   0.115  -0.016  -0.282  -0.366  -0.220  -0.011  -0.413  -0.190  -0.076 
+  6.609   0.846   0.116   0.040   0.156   0.093   0.032  -0.128  -0.177  -0.116  -0.330  -0.351  -0.219 
+  5.091   0.069   0.088   0.210   0.237   0.021   0.029  -0.077  -0.036  -0.069  -0.170  -0.119  -0.125 
+  4.695  -0.177  -0.013   0.195   0.112   0.175  -0.192   0.009  -0.191  -0.181  -0.033  -0.269  -0.103 
+  4.859  -0.055  -0.070   0.146  -0.037   0.047  -0.065   0.034  -0.126  -0.128  -0.094  -0.174  -0.010 
+  4.325  -0.047  -0.100   0.004   0.161  -0.043  -0.084   0.074  -0.203  -0.053  -0.124  -0.099  -0.045 
+  4.654   0.434  -0.070   0.325  -0.064  -0.017  -0.097   0.013  -0.114  -0.050  -0.141  -0.008  -0.056 
+  4.107   0.179  -0.053   0.364  -0.105   0.047  -0.035  -0.039  -0.093  -0.056  -0.317   0.014  -0.040 
+  4.022   0.141   0.012   0.216   0.075   0.151   0.006  -0.026  -0.104  -0.109  -0.215   0.217   0.008 
+  3.781  -0.000   0.078   0.226   0.105   0.057  -0.036  -0.038   0.135   0.126  -0.079   0.142   0.014 
+  3.897   0.178   0.027   0.109   0.028   0.032  -0.091   0.073  -0.113   0.090  -0.184  -0.075  -0.083 
+  4.095   0.365  -0.256  -0.081  -0.077   0.129  -0.131  -0.084   0.005   0.063  -0.087   0.058  -0.028 
+  4.173   0.161  -0.282   0.018  -0.071   0.135  -0.088  -0.034  -0.171  -0.053   0.029   0.076  -0.099 
+  4.450   0.345  -0.434  -0.109   0.083  -0.147  -0.261   0.064  -0.072  -0.141  -0.098   0.031  -0.144 
+  5.043   0.392  -0.308  -0.024   0.077  -0.167  -0.298   0.169  -0.022  -0.088  -0.155   0.025   0.029 
+  5.029   0.262  -0.484   0.054   0.231  -0.143  -0.426   0.087  -0.047  -0.017   0.023   0.111  -0.066 
+  5.093   0.146  -0.461  -0.024   0.159  -0.279  -0.313   0.025  -0.033  -0.084  -0.042   0.213   0.069 
+  5.738   0.143  -0.381  -0.024   0.019  -0.372  -0.341   0.252   0.074  -0.126  -0.098   0.088  -0.109 
+  6.031   0.128  -0.416   0.117   0.281  -0.302  -0.309   0.166  -0.026  -0.181  -0.111   0.056  -0.078 
+  6.156   0.002  -0.452   0.126   0.253  -0.330  -0.364   0.170   0.081  -0.165  -0.132   0.173  -0.098 
+  6.160  -0.120  -0.504  -0.027   0.090  -0.241  -0.407   0.221  -0.011  -0.176   0.003  -0.008  -0.021 
+  5.976  -0.118  -0.379   0.107   0.223  -0.469  -0.461   0.151   0.011  -0.279  -0.225   0.069   0.013 
+  6.072  -0.335  -0.612   0.070   0.319  -0.439  -0.474   0.115  -0.035  -0.182   0.157   0.209  -0.079 
+  5.742  -0.542  -0.498   0.145   0.244  -0.366  -0.321   0.038   0.031  -0.094   0.163   0.132  -0.011 
+  5.951  -0.556  -0.412   0.092   0.363  -0.197  -0.315   0.071  -0.043  -0.216   0.099   0.035  -0.078 
+  6.069  -0.468  -0.533   0.038   0.341  -0.284  -0.409   0.247   0.139  -0.328   0.075   0.253  -0.076 
+  6.154  -0.445  -0.652   0.090   0.165  -0.303  -0.297   0.196   0.054  -0.345   0.127   0.155  -0.043 
+  6.124  -0.465  -0.441   0.068   0.453  -0.340  -0.231   0.239  -0.012  -0.226   0.016   0.122  -0.104 
+  6.247  -0.551  -0.628   0.068   0.192  -0.082  -0.314   0.382   0.254  -0.088   0.041  -0.114  -0.138 
+  6.467  -0.360  -0.507  -0.010   0.074  -0.264  -0.355   0.354   0.197  -0.092   0.075  -0.003  -0.116 
+  6.161  -0.489  -0.613   0.075   0.244  -0.036  -0.288   0.011   0.153  -0.193  -0.129   0.019  -0.027 
+  6.469  -0.297  -0.434   0.223   0.320  -0.059  -0.247   0.296  -0.022  -0.262   0.034  -0.048  -0.146 
+  6.458  -0.312  -0.454   0.043   0.297  -0.198  -0.444   0.080   0.082  -0.236  -0.014  -0.013  -0.099 
+  6.248  -0.325  -0.313   0.129   0.174  -0.472  -0.357   0.147   0.169  -0.316  -0.044  -0.010   0.046 
+  6.032  -0.141  -0.303   0.398   0.239  -0.377  -0.335   0.126   0.083  -0.384  -0.154   0.131  -0.120 
+  6.321  -0.223  -0.428   0.322   0.261  -0.270  -0.424   0.142   0.026  -0.416  -0.164   0.105  -0.061 
+  6.286  -0.251  -0.407   0.204   0.183  -0.352  -0.498   0.247   0.242  -0.124  -0.116  -0.006  -0.205 
+  6.445  -0.122  -0.311   0.168   0.091  -0.350  -0.463   0.070   0.092  -0.229   0.008  -0.024   0.036 
+  6.646   0.376   0.060   0.511   0.441  -0.243  -0.685   0.051   0.015  -0.170   0.183  -0.000  -0.124 
+  6.427   0.164   0.039   0.491   0.347  -0.094  -0.509   0.016   0.034   0.055   0.039   0.042  -0.043 
+  6.292  -0.101  -0.338   0.389   0.170  -0.430  -0.328   0.225   0.095  -0.350   0.001   0.078  -0.162 
+  6.287  -0.109  -0.332   0.083   0.100  -0.455  -0.223   0.337   0.028  -0.404  -0.035   0.053  -0.014 
+  6.103  -0.213  -0.339   0.056  -0.025  -0.351  -0.275   0.186  -0.070  -0.345  -0.144  -0.076  -0.053 
+  5.898  -0.225  -0.502   0.057   0.213  -0.375  -0.418   0.259  -0.233  -0.368   0.103  -0.071  -0.037 
+  5.999  -0.140  -0.514  -0.003   0.189  -0.384  -0.497   0.188  -0.053  -0.252  -0.033   0.145  -0.009 
+  5.867  -0.083  -0.447   0.052   0.148  -0.277  -0.428  -0.040   0.048  -0.298  -0.097   0.207  -0.001 
+  5.766  -0.035  -0.385   0.050   0.009  -0.335  -0.445   0.068   0.035  -0.161  -0.010   0.048  -0.091 
+  5.495  -0.021  -0.309   0.149  -0.133  -0.285  -0.440   0.140   0.128  -0.197  -0.007   0.096   0.012 
+  5.540  -0.051  -0.246  -0.027  -0.224  -0.153  -0.272   0.026  -0.093  -0.219  -0.227   0.078   0.116 
+  5.940   0.027  -0.278  -0.032  -0.117  -0.168  -0.413   0.107   0.139   0.027  -0.018   0.069  -0.108 
+  5.739   0.035  -0.181   0.088  -0.012  -0.071  -0.296   0.139   0.105  -0.130  -0.159  -0.040  -0.167 
+  5.491   0.025  -0.220   0.178  -0.001  -0.306  -0.562   0.065   0.154  -0.054  -0.029   0.098  -0.180 
+  5.191  -0.187  -0.245   0.322   0.253  -0.017  -0.364   0.064  -0.027  -0.354  -0.147   0.060   0.006 
+  5.069   0.056  -0.263   0.218   0.098  -0.015  -0.254   0.061  -0.081  -0.210  -0.124   0.143  -0.034 
+  4.940   0.340  -0.220   0.133   0.024  -0.036  -0.139   0.209   0.043  -0.045  -0.238   0.024  -0.261 
+  4.597   0.306  -0.258   0.143  -0.181   0.012  -0.312   0.085   0.137  -0.057  -0.166  -0.017  -0.120 
+  5.037   0.392  -0.062   0.232  -0.032  -0.337  -0.414   0.011   0.122   0.084  -0.144  -0.007  -0.087 
+  4.968  -0.015  -0.169   0.032  -0.036  -0.259  -0.407   0.007  -0.050  -0.047  -0.133   0.112   0.167 
+  5.575   0.022   0.188   0.071  -0.104   0.007  -0.218  -0.118  -0.178  -0.042  -0.214  -0.143  -0.002 
+  5.754  -0.442   0.066  -0.164  -0.243  -0.284  -0.350  -0.077   0.031  -0.142  -0.067   0.134   0.005 
+  5.727  -0.260   0.190   0.050  -0.275  -0.061  -0.311  -0.131  -0.191  -0.040   0.115   0.074  -0.024 
+  6.679  -0.356   0.047   0.016   0.009  -0.049  -0.264   0.029  -0.151  -0.073   0.017   0.227  -0.176 
+  7.557  -0.088   0.111  -0.167  -0.002  -0.026  -0.209   0.019  -0.110   0.004  -0.126  -0.056  -0.223 
+  6.734  -0.126   0.183  -0.084  -0.020  -0.161  -0.250  -0.148  -0.210   0.020  -0.236   0.154  -0.051 
+  5.999  -0.332   0.376   0.224  -0.128  -0.128  -0.393  -0.082  -0.178  -0.082  -0.032   0.070  -0.127 
+  5.651  -0.325   0.349   0.076  -0.025  -0.126  -0.221   0.046  -0.167  -0.175  -0.109  -0.032  -0.119 
+  6.123  -0.236   0.147  -0.175  -0.214  -0.268  -0.319  -0.097  -0.139  -0.058  -0.200   0.051  -0.032 
+  6.170  -0.191   0.086  -0.118  -0.186  -0.231  -0.274  -0.127  -0.070   0.007  -0.054   0.034  -0.137 
+  6.362  -0.208   0.496  -0.192  -0.018  -0.035  -0.189   0.056  -0.196  -0.146  -0.168   0.074  -0.289 
+  6.662  -0.409   0.138  -0.083   0.047  -0.097   0.013  -0.043  -0.235  -0.064  -0.222  -0.036  -0.145 
+  7.457  -0.129  -0.095  -0.195  -0.153  -0.199  -0.055  -0.269  -0.025  -0.048  -0.093  -0.149  -0.011 
+  6.775   0.358  -0.245  -0.539  -0.514  -0.243  -0.277  -0.192   0.011   0.119  -0.151  -0.057   0.029 
+  7.274   0.477  -0.257  -0.487  -0.307  -0.225  -0.540  -0.209   0.196   0.109  -0.402  -0.164   0.029 
+  7.894   0.328  -0.501  -0.266  -0.503  -0.516  -0.633  -0.418   0.183   0.207  -0.430  -0.127   0.088 
+  8.353   0.074  -0.535  -0.170  -0.501  -0.561  -0.605  -0.474   0.005   0.271   0.050  -0.115  -0.001 
+  8.126   0.194  -0.453  -0.052  -0.353  -0.443  -0.538  -0.472  -0.188   0.215  -0.273  -0.055   0.033 
+  7.720   0.221  -0.166   0.005  -0.129  -0.523  -0.611  -0.419  -0.095   0.227  -0.533   0.078   0.176 
+  7.127   0.291  -0.159   0.050  -0.218  -0.569  -0.424  -0.151  -0.065   0.174  -0.421   0.017   0.126 
+  6.596   0.264  -0.016   0.012  -0.121  -0.334  -0.279  -0.016   0.005   0.070  -0.335  -0.119   0.016 
+  6.076  -0.013  -0.213   0.004   0.016  -0.285  -0.220  -0.012   0.165   0.337  -0.157  -0.087   0.029 
+  5.949   0.224  -0.129   0.040  -0.135  -0.315  -0.144  -0.034   0.038   0.240  -0.211  -0.218  -0.075 
+  6.053   0.200  -0.035   0.097  -0.308  -0.339  -0.149  -0.119   0.014   0.167  -0.130  -0.169  -0.073 
+  5.987  -0.007  -0.071   0.147  -0.187  -0.253  -0.059  -0.215  -0.066   0.091  -0.255   0.091   0.065 
+  6.011  -0.106  -0.146   0.209  -0.459  -0.418  -0.198  -0.324   0.030  -0.038  -0.433   0.049  -0.078 
+  5.793  -0.385  -0.018   0.180  -0.306  -0.044   0.050  -0.194   0.179   0.114  -0.205  -0.080  -0.090 
+  6.030  -0.303   0.103   0.163  -0.422  -0.464  -0.048  -0.300  -0.100   0.088   0.039   0.169   0.030 
+  6.752  -0.141   0.215   0.385  -0.624  -0.485  -0.136  -0.411  -0.037   0.090  -0.055   0.183   0.015 
+  7.313  -0.192   0.218   0.287  -0.788  -0.596  -0.171  -0.374  -0.191  -0.026  -0.232   0.207   0.020 
+  7.532  -0.613  -0.095   0.321  -0.854  -0.609  -0.309  -0.427  -0.257  -0.019  -0.016   0.287   0.022 
+  7.843  -0.540   0.030   0.585  -0.768  -0.599  -0.239  -0.534  -0.414  -0.084  -0.014   0.254   0.005 
+  7.936  -0.581   0.102   0.805  -0.578  -0.530  -0.229  -0.643  -0.471  -0.085  -0.050   0.282   0.033 
+  8.180  -0.608   0.011   0.653  -0.422  -0.495  -0.399  -0.749  -0.412   0.057  -0.174   0.217  -0.061 
+  7.889  -0.509   0.162   0.583  -0.574  -0.428  -0.453  -0.670  -0.476  -0.080  -0.213   0.255  -0.113 
+  7.484  -0.263   0.230   0.516  -0.710  -0.582  -0.214  -0.586  -0.413  -0.101  -0.038   0.178  -0.135 
+  7.388   0.173   0.552   0.673  -0.360  -0.431  -0.054  -0.442  -0.371  -0.140  -0.186   0.063  -0.210 
+  7.300   0.553   0.640   0.622  -0.167  -0.290  -0.192  -0.312  -0.232  -0.063  -0.259   0.077  -0.297 
+  6.641   0.097   0.662   0.667  -0.125  -0.228  -0.030  -0.180  -0.399  -0.052  -0.170   0.003  -0.235 
+  6.490   0.009   0.386   0.474  -0.218  -0.261   0.031  -0.154  -0.463  -0.308  -0.286   0.048  -0.223 
+  6.363   0.167   0.291   0.363  -0.161  -0.094   0.158  -0.128  -0.220  -0.181  -0.243  -0.054  -0.192 
+  7.152   0.143   0.255   0.138  -0.214  -0.148  -0.152  -0.240  -0.180  -0.121  -0.140  -0.112  -0.132 
+  8.849   1.255   0.513   0.003  -0.224  -0.194  -0.186  -0.185  -0.353  -0.116  -0.267  -0.210  -0.172 
+  7.618   0.830   0.590   0.201  -0.140  -0.131  -0.057  -0.131  -0.278  -0.255  -0.184  -0.165  -0.319 
+  7.336   0.432   0.471  -0.167  -0.384  -0.193  -0.101  -0.099  -0.075  -0.150  -0.241  -0.056  -0.249 
+  7.159  -0.086   0.128  -0.067  -0.137  -0.082  -0.103  -0.034  -0.043  -0.101  -0.256  -0.087  -0.115 
+  7.351   0.349   0.156   0.296  -0.145  -0.195  -0.360  -0.232  -0.044  -0.154  -0.253   0.261  -0.182 
+  7.793   0.487   0.198   0.371  -0.275  -0.243  -0.413  -0.392  -0.098  -0.266  -0.479   0.244  -0.076 
+  8.118   0.661   0.051   0.182  -0.104  -0.138  -0.608  -0.349  -0.102  -0.083  -0.408   0.182   0.049 
+  8.136   0.563   0.117   0.021  -0.128  -0.102  -0.513  -0.370  -0.149  -0.201  -0.503   0.019   0.054 
+  7.971   0.863   0.173   0.044   0.007  -0.012  -0.430  -0.401  -0.098  -0.218  -0.428   0.026  -0.113 
+  7.117   0.756   0.019   0.173  -0.103  -0.237  -0.418  -0.234  -0.008  -0.239  -0.344   0.045  -0.094 
+  6.847   0.573   0.126   0.175  -0.126  -0.170  -0.337  -0.179  -0.122  -0.005  -0.250   0.015  -0.131 
+  6.592   0.782   0.111   0.062  -0.070  -0.068  -0.187  -0.215  -0.194  -0.048  -0.267  -0.187  -0.173 
+  6.655   0.808  -0.070   0.075  -0.006   0.036   0.008  -0.100  -0.135  -0.119  -0.268  -0.101  -0.096 
+  6.618   0.946   0.355   0.252  -0.018  -0.227  -0.151  -0.120  -0.041  -0.279  -0.444  -0.184  -0.233 
+  6.499   1.130   0.415   0.337  -0.045  -0.219   0.004  -0.105  -0.102  -0.185  -0.317  -0.148  -0.171 
+  6.759   0.605  -0.069   0.263  -0.248  -0.224  -0.291  -0.240  -0.085  -0.138  -0.100   0.142  -0.162 
+  7.888   0.415  -0.048   0.299  -0.420  -0.283  -0.368  -0.290  -0.210  -0.218  -0.045   0.439  -0.171 
+  8.335   0.107  -0.180   0.308  -0.743  -0.462  -0.410  -0.035  -0.001  -0.037  -0.123   0.603  -0.163 
+  8.685   0.025  -0.242   0.428  -0.551  -0.648  -0.497  -0.232  -0.156  -0.144  -0.080   0.587  -0.214 
+  8.807  -0.089  -0.273   0.463  -0.468  -0.811  -0.597  -0.067  -0.215  -0.194   0.044   0.624  -0.081 
+  8.894  -0.179  -0.152   0.432  -0.610  -0.694  -0.621  -0.290  -0.139  -0.258   0.043   0.596  -0.230 
+  8.788  -0.137  -0.124   0.227  -0.689  -0.632  -0.455  -0.117  -0.002  -0.161   0.020   0.521  -0.182 
+  8.499  -0.023  -0.104   0.054  -0.458  -0.653  -0.332  -0.064  -0.047  -0.103   0.075   0.351  -0.378 
+  8.082   0.017   0.110   0.221  -0.377  -0.693  -0.384  -0.034   0.005  -0.079   0.060   0.385  -0.155 
+  8.295   0.522   0.006   0.085  -0.345  -0.350  -0.301  -0.177  -0.116  -0.122   0.012   0.256  -0.287 
+  7.805   0.556   0.194   0.113  -0.236  -0.471  -0.416  -0.213  -0.165  -0.264  -0.108   0.304  -0.195 
+  7.538   0.407   0.282   0.134  -0.099  -0.280  -0.137  -0.047  -0.278  -0.287  -0.308   0.091  -0.196 
+  7.284   0.406   0.381   0.300  -0.298  -0.454  -0.278  -0.139  -0.198  -0.203  -0.114   0.001  -0.123 
+  7.166   0.281   0.398   0.139  -0.185  -0.414  -0.395  -0.095  -0.060  -0.299  -0.061   0.345  -0.113 
+  7.354   0.293   0.482   0.105  -0.170  -0.243  -0.171   0.046  -0.057  -0.241  -0.079   0.191  -0.148 
+  8.464   0.511  -0.079   0.238   0.136  -0.167  -0.005  -0.170  -0.175  -0.214  -0.234   0.051  -0.214 
+  8.956   0.577  -0.105   0.067   0.089  -0.098   0.112  -0.134  -0.106  -0.345  -0.347   0.056  -0.241 
+  7.536   0.422   0.509  -0.066  -0.211  -0.353  -0.061  -0.079  -0.299  -0.064  -0.151   0.020   0.018 
+  7.650   0.289   0.591  -0.030  -0.145  -0.207   0.142  -0.039  -0.241  -0.221  -0.230  -0.049  -0.224 
+  7.388   0.072   0.324   0.068  -0.065  -0.236  -0.089  -0.113  -0.143  -0.079  -0.227   0.151  -0.108 
+  7.211   0.006   0.421  -0.182   0.037  -0.114  -0.089  -0.042  -0.138  -0.162  -0.055  -0.090  -0.123 
+  7.279  -0.057   0.377  -0.038   0.199  -0.267  -0.127  -0.305  -0.179  -0.194  -0.181  -0.144  -0.054 
+  7.045  -0.223   0.150   0.160   0.063  -0.435  -0.146   0.068  -0.070  -0.184  -0.202  -0.084  -0.167 
+  9.655   0.145  -0.061   0.373  -0.137  -0.615   0.017  -0.094   0.144  -0.426  -0.113  -0.154  -0.269 
+ 10.259   0.563  -0.216   0.204  -0.011  -0.432   0.127  -0.112   0.148  -0.462  -0.214  -0.209  -0.261 
+  9.916   1.138  -0.297   0.005   0.203  -0.530   0.054   0.169  -0.207  -0.343  -0.314  -0.259  -0.264 
+ 10.244   1.123  -0.287   0.014   0.213  -0.499  -0.133   0.432  -0.296  -0.384  -0.303  -0.285  -0.295 
+ 11.297   1.094  -0.329  -0.075  -0.048  -0.457  -0.276   0.206  -0.186  -0.275  -0.139  -0.145  -0.195 
+ 12.395   1.545  -0.434  -0.373  -0.122  -0.525  -0.440   0.062  -0.163  -0.279  -0.127  -0.100  -0.183 
+ 12.240   2.313  -0.672  -0.756  -0.350  -0.536  -0.524   0.199  -0.251  -0.327  -0.231   0.134   0.103 
+ 12.943   2.392  -0.585  -0.888  -0.282  -0.360  -0.810   0.434  -0.366  -0.349  -0.330   0.090   0.120 
+ 12.881   2.618  -0.685  -0.968  -0.295  -0.259  -0.828   0.351  -0.289  -0.248  -0.340  -0.028   0.207 
+ 13.143   2.457  -0.628  -1.045  -0.287  -0.066  -0.855   0.163  -0.229  -0.186  -0.272  -0.114   0.256 
+ 13.567   2.293  -0.697  -1.029  -0.181  -0.110  -0.780   0.064  -0.333  -0.103  -0.274  -0.002   0.128 
+ 13.307   2.615  -0.981  -1.009  -0.022  -0.082  -0.912   0.068  -0.464   0.040  -0.253   0.021   0.049 
+ 13.403   2.376  -0.856  -0.985   0.060  -0.125  -0.873  -0.106  -0.367   0.046  -0.238   0.081  -0.086 
+ 13.436   2.193  -0.924  -0.813   0.178  -0.083  -0.966  -0.226  -0.275  -0.015  -0.166  -0.020  -0.137 
+ 12.950   2.104  -1.012  -0.534   0.256   0.117  -1.167  -0.291  -0.127  -0.119  -0.185  -0.103  -0.165 
+ 12.418   1.584  -0.838  -0.421   0.510   0.030  -1.180  -0.297   0.015  -0.299  -0.198  -0.166  -0.142 
+ 11.406   1.248  -0.761  -0.206   0.502   0.011  -1.076  -0.137   0.161  -0.255  -0.368  -0.196  -0.171 
+ 10.277   0.834  -0.665   0.294   0.651  -0.088  -0.888   0.034   0.164  -0.451  -0.490   0.027  -0.149 
+ 10.144   0.749  -0.481   0.450   0.613  -0.348  -1.005   0.199   0.019  -0.455  -0.338   0.112  -0.116 
+ 11.904   0.295  -0.534   0.405   0.478  -0.317  -0.840   0.283  -0.433  -0.564  -0.104   0.023  -0.137 
+ 13.489   0.410  -0.453   0.372   0.349  -0.458  -1.208   0.387  -0.511  -0.490  -0.117   0.030  -0.239 
+ 13.889   0.644  -0.658   0.274   0.027  -0.580  -1.195   0.407  -0.281  -0.267  -0.049   0.131  -0.255 
+ 13.318   1.073  -0.833   0.156   0.102  -0.558  -1.192   0.350  -0.121  -0.228  -0.167   0.174  -0.267 
+ 11.720   0.883  -0.609   0.334  -0.001  -0.620  -0.888   0.086   0.094   0.003  -0.389   0.185  -0.014 
+ 10.936   0.857  -0.390   0.305   0.118  -0.347  -0.433  -0.470   0.151   0.208  -0.789   0.106   0.056 
+ 10.856   0.873  -0.378   0.179   0.128  -0.263  -0.359  -0.579   0.125   0.285  -0.738   0.030  -0.052 
+ 10.776   0.966  -0.486   0.143   0.032  -0.298  -0.139  -0.572   0.068   0.217  -0.532   0.099  -0.216 
+ 10.780   0.916  -0.429   0.214  -0.198  -0.264  -0.031  -0.478  -0.127   0.172  -0.405   0.214  -0.241 
+ 11.502   0.727  -0.330  -0.049  -0.129  -0.260  -0.043  -0.406  -0.133   0.118  -0.406   0.232  -0.259 
+ 11.779   1.092  -0.612  -0.179  -0.078  -0.232  -0.187  -0.274  -0.103   0.055  -0.391   0.247  -0.138 
+ 11.810   1.219  -0.608  -0.010  -0.268  -0.425  -0.113  -0.180   0.006  -0.171  -0.222   0.065  -0.114 
+ 11.837   0.635  -0.490   0.274  -0.459  -0.489  -0.043  -0.097  -0.095   0.055  -0.272  -0.021   0.002 
+ 11.644   0.714  -0.485   0.223  -0.380  -0.600  -0.161  -0.076  -0.015   0.037  -0.153  -0.057   0.011 
+ 11.115   1.399  -0.779   0.156  -0.518  -0.763  -0.023  -0.125   0.148   0.029  -0.057  -0.173  -0.070 
+ 10.908   1.912  -1.058  -0.028  -0.479  -0.939   0.127  -0.077   0.074   0.083  -0.199  -0.067  -0.155 
+ 10.868   1.906  -1.112  -0.086  -0.545  -0.970   0.183   0.018   0.093   0.139  -0.274  -0.039  -0.182 
+ 10.895   1.754  -1.187   0.002  -0.460  -0.852   0.256   0.001   0.065   0.037  -0.263  -0.065  -0.078 
+ 10.978   1.892  -1.353   0.140  -0.593  -0.751   0.235   0.050   0.047  -0.032  -0.305  -0.046  -0.066 
+ 10.878   1.899  -1.309   0.020  -0.390  -0.780   0.150   0.135  -0.047  -0.101  -0.198  -0.085  -0.078 
+ 12.340   0.862  -0.655  -0.505  -0.560  -0.513   0.076   0.377  -0.411  -0.060   0.159  -0.225   0.056 
+ 12.526   0.844  -0.652  -0.604  -0.540  -0.378  -0.012   0.258  -0.379   0.057   0.173  -0.231  -0.110 
+ 11.893   0.993  -0.464  -0.802  -0.581  -0.232  -0.376  -0.049  -0.453   0.066  -0.038  -0.134   0.026 
+  9.518   0.907  -0.203  -0.363  -0.025  -0.293  -0.234  -0.082  -0.392   0.072  -0.038  -0.017   0.037 
+  9.580   0.169  -0.153  -0.248   0.218  -0.399  -0.115  -0.133  -0.073  -0.037  -0.143  -0.084  -0.133 
+ 10.673  -0.248  -0.537  -0.487   0.143  -0.473  -0.278  -0.151  -0.235  -0.046  -0.115   0.021   0.008 
+  9.455  -1.039   0.227  -0.387  -0.035  -0.315  -0.200  -0.281   0.009  -0.007  -0.103  -0.164   0.024 
+  9.868  -1.677   0.511  -0.253   0.222  -0.244  -0.329  -0.160  -0.068  -0.134  -0.131  -0.127  -0.103 
+ 10.079  -1.593   0.551  -0.455   0.277  -0.271  -0.143  -0.079  -0.030   0.057  -0.062   0.044  -0.106 
+  9.577  -1.740   0.318  -0.459   0.119  -0.285   0.070   0.082   0.059  -0.064  -0.289  -0.009   0.009 
+  8.071  -1.443   0.439  -0.708   0.041  -0.512  -0.267   0.156   0.037  -0.093  -0.229  -0.006  -0.212 
+  6.730  -0.791   0.644  -0.183  -0.036  -0.383   0.014   0.017  -0.031   0.096  -0.067  -0.175  -0.168 
+  6.076  -0.203   0.240  -0.146  -0.033  -0.290  -0.063  -0.108   0.066   0.062   0.069  -0.060  -0.090 
+  6.361  -0.399   0.171  -0.169   0.261  -0.224  -0.179  -0.176  -0.093   0.051  -0.139   0.073  -0.017 
+  9.514  -1.057  -0.077  -0.344   0.073  -0.322  -0.170   0.051  -0.295  -0.128  -0.293   0.087  -0.257 
+ 11.016  -1.129   0.084  -0.400   0.002  -0.417  -0.360  -0.046  -0.310  -0.166  -0.216   0.053  -0.079 
+ 10.720  -1.006   0.167  -0.216  -0.119  -0.320  -0.500  -0.081   0.211  -0.116  -0.098  -0.027   0.185 
+ 12.084   0.612  -0.449  -0.001  -0.176  -0.283  -0.518  -0.241  -0.070  -0.109  -0.186  -0.213   0.124 
+ 11.536   1.215  -0.905   0.219  -0.190  -0.420  -0.337  -0.443  -0.076  -0.008  -0.286   0.005  -0.034 
+ 10.706   1.046  -0.800   0.188  -0.103  -0.412  -0.192  -0.441  -0.130   0.007  -0.125  -0.072  -0.150 
+  9.599   0.652  -0.366   0.474   0.127  -0.360  -0.071  -0.317  -0.222  -0.043  -0.156  -0.114  -0.377 
+  9.645   0.659  -0.409   0.594   0.181  -0.363  -0.236  -0.365  -0.240   0.074  -0.122  -0.005  -0.422 
+  9.557   0.794  -0.539   0.597   0.229  -0.383  -0.263  -0.399  -0.205  -0.054  -0.026  -0.133  -0.348 
+  9.410   0.937  -0.578   0.508   0.239  -0.381  -0.238  -0.299  -0.249  -0.144   0.040  -0.233  -0.361 
+ 11.073   0.976  -0.851   0.035   0.268  -0.463  -0.552  -0.229  -0.122   0.023  -0.041  -0.327   0.007 
+ 11.842   0.998  -1.162   0.414  -0.072  -0.602  -0.691  -0.056  -0.027  -0.032  -0.210  -0.027   0.124 
+ 12.160   0.721  -0.888   0.391  -0.168  -0.820  -0.615   0.054  -0.110  -0.057  -0.141   0.130   0.027 
+ 12.459   0.503  -0.657   0.366  -0.249  -0.895  -0.512   0.093  -0.261  -0.042  -0.066   0.145  -0.113 
+ 12.435   0.546  -0.577   0.372  -0.263  -0.879  -0.414  -0.026  -0.335  -0.047  -0.069   0.135  -0.192 
+ 12.178   0.205  -0.161   0.476  -0.345  -0.690  -0.392  -0.055  -0.404  -0.140  -0.150   0.147  -0.233 
+ 11.061   0.123   0.096   0.445  -0.525  -0.675  -0.391  -0.113  -0.419  -0.206  -0.062   0.124  -0.206 
+ 10.571   0.192  -0.196   0.424  -0.303  -0.456  -0.212  -0.376  -0.328  -0.217  -0.146  -0.087  -0.011 
+  8.452   0.060  -0.411   0.309  -0.215  -0.453  -0.029  -0.266  -0.152  -0.063  -0.139  -0.084  -0.018 
+  6.252   0.005   0.097   0.154  -0.099  -0.519  -0.492  -0.131  -0.069   0.019  -0.086  -0.080  -0.221 
+  7.384  -0.384  -0.131   0.165  -0.102  -0.507  -0.189  -0.151  -0.120   0.119  -0.112   0.076   0.004 
+ 11.055  -0.984  -0.567   0.146  -0.059  -0.384  -0.164  -0.307  -0.212  -0.002  -0.190   0.042  -0.038 
+ 11.366  -0.584  -0.354   0.061  -0.147  -0.341  -0.341  -0.478  -0.269  -0.039  -0.261   0.105  -0.039 
+ 11.203   0.256   0.167   0.547  -0.311  -0.663  -0.478  -0.090  -0.529  -0.117  -0.223  -0.032  -0.165 
+ 12.458   0.528   0.022   0.188  -0.369  -0.512  -0.902   0.216  -0.683   0.018  -0.278   0.127  -0.143 
+ 12.429   0.898  -0.514   0.022  -0.064  -0.789  -0.877   0.232  -0.512   0.006  -0.246   0.194  -0.061 
+ 12.033   0.816  -0.482   0.037  -0.119  -0.845  -0.801   0.091  -0.302  -0.019  -0.263   0.268  -0.094 
+ 11.169   0.698  -0.219  -0.123  -0.094  -0.695  -0.830  -0.134  -0.310   0.121  -0.505   0.204   0.130 
+  8.906   0.783   0.143   0.076   0.071  -0.376  -0.298  -0.167  -0.242  -0.085  -0.224  -0.132  -0.040 
+  8.624   0.112   0.294   0.219  -0.093  -0.321  -0.353   0.121  -0.353  -0.141  -0.031  -0.114  -0.041 
+ 11.083  -0.345  -0.700  -0.096  -0.180  -0.618  -0.360   0.301  -0.396  -0.218   0.039   0.033  -0.088 
+ 11.921  -0.036  -0.479   0.132   0.006  -0.594  -0.472   0.263  -0.328  -0.220  -0.194   0.005  -0.147 
+ 11.583   0.311  -0.677  -0.112   0.317  -0.023  -0.420   0.286  -0.117  -0.143  -0.235  -0.089  -0.041 
+ 12.188  -0.526  -0.729  -0.357   0.125   0.211   0.017   0.105  -0.049  -0.177  -0.110  -0.122  -0.029 
+ 11.546  -0.333  -0.632  -0.382   0.091   0.083   0.057   0.108  -0.416  -0.201   0.098  -0.253   0.137 
+ 11.809   0.446  -0.296  -0.030   0.084   0.076   0.018   0.093  -0.461  -0.282  -0.291  -0.266  -0.010 
+ 12.049  -0.077  -0.456   0.060   0.097   0.303  -0.167   0.212  -0.462  -0.046   0.095  -0.573   0.054 
+ 12.188  -0.532  -0.795  -0.136  -0.351   0.239  -0.172   0.271  -0.447  -0.061   0.350  -0.527   0.158 
+ 11.579  -0.329  -0.528  -0.115  -0.212   0.296  -0.095   0.279  -0.524  -0.020   0.108  -0.537  -0.128 
+ 11.373   0.388  -0.425  -0.335  -0.197   0.256  -0.050   0.335  -0.629  -0.113  -0.256  -0.416  -0.249 
+ 11.384   1.145  -0.298  -0.321  -0.407  -0.099  -0.125   0.124  -0.479   0.089  -0.116  -0.270  -0.229 
+ 11.704   1.851  -0.638  -0.988  -0.648  -0.070  -0.249   0.151  -0.412  -0.112  -0.025  -0.087  -0.101 
+ 11.961   2.073  -1.194  -0.956  -0.295  -0.240  -0.677   0.575  -0.569  -0.216   0.235  -0.095  -0.296 
+ 11.896   2.007  -1.234  -0.958  -0.312  -0.189  -0.667   0.463  -0.580  -0.141   0.290  -0.079  -0.241 
+ 12.043   1.869  -1.176  -1.050  -0.299  -0.139  -0.736   0.351  -0.455  -0.120   0.241  -0.035  -0.180 
+ 12.256   1.888  -1.280  -1.015  -0.190  -0.091  -0.858   0.264  -0.360  -0.116   0.217  -0.147  -0.038 
+ 12.024   2.106  -1.368  -1.114   0.005  -0.079  -0.929   0.181  -0.313   0.026   0.022  -0.136   0.100 
+ 11.510   2.123  -1.319  -1.133   0.002  -0.011  -0.955   0.080  -0.316   0.108  -0.013  -0.035   0.003 
+ 11.644   1.822  -1.133  -1.278   0.039  -0.044  -0.994  -0.028  -0.174   0.118   0.012  -0.052  -0.016 
+ 11.805   1.913  -1.166  -1.195   0.003   0.061  -1.151  -0.083  -0.119   0.135  -0.037  -0.109   0.103 
+ 11.887   1.872  -1.242  -1.118   0.018   0.084  -1.112  -0.172  -0.087   0.101   0.008  -0.180   0.087 
+ 11.519   1.922  -1.323  -1.045   0.063  -0.004  -1.123  -0.121  -0.123   0.171  -0.026  -0.186   0.092 
+ 11.207   2.032  -1.447  -0.986   0.136  -0.072  -1.173  -0.195  -0.020   0.154  -0.000  -0.183   0.124 
+ 11.749   1.859  -1.472  -0.865   0.186  -0.177  -1.116  -0.297   0.045   0.097  -0.102  -0.138   0.092 
+ 11.911   1.659  -1.346  -0.776   0.175  -0.173  -1.214  -0.204   0.039   0.051  -0.133  -0.193   0.144 
+ 11.616   1.527  -1.299  -0.665   0.167  -0.156  -1.339  -0.073   0.108  -0.131  -0.053  -0.123   0.062 
+ 11.632   1.363  -1.236  -0.566   0.193  -0.193  -1.409  -0.077   0.064  -0.151  -0.096  -0.058   0.085 
+ 12.021   1.306  -1.191  -0.442   0.146  -0.142  -1.434  -0.048   0.046  -0.298  -0.054  -0.144   0.170 
+ 12.105   1.181  -1.169  -0.259   0.080  -0.078  -1.454   0.037   0.040  -0.417  -0.067  -0.139   0.105 
+ 11.883   0.971  -1.105  -0.062   0.175  -0.268  -1.306  -0.017   0.088  -0.510  -0.125  -0.031   0.049 
+ 11.715   0.867  -1.033  -0.024   0.260  -0.407  -1.283  -0.031   0.064  -0.624  -0.065  -0.035  -0.025 
+ 11.505   0.772  -0.894   0.133   0.268  -0.299  -1.209   0.110  -0.072  -0.584  -0.201   0.008  -0.170 
+  9.212   0.422  -0.779   0.376   0.554  -0.274  -0.902   0.364  -0.178  -0.401  -0.168   0.175  -0.252 
+  9.600  -0.449  -0.577   0.454   0.346  -0.252  -0.299   0.192  -0.194  -0.215  -0.207  -0.086  -0.190 
+  8.643  -0.213  -0.203   0.298   0.556  -0.348  -0.248   0.188  -0.134  -0.345  -0.074  -0.012  -0.025 
+  8.178  -0.202   0.135   0.174   0.443  -0.195  -0.499   0.181  -0.123  -0.265   0.051   0.003   0.024 
+ 10.043  -0.458  -0.380   0.273   0.020  -0.222  -0.251   0.000  -0.175  -0.129  -0.141  -0.047  -0.133 
+ 12.117  -0.439  -0.442  -0.271  -0.307  -0.480  -0.120  -0.028  -0.144  -0.257  -0.245  -0.055  -0.147 
+ 11.388  -0.361  -0.106   0.082  -0.270  -0.656  -0.206  -0.117   0.082  -0.375  -0.123  -0.123  -0.089 
+ 11.366  -0.415  -0.559   0.142   0.151  -0.337   0.055   0.138   0.148  -0.602  -0.144  -0.124  -0.142 
+ 11.111  -0.212  -1.014   0.226   0.102  -0.576  -0.016   0.190   0.033  -0.368  -0.085  -0.047  -0.070 
+ 11.276  -0.241  -0.946   0.202  -0.009  -0.355  -0.049   0.143  -0.039  -0.137  -0.050  -0.004  -0.001 
+ 11.297  -0.099  -0.907   0.010  -0.000  -0.344  -0.192   0.340   0.122  -0.191   0.085   0.133  -0.257 
+ 11.005  -0.437  -0.734  -0.012  -0.134  -0.252  -0.257   0.038   0.127  -0.301  -0.227   0.322  -0.261 
+ 10.398  -0.531  -0.570   0.284   0.140  -0.223  -0.212   0.123   0.138  -0.315  -0.395  -0.005  -0.205 
+  9.986  -0.196  -0.318   0.351   0.335   0.003  -0.185   0.273   0.123  -0.312  -0.446  -0.260  -0.334 
+  9.924  -0.590  -0.738   0.179   0.057  -0.087  -0.242   0.204  -0.157  -0.158  -0.185   0.034  -0.140 
+  9.982  -0.656  -0.784   0.095   0.236   0.015  -0.181   0.131   0.097  -0.226  -0.231  -0.039  -0.218 
+  9.377  -0.648  -0.427   0.117   0.391  -0.207  -0.254   0.175   0.002  -0.121  -0.254   0.191   0.011 
+  8.852  -0.535  -0.299   0.040   0.127  -0.217  -0.227   0.226  -0.060  -0.141  -0.101   0.277   0.011 
+  8.654  -0.474  -0.441   0.085   0.411  -0.108  -0.050   0.369   0.100  -0.256  -0.456   0.065  -0.035 
+  9.141  -0.263  -0.256   0.141   0.326  -0.425  -0.287   0.050   0.103  -0.136  -0.491   0.055  -0.054 
+  9.236   0.243   0.260   0.224  -0.110  -0.507  -0.468  -0.083   0.162  -0.044  -0.484   0.212  -0.240 
+  6.025   0.303   0.370   0.194  -0.140  -0.327  -0.415  -0.190   0.150   0.049  -0.300   0.208  -0.259 
+  5.825   0.722   0.298   0.124  -0.169  -0.175  -0.225   0.123  -0.110  -0.098  -0.189  -0.052  -0.079 
+  5.599   0.383   0.360  -0.160  -0.233  -0.086  -0.253   0.001   0.034   0.054  -0.127   0.030   0.109 
+  4.812  -0.006   0.113  -0.055  -0.058   0.097  -0.071   0.070  -0.082   0.087  -0.072  -0.221  -0.033 
+  4.782   0.069  -0.030   0.025  -0.039  -0.124  -0.241  -0.017   0.003   0.074   0.014  -0.095  -0.025 
+  4.525  -0.005  -0.001   0.050   0.014   0.044  -0.344  -0.090  -0.056   0.033   0.055   0.005  -0.052 
+  8.889   0.432  -0.993  -0.060  -0.325  -0.395  -0.217  -0.242   0.086  -0.091  -0.110  -0.117  -0.005 
+ 11.861   0.126  -0.902  -0.062  -0.305  -0.492  -0.262  -0.286   0.347  -0.100  -0.111  -0.075   0.011 
+ 12.307  -0.221  -0.720  -0.291   0.067  -0.301  -0.117  -0.166   0.285  -0.170  -0.274   0.063  -0.076 
+ 13.095  -0.400  -0.244  -0.110   0.107  -0.283  -0.129  -0.022  -0.203  -0.365  -0.305  -0.081  -0.106 
+ 13.774  -0.071  -0.170  -0.108   0.188  -0.504  -0.192   0.074  -0.205  -0.252  -0.279  -0.153  -0.318 
+ 12.786  -0.298  -0.222  -0.029   0.375  -0.198  -0.041  -0.104  -0.290  -0.016  -0.255   0.069  -0.215 
+ 12.376  -0.469  -0.665   0.009   0.383  -0.022  -0.046  -0.250  -0.257   0.052  -0.091   0.074  -0.215 
+ 12.305  -0.595  -1.029  -0.138   0.410  -0.158  -0.178  -0.096  -0.108   0.228  -0.026   0.012  -0.141 
+ 11.930  -0.902  -1.162  -0.268   0.053  -0.477  -0.340  -0.086   0.238   0.297   0.105   0.020  -0.171 
+ 11.874  -0.928  -1.055  -0.244   0.148  -0.506  -0.365   0.006   0.423   0.076   0.135   0.046  -0.192 
+ 11.560  -1.216  -1.025  -0.258   0.163  -0.446  -0.375  -0.120   0.417   0.135   0.131   0.205  -0.072 
+ 11.225  -0.970  -0.769  -0.185   0.192  -0.362  -0.463  -0.292   0.328   0.127  -0.054   0.015  -0.203 
+ 11.269  -0.845  -0.615  -0.067   0.312  -0.437  -0.374  -0.246   0.259   0.190   0.027  -0.128  -0.173 
+ 11.200  -0.933  -0.776  -0.172   0.167  -0.335  -0.343  -0.154   0.200   0.305   0.135  -0.228  -0.092 
+ 11.062  -1.189  -0.881  -0.259   0.118  -0.627  -0.310  -0.115   0.246   0.247   0.121  -0.060  -0.209 
+ 10.890  -1.063  -0.856  -0.107   0.177  -0.471  -0.163  -0.089   0.143   0.173   0.280  -0.137  -0.075 
+ 10.755  -1.333  -1.036  -0.417   0.206  -0.556  -0.199   0.016   0.152   0.207   0.225  -0.056   0.031 
+ 10.664  -1.154  -0.944  -0.346   0.261  -0.515  -0.237  -0.013   0.123   0.253   0.175  -0.051  -0.046 
+ 10.538  -1.232  -0.980  -0.456   0.086  -0.409  -0.175   0.003   0.012   0.337   0.256  -0.154  -0.029 
+ 10.693  -1.224  -0.902  -0.330   0.158  -0.617  -0.394  -0.257  -0.109   0.137   0.301  -0.126  -0.156 
+ 10.819  -1.177  -1.118  -0.252   0.252  -0.635  -0.392  -0.016  -0.072  -0.038   0.243   0.025  -0.364 
+ 10.681  -1.236  -1.099  -0.304   0.278  -0.716  -0.500  -0.033   0.041  -0.002   0.005  -0.006  -0.192 
+ 10.581  -1.010  -1.044  -0.382   0.230  -0.522  -0.319  -0.025   0.165  -0.061  -0.125  -0.008  -0.135 
+ 10.708  -0.916  -1.117  -0.261   0.188  -0.671  -0.194   0.096   0.167  -0.133  -0.215  -0.149  -0.054 
+ 10.444  -1.135  -1.079  -0.356  -0.136  -0.590  -0.186  -0.090   0.083  -0.072   0.011  -0.090  -0.065 
+ 10.394  -1.094  -0.990  -0.350   0.102  -0.446  -0.218  -0.130   0.177   0.095  -0.241  -0.176  -0.209 
+ 10.313  -0.968  -0.911  -0.290  -0.069  -0.505  -0.258  -0.033  -0.059  -0.179  -0.198  -0.136  -0.163 
+ 10.354  -0.932  -0.901  -0.172   0.089  -0.670  -0.288  -0.123  -0.059  -0.227  -0.152  -0.063  -0.120 
+ 10.251  -0.825  -0.891  -0.177   0.047  -0.593  -0.425  -0.121  -0.035  -0.209  -0.200  -0.013  -0.074 
+ 10.116  -0.743  -0.993  -0.259  -0.006  -0.504  -0.340  -0.218  -0.014  -0.195  -0.235  -0.075  -0.073 
+ 10.089  -0.750  -0.883  -0.203   0.067  -0.558  -0.106  -0.161  -0.115  -0.097  -0.095   0.014  -0.181 
+ 10.102  -0.629  -0.777  -0.250   0.029  -0.577  -0.146  -0.149  -0.024  -0.138  -0.185  -0.021  -0.156 
+ 10.065  -0.668  -0.737  -0.336   0.019  -0.584  -0.170  -0.126  -0.044  -0.272  -0.041  -0.056  -0.048 
+ 10.062  -0.653  -0.805  -0.357  -0.011  -0.634  -0.158  -0.252  -0.039  -0.157  -0.029  -0.073  -0.067 
+ 10.047  -0.589  -0.743  -0.307  -0.014  -0.627  -0.309  -0.117  -0.002  -0.019   0.024  -0.055  -0.087 
+  9.778  -0.881  -0.804  -0.402  -0.182  -0.537  -0.330  -0.025   0.066  -0.139  -0.127   0.126  -0.086 
+  9.800  -0.698  -0.601  -0.285  -0.007  -0.605  -0.278  -0.011   0.205  -0.266  -0.087   0.023  -0.095 
+ 10.305  -0.250  -0.220  -0.163   0.044  -0.392  -0.152  -0.090   0.006  -0.234  -0.167   0.054  -0.172 
+ 10.724   0.088  -0.203  -0.027   0.187  -0.331  -0.205   0.007   0.011  -0.330  -0.301   0.078  -0.089 
+ 10.006  -0.451  -0.653  -0.249   0.021  -0.437  -0.161   0.036   0.191  -0.279  -0.078   0.027  -0.123 
+  9.652  -0.647  -0.723  -0.299  -0.184  -0.549  -0.339  -0.124   0.134  -0.096  -0.039  -0.014  -0.116 
+  9.372  -0.588  -0.601  -0.357  -0.063  -0.552  -0.253   0.002   0.190  -0.077  -0.095   0.062  -0.196 
+  9.334  -0.782  -0.723  -0.454  -0.019  -0.449  -0.242   0.042   0.209   0.122  -0.002  -0.057  -0.106 
+  9.385  -0.644  -0.683  -0.488  -0.372  -0.436  -0.176   0.055   0.322   0.134   0.051  -0.084  -0.094 
+  9.465  -0.491  -0.595  -0.525  -0.355  -0.607  -0.276   0.013   0.388   0.086   0.065   0.050  -0.176 
+  9.237  -0.610  -0.688  -0.385  -0.204  -0.687  -0.398  -0.052   0.327   0.073   0.208   0.062  -0.178 
+  9.257  -0.481  -0.659  -0.525  -0.238  -0.587  -0.355   0.111   0.361   0.079   0.101   0.071  -0.146 
+  9.705  -0.028  -0.360  -0.212  -0.037  -0.298  -0.326   0.066   0.366   0.010   0.033   0.071  -0.266 
+  9.529  -0.137  -0.377  -0.124  -0.006  -0.327  -0.373  -0.039   0.337   0.045   0.080   0.158  -0.148 
+  9.374  -0.400  -0.650  -0.546  -0.181  -0.253  -0.236   0.066   0.289  -0.100  -0.077  -0.077  -0.092 
+  9.149  -0.498  -0.699  -0.458  -0.255  -0.231  -0.178   0.066   0.435  -0.030  -0.178  -0.096  -0.147 
+  9.293  -0.402  -0.587  -0.253  -0.124  -0.359  -0.356   0.039   0.266  -0.090  -0.169  -0.259  -0.125 
+  8.959  -0.605  -0.715  -0.347  -0.034  -0.318  -0.291   0.060   0.131  -0.013  -0.306  -0.350  -0.118 
+  9.117  -0.366  -0.506  -0.195   0.141  -0.147  -0.140   0.107   0.108  -0.038  -0.305  -0.320  -0.325 
+  9.882   0.133   0.014   0.154   0.192  -0.120  -0.225  -0.152  -0.118  -0.097  -0.139  -0.174  -0.091 
+  9.688  -0.058  -0.095  -0.032   0.136  -0.142  -0.202  -0.066   0.031  -0.017  -0.122  -0.185  -0.135 
+  9.779  -0.424  -0.525  -0.149   0.015  -0.125  -0.367  -0.114  -0.047  -0.062  -0.066   0.033  -0.159 
+  9.802  -0.366  -0.424  -0.251  -0.172  -0.277  -0.234  -0.221  -0.059  -0.050  -0.107   0.010  -0.029 
+ 10.207  -0.399  -0.129  -0.190  -0.074  -0.151  -0.168  -0.171  -0.159  -0.137  -0.112  -0.030  -0.096 
+ 10.652  -0.292  -0.181  -0.171  -0.132  -0.086  -0.377  -0.317  -0.173  -0.216  -0.183  -0.136  -0.205 
+ 10.597  -0.379  -0.359  -0.245  -0.128  -0.212  -0.304  -0.267  -0.047  -0.190  -0.229  -0.113  -0.108 
+ 10.270  -0.358  -0.277  -0.271  -0.198  -0.102  -0.255  -0.215   0.162   0.045  -0.309  -0.184  -0.097 
+ 10.180  -0.352  -0.333  -0.401  -0.048  -0.095  -0.245  -0.239   0.093  -0.084  -0.297  -0.140  -0.245 
+ 10.217  -0.444  -0.388  -0.386   0.020  -0.325  -0.370  -0.082  -0.046  -0.220  -0.255   0.030  -0.133 
+ 10.489  -0.455  -0.519  -0.163  -0.021   0.007  -0.173  -0.254   0.013  -0.242  -0.248  -0.097  -0.036 
+ 10.627  -0.509  -0.503  -0.483  -0.267  -0.195  -0.255  -0.227  -0.067  -0.335  -0.335  -0.171  -0.088 
+ 10.251  -0.739  -0.553  -0.545  -0.237  -0.246  -0.189  -0.063   0.134  -0.108  -0.193   0.002  -0.130 
+ 10.011  -0.368  -0.440  -0.329  -0.135  -0.339  -0.336  -0.188   0.133  -0.202  -0.305  -0.018  -0.068 
+ 10.024  -0.473  -0.298  -0.402  -0.131  -0.276  -0.309  -0.246   0.195   0.061  -0.168  -0.001  -0.021 
+ 10.077  -0.358  -0.097  -0.368  -0.276  -0.458  -0.164  -0.169   0.132   0.046  -0.243  -0.198  -0.039 
+ 10.067  -0.149  -0.061  -0.285  -0.091  -0.192  -0.226  -0.265   0.194   0.024  -0.096  -0.172  -0.269 
+  9.607  -0.488  -0.272  -0.428  -0.176  -0.427  -0.376  -0.197   0.368   0.089  -0.171   0.021  -0.211 
+  9.471  -0.575  -0.416  -0.426  -0.196  -0.564  -0.416  -0.229   0.333   0.019  -0.233  -0.009  -0.221 
+  9.629  -0.441  -0.374  -0.372  -0.183  -0.422  -0.325  -0.235   0.294  -0.034  -0.227  -0.036  -0.233 
+  9.746  -0.643  -0.460  -0.350  -0.321  -0.331  -0.317   0.029   0.340  -0.030  -0.247  -0.000  -0.188 
+  9.561  -0.487  -0.377  -0.242  -0.277  -0.077  -0.006   0.111   0.482   0.041  -0.277  -0.060  -0.249 
+  9.478  -0.362  -0.411  -0.125  -0.257  -0.313  -0.073   0.048   0.388   0.033  -0.358  -0.069  -0.171 
+  9.512  -0.508  -0.385  -0.056  -0.368  -0.549  -0.107   0.161   0.250  -0.001  -0.163  -0.051  -0.149 
+  8.921  -0.381  -0.289  -0.113  -0.386  -0.291  -0.211   0.112   0.308   0.141  -0.057  -0.035  -0.251 
+ 11.823   0.486  -0.391   0.020  -0.079  -0.294  -0.312   0.122  -0.184  -0.056  -0.354  -0.065  -0.299 
+ 13.082   0.555  -0.334  -0.010  -0.153  -0.382  -0.383   0.200  -0.218   0.022  -0.317   0.122  -0.284 
+ 12.452   0.340  -0.389  -0.024  -0.146  -0.535  -0.505   0.151  -0.169   0.113  -0.206   0.294  -0.166 
+  9.849   0.321  -0.100  -0.155  -0.030  -0.457  -0.607   0.187  -0.001   0.126  -0.269   0.066  -0.132 
+  9.111  -0.129  -0.226  -0.182  -0.257  -0.605  -0.364   0.050   0.241   0.147  -0.262   0.024  -0.161 
+  8.990  -0.298  -0.403  -0.419  -0.171  -0.620  -0.430  -0.067   0.240   0.081  -0.282   0.093  -0.094 
+  9.149  -0.294  -0.323  -0.355  -0.175  -0.489  -0.281   0.012   0.232  -0.097  -0.165   0.102   0.061 
+  9.142  -0.407  -0.335  -0.439  -0.182  -0.642  -0.166   0.141   0.275  -0.293  -0.267   0.209   0.114 
+  9.117  -0.508  -0.274  -0.478  -0.238  -0.538  -0.211   0.225   0.063  -0.257  -0.152   0.123   0.040 
+  8.986  -0.646  -0.281  -0.564  -0.122  -0.450  -0.286   0.128   0.174  -0.278  -0.336   0.043   0.051 
+  8.454  -0.884  -0.373  -0.446  -0.189  -0.600  -0.214   0.109   0.361  -0.268  -0.523   0.042   0.104 
+  8.359  -0.881  -0.447  -0.359  -0.115  -0.222  -0.169   0.210   0.240  -0.398  -0.382  -0.126   0.036 
+  8.426  -0.849  -0.490  -0.232  -0.012  -0.492  -0.052   0.180   0.323  -0.279  -0.427  -0.277   0.043 
+  8.492  -0.961  -0.512  -0.311   0.020  -0.337  -0.057   0.216   0.308  -0.246  -0.310  -0.186   0.067 
+  8.476  -0.825  -0.338  -0.234  -0.099  -0.385  -0.075   0.204   0.278  -0.176  -0.412  -0.250  -0.103 
+  7.978  -0.953  -0.473  -0.352  -0.004  -0.346  -0.112   0.107   0.224  -0.354  -0.443  -0.341  -0.167 
+  7.603  -1.051  -0.566  -0.416  -0.007  -0.438  -0.092   0.026   0.382  -0.189  -0.305  -0.323  -0.149 
+  7.693  -0.997  -0.462  -0.356   0.024  -0.413  -0.226  -0.035   0.546  -0.016  -0.260  -0.228  -0.182 
+  7.534  -1.005  -0.487  -0.320   0.012  -0.531  -0.146   0.130   0.523  -0.165  -0.408  -0.298  -0.202 
+  7.790  -0.686  -0.399  -0.525   0.093  -0.578  -0.296  -0.038   0.552  -0.006  -0.333  -0.181  -0.043 
+  7.523  -0.780  -0.388  -0.439   0.044  -0.518  -0.250   0.066   0.566   0.126  -0.406  -0.180   0.077 
+  7.474  -0.691  -0.495  -0.505   0.105  -0.329  -0.383   0.108   0.457   0.115  -0.159  -0.125  -0.040 
+  6.849  -1.102  -0.697  -0.638   0.108  -0.242  -0.365   0.051   0.512   0.038  -0.000  -0.132  -0.198 
+  6.857  -0.889  -0.479  -0.425   0.265  -0.418  -0.396  -0.095   0.302  -0.073  -0.053  -0.084  -0.184 
+  6.695  -0.926  -0.378  -0.324   0.403  -0.249  -0.186   0.061   0.343  -0.279  -0.062  -0.096  -0.190 
+  7.020  -0.557  -0.152  -0.295   0.305  -0.372  -0.247  -0.193   0.276  -0.038   0.030   0.055  -0.017 
+  7.592  -0.468  -0.110  -0.125   0.175  -0.194  -0.096  -0.276  -0.106  -0.252  -0.103   0.099   0.040 
+  7.676  -0.489  -0.164  -0.140   0.058  -0.052  -0.355  -0.400  -0.075  -0.250   0.005   0.177   0.042 
+  7.510  -0.439  -0.447  -0.096   0.142   0.088  -0.222  -0.462  -0.081  -0.248  -0.011  -0.002  -0.015 
+  7.003  -0.260  -0.269  -0.251   0.151  -0.005  -0.253  -0.147  -0.242  -0.306   0.045   0.092   0.008 
+  6.447  -0.086  -0.015  -0.205   0.275  -0.288  -0.386  -0.001  -0.055  -0.166   0.008   0.228   0.083 
+  6.222  -0.027   0.154  -0.254   0.325  -0.107  -0.246   0.112   0.118  -0.039  -0.271   0.021  -0.077 
+  6.083  -0.208  -0.142  -0.103   0.061   0.050  -0.239  -0.192   0.113   0.090  -0.136   0.134   0.164 
+  6.335   0.090  -0.126   0.036   0.068   0.104  -0.450  -0.217  -0.055  -0.081  -0.103  -0.021  -0.079 
+  6.757   0.096   0.190   0.080   0.020   0.026  -0.270  -0.168   0.015  -0.060  -0.029   0.037  -0.024 
+  6.606   0.293   0.084   0.017   0.079   0.148  -0.334  -0.174  -0.043   0.028  -0.174   0.005  -0.034 
+  6.457   0.386   0.097  -0.089  -0.182   0.125  -0.347  -0.127   0.069  -0.078  -0.093   0.044  -0.033 
+  6.921   0.263   0.343   0.110   0.114   0.363  -0.363  -0.263  -0.264  -0.110  -0.099  -0.099  -0.083 
+  6.723   0.346   0.098  -0.166  -0.075   0.284  -0.324  -0.233  -0.391  -0.116   0.001   0.001  -0.047 
+  6.436   0.108   0.114  -0.179  -0.157   0.194  -0.433  -0.184  -0.375  -0.114  -0.122   0.078   0.088 
+  5.008   0.122   0.019  -0.063  -0.029   0.099  -0.283  -0.092  -0.066   0.171   0.058  -0.130  -0.082 
+  4.753   0.073  -0.235   0.118  -0.070  -0.021  -0.253  -0.143  -0.198  -0.111  -0.011   0.090  -0.090 
+  4.735   0.344  -0.460   0.136  -0.078  -0.239  -0.330  -0.246  -0.194  -0.020  -0.079  -0.038   0.197 
+  4.337   0.132  -0.403   0.163  -0.167  -0.083   0.126  -0.203  -0.206   0.229   0.183  -0.117   0.024 
+  5.192  -0.235  -0.225   0.240  -0.340   0.085  -0.021  -0.318  -0.028   0.050   0.082   0.188  -0.109 
+  5.883  -0.534   0.059   0.231  -0.509  -0.080  -0.257  -0.123   0.109   0.097  -0.008   0.274  -0.087 
+  5.872  -0.638   0.242   0.272  -0.485  -0.160  -0.235  -0.048   0.130   0.045   0.016   0.081  -0.176 
+  5.690  -0.600   0.250   0.278  -0.299  -0.037  -0.027  -0.290   0.119   0.196   0.052   0.041  -0.057 
+  5.932  -0.687   0.005   0.167  -0.404  -0.257   0.011  -0.228   0.015   0.094  -0.012   0.080   0.057 
+  6.609  -0.601  -0.246   0.142  -0.366  -0.203   0.223   0.025  -0.151  -0.147  -0.012   0.068  -0.097 
+  6.728  -0.494  -0.278   0.072  -0.331  -0.198   0.214   0.099  -0.076  -0.281  -0.127  -0.021  -0.072 
+  6.733  -0.318  -0.441   0.225  -0.260  -0.084   0.042   0.142   0.087  -0.168  -0.225   0.093   0.074 
+  7.291  -0.204  -0.695   0.121  -0.303  -0.245  -0.195   0.132   0.156  -0.114  -0.145   0.048  -0.182 
+  7.425  -0.202  -0.991   0.000  -0.181  -0.047  -0.142   0.140   0.256  -0.220  -0.072   0.156  -0.137 
+  7.504  -0.217  -1.227  -0.132  -0.119   0.055  -0.348  -0.001   0.123  -0.112  -0.038   0.336   0.042 
+  7.945  -0.226  -1.225   0.012  -0.160   0.100  -0.450  -0.161   0.345  -0.086  -0.129   0.242  -0.058 
+  8.085  -0.203  -1.277   0.031  -0.219   0.289  -0.536  -0.245   0.305  -0.192  -0.148   0.269   0.039 
+  8.313  -0.162  -1.290  -0.126  -0.174   0.346  -0.458  -0.235   0.375  -0.193  -0.063   0.242  -0.002 
+  8.578  -0.243  -1.099  -0.362  -0.220   0.352  -0.477  -0.272   0.230  -0.239  -0.113   0.121  -0.039 
+  8.671  -0.390  -1.085  -0.491  -0.248   0.387  -0.404  -0.154   0.350  -0.137  -0.005   0.106   0.044 
+  8.581  -0.403  -0.926  -0.456  -0.280   0.529  -0.460  -0.163   0.241  -0.190   0.108   0.045   0.010 
+  8.336  -0.436  -0.824  -0.408  -0.385   0.577  -0.385  -0.183   0.170  -0.184   0.194   0.086  -0.153 
+  8.134  -0.363  -0.680  -0.356  -0.349   0.475  -0.312  -0.143   0.191  -0.147   0.098   0.070  -0.142 
+  7.852  -0.172  -0.402  -0.243  -0.332   0.282  -0.276  -0.190   0.152  -0.056  -0.086   0.095  -0.100 
+  7.839  -0.069  -0.684  -0.048  -0.308  -0.040  -0.124   0.077   0.019   0.018  -0.088  -0.016  -0.013 
+  7.825   0.135  -0.624   0.008  -0.162  -0.184  -0.278  -0.063   0.056   0.026  -0.147  -0.131   0.018 
+  7.530   0.386  -0.564  -0.023  -0.153  -0.161  -0.347  -0.043  -0.007   0.074  -0.160  -0.108  -0.033 
+  6.906   0.373  -0.506  -0.006  -0.132  -0.069   0.028   0.057   0.057  -0.072  -0.163  -0.123  -0.169 
+  7.950   1.159  -0.143   0.103  -0.145  -0.107  -0.294  -0.084  -0.053  -0.038  -0.043  -0.139  -0.124 
+  7.842   0.978   0.000   0.064   0.013  -0.161  -0.370   0.011  -0.044   0.069  -0.036  -0.111  -0.058 
+  6.980   0.118  -0.541   0.530   0.273  -0.077  -0.202   0.111  -0.100  -0.096  -0.275  -0.154  -0.125 
+  7.087   0.257  -0.574   0.589  -0.005  -0.332  -0.220  -0.088  -0.137  -0.167  -0.113   0.086  -0.127 
+  7.223   0.266  -0.487   0.621  -0.070  -0.488  -0.408   0.019  -0.112  -0.071  -0.022   0.237  -0.035 
+  7.489   0.470  -0.514   0.581  -0.062  -0.593  -0.447   0.122  -0.052  -0.229   0.074   0.350   0.094 
+  7.192   0.059  -0.763   0.581   0.117  -0.789  -0.759   0.151  -0.027  -0.250   0.165   0.258   0.151 
+  7.283   0.300  -0.644   0.381   0.067  -0.685  -0.760   0.209  -0.025  -0.106  -0.003   0.098   0.156 
+  7.206   0.408  -0.477   0.013  -0.094  -0.661  -0.873   0.145   0.044  -0.144  -0.005   0.169   0.203 
+  6.907   0.413  -0.596  -0.046  -0.253  -0.752  -0.711   0.002  -0.165  -0.367  -0.044   0.035   0.048 
+  6.914   0.362  -0.548   0.088  -0.167  -0.601  -0.625   0.141  -0.217  -0.249   0.047   0.097   0.228 
+  7.412  -0.013  -0.273   0.452   0.031  -0.643  -0.603  -0.067  -0.216  -0.279  -0.025   0.032  -0.037 
+  7.899  -0.128  -0.187   0.556   0.104  -0.471  -0.571  -0.059  -0.187  -0.438  -0.061   0.041  -0.029 
+  7.962   0.098  -0.205   0.525  -0.058  -0.585  -0.523  -0.206  -0.100  -0.295  -0.167   0.054   0.091 
+  7.826  -0.033  -0.361   0.498  -0.207  -0.502  -0.348  -0.232  -0.107  -0.150  -0.026   0.040  -0.020 
+  7.523  -0.066  -0.485   0.493  -0.223  -0.617  -0.449  -0.298  -0.222   0.032   0.096  -0.001   0.065 
+  7.268  -0.148  -0.162   0.493  -0.487  -0.537  -0.221  -0.190   0.031   0.024   0.005   0.005  -0.011 
+  7.395  -0.151  -0.119   0.446  -0.429  -0.477  -0.240  -0.294  -0.012  -0.208   0.139   0.155  -0.250 
+  7.454  -0.374  -0.072   0.342  -0.571  -0.548  -0.209  -0.007  -0.058  -0.173   0.081   0.229  -0.326 
+  7.562  -0.243   0.053   0.179  -0.319  -0.699  -0.508  -0.101  -0.085  -0.063  -0.099   0.251  -0.225 
+  6.967  -0.226   0.129   0.158  -0.229  -0.568  -0.578  -0.090  -0.098  -0.171  -0.042   0.215  -0.182 
+  6.737   0.032   0.133   0.265  -0.161  -0.302  -0.465   0.002  -0.086  -0.445  -0.148   0.175  -0.264 
+  6.140   0.157   0.214   0.062  -0.284  -0.214  -0.398  -0.143  -0.113  -0.267  -0.042   0.145  -0.188 
+  5.649   0.128   0.077   0.062  -0.158  -0.225  -0.353  -0.103  -0.093  -0.275  -0.180   0.119  -0.081 
+  5.542   0.133   0.153   0.260  -0.059  -0.389  -0.363  -0.326  -0.185  -0.341  -0.179  -0.008  -0.076 
+  5.443  -0.060   0.175   0.251   0.052  -0.278  -0.363  -0.250  -0.190  -0.289  -0.090   0.011  -0.243 
+  5.610   0.149   0.153   0.119   0.024  -0.234  -0.365  -0.301  -0.224  -0.283  -0.209   0.008  -0.114 
+  6.011   0.059   0.232  -0.005  -0.304  -0.338  -0.523  -0.257  -0.006  -0.126  -0.137  -0.080  -0.213 
+  6.647  -0.137   0.099   0.237  -0.459  -0.280  -0.317  -0.224   0.050   0.021   0.053  -0.091  -0.183 
+  6.879  -0.223   0.147   0.296  -0.339  -0.258  -0.346  -0.371  -0.046  -0.096   0.063   0.017  -0.224 
+  6.816  -0.113   0.143  -0.176  -0.162  -0.041  -0.363  -0.414  -0.027   0.001  -0.051  -0.078  -0.166 
+  6.931  -0.209   0.189  -0.114  -0.279  -0.198  -0.579  -0.412   0.010   0.021  -0.150  -0.074  -0.062 
+  7.012  -0.238   0.005   0.037  -0.220  -0.032  -0.398  -0.481  -0.200  -0.065  -0.128   0.012   0.080 
+  7.111   0.019   0.028  -0.020  -0.298  -0.080  -0.355  -0.521  -0.233  -0.104  -0.067   0.008  -0.021 
+  6.073   0.046   0.016   0.068  -0.179   0.008  -0.263  -0.446  -0.213  -0.176  -0.195  -0.080  -0.091 
+  5.448   0.347  -0.028   0.296  -0.142  -0.242  -0.601  -0.254   0.010  -0.139  -0.166   0.050  -0.093 
+  6.058   0.193  -0.171   0.131  -0.202  -0.278  -0.685  -0.132   0.088  -0.105  -0.354   0.110  -0.121 
+  6.523   0.190  -0.473  -0.051  -0.313  -0.277  -0.760  -0.012   0.253  -0.190  -0.518   0.183  -0.272 
+  6.915   0.005  -0.546  -0.252  -0.374  -0.284  -0.722   0.073   0.309  -0.253  -0.534   0.221  -0.187 
+  6.954  -0.056  -0.806  -0.329  -0.168  -0.101  -0.652   0.102   0.042  -0.310  -0.663   0.069  -0.175 
+  7.195  -0.056  -0.855  -0.394  -0.220  -0.030  -0.640   0.056   0.123  -0.209  -0.659   0.137  -0.245 
+  7.300  -0.053  -0.843  -0.272  -0.171   0.084  -0.611   0.085   0.116  -0.223  -0.622   0.143  -0.129 
+  7.282  -0.066  -0.960  -0.256  -0.322   0.243  -0.501  -0.050   0.199  -0.297  -0.452   0.147  -0.050 
+  7.051  -0.067  -1.061  -0.206  -0.283   0.334  -0.416  -0.007   0.236  -0.424  -0.485   0.179  -0.176 
+  7.000  -0.264  -1.028  -0.387  -0.066   0.389  -0.338   0.146   0.137  -0.382  -0.598   0.340  -0.204 
+  7.277  -0.112  -0.984  -0.379  -0.096   0.284  -0.430   0.106   0.078  -0.215  -0.433   0.360  -0.175 
+  7.234  -0.116  -1.040  -0.425  -0.097   0.239  -0.442  -0.065  -0.056  -0.281  -0.511   0.330  -0.222 
+  7.261  -0.018  -1.148  -0.382  -0.174   0.214  -0.401  -0.093  -0.067  -0.197  -0.341   0.341  -0.240 
+  7.437  -0.039  -1.076  -0.456  -0.386   0.222  -0.516  -0.031  -0.044  -0.162  -0.326   0.241  -0.302 
+  7.321  -0.138  -1.168  -0.418  -0.530  -0.038  -0.542  -0.122  -0.072  -0.082  -0.327   0.313  -0.350 
+  7.094  -0.041  -1.055  -0.258  -0.358  -0.190  -0.523   0.092  -0.124   0.051  -0.213   0.426  -0.364 
+  7.099  -0.031  -1.076  -0.316  -0.228  -0.075  -0.664   0.070  -0.151   0.042  -0.218   0.393  -0.300 
+  7.119   0.040  -1.024  -0.444  -0.275   0.184  -0.450   0.029   0.081   0.026  -0.377   0.341  -0.220 
+  6.928   0.140  -0.825  -0.493  -0.261   0.151  -0.365   0.117   0.206  -0.125  -0.213   0.261  -0.327 
+  6.057   0.198  -0.513  -0.420  -0.098   0.077  -0.381   0.059   0.158  -0.038  -0.239   0.165  -0.164 
+  5.919   0.366  -0.527  -0.451  -0.208   0.000  -0.301  -0.091   0.179  -0.084  -0.212   0.172  -0.076 
+  5.924   0.217  -0.523  -0.339  -0.297  -0.054  -0.291   0.084   0.210   0.095  -0.207   0.004  -0.270 
+  5.556   0.300  -0.485  -0.345  -0.226   0.015  -0.273   0.029   0.418   0.103  -0.261  -0.025  -0.201 
+  5.100   0.388  -0.372  -0.123  -0.196  -0.034  -0.368   0.036   0.182   0.148   0.029   0.151  -0.168 
+  6.258  -0.310  -0.505  -0.155  -0.121   0.308   0.093  -0.250   0.035  -0.049   0.037  -0.016  -0.086 
+  8.539  -0.640  -0.591  -0.199  -0.249   0.251   0.102  -0.524  -0.040   0.065   0.108   0.014  -0.039 
+  9.152  -0.583  -0.649  -0.032  -0.245   0.057  -0.055  -0.553  -0.033  -0.034  -0.205  -0.068  -0.034 
+  9.318  -0.604  -0.685  -0.101  -0.258   0.078  -0.029  -0.401   0.086   0.075   0.012   0.010   0.041 
+  9.213  -0.427  -0.348  -0.166  -0.190   0.130  -0.022  -0.516  -0.050   0.156   0.008  -0.027  -0.068 
+  9.609  -0.314  -0.359  -0.192  -0.324   0.064  -0.181  -0.477  -0.102  -0.009  -0.150   0.019  -0.101 
+  9.802  -0.438  -0.386  -0.056  -0.132   0.007  -0.338  -0.398   0.018   0.152  -0.114  -0.028   0.012 
+  9.804  -0.446  -0.473  -0.092  -0.137   0.045  -0.083  -0.319   0.201   0.025  -0.031  -0.047   0.001 
+  9.718   0.038  -0.334  -0.156  -0.217  -0.092  -0.185  -0.286   0.135   0.022  -0.064  -0.121  -0.033 
+  8.803   0.108  -0.110  -0.159  -0.074   0.047  -0.188  -0.364  -0.201   0.068  -0.139  -0.090   0.025 
+  8.240  -0.126  -0.327  -0.249  -0.193   0.077  -0.300  -0.219  -0.055   0.158   0.004   0.006  -0.075 
+  7.872  -0.089  -0.095  -0.114  -0.170  -0.119  -0.211  -0.040   0.035   0.138   0.024  -0.027  -0.053 
+  6.931  -0.102  -0.019  -0.082  -0.138   0.033  -0.202   0.093   0.042   0.046  -0.076  -0.219  -0.047 
+  5.641  -0.066   0.124   0.015  -0.186  -0.038  -0.154  -0.194  -0.049   0.041   0.003  -0.003   0.047 
+  5.058  -0.293   0.146  -0.018  -0.253   0.045  -0.457  -0.135   0.039   0.081  -0.175   0.019   0.150 
+  4.897  -0.430  -0.109   0.120  -0.171  -0.023  -0.200   0.083  -0.113   0.067   0.035   0.072   0.052 
+  4.983  -0.102   0.046   0.156  -0.094   0.048  -0.219  -0.064  -0.097   0.007  -0.123  -0.100  -0.074 
+  5.166  -0.116   0.176   0.048   0.043   0.056  -0.373  -0.191   0.104   0.015  -0.115  -0.049  -0.015 
+  5.347  -0.350  -0.033  -0.065  -0.030   0.246  -0.163   0.033   0.142   0.044  -0.162  -0.093  -0.182 
+  5.242  -0.220   0.150   0.028  -0.056  -0.013  -0.154   0.150  -0.057  -0.049  -0.060  -0.049  -0.082 
+  5.357  -0.174   0.165  -0.032  -0.290  -0.276  -0.386   0.011  -0.067   0.051  -0.086  -0.002  -0.026 
+  5.628   0.150   0.263  -0.089  -0.241  -0.009  -0.151  -0.033  -0.119  -0.159  -0.158  -0.074  -0.176 
+  6.791   0.457   0.348  -0.039  -0.117   0.101   0.135   0.135  -0.105  -0.074  -0.181  -0.009  -0.094 
+  5.995   0.276   0.509  -0.002  -0.209  -0.000  -0.216   0.085  -0.069   0.054  -0.100  -0.008  -0.308 
+  5.738   0.020   0.203  -0.191  -0.544  -0.264  -0.177   0.151  -0.165   0.013   0.097  -0.071  -0.134 
+  5.936  -0.005   0.249  -0.049  -0.324  -0.153  -0.225   0.058  -0.089   0.068  -0.156  -0.078   0.011 
+  5.681   0.120   0.386  -0.116  -0.225  -0.008  -0.122   0.024  -0.096  -0.041  -0.075  -0.048  -0.122 
+  5.932   0.180   0.398   0.113  -0.209  -0.052  -0.185   0.041  -0.047  -0.068  -0.137  -0.090  -0.258 
+  6.122   0.440   0.649   0.251  -0.130  -0.146  -0.374  -0.147   0.091   0.165  -0.147  -0.225  -0.090 
+  5.830   0.467   0.359   0.068  -0.033  -0.027  -0.266  -0.361  -0.289   0.115  -0.126  -0.193  -0.008 
+  7.798   0.306  -0.346  -0.371   0.036  -0.246  -0.221  -0.061  -0.114  -0.118  -0.169  -0.036  -0.102 
+  8.452   0.397  -0.339  -0.327   0.117  -0.218  -0.199  -0.069  -0.070  -0.194  -0.163  -0.032  -0.139 
+  5.553   0.211   0.549   0.148  -0.083  -0.100  -0.196  -0.134  -0.171   0.034  -0.147  -0.231  -0.135 
+  5.444   0.282   0.414   0.014  -0.032   0.058  -0.112  -0.123  -0.202  -0.066  -0.168  -0.030  -0.250 
+  5.522   0.259   0.467  -0.126  -0.034   0.098   0.053   0.041  -0.080  -0.000  -0.181  -0.077  -0.237 
+  5.616   0.147   0.272  -0.050  -0.199  -0.188  -0.089  -0.019  -0.102   0.077  -0.060  -0.079  -0.130 
+  6.792  -0.166   0.045  -0.191  -0.020  -0.017  -0.085   0.000  -0.231  -0.093  -0.185  -0.077  -0.066 
+  4.957   0.177   0.081   0.055   0.005  -0.128  -0.145  -0.182  -0.124  -0.048  -0.126   0.057  -0.065 
+  4.604   0.113   0.073   0.178   0.043   0.006  -0.053   0.099  -0.051  -0.029  -0.093   0.000  -0.109 
+  4.734   0.343   0.192   0.025  -0.052  -0.095  -0.161  -0.028  -0.078  -0.054  -0.114  -0.107  -0.053 
+  4.681   0.222   0.035   0.060   0.020  -0.035  -0.105   0.051  -0.185  -0.048  -0.157  -0.078  -0.029 
+  5.039   0.213   0.116  -0.093  -0.278  -0.090  -0.171  -0.189  -0.242  -0.054  -0.061   0.029  -0.055 
+  4.617   0.195   0.071   0.013  -0.151  -0.148  -0.309  -0.087  -0.124  -0.032  -0.106  -0.020  -0.187 
+  4.775   0.172   0.033  -0.041  -0.177  -0.048   0.072  -0.110  -0.075  -0.028  -0.015   0.130  -0.001 
+  4.737   0.152   0.054   0.064  -0.219  -0.121  -0.029  -0.057  -0.176  -0.133  -0.231   0.051  -0.035 
+  5.117   0.175   0.101  -0.059  -0.330  -0.176  -0.105  -0.067  -0.004   0.002  -0.006  -0.111   0.026 
+  6.688  -0.578   0.039  -0.085  -0.178  -0.175  -0.316  -0.200  -0.162  -0.033  -0.058  -0.041  -0.108 
+  5.894  -0.065   0.252  -0.142  -0.280  -0.168  -0.163  -0.168  -0.175  -0.151  -0.148  -0.081  -0.072 
+  5.081   0.395   0.075   0.164  -0.321  -0.247  -0.144  -0.160  -0.129  -0.234  -0.020   0.006   0.057 
+  4.906   0.396   0.220  -0.020  -0.114  -0.145  -0.077  -0.142  -0.225  -0.175  -0.182  -0.123  -0.076 
+  5.078   0.111  -0.008   0.036  -0.175   0.004   0.025  -0.117  -0.018  -0.081  -0.172  -0.068  -0.055 
+  4.903   0.132   0.146  -0.007  -0.144  -0.104  -0.071  -0.215  -0.239   0.061  -0.062  -0.098  -0.224 
+  4.142   0.164  -0.032   0.072  -0.082  -0.240  -0.051  -0.264  -0.145  -0.112  -0.117  -0.046  -0.205 
+  4.168  -0.001  -0.130   0.052  -0.151  -0.128  -0.079   0.053  -0.137   0.055  -0.024  -0.063  -0.215 
+  4.119  -0.010  -0.149   0.103  -0.045  -0.141  -0.088  -0.059  -0.174  -0.043  -0.067   0.067   0.048 
+  4.330   0.209  -0.185   0.128  -0.107  -0.185  -0.074   0.127  -0.176  -0.045  -0.165  -0.132  -0.118 
+  4.038   0.216  -0.008   0.283  -0.057  -0.052  -0.056  -0.044  -0.227  -0.137  -0.045  -0.102  -0.113 
+  3.923   0.153  -0.182   0.223   0.048  -0.131   0.068   0.111  -0.023  -0.145  -0.164  -0.146  -0.020 
+  3.993   0.060  -0.229   0.173  -0.005  -0.099   0.276   0.148  -0.042  -0.059  -0.049  -0.067  -0.206 
+  4.163   0.342  -0.198   0.016  -0.195  -0.055  -0.050  -0.025  -0.119   0.025  -0.034   0.038  -0.119 
+  4.029   0.265  -0.152   0.124  -0.132   0.001   0.008  -0.119  -0.024  -0.083  -0.120  -0.056  -0.078 
+  4.504  -0.086   0.152  -0.176   0.024  -0.145  -0.043   0.044  -0.167  -0.103  -0.189  -0.058  -0.213 
+  4.592   0.098   0.166  -0.195   0.019  -0.022  -0.100   0.055  -0.165   0.009   0.039  -0.030  -0.217 
+  4.529   0.285  -0.125   0.075  -0.216  -0.051  -0.097  -0.005  -0.007   0.040  -0.016   0.010  -0.081 
+  4.469   0.188  -0.102   0.039  -0.190   0.007   0.073   0.013  -0.125  -0.174  -0.089  -0.180  -0.178 
+  4.297   0.358   0.027   0.037  -0.297  -0.063  -0.003   0.080  -0.026  -0.033   0.063  -0.104  -0.237 
+  4.277   0.091  -0.054   0.051  -0.164  -0.334  -0.240  -0.067   0.061   0.032  -0.107  -0.103  -0.096 
+  4.707   0.174   0.130   0.105  -0.157  -0.230  -0.065   0.060   0.067  -0.041  -0.045  -0.112  -0.369 
+  5.102   0.455  -0.015  -0.013  -0.219  -0.129   0.014  -0.009  -0.177  -0.206  -0.019  -0.151  -0.121 
+  5.040   0.214  -0.018  -0.075  -0.424  -0.337  -0.005  -0.056  -0.094  -0.078  -0.108   0.041  -0.114 
+  4.962   0.218   0.044   0.056  -0.422  -0.186   0.112  -0.075  -0.192  -0.043  -0.176  -0.150  -0.190 
+  4.822   0.513  -0.285   0.068  -0.271  -0.090  -0.087  -0.099  -0.198   0.003  -0.039   0.012  -0.093 
+  4.420   0.462   0.029   0.112  -0.228  -0.085  -0.102  -0.155  -0.030  -0.046  -0.312  -0.140  -0.031 
+  4.764   0.550  -0.197  -0.018  -0.191  -0.123   0.003  -0.126  -0.130   0.055  -0.083  -0.024  -0.054 
+  4.632   0.570  -0.069   0.010  -0.231  -0.040   0.101   0.037  -0.082  -0.155  -0.295   0.004  -0.037 
+  4.604   0.462  -0.107  -0.016  -0.342  -0.149  -0.066  -0.058  -0.131  -0.007  -0.198  -0.083  -0.043 
+  4.991   0.671  -0.200  -0.100  -0.396  -0.134  -0.027  -0.095  -0.014  -0.078  -0.191  -0.163  -0.048 
+  5.046   0.656  -0.133   0.206  -0.252  -0.100   0.104  -0.196  -0.261   0.033  -0.203  -0.043  -0.173 
+  4.754   0.426   0.080   0.261  -0.297  -0.213  -0.033  -0.024  -0.258   0.050  -0.229   0.013  -0.063 
+  4.903   0.669   0.018   0.164  -0.433  -0.096  -0.053  -0.211  -0.099  -0.049  -0.368   0.010   0.048 
+  4.716   0.402  -0.195   0.344  -0.326  -0.305  -0.021   0.005  -0.127  -0.247  -0.153   0.080   0.193 
+  5.200   0.593  -0.084   0.197  -0.020  -0.201  -0.132  -0.227  -0.200  -0.048  -0.033   0.086  -0.134 
+  5.505   0.502   0.111   0.222  -0.087  -0.112  -0.231  -0.454  -0.164  -0.007   0.015   0.099  -0.346 
+  5.832   0.437  -0.011   0.108  -0.216  -0.247  -0.189  -0.319  -0.279   0.076  -0.003   0.144  -0.227 
+  5.675   0.477   0.044   0.100  -0.307  -0.229  -0.165  -0.261  -0.314   0.160  -0.040   0.071  -0.221 
+  5.606   0.666   0.151   0.138  -0.401  -0.151  -0.129  -0.373  -0.362   0.229  -0.097  -0.079  -0.228 
+  5.701   0.581   0.168   0.130  -0.413  -0.109  -0.198  -0.329  -0.380   0.244  -0.128  -0.014  -0.213 
+  5.772   0.602   0.323   0.118  -0.319  -0.160  -0.179  -0.342  -0.492   0.199  -0.040  -0.083  -0.260 
+  6.037   0.586  -0.036   0.075  -0.290  -0.156  -0.124  -0.344  -0.434   0.150  -0.208   0.030  -0.338 
+  6.052   0.561  -0.023   0.061  -0.041   0.004  -0.108  -0.254  -0.478  -0.162  -0.139   0.074  -0.250 
+  5.666   0.561   0.177   0.210  -0.149  -0.041  -0.249  -0.275  -0.539  -0.006   0.031  -0.005  -0.085 
+  6.132   0.793   0.269   0.005  -0.094  -0.067   0.106   0.080  -0.173  -0.122  -0.225  -0.264  -0.280 
+  6.068   0.803   0.567   0.276  -0.107  -0.015  -0.027  -0.079  -0.199  -0.121  -0.307  -0.258  -0.279 
+  5.645   0.551   0.215   0.064  -0.292  -0.116  -0.113  -0.212  -0.160  -0.032  -0.090  -0.049   0.031 
+  5.429   0.228   0.098   0.280  -0.039  -0.147  -0.238  -0.227  -0.322  -0.070  -0.158  -0.002  -0.011 
+  5.840  -0.028  -0.035   0.281  -0.081  -0.290  -0.160  -0.388  -0.324  -0.078  -0.128  -0.016   0.048 
+  7.103   0.101   0.061   0.268  -0.350  -0.275  -0.081  -0.300  -0.212   0.188  -0.106  -0.039  -0.076 
+  8.854   0.411   0.282   0.128  -0.480  -0.087  -0.353  -0.302  -0.094   0.227  -0.063  -0.063  -0.190 
+  7.506   0.162   0.233   0.528  -0.283  -0.227   0.105  -0.319  -0.207   0.130  -0.243  -0.048  -0.192 
+  8.800   0.533   0.121   0.185  -0.264  -0.075   0.052  -0.200  -0.277   0.045  -0.302  -0.052  -0.208 
+  9.231   0.666   0.202   0.171  -0.318   0.098   0.169  -0.305  -0.266  -0.042  -0.298  -0.016  -0.202 
+  6.992   0.054   0.344   0.311  -0.324  -0.178   0.375  -0.211  -0.204   0.150  -0.378   0.072  -0.180 
+  6.778   0.031   0.231   0.207  -0.580  -0.316   0.150  -0.518  -0.201   0.141  -0.278   0.109  -0.009 
+  6.429  -0.064   0.242   0.247  -0.468  -0.406   0.096  -0.641  -0.152   0.128  -0.293   0.264  -0.125 
+  6.597  -0.014   0.390   0.513  -0.517  -0.320  -0.015  -0.626  -0.282   0.056  -0.341   0.037  -0.128 
+  7.067  -0.265   0.296   0.531  -0.457  -0.346  -0.155  -0.751  -0.285   0.128  -0.384  -0.068  -0.177 
+  6.844  -0.196   0.337   0.550  -0.638  -0.447   0.052  -0.789  -0.415  -0.014  -0.437  -0.084  -0.237 
+  7.027  -0.281   0.400   0.503  -0.723  -0.570   0.202  -0.523  -0.284   0.114  -0.443  -0.063  -0.304 
+  6.888  -0.432   0.346   0.443  -0.882  -0.811   0.137  -0.540  -0.214   0.273  -0.228   0.028  -0.228 
+  6.818  -0.375   0.147   0.264  -0.830  -0.655   0.225  -0.531  -0.067   0.259  -0.231   0.043  -0.108 
+  6.773  -0.313   0.050   0.326  -0.819  -0.621   0.141  -0.622  -0.142   0.205  -0.210  -0.006  -0.062 
+  6.562  -0.155   0.250   0.348  -0.580  -0.759   0.019  -0.441  -0.091   0.118  -0.439   0.028  -0.084 
+  5.925  -0.242   0.330   0.307  -0.609  -0.424   0.244  -0.535  -0.218   0.090  -0.367   0.007  -0.123 
+  6.017   0.014   0.278   0.399  -0.447  -0.434   0.076  -0.225  -0.065   0.280  -0.309  -0.056  -0.198 
+  6.053   0.026   0.247   0.324  -0.194  -0.265   0.094  -0.188  -0.064  -0.031  -0.099   0.019  -0.148 
+  5.940  -0.002   0.252   0.248  -0.018  -0.262   0.007  -0.147  -0.117   0.043  -0.128  -0.075  -0.122 
+  5.471   0.051   0.159   0.162  -0.175  -0.259  -0.143  -0.124  -0.187  -0.094   0.052  -0.043  -0.109 
+  5.688   0.289   0.113   0.337  -0.246  -0.193  -0.000  -0.214  -0.110  -0.009  -0.227  -0.039  -0.048 
+  5.989   0.322   0.342   0.290  -0.061  -0.004  -0.181  -0.129  -0.212   0.078  -0.189  -0.033  -0.102 
+  5.911   0.008   0.145   0.036  -0.214   0.032   0.061  -0.231  -0.060   0.073  -0.119  -0.013  -0.026 
+  6.258   0.037   0.175   0.264  -0.357  -0.223   0.117  -0.325  -0.100   0.056  -0.267  -0.051  -0.208 
+  6.256  -0.171   0.268   0.463  -0.351  -0.319   0.088  -0.454  -0.130   0.066  -0.227  -0.037  -0.182 
+  6.388  -0.220   0.391   0.434  -0.565  -0.379  -0.014  -0.534  -0.242   0.196  -0.135   0.029  -0.186 
+  6.872  -0.203   0.305   0.529  -0.614  -0.547  -0.038  -0.358  -0.208   0.118   0.068   0.008  -0.280 
+  6.905  -0.286  -0.043   0.315  -0.422  -0.524   0.049  -0.179  -0.169  -0.090  -0.135   0.105  -0.247 
+  6.559  -0.456  -0.154   0.245  -0.264  -0.396   0.198   0.040  -0.117   0.043  -0.063   0.129  -0.455 
+  6.590  -0.323  -0.046   0.254  -0.140  -0.405  -0.002  -0.055  -0.035  -0.012  -0.055   0.090  -0.493 
+  6.774  -0.183  -0.086   0.335  -0.094  -0.504  -0.063  -0.186  -0.093  -0.090  -0.074   0.160  -0.368 
+  6.724  -0.185  -0.217   0.106  -0.151  -0.499  -0.030   0.015   0.007  -0.067  -0.142   0.344  -0.343 
+  6.599  -0.081  -0.520  -0.181  -0.216  -0.551  -0.089   0.177   0.061  -0.162  -0.290   0.322  -0.392 
+  9.163   1.225  -0.149  -0.072  -0.117  -0.261  -0.207  -0.190  -0.137  -0.212  -0.261   0.090  -0.232 
+  9.616   1.224  -0.069   0.078  -0.140  -0.269  -0.174  -0.163  -0.170  -0.145  -0.188   0.084  -0.066 
+  7.488   0.773  -0.039   0.188  -0.100  -0.359  -0.041   0.148   0.039  -0.311  -0.178   0.224  -0.317 
+  6.610   0.084  -0.107  -0.026  -0.189  -0.323  -0.073   0.237   0.328  -0.130  -0.289   0.320  -0.228 
+  6.464  -0.058  -0.280   0.062  -0.172  -0.334  -0.172   0.348   0.176  -0.320  -0.269   0.232  -0.376 
+  6.463   0.078  -0.404  -0.017  -0.273  -0.362  -0.191   0.197  -0.017  -0.206  -0.245   0.253  -0.412 
+  6.589   0.342  -0.339   0.051  -0.156  -0.318  -0.296   0.202   0.228  -0.317  -0.212   0.170  -0.328 
+  8.641   0.351   0.018  -0.340  -0.312  -0.358  -0.132  -0.140  -0.228   0.005  -0.240  -0.002  -0.169 
+  8.800   0.072   0.169  -0.048  -0.414  -0.351  -0.040  -0.074  -0.140   0.172  -0.212   0.010  -0.064 
+  9.704  -0.237   0.375   0.052  -0.283  -0.253  -0.185  -0.020  -0.225   0.163  -0.394  -0.099  -0.066 
+  7.009   0.208   0.384   0.316  -0.075  -0.336  -0.204   0.086  -0.007   0.121  -0.173   0.043  -0.105 
+  6.541   0.380   0.278   0.099  -0.220  -0.323  -0.122   0.131  -0.024  -0.105  -0.091  -0.142  -0.324 
+  6.031   0.257   0.139   0.112  -0.033  -0.249  -0.121   0.010  -0.171  -0.200  -0.200   0.006  -0.192 
+  6.275   0.440   0.082   0.014  -0.213  -0.278   0.040   0.012  -0.066  -0.283  -0.058  -0.084  -0.273 
+  6.292   0.459   0.368   0.200  -0.160  -0.160  -0.047  -0.094  -0.270  -0.183  -0.128   0.008  -0.204 
+  6.048   0.347   0.298   0.109  -0.174  -0.022  -0.134  -0.128  -0.425  -0.188  -0.118  -0.101  -0.347 
+  5.757   0.308   0.123   0.045  -0.184  -0.389  -0.103  -0.170  -0.298  -0.166  -0.110  -0.062  -0.167 
+  5.297   0.140   0.090   0.219  -0.226  -0.349  -0.185  -0.087  -0.147  -0.001  -0.136  -0.139  -0.071 
+  5.282   0.225   0.027   0.152  -0.179  -0.391  -0.058   0.029  -0.195  -0.065  -0.179  -0.213  -0.214 
+  5.874   0.422   0.146  -0.107  -0.243  -0.196  -0.137  -0.136  -0.343  -0.099  -0.046   0.064  -0.092 
+  5.552   0.550  -0.134  -0.130  -0.176  -0.114   0.096  -0.020  -0.339  -0.237  -0.200   0.072  -0.191 
+  5.906   0.594  -0.133  -0.070  -0.265  -0.205   0.050  -0.036  -0.170   0.153  -0.051  -0.113  -0.131 
+  6.343   0.887   0.213  -0.026  -0.083  -0.031   0.187  -0.040  -0.153   0.042   0.015  -0.207  -0.225 
+  6.173   0.550   0.055  -0.106  -0.075  -0.074   0.030  -0.038  -0.157   0.004  -0.055   0.035   0.028 
+  5.752   0.281   0.072  -0.140  -0.187  -0.197  -0.045   0.026  -0.121  -0.131  -0.073  -0.070  -0.221 
+  5.458   0.249  -0.053  -0.050  -0.258  -0.162   0.049   0.088  -0.144  -0.216  -0.122  -0.159  -0.135 
+  5.408   0.269  -0.034   0.000  -0.085  -0.133  -0.049   0.084  -0.028  -0.060  -0.241  -0.251  -0.089 
+  5.650   0.189  -0.118  -0.106  -0.082  -0.081  -0.116  -0.003  -0.232  -0.154  -0.232  -0.089  -0.058 
+  5.746   0.102  -0.017  -0.070  -0.167  -0.155  -0.151  -0.024  -0.034  -0.036  -0.142  -0.124  -0.085 
+  5.987  -0.109  -0.154  -0.450  -0.065  -0.207  -0.088  -0.057  -0.042  -0.076  -0.106   0.030  -0.193 
+  5.607  -0.041   0.158  -0.137  -0.150  -0.188  -0.044  -0.013  -0.097  -0.084  -0.129  -0.014  -0.055 
+  5.329  -0.031   0.105  -0.202  -0.210  -0.145  -0.035   0.082   0.056  -0.042  -0.089  -0.056  -0.046 
+  5.536   0.140  -0.007  -0.185  -0.102   0.047   0.062  -0.020  -0.230  -0.120  -0.199  -0.140  -0.153 
+  5.280  -0.053   0.057  -0.076  -0.123  -0.037  -0.000  -0.011  -0.056   0.225  -0.001  -0.082  -0.101 
+  4.685   0.079   0.128   0.187  -0.140  -0.086  -0.069   0.020  -0.163   0.012  -0.105  -0.133  -0.170 
+  5.243   0.155   0.202   0.029  -0.248  -0.066  -0.208  -0.079  -0.042   0.030  -0.146  -0.027   0.029 
+  5.243   0.193   0.005  -0.083  -0.240  -0.150  -0.044  -0.072  -0.190  -0.014   0.063  -0.025  -0.037 
+  5.073   0.103  -0.239  -0.245  -0.252  -0.079  -0.180  -0.122  -0.227  -0.029  -0.141  -0.135  -0.176 
+  4.833   0.090  -0.262  -0.029  -0.209  -0.177  -0.207  -0.076  -0.151  -0.055  -0.185  -0.217  -0.150 
+  4.944   0.172  -0.297   0.144  -0.100  -0.003   0.009  -0.070  -0.174  -0.040  -0.128  -0.156  -0.096 
+  4.780   0.166  -0.188   0.226  -0.148  -0.076  -0.204  -0.102  -0.211  -0.249  -0.123  -0.101  -0.051 
+  4.172   0.185  -0.181   0.204  -0.083  -0.132   0.008   0.075   0.065   0.176   0.049  -0.064   0.073 
+  4.242   0.298  -0.225   0.145  -0.124  -0.089   0.102   0.256   0.020  -0.053  -0.132  -0.098  -0.032 
+  4.413   0.186  -0.322   0.206   0.006  -0.093   0.175   0.186  -0.103  -0.125  -0.247  -0.240  -0.132 
+  4.441   0.223  -0.281   0.083  -0.061  -0.086   0.155   0.029  -0.120   0.024  -0.091  -0.165  -0.127 
+  4.285   0.223  -0.191   0.098  -0.244  -0.062   0.014   0.014  -0.287  -0.183  -0.053  -0.001  -0.139 
+  4.429   0.459  -0.158   0.199  -0.082  -0.099   0.081  -0.016  -0.307  -0.249  -0.258  -0.048  -0.089 
+  4.301   0.323  -0.114   0.189  -0.026  -0.033  -0.045  -0.031  -0.197  -0.122  -0.076  -0.070  -0.242 
+  4.061  -0.052  -0.112   0.292   0.060  -0.144   0.096  -0.151  -0.350  -0.163  -0.039  -0.062  -0.132 
+  4.414  -0.102  -0.013   0.141  -0.146  -0.157   0.009   0.059  -0.058   0.053  -0.076  -0.086  -0.032 
+  4.761   0.192  -0.022   0.035  -0.151  -0.142  -0.082   0.070   0.002   0.139  -0.212  -0.084  -0.182 
+  4.893   0.383   0.008   0.158  -0.282  -0.058  -0.023   0.001  -0.132  -0.023   0.037  -0.011  -0.182 
+  5.873   0.256   0.307   0.318  -0.355  -0.142   0.014  -0.040  -0.211  -0.009  -0.107  -0.018  -0.117 
+  5.780   0.099   0.088   0.489  -0.344  -0.196  -0.031  -0.177  -0.107   0.078  -0.040   0.004  -0.102 
+  6.066  -0.071   0.069   0.625  -0.380  -0.119  -0.039  -0.206  -0.174   0.034  -0.010   0.067  -0.058 
+  6.349   0.089   0.087   0.386  -0.407  -0.277  -0.170  -0.161  -0.258   0.046  -0.032  -0.066  -0.224 
+  6.847   0.223   0.276   0.462  -0.354  -0.271   0.112  -0.014   0.035   0.061  -0.090  -0.131  -0.248 
+  7.269   0.836   0.492   0.239  -0.368  -0.112   0.083  -0.275  -0.207  -0.244  -0.102   0.027  -0.079 
+  7.753   0.614   0.295   0.223  -0.360  -0.049  -0.086  -0.186  -0.224  -0.074  -0.234   0.048  -0.116 
+  8.061   0.641   0.059   0.152  -0.099  -0.169  -0.181  -0.300  -0.207  -0.073  -0.362   0.022  -0.004 
+  8.459   0.831   0.209   0.201   0.003  -0.071  -0.201  -0.335  -0.376  -0.029  -0.385  -0.087  -0.032 
+  7.218   0.075   0.186   0.168  -0.079  -0.309  -0.359  -0.158  -0.102  -0.173  -0.242  -0.021  -0.046 
+  8.151  -0.420   0.030   0.032  -0.085  -0.317  -0.063  -0.166  -0.183   0.082  -0.198  -0.032  -0.082 
+  7.376  -0.235   0.224   0.086  -0.108  -0.272  -0.170  -0.143  -0.086   0.056  -0.174  -0.041  -0.029 
+  6.848  -0.345   0.381   0.257   0.096  -0.025  -0.345  -0.152  -0.281  -0.223  -0.274   0.079   0.066 
+  7.619  -0.379   0.417   0.114   0.002  -0.104  -0.157  -0.017  -0.191  -0.010  -0.049  -0.072   0.039 
+  7.199  -0.111   0.515   0.013  -0.057  -0.050  -0.187   0.070  -0.114  -0.051  -0.172  -0.187  -0.159 
+  6.887  -0.204   0.377   0.062  -0.163  -0.135  -0.281   0.006  -0.305  -0.135  -0.161  -0.094  -0.210 
+  6.229  -0.224   0.345   0.137  -0.050  -0.045  -0.053  -0.057  -0.310  -0.159  -0.252  -0.038  -0.107 
+  5.606  -0.289   0.248   0.044  -0.013  -0.097  -0.270  -0.053  -0.102  -0.119  -0.094  -0.019  -0.075 
+  5.925  -0.058   0.290   0.035   0.235   0.315  -0.020  -0.027  -0.059  -0.221  -0.184  -0.040  -0.106 
+  5.517  -0.152   0.227   0.069   0.100   0.084  -0.064  -0.004  -0.122  -0.059  -0.217  -0.112  -0.174 
+  5.252  -0.344   0.076   0.095   0.040   0.032  -0.023  -0.014  -0.042  -0.062  -0.260  -0.322  -0.249 
+  6.268   0.353   0.100  -0.113  -0.068  -0.112  -0.356  -0.209  -0.156  -0.141  -0.158  -0.155  -0.254 
+  6.380   0.951   0.499  -0.047  -0.076  -0.181  -0.349  -0.298  -0.121  -0.056  -0.096  -0.017  -0.137 
+  5.057  -0.005   0.507  -0.035   0.100  -0.024  -0.177  -0.219  -0.070  -0.010   0.025   0.052   0.014 
+  4.800  -0.153   0.060  -0.191  -0.190  -0.128  -0.155  -0.188  -0.112  -0.025   0.108   0.130  -0.080 
+  4.831  -0.101   0.117  -0.080  -0.214  -0.130  -0.107  -0.135   0.034  -0.060   0.035   0.043  -0.041 
+  4.206  -0.169  -0.007  -0.017   0.025  -0.142  -0.133  -0.102  -0.064   0.092   0.150   0.088  -0.038 
+  4.467  -0.154   0.099   0.034  -0.048  -0.187  -0.004  -0.059  -0.045  -0.004  -0.016  -0.028  -0.023 
+  4.487  -0.227   0.046   0.122   0.038  -0.112  -0.088  -0.165  -0.140  -0.083  -0.043  -0.081  -0.000 
+  4.236   0.332   0.054   0.159  -0.018  -0.125  -0.065  -0.123  -0.231  -0.106  -0.146   0.113   0.000 
+  4.201   0.114  -0.030   0.099  -0.113   0.018  -0.057  -0.125  -0.142  -0.111   0.036   0.035  -0.225 
+  4.125  -0.067  -0.158   0.053  -0.271   0.156   0.127   0.086  -0.021  -0.033  -0.003   0.125   0.030 
+  4.500  -0.064  -0.257   0.081  -0.157  -0.149  -0.140  -0.106  -0.070   0.015   0.054   0.081   0.006 
+  4.536   0.184   0.033   0.144  -0.072   0.042  -0.091  -0.197  -0.066   0.017  -0.067   0.030  -0.074 
+  3.760   0.136  -0.032  -0.024  -0.159  -0.085   0.022  -0.029  -0.076  -0.182  -0.027   0.113  -0.021 
+  3.916   0.143  -0.009  -0.087  -0.087  -0.110   0.042   0.058  -0.166  -0.138   0.066   0.119  -0.029 
+  3.945  -0.254  -0.020  -0.082  -0.057  -0.084  -0.091   0.174   0.047  -0.105  -0.009   0.136  -0.024 
+  4.315   0.019  -0.007   0.008  -0.005  -0.041   0.092  -0.065  -0.223   0.022  -0.211  -0.226  -0.019 
+  4.403   0.030   0.107  -0.111  -0.166   0.072   0.103  -0.173  -0.330  -0.069  -0.077  -0.058  -0.002 
+  4.708  -0.123   0.319  -0.075  -0.025  -0.044  -0.105   0.035  -0.043  -0.082  -0.158  -0.096  -0.079 
+  4.585  -0.291   0.301   0.030   0.097  -0.097  -0.245  -0.038  -0.064  -0.161  -0.141  -0.039  -0.067 
+  4.491  -0.444   0.173  -0.069   0.165   0.094  -0.194  -0.030  -0.151  -0.061  -0.116  -0.018   0.093 
+  4.733  -0.380   0.256   0.135   0.084   0.073  -0.139  -0.073  -0.275  -0.060  -0.305  -0.140   0.182 
+  4.829  -0.371   0.149   0.042  -0.077   0.001  -0.132  -0.000  -0.178   0.168   0.046   0.108   0.044 
+  5.341  -0.483   0.246   0.026  -0.044  -0.020   0.032  -0.027   0.014   0.088  -0.057  -0.036  -0.106 
+  5.472  -0.606   0.096  -0.073  -0.007  -0.076  -0.099  -0.180  -0.188  -0.098   0.011  -0.027  -0.045 
+  5.135  -0.154   0.137   0.116  -0.155   0.005  -0.071  -0.069  -0.148  -0.073  -0.076  -0.260  -0.178 
+  4.633  -0.366   0.069   0.096  -0.088   0.018  -0.020  -0.055  -0.092  -0.085  -0.208  -0.233  -0.205 
+  4.844  -0.180   0.048   0.052  -0.390  -0.277  -0.228   0.020  -0.006   0.034  -0.037   0.100  -0.140 
+  4.323   0.368   0.268   0.060  -0.215  -0.288  -0.118   0.135  -0.100  -0.139  -0.251  -0.055   0.068 
+  4.435  -0.083   0.267   0.131  -0.136   0.081  -0.090   0.098  -0.108  -0.161  -0.130  -0.104   0.050 
+  4.963   0.328   0.336   0.053  -0.339   0.101  -0.198  -0.054  -0.033  -0.058   0.006   0.053  -0.069 
+  5.246   0.514   0.377  -0.079  -0.279   0.044   0.006   0.016   0.030  -0.083   0.001   0.036  -0.074 
+  5.579   0.497   0.332   0.066  -0.253  -0.092   0.005   0.075  -0.086  -0.019  -0.165   0.071  -0.018 
+  6.098   0.390   0.254  -0.080  -0.358   0.052   0.008   0.013  -0.090  -0.071  -0.011  -0.059  -0.210 
+  6.748   0.329   0.297   0.140  -0.306  -0.053  -0.024  -0.240  -0.123  -0.059  -0.112  -0.039  -0.140 
+  7.247   0.198   0.079   0.077  -0.217  -0.108  -0.090  -0.253  -0.103  -0.063  -0.077  -0.083  -0.091 
+  6.926   0.103   0.226  -0.093  -0.230   0.022  -0.090  -0.024  -0.057  -0.101  -0.159  -0.013  -0.098 
+  6.717   0.193   0.111  -0.135  -0.281   0.102  -0.106  -0.019   0.057  -0.057  -0.246   0.143  -0.019 
+  6.769   0.316  -0.010   0.009  -0.278   0.042  -0.136  -0.013  -0.088  -0.061  -0.170   0.150  -0.080 
+  6.975   0.279   0.171   0.065  -0.210  -0.004   0.021  -0.194  -0.246  -0.040  -0.236  -0.019  -0.177 
+  6.425  -0.005   0.249   0.316  -0.178  -0.195  -0.331  -0.131  -0.038   0.070  -0.051   0.066  -0.141 
+  7.263  -0.612   0.163  -0.047  -0.353  -0.391  -0.328  -0.121   0.035   0.198   0.022   0.306   0.236 
+  7.862  -0.339   0.294  -0.013  -0.247  -0.096  -0.180   0.005  -0.048   0.082   0.023  -0.065   0.007 
+  7.902  -0.234   0.296   0.124  -0.252  -0.192  -0.232  -0.174  -0.206  -0.099  -0.039  -0.038  -0.068 
+  8.017  -0.494   0.156   0.159  -0.230  -0.093  -0.180  -0.365  -0.159  -0.056   0.047   0.056  -0.117 
+  7.933  -0.532   0.031   0.124  -0.325  -0.069  -0.141  -0.206  -0.046   0.056   0.059   0.110   0.006 
+  7.627  -0.495   0.116  -0.056  -0.465  -0.131  -0.134  -0.309  -0.191   0.072   0.000  -0.094   0.042 
+  7.938  -0.495   0.012   0.115  -0.365  -0.103  -0.166  -0.357  -0.158  -0.006  -0.128   0.008  -0.104 
+  8.007  -0.516   0.053   0.104  -0.516  -0.352  -0.156  -0.304  -0.100  -0.153  -0.113   0.077  -0.053 
+  7.410  -0.642  -0.107   0.103  -0.575  -0.294  -0.080  -0.329  -0.097  -0.023   0.026   0.077  -0.061 
+  7.249  -0.548   0.053   0.052  -0.264  -0.128   0.117  -0.376  -0.094   0.023   0.022  -0.137  -0.084 
+  7.147  -0.632  -0.105   0.139  -0.271  -0.272   0.088  -0.252  -0.115  -0.073   0.014   0.024  -0.105 
+  7.324  -0.924  -0.191   0.169  -0.404  -0.290   0.080  -0.378  -0.149  -0.141  -0.036   0.021  -0.020 
+  6.853  -1.121  -0.352   0.040  -0.152  -0.252  -0.223  -0.415  -0.124  -0.055   0.074   0.184  -0.090 
+  6.785  -0.752  -0.217   0.122  -0.193  -0.141  -0.283  -0.347  -0.175  -0.028   0.004   0.141  -0.135 
+  6.353  -0.659  -0.181   0.180  -0.066   0.057  -0.182  -0.465  -0.366  -0.030  -0.027   0.123  -0.081 
+  6.155  -0.128  -0.069  -0.049  -0.459  -0.183  -0.099  -0.082   0.040  -0.033  -0.110   0.035  -0.015 
+  5.482   0.088   0.233  -0.133  -0.503  -0.062  -0.027  -0.139  -0.106  -0.009  -0.085  -0.048  -0.013 
+  5.389   0.733   0.132  -0.049  -0.199  -0.140  -0.420  -0.255  -0.211  -0.109  -0.128  -0.011  -0.114 
+  6.892   0.897  -0.297   0.000  -0.438   0.013  -0.420  -0.411  -0.063  -0.060  -0.174  -0.026   0.017 
+  7.482   0.942  -0.510   0.117  -0.580   0.108  -0.496  -0.508  -0.036   0.003  -0.189  -0.068   0.093 
+  7.741   0.797  -0.378   0.023  -0.530   0.130  -0.473  -0.540  -0.035   0.075  -0.211  -0.075   0.111 
+  7.488   0.929  -0.412   0.112  -0.554   0.139  -0.414  -0.604   0.001   0.041  -0.201  -0.048   0.085 
+  7.184   1.026  -0.371   0.150  -0.494   0.079  -0.356  -0.666  -0.035   0.024  -0.180  -0.021   0.045 
+  6.942   0.964  -0.242   0.145  -0.354   0.059  -0.314  -0.578  -0.142   0.012  -0.172  -0.058  -0.023 
+  6.665   0.890  -0.247   0.198  -0.248   0.122  -0.268  -0.544  -0.167  -0.025  -0.290  -0.029  -0.037 
+  5.941   0.898  -0.118   0.257  -0.162   0.017  -0.060  -0.409  -0.097  -0.081  -0.371  -0.235   0.031 
+  5.492   0.701  -0.059   0.208  -0.084   0.073  -0.129  -0.314  -0.023  -0.088  -0.218  -0.001   0.009 
+  5.225   0.790   0.117  -0.093  -0.105  -0.107  -0.407  -0.297  -0.032  -0.074  -0.020   0.059   0.087 
+  4.782   0.685   0.168   0.206  -0.060  -0.195  -0.403  -0.310   0.036  -0.042  -0.073   0.016   0.073 
+  4.635   0.636   0.145   0.154  -0.039  -0.193  -0.359  -0.266  -0.185   0.002   0.064   0.153   0.035 
+  4.546   0.567  -0.091   0.048  -0.074   0.085  -0.254  -0.222  -0.089   0.017   0.014   0.033   0.030 
+  4.580   0.673   0.100   0.033  -0.236   0.046  -0.348  -0.227  -0.012  -0.020   0.039   0.064   0.041 
+  4.772   0.745  -0.010  -0.020  -0.089   0.135  -0.143  -0.209  -0.022  -0.017  -0.039  -0.055   0.003 
+  5.422   0.793  -0.036  -0.254  -0.154   0.024  -0.079  -0.101  -0.124   0.135   0.079  -0.020   0.049 
+  5.828   0.958  -0.269  -0.248  -0.075   0.030  -0.017  -0.025   0.000   0.180  -0.064  -0.065   0.008 
+  5.982   1.064  -0.486  -0.253  -0.105   0.050   0.075  -0.043  -0.096   0.328  -0.037  -0.170  -0.098 
+  6.127   1.154  -0.600  -0.219  -0.092   0.105  -0.087  -0.092  -0.050   0.245  -0.134  -0.134  -0.036 
+  6.087   1.073  -0.432  -0.240  -0.256   0.071  -0.094  -0.101  -0.100   0.262  -0.088  -0.171   0.047 
+  5.776   0.845  -0.355  -0.168  -0.168  -0.065  -0.171  -0.037  -0.078   0.243  -0.050  -0.023   0.049 
+  5.559   0.724  -0.346   0.097  -0.235  -0.103  -0.212  -0.136  -0.040   0.098   0.059   0.023   0.113 
+  5.162   0.620  -0.170   0.225  -0.249  -0.008  -0.090  -0.149  -0.057   0.245   0.168  -0.003   0.104 
+  4.284   0.611  -0.143   0.147  -0.261  -0.073  -0.067  -0.074  -0.117   0.166  -0.023  -0.065  -0.119 
+  4.476   0.488  -0.220   0.158  -0.144  -0.006   0.070  -0.067  -0.118   0.111   0.014   0.101   0.033 
+  3.821   0.558   0.062   0.269   0.082  -0.040  -0.068   0.028   0.082   0.042  -0.073   0.078   0.032 
+  3.730   0.423  -0.228   0.148   0.110   0.178  -0.194  -0.054   0.059   0.044  -0.064   0.061  -0.059 
+  3.698   0.377  -0.218   0.039  -0.117   0.000  -0.219  -0.137  -0.115  -0.127  -0.012  -0.056  -0.069 
+  3.442   0.298  -0.037   0.317  -0.085  -0.086  -0.262  -0.142  -0.026  -0.090   0.020  -0.029  -0.038 
+  3.608   0.490   0.126   0.327   0.067  -0.012  -0.075  -0.197  -0.251   0.008   0.102  -0.048  -0.054 
+  3.620   0.538  -0.164   0.075   0.081  -0.061  -0.184  -0.117  -0.054   0.154   0.021  -0.042   0.048 
+  5.454   0.191   0.343   0.322  -0.013   0.124  -0.075  -0.321  -0.077  -0.106  -0.058  -0.238   0.002 
+  7.521  -0.128  -0.002   0.189   0.063   0.236  -0.266  -0.375  -0.027   0.017  -0.021  -0.397   0.028 
+  5.609  -0.142  -0.227   0.073  -0.051   0.234  -0.188  -0.267   0.169   0.261   0.231  -0.289  -0.085 
+  3.803   0.030  -0.040   0.132  -0.015   0.127  -0.068  -0.015  -0.030   0.075   0.107  -0.009   0.060 
+  4.599  -0.083   0.112  -0.073   0.026   0.054  -0.038  -0.214  -0.272  -0.031  -0.020  -0.009   0.031 
+  4.762  -0.174  -0.114   0.078   0.107  -0.025  -0.075  -0.129  -0.153  -0.136  -0.119  -0.002  -0.002 
+  5.815  -0.687  -0.078   0.096  -0.183  -0.042   0.065  -0.309   0.037   0.128   0.018  -0.023  -0.073 
+  6.307  -0.465  -0.020   0.133  -0.440   0.036   0.070  -0.323  -0.144   0.127  -0.017  -0.083  -0.173 
+  6.342  -0.969  -0.162   0.180  -0.282   0.166  -0.057  -0.173  -0.048   0.175   0.080   0.068  -0.118 
+  5.896  -0.295  -0.001   0.207  -0.077   0.054  -0.015  -0.138  -0.204   0.096   0.042  -0.164  -0.036 
+  6.188   0.013   0.037   0.084   0.059  -0.110  -0.194  -0.422  -0.257   0.199  -0.049  -0.118  -0.047 
+  5.838  -0.024   0.333   0.094  -0.191  -0.120  -0.138  -0.173   0.048   0.004   0.031   0.015  -0.034 
+  5.557   0.241   0.251   0.150  -0.053  -0.143  -0.187  -0.216  -0.110  -0.093  -0.063  -0.103  -0.023 
+  5.212   0.051  -0.125   0.103  -0.061   0.030  -0.136  -0.225  -0.056  -0.176  -0.125  -0.068   0.004 
+  5.327   0.008   0.014   0.074  -0.131  -0.037  -0.075  -0.150  -0.150  -0.043  -0.131  -0.175  -0.068 
+  5.067   0.193   0.052   0.005  -0.136  -0.092   0.009  -0.187  -0.085  -0.086  -0.100  -0.191  -0.259 
+  5.031   0.037   0.072  -0.012  -0.233  -0.128  -0.004  -0.178  -0.200  -0.098  -0.123   0.009  -0.087 
+  4.508   0.305  -0.033   0.045  -0.013   0.012  -0.108  -0.127  -0.102   0.015   0.008  -0.033   0.044 
+  4.145   0.422   0.040  -0.088  -0.247  -0.053  -0.139  -0.118  -0.198  -0.137  -0.045   0.044  -0.197 
+  4.616  -0.124  -0.154   0.019  -0.332   0.015  -0.245  -0.171  -0.071  -0.153  -0.127   0.069   0.008 
+  5.149  -0.204  -0.132  -0.034  -0.216   0.033   0.035  -0.174  -0.026   0.024   0.022  -0.001  -0.035 
+  5.202   0.017   0.061  -0.121  -0.214   0.118   0.035  -0.148  -0.054  -0.008  -0.112   0.039   0.060 
+  5.800  -0.689   0.076   0.087   0.035   0.096  -0.202  -0.230  -0.162   0.028   0.041  -0.021  -0.044 
+  5.331  -0.355   0.065  -0.003  -0.176  -0.059  -0.169  -0.174  -0.044   0.104   0.024   0.013  -0.053 
+  5.803   0.402   0.378  -0.035  -0.361  -0.248  -0.339  -0.124  -0.295  -0.144  -0.138  -0.041   0.008 
+  5.492  -0.016   0.106   0.180  -0.103  -0.230  -0.202  -0.287  -0.282   0.069  -0.092   0.071  -0.083 
+  7.013  -0.206   0.048   0.126  -0.393  -0.374  -0.182  -0.169  -0.288   0.077   0.001  -0.101   0.127 
+  7.046  -0.244   0.144   0.188  -0.592  -0.302  -0.170  -0.311  -0.134   0.116  -0.075  -0.155  -0.002 
+  6.461  -0.209   0.099   0.538  -0.770  -0.321  -0.279  -0.321  -0.274   0.062   0.056   0.061  -0.188 
+  6.334  -0.187   0.053   0.431  -0.843  -0.381  -0.269   0.009  -0.284   0.024  -0.041   0.043  -0.119 
+  5.313  -0.154  -0.065   0.284  -0.321  -0.140  -0.253  -0.044  -0.269   0.066  -0.120  -0.011  -0.243 
+  4.855  -0.061   0.163   0.197  -0.377  -0.320  -0.237  -0.110  -0.238   0.075  -0.190  -0.046  -0.077 
+  4.961   0.027   0.368   0.207  -0.269  -0.263  -0.169  -0.223  -0.265  -0.090   0.002  -0.008   0.000 
+  4.826   0.344   0.209   0.266  -0.319  -0.029  -0.127  -0.028  -0.273  -0.219  -0.110  -0.088  -0.057 
+  4.482   0.129   0.143   0.179  -0.131  -0.143  -0.073  -0.095  -0.137  -0.114  -0.382  -0.136  -0.052 
+  5.180   0.119   0.110  -0.003  -0.324  -0.225  -0.102  -0.230  -0.180  -0.115  -0.239   0.002   0.024 
+  5.049  -0.258   0.170   0.076  -0.313  -0.175  -0.175  -0.280  -0.136  -0.264   0.111   0.232  -0.011 
+  5.891  -0.100  -0.158   0.356  -0.305  -0.470  -0.455  -0.412  -0.067  -0.300  -0.020   0.354   0.153 
+  6.786  -0.279  -0.457   0.216  -0.526  -0.511  -0.695  -0.474  -0.085  -0.331  -0.162   0.428   0.091 
+  7.444  -0.207  -0.302   0.188  -0.492  -0.330  -0.726  -0.313   0.018  -0.213  -0.347   0.440  -0.098 
+  7.576  -0.220  -0.351   0.072  -0.619  -0.345  -0.830  -0.225   0.133  -0.046  -0.342   0.414  -0.211 
+  7.545  -0.259  -0.341   0.003  -0.614  -0.256  -0.677  -0.093   0.279   0.086  -0.448   0.287  -0.261 
+  7.648  -0.016  -0.235   0.036  -0.624  -0.323  -0.714  -0.135   0.316   0.183  -0.472   0.206  -0.175 
+  7.456   0.108  -0.331  -0.224  -0.725  -0.336  -0.680  -0.218   0.271   0.073  -0.495   0.209  -0.172 
+  7.381   0.161   0.215  -0.247  -0.530  -0.272  -0.620  -0.124   0.142  -0.047  -0.103   0.255  -0.255 
+  6.974   0.271  -0.105  -0.105  -0.381  -0.236  -0.718  -0.196   0.056   0.033  -0.246   0.338  -0.193 
+  6.488   0.400  -0.145  -0.147  -0.369  -0.156  -0.466  -0.237   0.080   0.054  -0.110   0.068  -0.130 
+  5.857   0.405  -0.202  -0.120  -0.278  -0.144  -0.359  -0.009   0.204   0.050  -0.285   0.011  -0.126 
+  5.840   0.591   0.021   0.003  -0.404  -0.260  -0.292  -0.182  -0.040   0.198  -0.210   0.061  -0.140 
+  5.575   0.547  -0.118  -0.031  -0.228  -0.154  -0.205  -0.221  -0.275  -0.080  -0.161  -0.062  -0.207 
+  5.377   0.509  -0.315  -0.179  -0.238  -0.353  -0.320  -0.320  -0.212   0.029  -0.154  -0.128  -0.140 
+  5.398   0.363  -0.181  -0.179  -0.409  -0.209  -0.260  -0.270  -0.108   0.067  -0.092  -0.068   0.005 
+  5.585   0.393  -0.313  -0.159  -0.394  -0.197  -0.298  -0.369  -0.244   0.061  -0.126  -0.009  -0.004 
+  5.722   0.339  -0.099  -0.128  -0.215  -0.294  -0.290  -0.302  -0.084   0.003  -0.182   0.033  -0.094 
+  5.870   0.317   0.016  -0.035  -0.134  -0.151  -0.214  -0.103  -0.157  -0.036  -0.276  -0.036  -0.100 
+  5.951   0.274  -0.108  -0.018  -0.127  -0.050  -0.170  -0.291  -0.226  -0.165  -0.256   0.023  -0.035 
+  6.047   0.480   0.070  -0.323  -0.202  -0.173  -0.212  -0.268  -0.199  -0.071  -0.180  -0.060  -0.015 
+  5.779   0.672   0.151  -0.237  -0.384  -0.159  -0.287  -0.271  -0.168  -0.061  -0.207  -0.072   0.035 
+  7.500  -0.221   0.007  -0.152  -0.270  -0.316  -0.224  -0.210  -0.206  -0.049  -0.126   0.070   0.020 
+  6.550  -0.011  -0.056  -0.391  -0.545  -0.408  -0.230  -0.171  -0.219  -0.100  -0.191   0.006   0.015 
+  5.926   0.621  -0.011  -0.395  -0.424   0.143  -0.303  -0.014  -0.162  -0.320  -0.152  -0.198  -0.142 
+  5.900   0.699  -0.033  -0.369  -0.431  -0.049  -0.295  -0.037  -0.110  -0.105  -0.125  -0.122  -0.201 
+  6.059   0.741  -0.288  -0.550  -0.386   0.015  -0.382  -0.104  -0.192   0.075  -0.025  -0.047  -0.167 
+  6.547   0.776  -0.496  -0.509  -0.311   0.194  -0.481  -0.131  -0.071   0.107  -0.105  -0.118  -0.201 
+  6.674   0.353  -0.607  -0.312  -0.352   0.228  -0.416  -0.047   0.021   0.010  -0.233  -0.192  -0.316 
+  7.182   0.080  -0.713  -0.310  -0.646   0.008  -0.394   0.161   0.191  -0.043  -0.280   0.062  -0.026 
+  7.565   0.088  -0.729  -0.113  -0.608  -0.139  -0.529   0.178   0.205  -0.097  -0.285   0.165  -0.156 
+  7.783  -0.122  -0.722  -0.068  -0.647  -0.224  -0.409   0.356   0.109   0.016  -0.229   0.252  -0.129 
+  7.437  -0.298  -0.628   0.047  -0.728  -0.415  -0.249   0.166  -0.045   0.105  -0.164   0.016  -0.282 
+  7.414  -0.212  -0.445   0.202  -0.649  -0.404  -0.139   0.112  -0.138   0.253  -0.228   0.010  -0.204 
+  7.075  -0.354  -0.350   0.242  -0.770  -0.480  -0.163  -0.007  -0.280   0.036  -0.121   0.139  -0.041 
+  6.551  -0.436  -0.230   0.356  -0.580  -0.428   0.051  -0.024  -0.178   0.011  -0.102   0.130  -0.065 
+  5.884  -0.261  -0.347   0.237  -0.362  -0.133   0.059  -0.204  -0.247   0.011  -0.143   0.021  -0.056 
+  6.251  -0.259   0.017   0.164  -0.207  -0.175  -0.230  -0.136  -0.043  -0.100  -0.201  -0.157   0.029 
+  6.330  -0.210   0.126  -0.034  -0.043  -0.100  -0.274  -0.164  -0.049  -0.112  -0.223  -0.053  -0.020 
+  7.690  -0.428   0.059   0.163  -0.142  -0.128  -0.441  -0.296  -0.168  -0.161  -0.149  -0.183  -0.125 
+  8.127  -0.722  -0.002   0.231  -0.039   0.007  -0.308  -0.259  -0.181  -0.159  -0.049  -0.010  -0.169 
+  7.712  -0.384  -0.125  -0.019  -0.039  -0.101  -0.292  -0.168  -0.049  -0.020   0.074  -0.133  -0.114 
+  7.734  -0.173  -0.175  -0.176  -0.205  -0.091  -0.122  -0.292  -0.107   0.023  -0.080  -0.280  -0.065 
+  6.925  -0.073  -0.299  -0.001  -0.533  -0.020  -0.067  -0.079  -0.135   0.031  -0.089  -0.201  -0.057 
+  7.033  -0.212  -0.310   0.100  -0.430  -0.252  -0.285  -0.348  -0.276  -0.108   0.003   0.154  -0.103 
+  8.344  -0.305  -0.280   0.170  -0.344  -0.172  -0.312  -0.201  -0.034   0.086   0.004   0.093  -0.128 
+  6.889  -0.369  -0.146   0.114  -0.286  -0.077  -0.199  -0.014  -0.275   0.067   0.068   0.090  -0.083 
+  6.056  -0.094  -0.082   0.174  -0.271  -0.094  -0.113  -0.213  -0.318   0.060   0.081   0.003  -0.085 
+  6.703  -0.414  -0.144   0.360  -0.616  -0.154  -0.144  -0.074  -0.185   0.088   0.133   0.009  -0.044 
+  6.746  -0.287  -0.135   0.319  -0.446  -0.082  -0.303  -0.142  -0.284  -0.023   0.062   0.123  -0.038 
+  6.975  -0.316  -0.312   0.140  -0.420  -0.180  -0.233  -0.266  -0.239   0.210  -0.062  -0.051  -0.187 
+  6.857  -0.289  -0.117   0.296  -0.318  -0.084  -0.129  -0.421  -0.448  -0.002  -0.352  -0.159  -0.149 
+  7.403  -0.385  -0.139   0.251  -0.132  -0.035  -0.231  -0.319  -0.385  -0.138  -0.260  -0.074  -0.178 
+  7.131  -0.437  -0.014   0.313  -0.111  -0.129  -0.127  -0.178  -0.264  -0.206  -0.185  -0.185  -0.378 
+  6.754  -0.263   0.235   0.196  -0.282  -0.054  -0.140  -0.336  -0.325  -0.024  -0.278  -0.099  -0.159 
+  6.350  -0.266   0.407   0.364  -0.392  -0.072  -0.096  -0.360  -0.263   0.180  -0.282  -0.091  -0.151 
+  6.081  -0.362   0.300   0.203  -0.323  -0.044   0.119  -0.329  -0.361   0.049  -0.540  -0.182  -0.111 
+  6.158  -0.196   0.476   0.375  -0.389  -0.130   0.179  -0.185  -0.301   0.049  -0.542  -0.224  -0.165 
+  7.453   0.025   0.129   0.199  -0.482  -0.122  -0.089  -0.264  -0.264   0.075  -0.320   0.009  -0.017 
+  7.667   0.118   0.185  -0.177  -0.505  -0.099  -0.200  -0.355  -0.326  -0.178  -0.202  -0.027  -0.021 
+  7.306   0.154   0.066  -0.058  -0.540  -0.030  -0.212  -0.354  -0.283  -0.054  -0.232   0.032  -0.078 
+  6.065   0.011   0.152   0.023  -0.459  -0.015  -0.203  -0.310  -0.233  -0.100  -0.019  -0.072  -0.091 
+  6.209  -0.060   0.216   0.112  -0.374  -0.118  -0.322  -0.475  -0.282  -0.150  -0.034   0.132  -0.001 
+  6.172  -0.115  -0.183   0.105  -0.497  -0.053  -0.268  -0.285  -0.068   0.092  -0.035   0.192  -0.011 
+  6.191  -0.437  -0.369   0.080  -0.435   0.106  -0.091  -0.242  -0.195   0.137  -0.032   0.014  -0.104 
+  6.250  -0.569  -0.207   0.119  -0.487  -0.104  -0.444  -0.294  -0.176   0.057  -0.109  -0.082   0.026 
+  5.932   0.114  -0.033   0.253  -0.422  -0.393  -0.469  -0.405  -0.114  -0.024  -0.122  -0.092   0.034 
+  4.350   0.116  -0.117   0.250  -0.327  -0.116  -0.218  -0.227  -0.105  -0.050  -0.213  -0.012  -0.026 
+  3.780   0.204  -0.008   0.343  -0.135  -0.098  -0.134  -0.097  -0.104   0.020  -0.213   0.037   0.064 
+  3.761   0.310  -0.053   0.187  -0.197  -0.048  -0.042  -0.027  -0.049  -0.049  -0.100   0.127  -0.099 
+  3.632   0.191  -0.059   0.104   0.047   0.066  -0.157  -0.126   0.003  -0.130  -0.102  -0.201  -0.256 
+  3.594   0.170  -0.206   0.084   0.070   0.206  -0.073  -0.127  -0.068  -0.001  -0.173  -0.102  -0.299 
+  4.447   0.323  -0.196  -0.083  -0.065   0.042  -0.381  -0.105  -0.104   0.155   0.034   0.021  -0.069 
+  6.560   0.319  -0.474  -0.221  -0.450   0.072  -0.778  -0.137  -0.056   0.309  -0.166   0.014   0.036 
+  7.288   0.210  -0.476  -0.340  -0.548   0.042  -0.879  -0.075   0.012   0.103  -0.379   0.008  -0.022 
+  7.535   0.020  -0.539  -0.263  -0.553   0.121  -0.913  -0.105   0.005   0.031  -0.436  -0.007  -0.115 
+  7.564  -0.053  -0.664  -0.211  -0.513   0.180  -0.938  -0.208  -0.104  -0.004  -0.427   0.024  -0.138 
+  7.704   0.123  -0.605  -0.237  -0.621   0.200  -0.823   0.041  -0.102  -0.022  -0.429   0.008  -0.150 
+  7.761   0.200  -0.609  -0.229  -0.545   0.180  -0.849  -0.005  -0.043  -0.073  -0.464   0.162  -0.190 
+  7.783  -0.061  -0.685  -0.324  -0.540  -0.068  -0.943   0.027  -0.098  -0.220  -0.409   0.183  -0.252 
+  8.163  -0.181  -0.574  -0.134  -0.476  -0.108  -0.806   0.161  -0.031   0.026  -0.400   0.127  -0.481 
+  7.908  -0.040  -0.671  -0.159  -0.728  -0.238  -0.533   0.260   0.105  -0.089  -0.353   0.183  -0.527 
+  7.366  -0.014  -0.665  -0.159  -0.705  -0.276  -0.624   0.297   0.199  -0.055  -0.333   0.268  -0.314 
+  6.805  -0.020  -0.533  -0.062  -0.482  -0.306  -0.639   0.255   0.096  -0.013  -0.161   0.315  -0.263 
+  6.441   0.043  -0.386   0.120  -0.607  -0.382  -0.593   0.163  -0.009   0.067  -0.054   0.173  -0.646 
+  6.503   0.137  -0.468   0.106  -0.598  -0.437  -0.633   0.174   0.114   0.114   0.155   0.196  -0.246 
+  6.380   0.268  -0.429   0.130  -0.683  -0.339  -0.743   0.136   0.140  -0.048  -0.070   0.128  -0.210 
+  6.308   0.010  -0.523   0.166  -0.659  -0.274  -0.716  -0.047   0.023  -0.137   0.007   0.232  -0.124 
+  6.008   0.263  -0.516   0.207  -0.533  -0.260  -0.626  -0.097  -0.058  -0.145  -0.064   0.149  -0.132 
+  5.671   0.239  -0.295   0.103  -0.407  -0.234  -0.547  -0.101   0.116  -0.084  -0.034   0.318  -0.102 
+  5.338   0.260  -0.165   0.137  -0.294  -0.203  -0.615  -0.182  -0.071  -0.177   0.082   0.176  -0.202 
+  4.900   0.199  -0.184   0.133  -0.315  -0.121  -0.391   0.054   0.062  -0.063  -0.157   0.014  -0.155 
+  4.678   0.382  -0.150   0.125  -0.254  -0.240  -0.332   0.043  -0.089  -0.011  -0.053   0.101  -0.060 
+  4.372   0.211  -0.257  -0.016  -0.224  -0.199  -0.506   0.028  -0.186   0.041   0.013   0.044  -0.067 
+  4.426   0.202  -0.249   0.211   0.054  -0.018  -0.151   0.048   0.003   0.032  -0.087   0.100  -0.297 
+  4.164   0.353  -0.183   0.240  -0.203   0.055  -0.352  -0.004  -0.042   0.035  -0.002   0.021  -0.206 
+  4.236   0.293  -0.219   0.194  -0.150   0.071  -0.351  -0.027  -0.053  -0.075  -0.049   0.147  -0.023 
+  3.869   0.185  -0.252   0.077  -0.169   0.135  -0.148   0.044   0.008  -0.113  -0.031   0.152   0.025 
+  3.672   0.066  -0.397   0.145  -0.088   0.029  -0.255  -0.096   0.007   0.024   0.031   0.073  -0.099 
+  3.624   0.104  -0.520   0.192  -0.044  -0.032  -0.094   0.001   0.175   0.074   0.087   0.194   0.005 
+  3.697   0.283  -0.405   0.204   0.027   0.142  -0.186  -0.005  -0.024  -0.085   0.054  -0.005  -0.118 
+  3.711   0.343  -0.217   0.158   0.124  -0.018  -0.183  -0.102   0.045   0.008  -0.110   0.205   0.050 
+  3.403   0.199  -0.391   0.001   0.005   0.055  -0.073   0.004   0.162  -0.015  -0.064   0.117   0.025 
+  3.331   0.327  -0.065   0.016  -0.104   0.118  -0.238  -0.057   0.119   0.056  -0.132   0.130   0.086 
+  3.324   0.336  -0.125   0.028  -0.254  -0.133  -0.092  -0.022  -0.012  -0.056   0.050   0.027  -0.114 
+  3.232   0.060  -0.414  -0.008  -0.023   0.016  -0.104  -0.024   0.011   0.074   0.097   0.050  -0.075 
+  3.568   0.227  -0.411   0.034   0.071   0.039  -0.191  -0.016  -0.051  -0.041  -0.018  -0.027  -0.095 
+  3.386   0.293  -0.233  -0.044   0.121   0.082  -0.070  -0.222  -0.124  -0.070   0.145   0.126   0.011 
+  3.406   0.327  -0.132   0.054   0.107   0.057  -0.136  -0.197  -0.051  -0.001  -0.083   0.174   0.175 
+  3.444   0.419  -0.067   0.035  -0.137  -0.003  -0.039  -0.083  -0.050  -0.087  -0.005   0.008  -0.142 
+  3.486   0.245  -0.320   0.129   0.010  -0.115  -0.178  -0.130  -0.044   0.112  -0.011  -0.004  -0.040 
+  3.216   0.164  -0.325  -0.009  -0.026  -0.089  -0.042   0.049   0.066   0.135  -0.138  -0.050   0.068 
+  3.304   0.191  -0.209   0.032  -0.032   0.057  -0.199  -0.029  -0.213   0.033  -0.036   0.004   0.004 
+  3.460   0.178  -0.257   0.106  -0.051  -0.037  -0.103  -0.152  -0.162   0.115   0.020   0.148  -0.013 
+  3.157   0.107  -0.210   0.129   0.038   0.130  -0.117  -0.223  -0.047   0.241   0.063   0.192   0.039 
+  3.483   0.245  -0.203   0.205  -0.027   0.086  -0.187  -0.211  -0.142   0.048   0.081   0.202  -0.016 
+  3.537   0.220  -0.217   0.067  -0.144  -0.006  -0.119  -0.137  -0.028  -0.058   0.084   0.179  -0.036 
+  3.416   0.215  -0.268  -0.042  -0.231  -0.042  -0.053  -0.156  -0.066   0.024   0.141   0.155   0.001 
+  3.376   0.257  -0.032   0.079  -0.046   0.118  -0.280  -0.210  -0.057  -0.058   0.053  -0.061  -0.082 
+  3.123   0.092  -0.171   0.148  -0.104  -0.008  -0.180  -0.132  -0.025   0.036   0.008  -0.065  -0.128 
+  3.121   0.106  -0.489  -0.012   0.092  -0.037  -0.203   0.014   0.072  -0.020  -0.043   0.081  -0.002 
+  3.133   0.244  -0.233   0.130   0.067   0.119  -0.259  -0.206  -0.059   0.027  -0.052  -0.037  -0.000 
+  3.088   0.389  -0.062  -0.013  -0.110   0.080  -0.175  -0.268   0.103   0.020   0.019   0.017   0.000 
+  3.185   0.401  -0.264  -0.030  -0.053  -0.087  -0.328  -0.207   0.022   0.043   0.110  -0.028  -0.049 
+  3.004   0.036  -0.170  -0.026  -0.314   0.072  -0.024   0.002  -0.113   0.049   0.258   0.170   0.016 
+  3.203   0.257  -0.249  -0.162  -0.023   0.077   0.014  -0.056  -0.175   0.058   0.215   0.214   0.084 
+  3.355   0.274  -0.171  -0.095  -0.299  -0.032  -0.223  -0.170  -0.085  -0.095  -0.118   0.154   0.118 
+  3.406   0.365  -0.118   0.038  -0.080  -0.038  -0.062  -0.149   0.116   0.149  -0.120   0.068  -0.136 
+  3.078   0.280  -0.182   0.038  -0.116   0.004  -0.258  -0.237   0.089   0.002   0.033   0.100   0.021 
+  3.289   0.256  -0.187   0.297   0.113   0.115  -0.230  -0.301  -0.052   0.143   0.046   0.157   0.010 
+  3.068   0.071  -0.265   0.113   0.116   0.086  -0.159  -0.115  -0.078   0.048  -0.007   0.007  -0.022 
+  3.474   0.324  -0.184   0.115  -0.044  -0.042  -0.110  -0.169  -0.214  -0.108   0.007   0.003   0.034 
+  3.786   0.428  -0.019   0.159  -0.018  -0.082  -0.240  -0.307  -0.132  -0.086   0.022  -0.011  -0.052 
+  3.735   0.091  -0.274   0.060  -0.184  -0.060  -0.186  -0.094   0.022  -0.068  -0.098  -0.009  -0.128 
+  3.511   0.000  -0.216   0.167  -0.166  -0.101  -0.122  -0.221  -0.051   0.082   0.061   0.162  -0.082 
+  3.402   0.087  -0.201  -0.061  -0.213   0.003  -0.157  -0.141  -0.180   0.016   0.030   0.055  -0.074 
+  3.448   0.216  -0.144   0.177  -0.043   0.047  -0.064   0.084  -0.091  -0.028  -0.197  -0.011   0.062 
+  3.492   0.154  -0.208   0.082   0.040  -0.008   0.022   0.003   0.016   0.022  -0.101  -0.048  -0.180 
+  3.321   0.343   0.029   0.224  -0.025   0.098  -0.002  -0.278  -0.060   0.097   0.028   0.092   0.036 
+  3.262   0.384  -0.210   0.047   0.013   0.043  -0.025  -0.071  -0.011   0.105   0.011   0.075   0.015 
+  3.693   0.213  -0.341   0.029  -0.080  -0.005  -0.064  -0.236   0.005   0.236   0.159  -0.022   0.011 
+  3.489   0.141  -0.320   0.083   0.003   0.077  -0.140  -0.292  -0.046   0.022   0.214   0.003  -0.102 
+  3.523   0.275  -0.166   0.083  -0.092   0.109  -0.038  -0.125  -0.063  -0.034   0.102  -0.010  -0.008 
+  3.498   0.321  -0.376  -0.031   0.034   0.174  -0.017  -0.129  -0.112  -0.041  -0.089  -0.085   0.082 
+  3.527   0.116  -0.292   0.062   0.124   0.147  -0.061  -0.094  -0.062   0.055  -0.165   0.035  -0.044 
+  3.752   0.076  -0.279   0.033   0.009  -0.051  -0.033  -0.067  -0.061   0.028   0.008   0.131   0.044 
+  3.744  -0.231  -0.293  -0.067   0.035   0.075   0.135  -0.070  -0.082  -0.011  -0.185  -0.083  -0.095 
+  4.057  -0.412  -0.208  -0.008   0.015   0.077   0.020  -0.130  -0.106   0.179   0.059  -0.006   0.046 
+  4.343  -0.644  -0.053   0.027  -0.250  -0.085   0.088   0.147  -0.140   0.293   0.099  -0.132   0.071 
+  5.003  -0.504   0.020  -0.002  -0.201  -0.002  -0.032   0.082  -0.180   0.124  -0.002  -0.103  -0.032 
+  5.292  -0.615  -0.054  -0.099  -0.123  -0.045  -0.116  -0.148  -0.241   0.118  -0.110  -0.060  -0.039 
+  5.497  -0.873   0.066  -0.082  -0.169  -0.024   0.015  -0.142  -0.065  -0.047  -0.162  -0.039  -0.098 
+  5.806  -0.964  -0.016   0.062   0.056  -0.005  -0.209  -0.073  -0.138   0.042  -0.142  -0.009   0.027 
+  5.686  -1.036  -0.152   0.027   0.106   0.039  -0.142   0.067  -0.046   0.147   0.093  -0.029  -0.049 
+  6.063  -1.007  -0.040   0.238   0.067  -0.063  -0.361  -0.183  -0.140   0.113   0.045   0.031   0.164 
+  6.133  -1.106  -0.120  -0.054  -0.107  -0.168   0.077  -0.165  -0.232   0.221  -0.032  -0.023  -0.059 
+  6.117  -0.942  -0.387  -0.019   0.097  -0.070   0.079   0.019  -0.217   0.069  -0.101  -0.176  -0.085 
+  6.061  -1.036  -0.296  -0.040  -0.015   0.013  -0.025  -0.008  -0.164   0.010  -0.118  -0.162  -0.101 
+  5.772  -0.905  -0.195   0.109   0.044  -0.018  -0.026   0.055  -0.216  -0.104  -0.021  -0.076   0.151 
+  5.665  -1.119  -0.072   0.180  -0.014   0.013  -0.003  -0.004  -0.092  -0.009   0.030  -0.097   0.073 
+  5.317  -1.008  -0.122  -0.032  -0.024  -0.213  -0.015   0.066   0.067   0.105  -0.104  -0.002   0.012 
+  5.693  -0.842  -0.113   0.009  -0.081  -0.010  -0.119  -0.050  -0.164   0.055  -0.091  -0.054  -0.021 
+  5.805  -0.840  -0.155   0.039  -0.096  -0.085   0.110  -0.088  -0.343   0.162  -0.009   0.002  -0.077 
+  5.350  -0.665  -0.141   0.071  -0.074  -0.075   0.055  -0.122  -0.261   0.085   0.070  -0.050   0.002 
+  5.141  -0.375   0.013  -0.058   0.033   0.067  -0.027   0.012  -0.265  -0.009  -0.001   0.090   0.019 
+  5.478  -0.536  -0.293   0.275   0.096   0.114  -0.222  -0.238  -0.068  -0.060  -0.031   0.017  -0.023 
+  5.273  -0.553  -0.331   0.193  -0.008   0.034  -0.343  -0.168   0.019   0.085  -0.037   0.086  -0.028 
+  4.091   0.013  -0.148   0.058   0.047   0.040  -0.140  -0.136   0.004   0.172   0.041   0.049  -0.128 
+  3.658   0.240  -0.009   0.125   0.035   0.121  -0.064   0.026  -0.062   0.048  -0.026  -0.111  -0.130 
+  5.644  -0.649   0.260   0.113   0.215  -0.301   0.044  -0.216  -0.329   0.023   0.036  -0.129   0.207 
+  5.244  -0.809   0.245   0.199   0.162  -0.190   0.025  -0.276  -0.187   0.065   0.096  -0.188   0.196 
+  3.526   0.046  -0.072  -0.046   0.020   0.165   0.081  -0.319  -0.130  -0.000  -0.084   0.232   0.011 
+  4.126  -0.326   0.097  -0.197   0.040   0.001  -0.161  -0.313  -0.236  -0.036  -0.071   0.088  -0.007 
+  4.270  -0.433   0.258  -0.046   0.086   0.307  -0.336  -0.194  -0.138   0.087   0.024   0.094   0.019 
+  4.021   0.248   0.105  -0.013   0.064  -0.051  -0.152  -0.130  -0.153  -0.012  -0.072   0.139  -0.103 
+  3.861   0.228  -0.048   0.153  -0.143  -0.048  -0.189  -0.162  -0.095  -0.050  -0.028   0.153  -0.006 
+  5.331  -0.063   0.106   0.187  -0.238   0.033  -0.231  -0.094  -0.088  -0.005  -0.049   0.153  -0.147 
+  9.892  -0.297   0.554   0.214  -0.051  -0.202  -0.237  -0.167  -0.076  -0.247  -0.079   0.059  -0.246 
+ 12.353  -0.380   0.411   0.441   0.001  -0.284  -0.445  -0.161  -0.318  -0.352  -0.183  -0.104  -0.339 
+ 13.936  -0.458   0.120   0.624  -0.284  -0.205  -0.645   0.010  -0.585  -0.313  -0.282   0.037  -0.346 
+ 14.756  -0.547   0.135   0.641  -0.405  -0.248  -0.724   0.066  -0.641  -0.314  -0.266   0.020  -0.371 
+ 14.922  -0.590   0.153   0.672  -0.436  -0.240  -0.789   0.091  -0.680  -0.325  -0.288   0.064  -0.470 
+ 14.925  -0.665   0.206   0.720  -0.407  -0.287  -0.759   0.053  -0.690  -0.318  -0.297   0.075  -0.497 
+ 14.685  -0.597   0.223   0.708  -0.386  -0.269  -0.744   0.036  -0.694  -0.267  -0.328   0.088  -0.528 
+ 14.022  -0.511   0.215   0.681  -0.287  -0.209  -0.691   0.032  -0.610  -0.254  -0.382   0.121  -0.511 
+ 12.646  -0.285   0.185   0.271  -0.373  -0.310  -0.368   0.123  -0.423  -0.193  -0.397   0.063  -0.361 
+  8.965   0.208   0.538   0.368   0.005  -0.114  -0.163   0.175  -0.281  -0.036  -0.390  -0.001  -0.301 
+  7.414   0.343   0.516   0.595   0.118  -0.048  -0.330   0.364  -0.244  -0.106  -0.384   0.181  -0.446 
+  7.016   0.496   0.622   0.767   0.074  -0.089  -0.340   0.250  -0.178  -0.091  -0.210   0.213  -0.450 
+  6.717   0.605   0.534   0.697   0.054  -0.078  -0.338   0.331  -0.222  -0.098  -0.299   0.239  -0.393 
+  7.925   0.214   0.426   0.406   0.420  -0.012  -0.082  -0.288  -0.259  -0.143  -0.272   0.128  -0.334 
+ 11.598  -0.415   0.278   0.152   0.107  -0.190  -0.195  -0.213  -0.219  -0.312  -0.278  -0.026  -0.446 
+ 12.460  -0.742   0.297   0.231   0.066  -0.349  -0.277  -0.062  -0.259  -0.347  -0.140  -0.027  -0.320 
+ 13.172  -0.444   0.112   0.494  -0.100  -0.377  -0.372  -0.046  -0.450  -0.351  -0.303   0.033  -0.458 
+ 13.709  -0.400   0.119   0.587  -0.135  -0.416  -0.446  -0.140  -0.560  -0.293  -0.165  -0.033  -0.477 
+ 13.711  -0.260   0.067   0.675  -0.266  -0.385  -0.505  -0.104  -0.559  -0.275  -0.186  -0.078  -0.481 
+ 13.801  -0.197   0.011   0.663  -0.385  -0.326  -0.512  -0.116  -0.501  -0.286  -0.232  -0.065  -0.506 
+ 13.363  -0.083  -0.074   0.685  -0.332  -0.285  -0.532  -0.068  -0.491  -0.278  -0.252  -0.062  -0.542 
+ 12.386  -0.076  -0.041   0.593  -0.119  -0.304  -0.383  -0.023  -0.448  -0.322  -0.295   0.008  -0.560 
+  9.902   0.035   0.084   0.538   0.047  -0.320  -0.302   0.076  -0.337  -0.234  -0.305   0.156  -0.422 
+  7.016   0.494   0.523   0.624   0.192  -0.296  -0.013   0.217  -0.094  -0.258  -0.181   0.034  -0.401 
+  6.950   0.379   0.325   0.327   0.022  -0.027   0.183   0.359  -0.129  -0.166  -0.232  -0.211  -0.341 
+  6.761   0.429   0.656   0.228   0.045  -0.167  -0.059   0.208  -0.111  -0.238  -0.219  -0.133  -0.306 
+  6.277   0.283   0.580   0.045   0.132  -0.201  -0.041  -0.172  -0.097  -0.184  -0.124  -0.169  -0.171 
+  6.205   0.046   0.804   0.276   0.253  -0.161   0.086  -0.214  -0.200  -0.319  -0.061  -0.258  -0.229 
+  6.160  -0.091   0.792   0.230   0.110   0.020   0.023   0.111  -0.201  -0.279  -0.078  -0.338  -0.349 
+  8.814  -0.353   0.457  -0.127  -0.097   0.093  -0.073  -0.018  -0.078  -0.022  -0.136  -0.156  -0.313 
+ 10.640  -0.510   0.568  -0.082  -0.123  -0.084  -0.185  -0.116  -0.191  -0.172  -0.170  -0.122  -0.342 
+ 11.844  -0.727   0.553   0.224  -0.098  -0.433  -0.246  -0.017  -0.283  -0.471  -0.074  -0.051  -0.429 
+ 13.032  -0.453   0.217   0.384   0.009  -0.480  -0.346  -0.184  -0.298  -0.427  -0.159  -0.037  -0.432 
+ 13.781  -0.370   0.086   0.489  -0.312  -0.297  -0.461  -0.052  -0.562  -0.332  -0.175  -0.003  -0.381 
+ 14.175  -0.351   0.012   0.668  -0.388  -0.260  -0.599  -0.055  -0.612  -0.275  -0.328   0.059  -0.413 
+ 14.453  -0.329  -0.072   0.668  -0.403  -0.306  -0.585  -0.047  -0.620  -0.300  -0.342   0.061  -0.413 
+ 14.506  -0.302  -0.056   0.617  -0.389  -0.356  -0.531  -0.129  -0.561  -0.350  -0.349   0.058  -0.405 
+ 14.118  -0.212  -0.099   0.626  -0.228  -0.359  -0.578  -0.081  -0.537  -0.365  -0.433   0.147  -0.438 
+ 13.527  -0.300   0.064   0.528  -0.071  -0.387  -0.570  -0.043  -0.408  -0.404  -0.479   0.189  -0.318 
+ 12.658  -0.180   0.153   0.326  -0.228  -0.343  -0.508   0.185  -0.262  -0.294  -0.517   0.007  -0.257 
+ 12.904  -0.254   0.213   0.423  -0.147  -0.273  -0.646  -0.054  -0.374  -0.292  -0.473   0.061  -0.278 
+ 13.154  -0.316   0.096   0.526  -0.021  -0.276  -0.508  -0.174  -0.475  -0.361  -0.440   0.215  -0.110 
+ 13.276  -0.087  -0.067   0.695  -0.218  -0.343  -0.533  -0.142  -0.420  -0.265  -0.456   0.169  -0.162 
+ 13.593  -0.034  -0.157   0.619  -0.326  -0.226  -0.586  -0.066  -0.450  -0.357  -0.360   0.131  -0.243 
+ 13.898  -0.036  -0.235   0.699  -0.420  -0.221  -0.641  -0.047  -0.503  -0.308  -0.349   0.142  -0.370 
+ 13.775   0.040  -0.332   0.770  -0.462  -0.225  -0.687   0.013  -0.480  -0.223  -0.380   0.138  -0.502 
+ 13.348   0.055  -0.312   0.818  -0.426  -0.191  -0.686   0.050  -0.376  -0.090  -0.484   0.070  -0.475 
+ 12.170   0.316  -0.441   0.781  -0.391  -0.116  -0.512   0.063  -0.217  -0.188  -0.545  -0.046  -0.371 
+  8.769   0.818  -0.414   0.430   0.052   0.013  -0.178   0.050  -0.269  -0.088  -0.434  -0.362  -0.387 
+  6.757   0.729   0.012   0.619   0.370  -0.041  -0.357  -0.002  -0.168  -0.119  -0.343  -0.234  -0.422 
+  6.729   0.937  -0.002   0.475   0.365   0.004  -0.211  -0.069  -0.169  -0.134  -0.421  -0.074  -0.462 
+  6.100   0.765   0.180   0.536   0.369  -0.075  -0.169   0.006  -0.220  -0.038  -0.277  -0.199  -0.419 
+  6.241   0.502   0.031   0.547   0.275  -0.052  -0.241  -0.065  -0.193  -0.251  -0.292  -0.046  -0.315 
+  6.362   0.391  -0.137   0.312   0.016  -0.022   0.064   0.072  -0.044   0.015  -0.256  -0.121  -0.247 
+  8.895   0.191  -0.533   0.168  -0.220  -0.149   0.019  -0.001  -0.013  -0.027  -0.416  -0.331  -0.244 
+  6.416   0.498  -0.152   0.221  -0.123  -0.058   0.051   0.052  -0.018   0.007  -0.358  -0.297  -0.194 
+  4.778   0.406   0.218   0.348   0.049  -0.084  -0.132  -0.052  -0.168   0.020   0.075   0.180  -0.157 
+  4.538   0.372  -0.106   0.241  -0.095  -0.112  -0.233   0.156  -0.153  -0.053  -0.029  -0.082  -0.076 
+  4.291   0.203  -0.193   0.177   0.013  -0.127  -0.175  -0.095  -0.226  -0.174  -0.050  -0.059  -0.180 
+  4.029   0.172  -0.072   0.234  -0.028  -0.248  -0.124   0.016  -0.223  -0.104  -0.143  -0.080  -0.131 
+  4.152   0.119  -0.295   0.287   0.081  -0.070  -0.050  -0.028  -0.285  -0.032  -0.014   0.021  -0.204 
+  4.240   0.198  -0.294   0.253   0.012  -0.114  -0.118   0.032  -0.210  -0.065  -0.090   0.150   0.011 
+  3.851   0.286  -0.095   0.246  -0.166  -0.051  -0.191  -0.070  -0.070  -0.198  -0.024   0.098  -0.082 
+  3.742   0.239  -0.170   0.177  -0.083   0.022  -0.110   0.120  -0.138  -0.051   0.170   0.187  -0.109 
+  3.722   0.186  -0.150   0.173  -0.024  -0.026  -0.116   0.088  -0.065   0.073   0.012   0.066  -0.014 
+  3.913   0.157  -0.285   0.054   0.017   0.059  -0.027  -0.077  -0.278  -0.263  -0.075   0.037  -0.023 
+  3.768   0.267  -0.282   0.147  -0.026  -0.105  -0.114  -0.064  -0.210  -0.095  -0.021   0.109  -0.018 
+  3.784   0.321  -0.437   0.044   0.015   0.005  -0.103  -0.135  -0.123   0.055  -0.056   0.066  -0.051 
+  3.907   0.263  -0.187   0.202   0.110   0.020   0.070  -0.063  -0.193  -0.126  -0.042  -0.033  -0.080 
+  3.533   0.196  -0.149   0.092   0.005  -0.084  -0.172  -0.013  -0.147   0.153   0.039   0.060  -0.015 
+  3.521   0.254  -0.099   0.043   0.163   0.077  -0.172  -0.124  -0.179   0.065   0.103   0.148  -0.122 
+  3.751   0.176  -0.131   0.194   0.223   0.104   0.027  -0.131  -0.254   0.050   0.123   0.195  -0.073 
+  8.193   0.328  -0.434  -0.138  -0.257  -0.186  -0.570  -0.427  -0.204  -0.004  -0.100  -0.165  -0.087 
+  8.105   0.410  -0.318  -0.277  -0.247  -0.272  -0.858  -0.660  -0.074   0.193   0.048  -0.171   0.043 
+  6.775  -0.363  -0.024  -0.224  -0.437  -0.780  -0.464  -0.288   0.289   0.502   0.285  -0.258  -0.008 
+  6.874  -0.069  -0.635  -0.489  -0.197  -0.254  -0.274   0.009   0.142   0.185  -0.005  -0.195  -0.171 
+  9.556   0.151  -1.343  -0.587  -0.322  -0.083  -0.354   0.011  -0.142   0.311  -0.030  -0.158   0.034 
+ 12.328   0.885  -1.161  -0.876  -0.288   0.068  -0.456   0.223  -0.358   0.245  -0.370  -0.290  -0.057 
+ 12.996   0.833  -1.402  -0.634  -0.396   0.041  -0.340   0.219  -0.300   0.275  -0.577  -0.248  -0.057 
+ 13.546   0.539  -1.437  -0.305  -0.514  -0.089  -0.315   0.160  -0.147   0.277  -0.650  -0.190  -0.004 
+ 13.709   0.643  -1.357  -0.278  -0.489  -0.216  -0.277   0.095  -0.134   0.159  -0.504  -0.211  -0.047 
+ 14.430   0.358  -1.271  -0.138  -0.494  -0.437  -0.277   0.169  -0.089   0.091  -0.508  -0.102  -0.143 
+ 14.075   0.525  -1.065  -0.038  -0.477  -0.622  -0.352   0.171  -0.188   0.063  -0.432   0.102  -0.281 
+ 14.105   0.512  -0.921   0.245  -0.505  -0.628  -0.547   0.159  -0.428   0.074  -0.462   0.232  -0.343 
+ 13.406   0.547  -0.798   0.474  -0.457  -0.621  -0.546   0.014  -0.505   0.003  -0.538   0.357  -0.373 
+ 13.003   0.455  -0.681   0.587  -0.373  -0.454  -0.399  -0.114  -0.483  -0.097  -0.686   0.323  -0.398 
+ 13.012   0.557  -0.598   0.603  -0.382  -0.566  -0.441  -0.212  -0.480  -0.064  -0.607   0.362  -0.431 
+ 13.651   0.383  -0.554   0.643  -0.446  -0.555  -0.452  -0.159  -0.525  -0.039  -0.453   0.216  -0.455 
+ 13.951   0.269  -0.581   0.674  -0.546  -0.598  -0.389  -0.093  -0.556  -0.018  -0.410   0.147  -0.464 
+ 13.870   0.196  -0.447   0.697  -0.624  -0.531  -0.389  -0.093  -0.589  -0.047  -0.357   0.013  -0.414 
+ 13.723  -0.017  -0.228   0.780  -0.627  -0.517  -0.427  -0.072  -0.546   0.041  -0.322   0.024  -0.385 
+ 13.143   0.092  -0.164   0.664  -0.692  -0.419  -0.227   0.029  -0.459   0.039  -0.357  -0.078  -0.367 
+ 12.309   0.252  -0.108   0.529  -0.603  -0.415  -0.007   0.050  -0.394   0.044  -0.286  -0.157  -0.286 
+ 11.132   0.497   0.129   0.408  -0.112  -0.309   0.077   0.027  -0.360   0.116  -0.381  -0.178  -0.307 
+ 10.661   0.668   0.171   0.283   0.058  -0.460   0.187  -0.075  -0.257   0.320  -0.606  -0.130  -0.223 
+ 10.954   0.580   0.222   0.223   0.064  -0.507   0.117  -0.006  -0.330   0.280  -0.628  -0.141  -0.160 
+ 11.083   0.425   0.287   0.292   0.000  -0.517   0.056  -0.034  -0.313   0.229  -0.611  -0.196  -0.116 
+ 11.546   0.016   0.465   0.457  -0.347  -0.328  -0.063  -0.157  -0.299   0.172  -0.472  -0.196  -0.147 
+ 12.037  -0.136   0.512   0.445  -0.744  -0.230  -0.087  -0.237  -0.274   0.329  -0.342  -0.241  -0.185 
+ 12.024  -0.145   0.461   0.469  -0.974  -0.034  -0.230  -0.139  -0.415   0.294  -0.308  -0.326  -0.202 
+ 11.909  -0.239   0.659   0.421  -0.936  -0.002  -0.250  -0.152  -0.412   0.147  -0.331  -0.397  -0.176 
+ 11.699  -0.259   0.750   0.445  -0.869  -0.006  -0.293  -0.127  -0.458   0.095  -0.309  -0.393  -0.167 
+ 11.610  -0.365   0.820   0.456  -0.805  -0.041  -0.293  -0.185  -0.494   0.098  -0.235  -0.348  -0.199 
+ 11.701  -0.340   0.700   0.567  -0.804  -0.227  -0.187  -0.148  -0.532   0.075  -0.264  -0.307  -0.207 
+ 11.710   0.019   0.291   0.631  -0.482  -0.572  -0.090  -0.065  -0.586   0.032  -0.257  -0.348  -0.119 
+ 11.356   0.343   0.137   0.412   0.001  -0.687  -0.279   0.046  -0.636   0.008  -0.245  -0.412  -0.035 
+ 10.839   0.705  -0.044   0.395   0.261  -0.627  -0.358  -0.108  -0.560   0.004  -0.271  -0.365  -0.024 
+ 10.851   0.924  -0.187   0.404   0.097  -0.549  -0.354   0.007  -0.420  -0.086  -0.385  -0.313   0.003 
+ 11.397   0.585   0.081   0.249   0.060  -0.583  -0.349   0.079  -0.394  -0.130  -0.319  -0.412   0.066 
+ 11.619   0.618  -0.108   0.474  -0.075  -0.668  -0.289   0.092  -0.542  -0.010  -0.237  -0.357  -0.041 
+ 12.185   0.344  -0.128   0.707  -0.245  -0.712  -0.220   0.064  -0.513  -0.037  -0.209  -0.215  -0.166 
+ 11.976   0.231   0.079   0.654  -0.388  -0.528  -0.207   0.118  -0.476   0.022  -0.274  -0.132  -0.136 
+ 10.430   0.542   0.364   0.468   0.047  -0.349  -0.167  -0.012  -0.244   0.076  -0.583  -0.074  -0.241 
+ 10.224   0.522   0.480   0.452   0.116  -0.400  -0.138  -0.128  -0.006  -0.199  -0.468   0.025  -0.269 
+ 10.215   0.629   0.484   0.265   0.062  -0.333  -0.023  -0.120  -0.087  -0.250  -0.475  -0.040  -0.169 
+ 10.030   0.483   0.645   0.268  -0.054  -0.347   0.038  -0.088  -0.222  -0.040  -0.456  -0.088  -0.317 
+  9.479   0.588   0.481   0.276  -0.079  -0.526   0.093  -0.003  -0.055  -0.029  -0.395  -0.158  -0.270 
+  8.522   0.594   0.124   0.229  -0.004  -0.239   0.179  -0.114   0.004  -0.036  -0.272  -0.241  -0.305 
+  6.987   0.618   0.247   0.248  -0.044  -0.302   0.108  -0.002   0.140   0.034  -0.325  -0.247  -0.249 
+  6.275   0.385  -0.024   0.048  -0.163  -0.321   0.223   0.162   0.244   0.089  -0.471  -0.224  -0.199 
+  5.518   0.361   0.060  -0.066  -0.289  -0.222   0.117   0.100   0.013  -0.028  -0.456  -0.190  -0.186 
+  9.753  -0.717  -0.097   0.067  -0.485   0.101  -0.365  -0.034  -0.106  -0.211  -0.044  -0.152  -0.125 
+ 12.218  -1.272   0.099  -0.134  -0.384  -0.027  -0.390  -0.248  -0.082  -0.148  -0.175  -0.067  -0.247 
+ 12.664  -2.094   0.546  -0.045  -0.350  -0.035  -0.383  -0.183  -0.063  -0.175  -0.066  -0.148  -0.175 
+ 12.787  -2.594   0.650   0.061  -0.563   0.082  -0.105  -0.281   0.005  -0.080   0.006  -0.076  -0.174 
+ 13.152  -2.483   0.546   0.229  -0.549   0.009  -0.003  -0.210  -0.139  -0.263  -0.120  -0.173  -0.124 
+ 13.078  -2.295   0.435   0.337  -0.506  -0.012  -0.043  -0.285  -0.194  -0.184  -0.014  -0.130  -0.319 
+ 12.850  -2.227   0.276   0.416  -0.292  -0.131  -0.010  -0.021  -0.088  -0.223   0.013  -0.047  -0.291 
+ 13.180  -1.969   0.484   0.503  -0.420  -0.222  -0.017  -0.035  -0.113  -0.236  -0.006   0.044  -0.090 
+ 12.628  -1.823   0.276   0.594  -0.612  -0.232  -0.090  -0.084  -0.093  -0.299  -0.190   0.154  -0.092 
+ 11.328  -1.283   0.227   0.793  -0.509  -0.139   0.010  -0.078  -0.090  -0.109  -0.189   0.068  -0.174 
+ 13.131   0.310  -0.354   0.280  -0.444  -0.600  -0.258  -0.221  -0.133  -0.204  -0.200   0.047  -0.238 
+ 14.941   0.236  -0.752   0.212  -0.545  -0.760  -0.342  -0.124  -0.228  -0.066  -0.196   0.193  -0.285 
+ 15.598  -0.116  -0.670   0.066  -0.693  -0.790  -0.472   0.091  -0.225   0.054  -0.202   0.126  -0.359 
+ 15.665  -0.073  -0.809  -0.005  -0.689  -0.722  -0.612   0.234  -0.333   0.063  -0.235   0.141  -0.418 
+ 15.681  -0.227  -0.765  -0.215  -0.612  -0.743  -0.488   0.411  -0.331   0.181  -0.329   0.034  -0.457 
+ 15.359  -0.289  -0.724  -0.198  -0.540  -0.758  -0.489   0.403  -0.300   0.216  -0.278   0.007  -0.418 
+ 15.087  -0.228  -0.707  -0.190  -0.530  -0.797  -0.451   0.375  -0.335   0.187  -0.241  -0.014  -0.384 
+ 14.449  -0.011  -0.547  -0.118  -0.460  -0.912  -0.413   0.226  -0.324   0.184  -0.147   0.016  -0.366 
+ 13.474   0.110  -0.211   0.032  -0.549  -1.020  -0.235   0.030  -0.285   0.160  -0.179   0.060  -0.359 
+ 11.635  -0.091   0.052   0.264  -0.542  -0.989  -0.163  -0.193  -0.342   0.095  -0.101   0.070  -0.174 
+  9.009   0.126  -0.311   0.079  -0.433  -0.703  -0.066   0.227  -0.066   0.268   0.097  -0.033  -0.219 
+  7.810   0.194  -0.087   0.083  -0.674  -0.810  -0.404   0.337  -0.083   0.006   0.115   0.153  -0.366 
+  7.217   0.042  -0.116   0.117  -0.389  -0.821  -0.284   0.356  -0.126   0.071   0.140   0.125  -0.200 
+  8.065  -0.926   0.053   0.407  -0.558  -0.272  -0.614   0.111   0.034  -0.100   0.081  -0.033  -0.210 
+  8.346  -0.993  -0.101   0.189  -0.553  -0.132  -0.599   0.033   0.209   0.052   0.100  -0.158  -0.267 
+  6.281   0.069  -0.198  -0.026  -0.359  -0.631  -0.453   0.165   0.109   0.160  -0.023  -0.042  -0.158 
+  5.981  -0.037  -0.223  -0.248  -0.408  -0.534  -0.335   0.387   0.168   0.253  -0.038  -0.078  -0.131 
+  5.965   0.052  -0.205  -0.103  -0.242  -0.691  -0.518   0.430  -0.042   0.097  -0.060   0.058  -0.228 
+ 10.544  -1.378   0.029  -0.244  -0.124  -0.091  -0.432   0.001  -0.054  -0.238  -0.227   0.018  -0.042 
+ 11.361  -1.529  -0.078  -0.412  -0.260  -0.146  -0.504  -0.043  -0.118  -0.170  -0.141   0.056   0.011 
+  8.345  -1.548   0.326  -0.525  -0.150  -0.033  -0.340   0.113  -0.079  -0.081  -0.092   0.026  -0.038 
+  9.234  -1.185   0.812  -0.625  -0.166   0.010  -0.455   0.045  -0.188  -0.091  -0.147  -0.125  -0.109 
+ 10.593  -0.646   0.972  -0.146  -0.153  -0.173  -0.382  -0.169  -0.324  -0.284  -0.112  -0.181  -0.250 
+ 11.762  -0.322   0.667   0.257  -0.232  -0.478  -0.692   0.184  -0.728  -0.048  -0.239   0.009  -0.380 
+ 12.625  -0.076   0.257   0.188  -0.302  -0.588  -0.656   0.076  -0.585  -0.151  -0.179   0.061  -0.253 
+ 13.172  -0.035   0.093   0.108  -0.524  -0.570  -0.653   0.089  -0.417  -0.113  -0.170   0.083  -0.228 
+ 13.480   0.030  -0.261   0.090  -0.475  -0.561  -0.805   0.200  -0.425  -0.002  -0.193   0.330  -0.376 
+ 13.648   0.027  -0.358  -0.079  -0.446  -0.645  -0.789   0.295  -0.233   0.028  -0.247   0.337  -0.466 
+ 13.587   0.046  -0.372  -0.182  -0.404  -0.625  -0.829   0.252  -0.130   0.064  -0.298   0.340  -0.382 
+ 13.352   0.173  -0.274  -0.282  -0.420  -0.498  -0.803  -0.022   0.041   0.168  -0.484   0.431  -0.342 
+ 12.810  -0.046  -0.175  -0.313  -0.307  -0.444  -0.515  -0.178   0.158   0.218  -0.560   0.206  -0.130 
+ 12.236  -0.160  -0.272  -0.520  -0.302  -0.368  -0.509  -0.037   0.183   0.129  -0.546  -0.037  -0.083 
+ 11.508  -1.263   0.492  -0.550  -0.066  -0.196  -0.354   0.091   0.159   0.002  -0.259  -0.145  -0.028 
+ 11.391  -1.815   0.808  -0.657   0.121  -0.028  -0.140  -0.083  -0.020  -0.179  -0.132  -0.141  -0.041 
+ 10.728  -1.874   1.047  -0.719  -0.059  -0.076  -0.104  -0.042   0.015  -0.163  -0.224   0.040  -0.008 
+ 10.702  -1.846   1.012  -0.697   0.007  -0.222  -0.298  -0.104  -0.217  -0.131  -0.267   0.095  -0.019 
+ 10.396  -1.788   0.956  -0.511  -0.007  -0.387  -0.206   0.020  -0.114  -0.070  -0.170  -0.049  -0.266 
+  9.282  -1.755   0.713  -0.542   0.023  -0.240  -0.252  -0.096  -0.189  -0.028   0.019   0.074  -0.057 
+  8.391  -1.100   0.663  -0.640  -0.209  -0.354  -0.411  -0.246  -0.291  -0.258  -0.155   0.105  -0.082 
+  8.441  -1.075   0.440  -0.409  -0.254   0.009  -0.485  -0.098  -0.357  -0.169  -0.351  -0.185  -0.221 
+  9.459  -1.476   0.606  -0.333  -0.384   0.094  -0.513  -0.092  -0.313  -0.249  -0.254  -0.288  -0.227 
+ 10.440  -2.138   0.807   0.107  -0.560   0.112  -0.308  -0.029  -0.157  -0.103  -0.220  -0.160  -0.089 
+ 12.629  -1.775   0.428  -0.271  -0.676   0.049  -0.242  -0.121  -0.186  -0.167  -0.146  -0.148  -0.196 
+ 13.204  -1.405   0.136  -0.197  -0.724  -0.086  -0.336  -0.218  -0.211  -0.244  -0.192  -0.040  -0.178 
+ 12.532  -0.402   0.240   0.268  -0.355  -0.311  -0.435  -0.299  -0.091  -0.168  -0.363   0.051  -0.091 
+ 12.307   0.500  -0.207   0.281  -0.087  -0.539  -0.683   0.030  -0.531  -0.000  -0.500  -0.011  -0.077 
+ 12.206   0.424  -0.222   0.321  -0.113  -0.366  -0.995   0.362  -0.618  -0.058  -0.396   0.032  -0.096 
+ 11.776   0.280  -0.250   0.563  -0.151  -0.264  -0.805  -0.005  -0.399  -0.098  -0.428   0.037   0.024 
+  9.967   0.301  -0.256   0.668   0.098  -0.381  -0.672  -0.067  -0.358  -0.138  -0.385  -0.003   0.107 
+  7.847   0.071   0.088   0.611   0.114  -0.144  -0.260   0.068  -0.026  -0.080  -0.403  -0.122   0.192 
+  7.554  -0.201   0.271   0.803   0.293  -0.073   0.001   0.001  -0.069  -0.183  -0.344  -0.329  -0.102 
+  8.470  -0.053  -0.111   0.615  -0.100   0.010  -0.209  -0.106   0.008  -0.094  -0.314  -0.086  -0.103 
+ 12.650  -0.125  -0.396   0.494  -0.371  -0.267  -0.700   0.007  -0.329  -0.107  -0.365   0.159  -0.155 
+ 13.149   0.064  -0.407   0.157  -0.194  -0.728  -0.648   0.014  -0.310   0.031  -0.278   0.197  -0.065 
+ 13.163   0.165  -0.481   0.111  -0.156  -0.910  -0.619  -0.026  -0.310   0.131  -0.286   0.324  -0.129 
+ 13.422   0.197  -0.525   0.145  -0.293  -0.909  -0.597  -0.007  -0.334   0.125  -0.240   0.265  -0.165 
+ 13.577  -0.002  -0.365   0.231  -0.376  -0.856  -0.556   0.024  -0.361   0.051  -0.127   0.144  -0.113 
+ 13.202   0.020  -0.302   0.372  -0.435  -0.761  -0.635   0.183  -0.502   0.040  -0.054   0.011  -0.053 
+ 13.038  -0.065  -0.244   0.415  -0.379  -0.741  -0.578   0.065  -0.494   0.090  -0.149   0.055  -0.073 
+ 12.731  -0.000  -0.269   0.477  -0.369  -0.735  -0.574   0.128  -0.668   0.153  -0.179   0.026  -0.099 
+ 12.571   0.027  -0.275   0.447  -0.195  -0.811  -0.568   0.211  -0.779   0.106  -0.160  -0.079  -0.118 
+ 12.434   0.128  -0.158   0.254   0.160  -0.823  -0.591   0.191  -0.773   0.048  -0.361  -0.063  -0.210 
+ 11.802   0.628  -0.190   0.050   0.144  -0.448  -0.441  -0.139  -0.747   0.178  -0.416  -0.305  -0.199 
+ 10.911   0.933  -0.022  -0.249  -0.013  -0.293  -0.164  -0.115  -0.813   0.015  -0.400  -0.043  -0.142 
+ 10.368   0.968   0.228  -0.336  -0.237  -0.339  -0.061  -0.050  -0.771  -0.017  -0.441  -0.045  -0.093 
+ 10.349   1.007   0.256  -0.316  -0.285  -0.373  -0.136   0.076  -0.793  -0.029  -0.428  -0.160  -0.103 
+ 10.736   0.992   0.212  -0.327  -0.420  -0.364  -0.212   0.143  -0.849  -0.106  -0.398  -0.185  -0.059 
+ 11.102   1.159   0.065  -0.429  -0.427  -0.354  -0.243   0.097  -1.006  -0.022  -0.267  -0.095  -0.088 
+ 11.916   1.020  -0.101  -0.366  -0.388  -0.332  -0.359  -0.030  -0.865   0.033  -0.122  -0.034  -0.122 
+ 12.248   1.008  -0.373  -0.445  -0.446  -0.332  -0.339  -0.202  -0.717   0.213   0.060  -0.024  -0.119 
+ 12.745   0.864  -0.569  -0.467  -0.466  -0.291  -0.420  -0.314  -0.503   0.245   0.090  -0.150  -0.118 
+ 13.115   0.712  -0.639  -0.439  -0.506  -0.364  -0.412  -0.380  -0.319   0.418   0.155  -0.277  -0.138 
+ 13.409   0.531  -0.728  -0.285  -0.499  -0.370  -0.422  -0.391  -0.206   0.481   0.002  -0.367  -0.123 
+ 13.585   0.469  -0.855  -0.285  -0.594  -0.402  -0.394  -0.224  -0.116   0.429  -0.255  -0.213  -0.073 
+ 13.717   0.300  -0.745  -0.170  -0.697  -0.183  -0.617  -0.141  -0.094   0.434  -0.400  -0.143  -0.052 
+ 13.375   0.319  -0.652  -0.189  -0.610  -0.228  -0.599  -0.186  -0.114   0.446  -0.376  -0.095  -0.021 
+ 12.988   0.335  -0.598  -0.144  -0.639  -0.197  -0.765  -0.223  -0.181   0.617  -0.396  -0.057   0.033 
+ 12.534   0.228  -0.395  -0.001  -0.578  -0.074  -0.851  -0.311  -0.462   0.649  -0.373  -0.102   0.048 
+ 11.474   0.273  -0.215   0.045  -0.353   0.022  -0.615  -0.295  -0.547   0.317  -0.324  -0.234  -0.036 
+ 11.819   0.214  -0.272   0.049  -0.371   0.127  -0.757  -0.248  -0.469   0.285  -0.441  -0.117  -0.041 
+ 12.551   0.162  -0.350   0.060  -0.490   0.046  -0.834  -0.290  -0.351   0.402  -0.462  -0.065   0.032 
+ 12.916   0.098  -0.373   0.034  -0.514  -0.094  -0.921  -0.245  -0.311   0.465  -0.478  -0.005   0.073 
+ 13.168   0.076  -0.397  -0.007  -0.493  -0.238  -0.926  -0.241  -0.225   0.447  -0.432  -0.014   0.118 
+ 13.245   0.175  -0.541   0.124  -0.460  -0.401  -0.839  -0.236  -0.187   0.339  -0.386  -0.111   0.101 
+ 13.062   0.421  -0.653  -0.031  -0.101  -0.502  -0.850  -0.057  -0.321   0.159  -0.201  -0.149  -0.071 
+ 12.505   0.821  -0.753  -0.297   0.145  -0.355  -0.977  -0.066  -0.203  -0.028  -0.219   0.061  -0.259 
+ 11.701   1.096  -0.669  -0.415   0.232  -0.256  -0.965  -0.228  -0.201  -0.015  -0.308   0.142  -0.263 
+ 11.099   1.339  -0.672  -0.530   0.248  -0.236  -0.826  -0.411  -0.215   0.030  -0.337   0.104  -0.162 
+ 10.664   1.690  -0.679  -0.600   0.082  -0.090  -0.725  -0.452  -0.238  -0.095  -0.272   0.132  -0.154 
+ 10.794   1.858  -0.753  -0.649   0.062  -0.198  -0.572  -0.367  -0.288  -0.219  -0.243   0.157  -0.177 
+ 10.754   1.693  -0.622  -0.657   0.091  -0.244  -0.534  -0.249  -0.401  -0.266  -0.183   0.211  -0.183 
+ 10.433   1.430  -0.543  -0.656   0.106  -0.316  -0.535  -0.299  -0.400  -0.398  -0.062   0.293  -0.208 
+ 11.098   1.448  -0.574  -0.814   0.255  -0.538  -0.374  -0.278  -0.526  -0.300  -0.099   0.249  -0.299 
+ 11.185   1.254  -0.437  -0.745   0.237  -0.466  -0.385  -0.211  -0.512  -0.263   0.081   0.059  -0.303 
+ 10.753   1.249  -0.529  -0.660   0.189  -0.503  -0.393  -0.355  -0.512  -0.256   0.196   0.022  -0.380 
+ 11.343   1.373  -0.743  -0.529   0.147  -0.615  -0.411  -0.463  -0.467  -0.140   0.182  -0.020  -0.459 
+ 11.743   1.175  -0.687  -0.214  -0.007  -0.586  -0.436  -0.422  -0.372  -0.026   0.121  -0.198  -0.271 
+ 12.146   0.835  -0.655  -0.070  -0.129  -0.427  -0.502  -0.499  -0.281   0.123  -0.182  -0.142  -0.144 
+ 12.579   0.345  -0.459   0.004  -0.263  -0.295  -0.759  -0.375  -0.360   0.283  -0.306  -0.106   0.035 
+ 12.789   0.201  -0.343  -0.029  -0.327  -0.258  -0.804  -0.304  -0.335   0.310  -0.428  -0.100   0.066 
+ 12.404   0.126  -0.228  -0.020  -0.259  -0.143  -0.624  -0.291  -0.250   0.316  -0.517  -0.164   0.104 
+ 11.886  -0.304   0.304  -0.221  -0.064  -0.116  -0.778  -0.113  -0.149  -0.060  -0.490  -0.114  -0.022 
+ 11.185  -1.205   0.698  -0.238   0.271  -0.184  -0.684  -0.045  -0.260  -0.105  -0.461  -0.006  -0.056 
+ 10.745  -1.535   1.059  -0.256   0.091  -0.156  -0.600  -0.121  -0.266  -0.106  -0.460   0.017  -0.035 
+ 10.797  -1.605   1.125  -0.379   0.032  -0.147  -0.598  -0.111  -0.259  -0.101  -0.259   0.025  -0.111 
+ 11.326  -1.329   0.940  -0.452  -0.076   0.023  -0.628   0.094  -0.026  -0.033  -0.367  -0.087  -0.140 
+ 11.042  -1.319   0.763  -0.165  -0.242   0.176  -0.841   0.031  -0.082  -0.131  -0.276   0.102   0.101 
+ 10.076  -0.725   0.485   0.264  -0.352  -0.020  -0.636  -0.150   0.240  -0.238  -0.193   0.083   0.079 
+  9.309   0.355   0.298  -0.023  -0.243  -0.321  -0.288  -0.101   0.071   0.014  -0.374  -0.085  -0.002 
+  9.181   0.407   0.275   0.170   0.303  -0.305  -0.177  -0.062   0.032  -0.243  -0.318  -0.224  -0.121 
+  9.540   0.597   0.179   0.145   0.239  -0.350  -0.075  -0.138  -0.085  -0.077  -0.252  -0.253  -0.277 
+ 10.021   0.375   0.168   0.182   0.234  -0.296  -0.191  -0.112  -0.082   0.035  -0.126  -0.288  -0.281 
+ 10.455   0.492  -0.152   0.368   0.311  -0.477  -0.127  -0.102  -0.193  -0.040  -0.127  -0.223  -0.243 
+ 10.415   0.132   0.094   0.326   0.376  -0.365  -0.113  -0.027  -0.504   0.170  -0.203  -0.189  -0.283 
+ 10.243   0.284   0.180   0.124   0.322  -0.407  -0.032  -0.019  -0.583   0.104  -0.195  -0.170  -0.144 
+ 10.862   0.644   0.029  -0.196   0.157  -0.411  -0.186  -0.142  -0.472   0.131  -0.007  -0.265  -0.103 
+ 11.350   0.770  -0.135  -0.293   0.078  -0.490  -0.418  -0.116  -0.611   0.275   0.016  -0.237  -0.058 
+ 11.677   0.685  -0.022  -0.389   0.173  -0.413  -0.515  -0.110  -0.634   0.379  -0.078  -0.268  -0.037 
+ 11.774   0.660  -0.127  -0.228   0.207  -0.472  -0.520  -0.109  -0.648   0.404  -0.087  -0.410   0.066 
+ 12.069   0.520  -0.188  -0.168   0.174  -0.432  -0.531  -0.093  -0.612   0.312  -0.119  -0.396  -0.033 
+ 11.773   0.568  -0.155  -0.168   0.190  -0.475  -0.491  -0.150  -0.646   0.337  -0.187  -0.357  -0.056 
+ 11.621   0.672  -0.241  -0.166   0.280  -0.538  -0.489  -0.161  -0.675   0.310  -0.240  -0.364  -0.089 
+ 11.639   0.696  -0.347  -0.029   0.316  -0.515  -0.490  -0.241  -0.680   0.218  -0.216  -0.381  -0.091 
+ 11.801   0.664  -0.397  -0.046   0.182  -0.370  -0.494  -0.286  -0.649   0.147  -0.169  -0.507   0.026 
+ 11.611   0.707  -0.306  -0.009   0.191  -0.285  -0.475  -0.114  -0.658   0.228  -0.307  -0.340  -0.063 
+ 11.406   0.518  -0.194  -0.020   0.175  -0.240  -0.378  -0.189  -0.477   0.150  -0.207  -0.420  -0.093 
+ 10.876   0.506  -0.224  -0.084   0.091  -0.257  -0.399  -0.104  -0.522   0.250  -0.105  -0.315  -0.092 
+ 10.882   0.344  -0.229  -0.099   0.008  -0.328  -0.611  -0.099  -0.607   0.288  -0.107  -0.374  -0.076 
+ 10.839   0.400  -0.429  -0.025   0.052  -0.382  -0.561   0.058  -0.381   0.213  -0.194  -0.405  -0.015 
+ 11.632   0.315  -0.439  -0.047  -0.108  -0.270  -0.616   0.113  -0.490   0.200  -0.199  -0.338  -0.001 
+ 11.981   0.228  -0.604  -0.123  -0.123  -0.479  -0.741   0.190  -0.512   0.218  -0.173  -0.344   0.085 
+ 12.585   0.239  -0.560  -0.002  -0.127  -0.591  -0.763   0.219  -0.395   0.337  -0.108  -0.251   0.197 
+ 12.855   0.230  -0.693   0.077  -0.218  -0.865  -0.623   0.178  -0.222   0.195   0.030  -0.201   0.239 
+ 13.484   0.134  -0.560   0.117  -0.209  -0.851  -0.563   0.305  -0.210   0.101   0.025  -0.323   0.151 
+ 13.206   0.205  -0.729   0.309  -0.393  -0.653  -0.519   0.313  -0.246   0.153   0.040  -0.169   0.051 
+ 12.892   0.171  -0.786   0.485  -0.638  -0.546  -0.386   0.425  -0.341   0.272   0.007  -0.091  -0.056 
+ 12.682   0.093  -0.576   0.419  -0.662  -0.603  -0.271   0.405  -0.422   0.355  -0.032  -0.148  -0.079 
+ 12.343   0.281  -0.553   0.452  -0.691  -0.620  -0.167   0.361  -0.554   0.494  -0.171  -0.089  -0.146 
+ 11.904   0.311  -0.300   0.241  -0.529  -0.512   0.024   0.127  -0.530   0.502  -0.220  -0.196  -0.085 
+ 11.368   0.254   0.003  -0.062  -0.285  -0.437  -0.044   0.086  -0.385   0.372  -0.469  -0.104   0.017 
+ 10.665   0.444  -0.127  -0.229  -0.017  -0.634  -0.111   0.150  -0.335   0.216  -0.305  -0.020  -0.066 
+  9.962   0.309   0.024  -0.109   0.200  -0.628   0.049   0.121  -0.280   0.058  -0.293  -0.017  -0.027 
+  9.036  -0.160   0.429   0.008   0.143  -0.688   0.049   0.001  -0.277   0.005  -0.379  -0.242  -0.104 
+  7.816   0.075   0.222   0.455  -0.376  -0.469  -0.296   0.163  -0.235  -0.076  -0.201  -0.172  -0.020 
+  7.406  -0.019   0.108   0.536  -0.472  -0.312  -0.158   0.187  -0.423  -0.385  -0.227  -0.088  -0.032 
+  7.194  -0.070   0.032   0.586  -0.396  -0.153  -0.162   0.080  -0.359  -0.204  -0.156  -0.099  -0.076 
+  7.147   0.050   0.112   0.677  -0.300  -0.084  -0.347   0.143  -0.421  -0.214  -0.116  -0.145  -0.025 
+  6.935   0.104   0.076   0.697  -0.223  -0.270  -0.501  -0.019  -0.340  -0.310  -0.200  -0.036   0.063 
+  6.593   0.193   0.102   0.658  -0.147  -0.158  -0.307   0.047  -0.432  -0.270  -0.340  -0.241  -0.067 
+  6.077   0.266   0.118   0.602  -0.041  -0.154  -0.348  -0.034  -0.257  -0.263  -0.300  -0.225  -0.069 
+  6.012   0.221   0.087   0.544  -0.158  -0.195  -0.429  -0.086  -0.308  -0.296  -0.164  -0.228   0.035 
+  6.253   0.326  -0.092   0.481  -0.090  -0.157  -0.378   0.045  -0.124  -0.247  -0.257  -0.084   0.064 
+  6.687  -0.084  -0.140   0.410  -0.245   0.060  -0.252   0.005   0.107  -0.189  -0.213   0.027   0.014 
+  6.712   0.065  -0.031   0.401  -0.261  -0.037  -0.365  -0.118   0.102  -0.160  -0.153   0.030   0.002 
+  6.506   0.436   0.140   0.248  -0.218  -0.094  -0.442  -0.090  -0.066  -0.352  -0.212  -0.169   0.065 
+  6.730   0.686  -0.041   0.302  -0.151  -0.138  -0.487  -0.280   0.036  -0.328  -0.337  -0.204   0.017 
+  6.430   0.857  -0.196   0.303  -0.065  -0.053  -0.726  -0.252   0.018  -0.362  -0.406  -0.303  -0.009 
+  6.559   0.667  -0.295   0.288   0.100  -0.090  -0.684  -0.277  -0.300  -0.272  -0.324  -0.204  -0.051 
+  6.563   0.636  -0.343  -0.028  -0.080  -0.070  -0.657  -0.338  -0.345  -0.051  -0.229  -0.130  -0.015 
+  6.439   0.631  -0.218  -0.257  -0.255  -0.054  -0.480  -0.095  -0.462  -0.258  -0.217  -0.137   0.056 
+  6.503   0.373   0.044  -0.014  -0.174   0.063  -0.324   0.020  -0.597  -0.154  -0.336  -0.133  -0.053 
+  6.585   0.449   0.144   0.103  -0.228  -0.137  -0.313   0.254  -0.436  -0.159  -0.255  -0.220  -0.208 
+  6.635   0.538   0.101  -0.061  -0.200  -0.135  -0.183   0.214  -0.436  -0.233  -0.292  -0.155  -0.089 
+  6.764   0.365   0.215  -0.106  -0.271  -0.020  -0.125   0.078  -0.434  -0.085  -0.304  -0.148  -0.191 
+  6.779   0.283   0.165  -0.019  -0.263  -0.049   0.044   0.107  -0.598  -0.325  -0.323  -0.125  -0.106 
+  7.057   0.290   0.144  -0.055  -0.395  -0.089  -0.092   0.045  -0.623  -0.302  -0.159  -0.020   0.018 
+  7.137   0.353   0.056  -0.351  -0.306  -0.046  -0.114   0.040  -0.470  -0.118   0.042   0.104  -0.129 
+  7.408   0.386  -0.044  -0.228  -0.353  -0.076  -0.197  -0.038  -0.329   0.023   0.028  -0.023  -0.275 
+  7.526   0.407  -0.018  -0.321  -0.233  -0.062  -0.209  -0.032  -0.423  -0.007   0.131  -0.070  -0.216 
+  7.595   0.296  -0.202  -0.220  -0.431  -0.165  -0.397  -0.030  -0.221   0.257   0.240   0.083  -0.325 
+  7.320   0.185  -0.084  -0.118  -0.332  -0.277  -0.448   0.019  -0.295   0.119  -0.055  -0.086  -0.241 
+  7.231  -0.058  -0.223  -0.133  -0.193  -0.188  -0.285   0.210  -0.312   0.081   0.020  -0.064  -0.267 
+  6.908  -0.208   0.009  -0.064  -0.109  -0.204  -0.281   0.131  -0.130   0.145   0.010  -0.149  -0.322 
+  7.498  -0.108  -0.035   0.031  -0.423  -0.265  -0.340   0.158  -0.228   0.012   0.094   0.050  -0.257 
+  7.717  -0.143  -0.233  -0.103  -0.331  -0.297  -0.354   0.192  -0.101   0.185   0.091  -0.083  -0.314 
+  7.893  -0.091  -0.252  -0.243  -0.444  -0.167  -0.321   0.144   0.025   0.292   0.049  -0.192  -0.239 
+  7.679  -0.195  -0.364  -0.362  -0.602  -0.192  -0.278   0.225   0.146   0.210   0.048  -0.029  -0.244 
+  7.888  -0.088  -0.345  -0.396  -0.491  -0.239  -0.339   0.206   0.003   0.096   0.020   0.044  -0.349 
+  8.049  -0.132  -0.302  -0.290  -0.389  -0.233  -0.364   0.288   0.044   0.004  -0.215  -0.016  -0.180 
+  7.886  -0.161  -0.270  -0.092  -0.298  -0.222  -0.459   0.245   0.281   0.056  -0.295  -0.015  -0.191 
+  7.799  -0.199  -0.178   0.056  -0.154  -0.223  -0.451   0.349   0.112  -0.039  -0.169   0.009  -0.229 
+  7.704  -0.344  -0.148   0.120  -0.176  -0.219  -0.358   0.427   0.064   0.021  -0.148  -0.012  -0.178 
+  7.793  -0.143  -0.059  -0.050  -0.310  -0.393  -0.408   0.366   0.168   0.027  -0.244   0.162  -0.060 
+  7.533  -0.302  -0.046   0.043  -0.269  -0.454  -0.390   0.315   0.058   0.016  -0.043   0.171  -0.130 
+  7.062  -0.621  -0.196   0.161  -0.220  -0.379  -0.295   0.315  -0.012  -0.030  -0.076  -0.005  -0.172 
+  6.990  -0.510  -0.322   0.164  -0.108  -0.458  -0.431   0.167  -0.122   0.109   0.029  -0.015  -0.159 
+  6.930  -0.662  -0.224   0.158   0.094  -0.365  -0.467   0.085  -0.130   0.074   0.200   0.117  -0.215 
+  6.884  -0.735  -0.213   0.005  -0.064  -0.214  -0.388   0.068  -0.063   0.009   0.182  -0.055  -0.129 
+  6.738  -0.819  -0.209  -0.072  -0.274  -0.388  -0.537   0.116   0.052   0.097   0.186   0.114  -0.115 
+  6.851  -0.796  -0.039   0.063  -0.085  -0.267  -0.216   0.216  -0.105  -0.066   0.191   0.035  -0.171 
+  6.297  -0.941  -0.017   0.114  -0.146  -0.159  -0.189   0.136  -0.138   0.069   0.243   0.112  -0.092 
+  6.495  -0.978  -0.185   0.182  -0.082  -0.334  -0.214   0.255  -0.084   0.002   0.149   0.147  -0.118 
+  6.703  -0.887  -0.107   0.132  -0.016  -0.377  -0.288   0.367   0.094  -0.049   0.209   0.019  -0.151 
+  6.521  -0.770  -0.281   0.025  -0.117  -0.230  -0.288   0.296  -0.187  -0.166   0.035  -0.011  -0.234 
+  6.467  -0.837  -0.324  -0.021  -0.166  -0.178  -0.314   0.248  -0.110  -0.073   0.048   0.200  -0.039 
+  6.381  -0.879  -0.344   0.134  -0.111  -0.293  -0.345   0.116  -0.102  -0.068   0.049   0.055   0.005 
+  6.706  -0.458  -0.257   0.073  -0.160  -0.361  -0.428   0.205  -0.153  -0.116   0.098  -0.020  -0.238 
+  7.387  -0.110  -0.162   0.054  -0.081  -0.275  -0.536  -0.020  -0.183  -0.182  -0.000   0.016   0.080 
+  7.903   0.094  -0.193  -0.274  -0.173  -0.179  -0.546  -0.188  -0.117   0.025  -0.018  -0.062   0.053 
+  8.044   0.229  -0.476  -0.389  -0.226  -0.352  -0.699   0.004   0.012   0.005  -0.013  -0.074  -0.103 
+  8.080   0.262  -0.392  -0.215  -0.381  -0.403  -0.728  -0.214  -0.005   0.093   0.157  -0.190  -0.079 
+  8.223   0.398  -0.339  -0.273  -0.330  -0.257  -0.558  -0.241   0.015   0.092   0.121  -0.087  -0.072 
+  8.428   0.190  -0.445  -0.160  -0.295  -0.271  -0.528  -0.109  -0.072   0.146   0.107  -0.018  -0.130 
+  8.487   0.347  -0.414  -0.193  -0.361  -0.331  -0.587  -0.381  -0.116   0.033  -0.090   0.036  -0.058 
+  8.582   0.395  -0.371  -0.173  -0.284  -0.313  -0.826  -0.363  -0.085  -0.081  -0.107  -0.030  -0.108 
+  8.435   0.310  -0.371   0.069  -0.285  -0.308  -0.715  -0.268  -0.043   0.035  -0.046  -0.045  -0.081 
+  8.402   0.315  -0.393   0.167  -0.177  -0.245  -0.657  -0.303  -0.156   0.050  -0.125  -0.178  -0.102 
+  8.441   0.132  -0.229   0.562  -0.286  -0.369  -0.660  -0.234  -0.038   0.033  -0.115  -0.141  -0.078 
+  8.124   0.058  -0.258   0.309  -0.394  -0.104  -0.600  -0.227   0.026  -0.008   0.045   0.067  -0.074 
+  7.719   0.356  -0.122   0.320  -0.168  -0.448  -0.564  -0.251  -0.066   0.021  -0.114  -0.018  -0.115 
+  7.075   0.050  -0.290   0.214  -0.097  -0.133  -0.523  -0.108   0.066   0.165   0.002  -0.067  -0.077 
+  7.191   0.231  -0.253   0.063  -0.135  -0.361  -0.593  -0.077   0.027   0.158  -0.006  -0.014  -0.109 
+  6.980   0.148  -0.298   0.108  -0.087  -0.204  -0.582  -0.206  -0.125   0.119  -0.244  -0.161   0.051 
+  7.175  -0.190  -0.321   0.073   0.013  -0.353  -0.453  -0.113   0.034  -0.034  -0.157  -0.071  -0.083 
+  7.444  -0.244  -0.131   0.064   0.016  -0.554  -0.547  -0.150  -0.014  -0.391  -0.175   0.012  -0.036 
+  7.416  -0.238  -0.166   0.097  -0.232  -0.373  -0.349  -0.376   0.048  -0.288  -0.374   0.016  -0.007 
+  7.305  -0.439  -0.192   0.502  -0.211  -0.223  -0.516  -0.293  -0.022  -0.260  -0.266   0.101  -0.165 
+  7.994  -0.275  -0.044   0.501  -0.388  -0.230  -0.662  -0.288  -0.001  -0.294  -0.195   0.097  -0.266 
+  7.829  -0.463  -0.092   0.544  -0.421  -0.303  -0.564  -0.092   0.108  -0.222  -0.081   0.321  -0.217 
+  7.657  -0.301   0.026   0.649  -0.424  -0.313  -0.672  -0.161  -0.077  -0.127   0.028   0.302  -0.278 
+  7.682  -0.410  -0.069   0.579  -0.458  -0.267  -0.697  -0.176  -0.174  -0.176   0.046   0.291  -0.214 
+  7.850  -0.320  -0.160   0.487  -0.514  -0.224  -0.795  -0.239  -0.173  -0.203  -0.015   0.049  -0.233 
+  7.922  -0.212  -0.159   0.344  -0.653  -0.469  -0.733  -0.084  -0.234  -0.205  -0.111   0.088  -0.351 
+  7.191  -0.254  -0.184   0.330  -0.470  -0.446  -0.704  -0.058  -0.088  -0.079  -0.150   0.167  -0.148 
+  7.214   0.050  -0.130   0.211  -0.249  -0.255  -0.620  -0.007  -0.150  -0.186  -0.320   0.067  -0.234 
+  7.164   0.165  -0.144   0.259  -0.201  -0.243  -0.734  -0.078  -0.247  -0.206  -0.285   0.131  -0.225 
+  6.980   0.076  -0.110   0.427  -0.139  -0.148  -0.617  -0.112  -0.216  -0.345  -0.316   0.049  -0.176 
+  6.389   0.094  -0.167   0.285  -0.284  -0.155  -0.633  -0.152  -0.207  -0.355  -0.206   0.151  -0.258 
+  6.366   0.314  -0.188   0.176  -0.137  -0.159  -0.582  -0.183  -0.081  -0.186  -0.300   0.101  -0.096 
+  6.573   0.075  -0.172   0.274  -0.137  -0.272  -0.705  -0.132  -0.165  -0.233  -0.191   0.102  -0.184 
+  6.326   0.139  -0.105   0.274  -0.211  -0.250  -0.500  -0.137  -0.253  -0.233  -0.332   0.112  -0.180 
+  5.911   0.246  -0.195   0.160  -0.121  -0.348  -0.508   0.008  -0.222  -0.105  -0.184  -0.051  -0.084 
+  5.647   0.194  -0.168   0.160  -0.094  -0.337  -0.438   0.023  -0.188  -0.249  -0.238   0.158  -0.241 
+  5.910   0.093  -0.181   0.195   0.070   0.005  -0.695  -0.132   0.033  -0.055  -0.168   0.013  -0.226 
+  6.000  -0.033  -0.358   0.166   0.049  -0.025  -0.591  -0.136  -0.081  -0.212  -0.249   0.260   0.025 
+  5.716   0.216  -0.281   0.042  -0.166  -0.084  -0.512  -0.001  -0.038  -0.130  -0.277  -0.190  -0.167 
+  5.817   0.251  -0.293   0.048  -0.240   0.044  -0.497  -0.053   0.109  -0.007  -0.250  -0.181  -0.204 
+  6.014   0.385  -0.502   0.057  -0.280  -0.232  -0.487   0.090   0.175   0.099  -0.259  -0.292  -0.093 
+  6.073   0.303  -0.606  -0.137  -0.220   0.040  -0.616  -0.064   0.173   0.144  -0.147  -0.281  -0.199 
+  6.582  -0.003  -0.589  -0.002  -0.294   0.126  -0.681  -0.022   0.298   0.182  -0.315  -0.250  -0.054 
+  6.847  -0.009  -0.593   0.030  -0.304   0.149  -0.745  -0.007   0.286   0.306  -0.252  -0.174   0.114 
+  7.026   0.192  -0.476   0.038  -0.286  -0.022  -0.686  -0.012   0.129   0.399  -0.169  -0.002  -0.092 
+  6.356   0.396  -0.394   0.187  -0.242  -0.156  -0.718   0.003   0.095   0.333  -0.277  -0.059  -0.003 
+  5.982   0.476  -0.198   0.212  -0.072  -0.107  -0.752  -0.016  -0.065   0.097  -0.324  -0.137  -0.095 
+  5.573   0.526  -0.209  -0.033  -0.201  -0.327  -0.664  -0.124  -0.151   0.048  -0.359  -0.184  -0.179 
+  5.152   0.324  -0.406  -0.105  -0.050  -0.386  -0.499  -0.031   0.011   0.205  -0.326  -0.238  -0.079 
+  5.168   0.400  -0.235  -0.122  -0.001  -0.241  -0.233  -0.118   0.002   0.203  -0.242  -0.148   0.034 
+  5.812  -0.194   0.092   0.150  -0.148   0.048  -0.441  -0.168  -0.008  -0.029  -0.080  -0.185  -0.087 
+  5.152   0.047   0.109   0.136  -0.184  -0.074  -0.244  -0.176  -0.093  -0.082  -0.056  -0.134  -0.185 
+  4.688  -0.012  -0.022   0.172  -0.156  -0.084  -0.196  -0.270  -0.231  -0.124  -0.132  -0.140  -0.037 
+  4.980  -0.113  -0.056   0.324  -0.176  -0.044  -0.299  -0.216  -0.116  -0.019  -0.074   0.007  -0.036 
+  5.328  -0.101   0.184   0.495  -0.221  -0.068  -0.348  -0.168  -0.167  -0.178  -0.210  -0.176   0.051 
+  5.226  -0.168  -0.150   0.442  -0.025  -0.071  -0.374  -0.146  -0.250  -0.169  -0.206  -0.238  -0.007 
+  5.246  -0.109  -0.271   0.233  -0.258  -0.300  -0.183  -0.120  -0.232  -0.294  -0.242  -0.141  -0.079 
+  5.428  -0.087  -0.367   0.324  -0.231  -0.090  -0.068  -0.121  -0.110  -0.335  -0.233  -0.214  -0.045 
+  5.810  -0.168  -0.413   0.286  -0.298  -0.088  -0.037   0.169  -0.108  -0.286  -0.167  -0.139  -0.140 
+  6.004  -0.160  -0.433   0.402  -0.290  -0.079  -0.077   0.103  -0.162  -0.253  -0.167  -0.323  -0.380 
+  6.339   0.038  -0.239   0.457  -0.513  -0.376  -0.207   0.201  -0.045  -0.058  -0.193  -0.337  -0.367 
+  6.658   0.056  -0.555   0.257  -0.561  -0.239  -0.343   0.110  -0.115   0.037   0.024  -0.139  -0.302 
+  6.047   0.098  -0.481   0.312  -0.542  -0.163  -0.223   0.120  -0.185   0.011  -0.075  -0.183  -0.069 
+  6.372  -0.056  -0.401   0.331  -0.701  -0.214  -0.170   0.175  -0.084  -0.030  -0.180  -0.181  -0.225 
+  6.392  -0.067  -0.395   0.278  -0.700  -0.295   0.018   0.211  -0.117   0.076  -0.181  -0.121  -0.187 
+  6.482   0.042  -0.155   0.288  -0.869  -0.270  -0.076   0.255  -0.184  -0.012  -0.254  -0.097  -0.205 
+  6.117   0.098  -0.028   0.134  -0.848  -0.074  -0.036   0.262  -0.174  -0.116  -0.370  -0.019  -0.236 
+  5.764   0.015   0.023   0.296  -0.661  -0.193  -0.109   0.034  -0.130   0.157  -0.195  -0.048  -0.130 
+  5.521  -0.110  -0.162   0.104  -0.674  -0.266  -0.025  -0.105  -0.074   0.144  -0.268  -0.097  -0.081 
+  5.317   0.096  -0.199   0.068  -0.421  -0.085  -0.039   0.024  -0.173   0.049  -0.120  -0.122  -0.114 
+  5.368   0.081  -0.321   0.343  -0.226  -0.330  -0.145   0.084  -0.039  -0.043  -0.297  -0.158  -0.111 
+  5.965  -0.356  -0.473   0.243   0.041  -0.041   0.024   0.105  -0.072  -0.110  -0.205  -0.001  -0.018 
+  6.569  -0.852  -0.236  -0.019  -0.073  -0.116  -0.147   0.049   0.067  -0.181  -0.188   0.073  -0.032 
+  7.060  -1.198  -0.173   0.114  -0.119  -0.075  -0.172  -0.235  -0.113  -0.130  -0.298  -0.037   0.008 
+  7.526  -1.283  -0.121   0.272  -0.203  -0.229  -0.184  -0.042  -0.142  -0.162  -0.191  -0.023  -0.208 
+  7.822  -1.232  -0.082   0.003  -0.233  -0.161  -0.283   0.023   0.142  -0.183  -0.126  -0.024  -0.053 
+  8.183  -1.264  -0.103   0.235  -0.030  -0.206  -0.182  -0.065   0.035  -0.044  -0.046   0.043  -0.115 
+  8.268  -1.147  -0.239   0.170  -0.093  -0.268  -0.206  -0.014  -0.051  -0.203  -0.404   0.075   0.036 
+  8.270  -0.677  -0.448   0.040  -0.039  -0.002  -0.325   0.116  -0.106  -0.108  -0.329   0.181   0.063 
+  7.696  -0.106  -0.282  -0.023   0.102  -0.058  -0.168   0.010  -0.023   0.002  -0.279   0.102  -0.021 
+  9.492   0.655   0.348   0.041  -0.182  -0.423  -0.560  -0.117  -0.021   0.166  -0.445   0.112  -0.068 
+ 11.383   0.636   0.115  -0.196  -0.271  -0.350  -0.776  -0.154  -0.087   0.290  -0.400   0.138  -0.083 
+ 12.162   0.634  -0.160  -0.373  -0.299  -0.280  -1.048   0.032  -0.162   0.370  -0.406   0.160  -0.191 
+ 10.984   0.904  -0.188  -0.118  -0.265  -0.472  -1.138   0.135   0.178   0.245  -0.271  -0.142  -0.177 
+ 11.103   0.753  -0.240  -0.025  -0.312  -0.419  -0.963   0.146  -0.036   0.331  -0.308  -0.154  -0.081 
+ 11.064   0.713  -0.276  -0.244  -0.228  -0.353  -0.875   0.060   0.017   0.371  -0.210  -0.151  -0.279 
+ 11.284   0.691  -0.354  -0.353  -0.233  -0.306  -0.852   0.102  -0.007   0.403  -0.187  -0.162  -0.257 
+ 11.749   0.691  -0.457  -0.415  -0.320  -0.254  -0.801   0.140  -0.043   0.436  -0.220  -0.207  -0.224 
+ 12.247   0.635  -0.524  -0.441  -0.318  -0.293  -0.689   0.117  -0.155   0.568  -0.340  -0.157  -0.266 
+ 12.476   0.512  -0.535  -0.430  -0.353  -0.242  -0.601  -0.012  -0.077   0.536  -0.299  -0.236  -0.245 
+ 12.448   0.578  -0.633  -0.388  -0.368  -0.297  -0.469  -0.061  -0.132   0.571  -0.298  -0.233  -0.265 
+ 12.148   0.586  -0.573  -0.457  -0.349  -0.320  -0.414  -0.067  -0.153   0.593  -0.262  -0.228  -0.330 
+ 12.034   0.551  -0.505  -0.492  -0.353  -0.324  -0.381  -0.090  -0.164   0.567  -0.206  -0.209  -0.348 
+ 12.110   0.607  -0.532  -0.478  -0.394  -0.296  -0.339  -0.172  -0.137   0.538  -0.147  -0.222  -0.351 
+ 12.044   0.745  -0.620  -0.381  -0.458  -0.198  -0.424  -0.103  -0.222   0.527  -0.135  -0.174  -0.394 
+ 12.059   0.699  -0.520  -0.347  -0.495  -0.212  -0.334  -0.130  -0.261   0.516  -0.142  -0.109  -0.400 
+ 11.843   0.786  -0.558  -0.351  -0.530  -0.259  -0.135  -0.153  -0.315   0.452  -0.117   0.025  -0.415 
+ 11.588   0.740  -0.418  -0.459  -0.567  -0.286   0.029  -0.244  -0.278   0.365  -0.084   0.059  -0.303 
+ 11.363   0.669  -0.335  -0.494  -0.585  -0.411   0.185  -0.191  -0.241   0.140  -0.084   0.130  -0.128 
+ 10.683   0.751  -0.099  -0.424  -0.633  -0.640   0.423  -0.010   0.069  -0.338  -0.155   0.130   0.027 
+  9.741   0.485   0.363  -0.303  -0.464  -0.566   0.351  -0.092   0.154  -0.231  -0.381   0.015  -0.013 
+  8.832  -0.141   0.077   0.002  -0.186  -0.431   0.137  -0.118   0.004   0.086  -0.298   0.011  -0.166 
+  8.114  -0.264   0.054  -0.158  -0.156  -0.086   0.142   0.034   0.091   0.004  -0.330  -0.005  -0.125 
+  8.036  -0.331   0.194  -0.146  -0.150   0.074   0.012   0.172   0.106   0.145  -0.252   0.011  -0.092 
+  8.004  -0.463   0.477   0.091  -0.002  -0.129  -0.159  -0.029  -0.120   0.146  -0.143   0.117   0.074 
+  8.130  -0.638   0.527   0.155  -0.099  -0.282   0.002  -0.055  -0.138   0.110  -0.067   0.116  -0.155 
+  8.083  -0.758   0.486   0.124   0.077  -0.224   0.208  -0.038  -0.225   0.032  -0.176  -0.149  -0.202 
+  7.905  -0.652   0.412   0.130  -0.033  -0.253   0.103   0.002  -0.162   0.181  -0.215  -0.135  -0.084 
+  7.555  -0.837   0.469   0.319  -0.156  -0.144   0.055  -0.076  -0.147   0.176  -0.180   0.103   0.016 
+  7.884  -0.559   0.605   0.186  -0.174  -0.199   0.036   0.030  -0.144   0.143  -0.247  -0.198  -0.066 
+  8.098  -0.265   0.417  -0.150  -0.314  -0.135   0.143   0.029   0.057   0.227  -0.185  -0.207  -0.095 
+  8.020  -0.127   0.251  -0.316  -0.300  -0.180   0.137  -0.086  -0.008   0.252  -0.010  -0.186  -0.105 
+  8.204   0.121  -0.184  -0.635  -0.495  -0.028  -0.023  -0.122   0.012   0.337  -0.077  -0.157  -0.064 
+  8.534   0.352  -0.263  -0.535  -0.434  -0.178  -0.224  -0.132   0.139   0.415  -0.071  -0.127  -0.146 
+  8.552   0.408  -0.329  -0.671  -0.467  -0.217  -0.243  -0.191   0.155   0.310  -0.191  -0.134  -0.111 
+  8.390   0.461  -0.285  -0.589  -0.542  -0.105  -0.171  -0.066   0.203   0.333  -0.254   0.055  -0.025 
+  8.270   0.464  -0.366  -0.453  -0.563  -0.146  -0.134  -0.140   0.132   0.327  -0.174   0.003  -0.010 
+  8.359   0.492  -0.294  -0.386  -0.513  -0.126  -0.284  -0.215   0.063   0.404  -0.124  -0.009  -0.011 
+  8.339   0.585  -0.297  -0.336  -0.533  -0.299  -0.479  -0.178   0.036   0.462  -0.126  -0.219  -0.059 
+  8.027   0.517  -0.208  -0.365  -0.597  -0.241  -0.364  -0.221   0.154   0.402  -0.156  -0.142  -0.090 
+  7.567   0.269  -0.279  -0.367  -0.519  -0.214  -0.447  -0.306   0.175   0.343  -0.137  -0.310  -0.083 
+  7.135   0.239  -0.254  -0.404  -0.448  -0.081  -0.074  -0.130   0.107   0.298  -0.168  -0.205  -0.099 
+  7.226   0.337  -0.266  -0.413  -0.436  -0.127  -0.208  -0.250   0.096   0.421  -0.061  -0.155   0.027 
+  7.478   0.473  -0.186  -0.434  -0.387  -0.086  -0.168  -0.159   0.023   0.271   0.044  -0.148  -0.102 
+  7.219   0.157  -0.288  -0.420  -0.273  -0.186  -0.188  -0.137  -0.004   0.274   0.004   0.074  -0.130 
+  7.316   0.265  -0.133  -0.278  -0.165  -0.055  -0.184  -0.224  -0.118   0.142  -0.118  -0.028  -0.240 
+  7.581   0.255  -0.057  -0.116  -0.313  -0.161  -0.237  -0.195  -0.193   0.206  -0.018  -0.105  -0.178 
+  7.807  -0.007   0.075  -0.053  -0.312  -0.202  -0.328  -0.251  -0.306   0.301  -0.184  -0.041  -0.086 
+  7.976  -0.576   0.254   0.382  -0.368  -0.189  -0.440  -0.411  -0.451   0.373  -0.331   0.091   0.010 
+  8.248  -0.502   0.252   0.260  -0.747  -0.375  -0.502  -0.464  -0.392   0.466  -0.208   0.273   0.129 
+  8.664  -0.447   0.385   0.257  -0.686  -0.256  -0.398  -0.482  -0.599   0.307  -0.228   0.329   0.169 
+  9.145  -0.286   0.283   0.322  -0.802  -0.317  -0.423  -0.443  -0.538   0.332  -0.191   0.218  -0.011 
+  9.597  -0.399   0.272   0.416  -0.816  -0.272  -0.481  -0.420  -0.574   0.417  -0.176   0.225   0.064 
+  9.639  -0.471   0.279   0.208  -0.805  -0.421  -0.517  -0.325  -0.526   0.441  -0.163   0.212   0.080 
+  9.685  -0.282   0.369   0.117  -0.760  -0.437  -0.466  -0.356  -0.577   0.377  -0.250   0.130  -0.031 
diff --git a/test/regression/chan3.ctl b/test/regression/chan3.ctl
new file mode 100644 (file)
index 0000000..c934527
--- /dev/null
@@ -0,0 +1,4 @@
+chan3.raw
+chan3.wav
+chan3.2chan.wav
+chan3.sph
diff --git a/test/regression/chan3.f0 b/test/regression/chan3.f0
new file mode 100644 (file)
index 0000000..f0bc841
--- /dev/null
@@ -0,0 +1,2090 @@
+0.000 0.52 3675.00
+0.010 0.52 3675.00
+0.020 0.52 3675.00
+0.030 0.52 3675.00
+0.040 0.47 3675.00
+0.050 0.20 3675.00
+0.060 0.45 424.04
+0.070 0.38 424.04
+0.080 0.00 424.04
+0.090 0.18 2205.00
+0.100 0.00 183.75
+0.110 0.00 183.75
+0.120 0.53 193.42
+0.130 0.16 190.09
+0.140 0.17 196.88
+0.150 0.09 86.13
+0.160 0.14 108.09
+0.170 0.54 100.23
+0.180 0.30 121.15
+0.190 0.00 84.81
+0.200 0.44 103.04
+0.210 0.08 102.08
+0.220 0.53 121.15
+0.229 0.00 102.08
+0.239 0.00 136.11
+0.249 0.52 104.01
+0.259 0.61 112.50
+0.269 0.78 110.25
+0.279 0.85 109.16
+0.289 0.87 108.09
+0.299 0.84 106.01
+0.309 0.90 106.01
+0.319 0.91 104.01
+0.329 0.92 103.04
+0.339 0.93 99.32
+0.349 0.94 98.44
+0.359 0.93 99.32
+0.369 0.94 98.44
+0.379 0.92 99.32
+0.389 0.87 99.32
+0.399 0.92 99.32
+0.409 0.92 100.23
+0.419 0.91 101.15
+0.429 0.93 100.23
+0.439 0.93 100.23
+0.449 0.94 101.15
+0.459 0.89 101.15
+0.469 0.94 101.15
+0.479 0.96 103.04
+0.489 0.91 104.01
+0.499 0.91 102.08
+0.509 0.85 99.32
+0.519 0.91 97.57
+0.529 0.81 98.44
+0.539 0.91 97.57
+0.549 0.92 94.23
+0.559 0.91 93.43
+0.569 0.90 93.43
+0.579 0.91 90.37
+0.589 0.92 89.63
+0.599 0.92 89.63
+0.609 0.95 90.37
+0.619 0.95 90.37
+0.629 0.95 90.37
+0.639 0.60 91.12
+0.649 0.64 92.65
+0.659 0.82 91.88
+0.668 0.89 91.88
+0.678 0.91 94.23
+0.688 0.94 93.43
+0.698 0.90 95.04
+0.708 0.92 95.04
+0.718 0.92 95.04
+0.728 0.80 95.87
+0.738 0.80 97.57
+0.748 0.84 97.57
+0.758 0.82 96.71
+0.768 0.82 95.87
+0.778 0.85 95.04
+0.788 0.90 94.23
+0.798 0.91 91.88
+0.808 0.91 89.63
+0.818 0.91 86.81
+0.828 0.83 82.89
+0.838 0.67 86.13
+0.848 0.47 88.91
+0.858 0.67 88.20
+0.868 0.76 88.20
+0.878 0.87 87.50
+0.888 0.18 84.81
+0.898 0.56 80.47
+0.908 0.62 5512.50
+0.918 0.62 5512.50
+0.928 0.64 5512.50
+0.938 0.67 5512.50
+0.948 0.67 5512.50
+0.958 0.67 5512.50
+0.968 0.67 5512.50
+0.978 0.31 5512.50
+0.988 0.01 11025.00
+0.998 0.26 80.47
+1.008 0.00 80.47
+1.018 0.13 580.26
+1.028 0.00 82.89
+1.038 0.48 501.14
+1.048 0.32 282.69
+1.058 0.54 88.91
+1.068 0.55 87.50
+1.078 0.79 86.13
+1.088 0.95 85.47
+1.098 0.95 85.47
+1.107 0.68 81.67
+1.117 0.24 95.87
+1.127 0.06 96.71
+1.137 0.00 689.06
+1.147 0.03 3675.00
+1.157 0.50 3675.00
+1.167 0.39 3675.00
+1.177 0.51 3675.00
+1.187 0.51 3675.00
+1.197 0.13 99.32
+1.207 0.00 92.65
+1.217 0.68 80.47
+1.227 0.73 90.37
+1.237 0.65 94.23
+1.247 0.67 88.91
+1.257 0.83 86.81
+1.267 0.79 84.16
+1.277 0.61 85.47
+1.287 0.47 82.89
+1.297 0.95 80.47
+1.307 0.95 80.47
+1.317 0.38 88.20
+1.327 0.63 84.81
+1.337 0.29 94.23
+1.347 0.35 80.47
+1.357 0.00 282.69
+1.367 0.45 103.04
+1.377 0.13 126.72
+1.387 0.00 128.20
+1.397 0.00 93.43
+1.407 0.44 80.47
+1.417 0.57 81.07
+1.427 0.83 82.28
+1.437 0.79 80.47
+1.447 0.54 80.47
+1.457 0.48 91.12
+1.467 0.77 735.00
+1.477 0.77 735.00
+1.487 0.77 735.00
+1.497 0.73 735.00
+1.507 0.73 735.00
+1.517 0.71 689.06
+1.527 0.68 689.06
+1.537 0.68 648.53
+1.546 0.70 648.53
+1.556 0.75 648.53
+1.566 0.78 612.50
+1.576 0.68 580.26
+1.586 0.81 551.25
+1.596 0.56 501.14
+1.606 0.24 525.00
+1.616 0.43 212.02
+1.626 0.34 177.82
+1.636 0.66 175.00
+1.646 0.52 177.82
+1.656 0.00 183.75
+1.666 0.12 155.28
+1.676 0.00 85.47
+1.686 0.04 82.89
+1.696 0.12 122.50
+1.706 0.27 157.50
+1.716 0.51 145.07
+1.726 0.51 82.28
+1.736 0.43 80.47
+1.746 0.62 94.23
+1.756 0.49 99.32
+1.766 0.00 117.29
+1.776 0.00 123.88
+1.786 0.39 245.00
+1.796 0.00 83.52
+1.806 0.00 93.43
+1.816 0.47 80.47
+1.826 0.40 100.23
+1.836 0.03 177.82
+1.846 0.00 367.50
+1.856 0.52 408.33
+1.866 0.83 424.04
+1.876 0.46 441.00
+1.886 0.33 479.35
+1.896 0.60 479.35
+1.906 0.45 424.04
+1.916 0.00 424.04
+1.926 0.28 137.81
+1.936 0.00 157.50
+1.946 0.60 126.72
+1.956 0.23 121.15
+1.966 0.27 155.28
+1.976 0.00 80.47
+1.985 0.00 208.02
+1.995 0.00 216.18
+2.005 0.00 229.69
+2.015 0.58 250.57
+2.025 0.73 268.90
+2.035 0.62 256.40
+2.045 0.49 245.00
+2.055 0.01 250.57
+2.065 0.21 256.40
+2.075 0.01 136.11
+2.085 0.00 128.20
+2.095 0.27 80.47
+2.105 0.29 84.81
+2.115 0.00 80.47
+2.125 0.39 82.89
+2.135 0.39 82.89
+2.145 0.24 91.88
+2.155 0.08 80.47
+2.165 0.55 86.81
+2.175 0.61 87.50
+2.185 0.19 93.43
+2.195 0.36 99.32
+2.205 0.50 169.62
+2.215 0.45 186.86
+2.225 0.00 169.62
+2.235 0.00 126.72
+2.245 0.59 137.81
+2.255 0.22 151.03
+2.265 0.00 169.62
+2.275 0.00 177.82
+2.285 0.10 80.47
+2.295 0.35 86.81
+2.305 0.52 86.13
+2.315 0.05 83.52
+2.325 0.00 82.28
+2.335 0.02 256.40
+2.345 0.47 250.57
+2.355 0.00 216.18
+2.365 0.02 268.90
+2.375 0.17 114.84
+2.385 0.32 114.84
+2.395 0.22 97.57
+2.405 0.31 83.52
+2.415 0.54 84.16
+2.424 0.42 80.47
+2.434 0.16 92.65
+2.444 0.00 172.27
+2.454 0.00 159.78
+2.464 0.00 190.09
+2.474 0.17 87.50
+2.484 0.00 85.47
+2.494 0.54 97.57
+2.504 0.17 151.03
+2.514 0.70 143.18
+2.524 0.70 143.18
+2.534 0.56 132.83
+2.544 0.00 169.62
+2.554 0.00 113.66
+2.564 0.00 80.47
+2.574 0.00 80.47
+2.584 0.00 100.23
+2.594 0.00 100.23
+2.604 0.43 118.55
+2.614 0.07 112.50
+2.624 0.00 147.00
+2.634 0.29 80.47
+2.644 0.00 80.47
+2.654 0.00 100.23
+2.664 0.00 225.00
+2.674 0.00 183.75
+2.684 0.35 183.75
+2.694 0.49 216.18
+2.704 0.00 183.75
+2.714 0.41 190.09
+2.724 0.41 84.16
+2.734 0.42 82.89
+2.744 0.22 108.09
+2.754 0.12 119.84
+2.764 0.69 122.50
+2.774 0.12 119.84
+2.784 0.05 151.03
+2.794 0.39 113.66
+2.804 0.64 122.50
+2.814 0.00 137.81
+2.824 0.34 107.04
+2.834 0.49 1837.50
+2.844 0.15 1837.50
+2.854 0.00 1102.50
+2.863 0.19 1002.27
+2.873 0.54 918.75
+2.883 0.00 167.05
+2.893 0.00 125.28
+2.903 0.56 134.45
+2.913 0.91 118.55
+2.923 0.91 118.55
+2.933 0.88 117.29
+2.943 0.87 117.29
+2.953 0.81 113.66
+2.963 0.64 110.25
+2.973 0.44 107.04
+2.983 0.93 105.00
+2.993 0.93 103.04
+3.003 0.98 101.15
+3.013 0.98 101.15
+3.023 0.61 100.23
+3.033 0.19 99.32
+3.043 0.27 99.32
+3.053 0.63 98.44
+3.063 0.50 96.71
+3.073 0.46 92.65
+3.083 0.00 612.50
+3.093 0.00 848.08
+3.103 0.00 787.50
+3.113 0.00 2756.25
+3.123 0.00 3675.00
+3.133 0.56 2756.25
+3.143 0.56 2756.25
+3.153 0.28 2756.25
+3.163 0.26 2756.25
+3.173 0.00 103.04
+3.183 0.38 108.09
+3.193 0.72 104.01
+3.203 0.54 104.01
+3.213 0.18 151.03
+3.223 0.84 122.50
+3.233 0.58 104.01
+3.243 0.29 121.15
+3.253 0.55 80.47
+3.263 0.70 80.47
+3.273 0.70 80.47
+3.283 0.08 91.88
+3.293 0.00 80.47
+3.302 0.00 2205.00
+3.312 0.00 2205.00
+3.322 0.27 918.75
+3.332 0.71 918.75
+3.342 0.71 918.75
+3.352 0.71 918.75
+3.362 0.71 918.75
+3.372 0.27 123.88
+3.382 0.29 126.72
+3.392 0.72 132.83
+3.402 0.59 129.71
+3.412 0.78 125.28
+3.422 0.87 121.15
+3.432 0.87 121.15
+3.442 0.87 121.15
+3.452 0.85 118.55
+3.462 0.70 119.84
+3.472 0.81 121.15
+3.482 0.87 121.15
+3.492 0.90 123.88
+3.502 0.89 121.15
+3.512 0.92 118.55
+3.522 0.71 112.50
+3.532 0.70 101.15
+3.542 0.51 107.04
+3.552 0.59 86.81
+3.562 0.87 103.04
+3.572 0.77 117.29
+3.582 0.83 121.15
+3.592 0.84 119.84
+3.602 0.77 118.55
+3.612 0.93 117.29
+3.622 0.92 117.29
+3.632 0.95 118.55
+3.642 0.91 119.84
+3.652 0.89 121.15
+3.662 0.88 121.15
+3.672 0.89 121.15
+3.682 0.50 123.88
+3.692 0.70 121.15
+3.702 0.63 122.50
+3.712 0.68 122.50
+3.722 0.76 121.15
+3.732 0.78 119.84
+3.741 0.84 118.55
+3.751 0.80 114.84
+3.761 0.90 111.36
+3.771 0.95 108.09
+3.781 0.95 106.01
+3.791 0.95 105.00
+3.801 0.95 102.08
+3.811 0.91 102.08
+3.821 0.95 102.08
+3.831 0.91 101.15
+3.841 0.91 101.15
+3.851 0.90 101.15
+3.861 0.92 100.23
+3.871 0.93 98.44
+3.881 0.94 96.71
+3.891 0.93 95.04
+3.901 0.92 95.04
+3.911 0.33 97.57
+3.921 0.35 118.55
+3.931 0.42 93.43
+3.941 0.71 95.04
+3.951 0.77 96.71
+3.961 0.84 98.44
+3.971 0.84 98.44
+3.981 0.84 98.44
+3.991 0.83 97.57
+4.001 0.93 95.87
+4.011 0.93 95.87
+4.021 0.84 96.71
+4.031 0.83 97.57
+4.041 0.87 96.71
+4.051 0.91 95.87
+4.061 0.83 94.23
+4.071 0.53 90.37
+4.081 0.88 91.88
+4.091 0.93 94.23
+4.101 0.26 95.04
+4.111 0.72 95.87
+4.121 0.61 93.43
+4.131 0.93 92.65
+4.141 0.87 91.88
+4.151 0.76 90.37
+4.161 0.53 89.63
+4.171 0.91 95.87
+4.180 0.93 94.23
+4.190 0.93 94.23
+4.200 0.91 95.04
+4.210 0.90 93.43
+4.220 0.41 103.04
+4.230 0.93 93.43
+4.240 0.93 93.43
+4.250 0.92 92.65
+4.260 0.92 92.65
+4.270 0.82 91.12
+4.280 0.92 92.65
+4.290 0.76 94.23
+4.300 0.66 93.43
+4.310 0.54 91.12
+4.320 0.44 80.47
+4.330 0.65 89.63
+4.340 0.41 95.87
+4.350 0.59 92.65
+4.360 0.59 92.65
+4.370 0.00 114.84
+4.380 0.17 121.15
+4.390 0.00 91.88
+4.400 0.56 114.84
+4.410 0.82 97.57
+4.420 0.67 91.12
+4.430 0.51 82.28
+4.440 0.40 99.32
+4.450 0.35 441.00
+4.460 0.55 102.08
+4.470 0.00 89.63
+4.480 0.34 86.13
+4.490 0.27 501.14
+4.500 0.00 501.14
+4.510 0.00 132.83
+4.520 0.05 11025.00
+4.530 0.50 11025.00
+4.540 0.50 11025.00
+4.550 0.50 11025.00
+4.560 0.50 11025.00
+4.570 0.04 91.12
+4.580 0.00 91.12
+4.590 0.58 108.09
+4.600 0.00 134.45
+4.610 0.00 91.12
+4.620 0.40 11025.00
+4.629 0.06 11025.00
+4.639 0.00 11025.00
+4.649 0.21 11025.00
+4.659 0.00 91.88
+4.669 0.34 11025.00
+4.679 0.05 11025.00
+4.689 0.26 80.47
+4.699 0.00 80.47
+4.709 0.60 80.47
+4.719 0.46 98.44
+4.729 0.56 95.04
+4.739 0.66 94.23
+4.749 0.00 95.04
+4.759 0.61 85.47
+4.769 0.03 80.47
+4.779 0.00 80.47
+4.789 0.15 11025.00
+4.799 0.00 129.71
+4.809 0.09 98.44
+4.819 0.68 104.01
+4.829 0.60 107.04
+4.839 0.23 118.55
+4.849 0.00 92.65
+4.859 0.60 82.89
+4.869 0.00 80.47
+4.879 0.00 80.47
+4.889 0.52 100.23
+4.899 0.00 90.37
+4.909 0.17 102.08
+4.919 0.00 99.32
+4.929 0.39 90.37
+4.939 0.53 80.47
+4.949 0.00 80.47
+4.959 0.60 80.47
+4.969 0.60 80.47
+4.979 0.60 80.47
+4.989 0.04 80.47
+4.999 0.60 80.47
+5.009 0.00 157.50
+5.019 0.28 162.13
+5.029 0.52 136.11
+5.039 0.00 114.84
+5.049 0.00 147.00
+5.059 0.00 90.37
+5.068 0.04 94.23
+5.078 0.66 96.71
+5.088 0.71 96.71
+5.098 0.86 100.23
+5.108 0.89 97.57
+5.118 0.85 94.23
+5.128 0.92 95.04
+5.138 0.94 92.65
+5.148 0.92 91.12
+5.158 0.78 88.91
+5.168 0.59 82.28
+5.178 0.68 80.47
+5.188 0.68 80.47
+5.198 0.68 80.47
+5.208 0.40 100.23
+5.218 0.00 91.88
+5.228 0.46 167.05
+5.238 0.00 96.71
+5.248 0.00 100.23
+5.258 0.82 80.47
+5.268 0.82 80.47
+5.278 0.00 80.47
+5.288 0.36 80.47
+5.298 0.00 95.87
+5.308 0.15 11025.00
+5.318 0.40 11025.00
+5.328 0.00 108.09
+5.338 0.00 99.32
+5.348 0.83 90.37
+5.358 0.90 90.37
+5.368 0.93 89.63
+5.378 0.93 89.63
+5.388 0.88 88.20
+5.398 0.92 85.47
+5.408 0.92 87.50
+5.418 0.90 87.50
+5.428 0.93 86.81
+5.438 0.92 84.81
+5.448 0.85 82.28
+5.458 0.92 84.81
+5.468 0.54 84.81
+5.478 0.67 85.47
+5.488 0.52 80.47
+5.498 0.67 85.47
+5.507 0.56 5512.50
+5.517 0.56 5512.50
+5.527 0.56 5512.50
+5.537 0.00 551.25
+5.547 0.05 501.14
+5.557 0.57 525.00
+5.567 0.28 97.57
+5.577 0.42 92.65
+5.587 0.79 89.63
+5.597 0.80 88.91
+5.607 0.91 87.50
+5.617 0.90 86.81
+5.627 0.91 87.50
+5.637 0.89 86.81
+5.647 0.91 86.13
+5.657 0.87 86.13
+5.667 0.89 84.81
+5.677 0.92 85.47
+5.687 0.87 84.16
+5.697 0.90 83.52
+5.707 0.85 82.28
+5.717 0.85 81.07
+5.727 0.92 80.47
+5.737 0.71 80.47
+5.747 0.64 90.37
+5.757 0.77 80.47
+5.767 0.72 80.47
+5.777 0.89 81.67
+5.787 0.65 90.37
+5.797 0.43 88.91
+5.807 0.52 551.25
+5.817 0.68 459.38
+5.827 0.24 551.25
+5.837 0.00 106.01
+5.847 0.00 128.20
+5.857 0.69 125.28
+5.867 0.65 106.01
+5.877 0.19 106.01
+5.887 0.40 90.37
+5.897 0.59 612.50
+5.907 0.00 612.50
+5.917 0.02 11025.00
+5.927 0.62 5512.50
+5.937 0.62 5512.50
+5.946 0.62 5512.50
+5.956 0.62 5512.50
+5.966 0.58 5512.50
+5.976 0.58 5512.50
+5.986 0.58 5512.50
+5.996 0.00 122.50
+6.006 0.08 98.44
+6.016 0.64 100.23
+6.026 0.84 85.47
+6.036 0.87 80.47
+6.046 0.87 80.47
+6.056 0.87 80.47
+6.066 0.61 93.43
+6.076 0.51 90.37
+6.086 0.64 648.53
+6.096 0.64 648.53
+6.106 0.56 89.63
+6.116 0.63 89.63
+6.126 0.95 80.47
+6.136 0.95 80.47
+6.146 0.92 81.07
+6.156 0.80 81.67
+6.166 0.67 81.67
+6.176 0.63 82.28
+6.186 0.67 82.89
+6.196 0.63 81.67
+6.206 0.53 81.07
+6.216 0.63 81.67
+6.226 0.50 82.89
+6.236 0.60 86.13
+6.246 0.67 82.28
+6.256 0.60 80.47
+6.266 0.35 81.07
+6.276 0.32 81.67
+6.286 0.18 91.12
+6.296 0.33 1575.00
+6.306 0.05 95.87
+6.316 0.00 290.13
+6.326 0.05 306.25
+6.336 0.42 334.09
+6.346 0.25 324.26
+6.356 0.08 408.33
+6.366 0.40 1837.50
+6.376 0.30 1837.50
+6.385 0.53 1837.50
+6.395 0.53 1837.50
+6.405 0.53 1837.50
+6.415 0.38 918.75
+6.425 0.39 918.75
+6.435 0.56 918.75
+6.445 0.28 918.75
+6.455 0.11 848.08
+6.465 0.07 1837.50
+6.475 0.37 580.26
+6.485 0.04 580.26
+6.495 0.22 551.25
+6.505 0.17 117.29
+6.515 0.17 612.50
+6.525 0.14 580.26
+6.535 0.45 580.26
+6.545 0.49 1837.50
+6.555 0.10 1837.50
+6.565 0.49 1837.50
+6.575 0.39 2205.00
+6.585 0.00 132.83
+6.595 0.27 104.01
+6.605 0.58 84.16
+6.615 0.71 84.16
+6.625 0.68 83.52
+6.635 0.62 83.52
+6.645 0.45 96.71
+6.655 0.08 250.57
+6.665 0.00 220.50
+6.675 0.00 525.00
+6.685 0.27 1837.50
+6.695 0.00 81.67
+6.705 0.22 80.47
+6.715 0.69 94.23
+6.725 0.43 116.05
+6.735 0.74 111.36
+6.745 0.42 94.23
+6.755 0.00 104.01
+6.765 0.49 11025.00
+6.775 0.09 11025.00
+6.785 0.49 11025.00
+6.795 0.34 137.81
+6.805 0.00 145.07
+6.815 0.00 117.29
+6.824 0.72 119.84
+6.834 0.19 126.72
+6.844 0.00 101.15
+6.854 0.27 95.04
+6.864 0.00 100.23
+6.874 0.47 99.32
+6.884 0.48 103.04
+6.894 0.00 86.81
+6.904 0.27 128.20
+6.914 0.00 145.07
+6.924 0.00 145.07
+6.934 0.00 111.36
+6.944 0.13 121.15
+6.954 0.18 106.01
+6.964 0.39 143.18
+6.974 0.51 114.84
+6.984 0.76 126.72
+6.994 0.47 107.04
+7.004 0.00 107.04
+7.014 0.29 95.87
+7.024 0.00 100.23
+7.034 0.27 117.29
+7.044 0.04 126.72
+7.054 0.00 126.72
+7.064 0.49 148.99
+7.074 0.00 126.72
+7.084 0.00 126.72
+7.094 0.00 129.71
+7.104 0.00 111.36
+7.114 0.00 81.67
+7.124 0.52 96.71
+7.134 0.01 119.84
+7.144 0.44 100.23
+7.154 0.19 103.04
+7.164 0.03 86.13
+7.174 0.00 95.87
+7.184 0.19 80.47
+7.194 0.24 1837.50
+7.204 0.27 1837.50
+7.214 0.68 1837.50
+7.224 0.72 1837.50
+7.234 0.75 1837.50
+7.244 0.75 1837.50
+7.254 0.75 1837.50
+7.263 0.75 1837.50
+7.273 0.75 1837.50
+7.283 0.74 1837.50
+7.293 0.48 1837.50
+7.303 0.47 1837.50
+7.313 0.72 1837.50
+7.323 0.72 1837.50
+7.333 0.72 1837.50
+7.343 0.58 1837.50
+7.353 0.11 1837.50
+7.363 0.00 84.16
+7.373 0.52 95.04
+7.383 0.72 81.67
+7.393 0.06 81.07
+7.403 0.00 97.57
+7.413 0.59 1837.50
+7.423 0.59 1837.50
+7.433 0.27 1837.50
+7.443 0.00 1837.50
+7.453 0.00 106.01
+7.463 0.53 102.08
+7.473 0.00 108.09
+7.483 0.62 86.81
+7.493 0.23 82.28
+7.503 0.32 90.37
+7.513 0.00 256.40
+7.523 0.00 107.04
+7.533 0.00 80.47
+7.543 0.59 91.12
+7.553 0.47 94.23
+7.563 0.00 107.04
+7.573 0.48 113.66
+7.583 0.28 134.45
+7.593 0.45 134.45
+7.603 0.56 108.09
+7.613 0.36 121.15
+7.623 0.38 119.84
+7.633 0.51 105.00
+7.643 0.00 80.47
+7.653 0.57 84.16
+7.663 0.11 80.47
+7.673 0.00 183.75
+7.683 0.69 216.18
+7.693 0.58 216.18
+7.702 0.69 216.18
+7.712 0.88 225.00
+7.722 0.91 220.50
+7.732 0.91 220.50
+7.742 0.06 220.50
+7.752 0.00 220.50
+7.762 0.71 216.18
+7.772 0.71 216.18
+7.782 0.07 220.50
+7.792 0.00 220.50
+7.802 0.00 225.00
+7.812 0.00 551.25
+7.822 0.66 250.57
+7.832 0.77 239.67
+7.842 0.92 225.00
+7.852 0.90 459.38
+7.862 0.93 459.38
+7.872 0.93 459.38
+7.882 0.93 459.38
+7.892 0.93 459.38
+7.902 0.00 441.00
+7.912 0.00 424.04
+7.922 0.04 196.88
+7.932 0.19 147.00
+7.942 0.34 129.71
+7.952 0.00 132.83
+7.962 0.47 153.12
+7.972 0.29 190.09
+7.982 0.38 141.35
+7.992 0.00 91.88
+8.002 0.47 220.50
+8.012 0.64 225.00
+8.022 0.78 216.18
+8.032 0.78 216.18
+8.042 0.19 193.42
+8.052 0.37 121.15
+8.062 0.60 128.20
+8.072 0.52 117.29
+8.082 0.33 122.50
+8.092 0.40 204.17
+8.102 0.00 229.69
+8.112 0.50 501.14
+8.122 0.84 501.14
+8.132 0.92 525.00
+8.141 0.92 525.00
+8.151 0.86 525.00
+8.161 0.74 551.25
+8.171 0.91 268.90
+8.181 0.29 282.69
+8.191 0.36 268.90
+8.201 0.45 157.50
+8.211 0.62 169.62
+8.221 0.00 145.07
+8.231 0.31 145.07
+8.241 0.00 125.28
+8.251 0.27 80.47
+8.261 0.42 132.83
+8.271 0.18 122.50
+8.281 0.66 107.04
+8.291 0.35 125.28
+8.301 0.30 111.36
+8.311 0.00 125.28
+8.321 0.67 131.25
+8.331 0.93 106.01
+8.341 0.93 106.01
+8.351 0.41 103.04
+8.361 0.52 105.00
+8.371 0.57 104.01
+8.381 0.86 103.04
+8.391 0.93 102.08
+8.401 0.93 101.15
+8.411 0.94 100.23
+8.421 0.93 99.32
+8.431 0.91 99.32
+8.441 0.81 98.44
+8.451 0.69 97.57
+8.461 0.60 97.57
+8.471 0.63 89.63
+8.481 0.86 92.65
+8.491 0.72 91.12
+8.501 0.30 99.32
+8.511 0.61 106.01
+8.521 0.86 99.32
+8.531 0.53 96.71
+8.541 0.76 95.04
+8.551 0.94 94.23
+8.561 0.91 95.04
+8.571 0.94 94.23
+8.580 0.94 94.23
+8.590 0.84 95.04
+8.600 0.82 91.12
+8.610 0.87 89.63
+8.620 0.84 88.91
+8.630 0.87 88.91
+8.640 0.87 88.91
+8.650 0.93 86.13
+8.660 0.91 85.47
+8.670 0.93 86.13
+8.680 0.93 86.13
+8.690 0.70 86.81
+8.700 0.56 97.57
+8.710 0.46 92.65
+8.720 0.48 101.15
+8.730 0.01 11025.00
+8.740 0.23 11025.00
+8.750 0.65 5512.50
+8.760 0.68 5512.50
+8.770 0.68 5512.50
+8.780 0.68 5512.50
+8.790 0.45 5512.50
+8.800 0.13 5512.50
+8.810 0.00 2756.25
+8.820 0.49 2205.00
+8.830 0.49 2205.00
+8.840 0.00 118.55
+8.850 0.29 109.16
+8.860 0.68 100.23
+8.870 0.57 94.23
+8.880 0.53 92.65
+8.890 0.53 91.12
+8.900 0.64 88.91
+8.910 0.40 93.43
+8.920 0.40 87.50
+8.930 0.72 86.13
+8.940 0.83 86.13
+8.950 0.84 84.81
+8.960 0.77 81.07
+8.970 0.58 92.65
+8.980 0.50 91.12
+8.990 0.29 89.63
+9.000 0.51 117.29
+9.010 0.00 128.20
+9.020 0.00 113.66
+9.029 0.00 111.36
+9.039 0.06 109.16
+9.049 0.72 89.63
+9.059 0.60 91.88
+9.069 0.82 83.52
+9.079 0.30 98.44
+9.089 0.22 104.01
+9.099 0.00 200.45
+9.109 0.00 119.84
+9.119 0.00 136.11
+9.129 0.06 11025.00
+9.139 0.50 11025.00
+9.149 0.21 11025.00
+9.159 0.44 80.47
+9.169 0.08 80.47
+9.179 0.73 80.47
+9.189 0.73 80.47
+9.199 0.73 80.47
+9.209 0.38 104.01
+9.219 0.60 88.20
+9.229 0.82 83.52
+9.239 0.86 82.28
+9.249 0.83 80.47
+9.259 0.84 80.47
+9.269 0.84 80.47
+9.279 0.61 91.12
+9.289 0.56 91.12
+9.299 0.52 90.37
+9.309 0.50 612.50
+9.319 0.48 648.53
+9.329 0.45 87.50
+9.339 0.01 11025.00
+9.349 0.46 501.14
+9.359 0.41 92.65
+9.369 0.49 80.47
+9.379 0.87 80.47
+9.389 0.75 81.07
+9.399 0.53 95.87
+9.409 0.30 90.37
+9.419 0.00 408.33
+9.429 0.00 355.65
+9.439 0.62 80.47
+9.449 0.00 96.71
+9.459 0.30 86.13
+9.468 0.00 2205.00
+9.478 0.32 1837.50
+9.488 0.66 1837.50
+9.498 0.66 1837.50
+9.508 0.66 1837.50
+9.518 0.27 80.47
+9.528 0.13 116.05
+9.538 0.56 95.04
+9.548 0.00 81.07
+9.558 0.47 95.87
+9.568 0.51 103.04
+9.578 0.00 128.20
+9.588 0.00 102.08
+9.598 0.00 262.50
+9.608 0.00 86.13
+9.618 0.00 86.13
+9.628 0.34 102.08
+9.638 0.00 80.47
+9.648 0.69 80.47
+9.658 0.69 80.47
+9.668 0.00 98.44
+9.678 0.03 86.81
+9.688 0.49 11025.00
+9.698 0.49 11025.00
+9.708 0.26 80.47
+9.718 0.51 80.47
+9.728 0.51 80.47
+9.738 0.51 80.47
+9.748 0.39 1575.00
+9.758 0.19 98.44
+9.768 0.11 98.44
+9.778 0.66 81.07
+9.788 0.80 85.47
+9.798 0.55 83.52
+9.808 0.33 81.67
+9.818 0.17 83.52
+9.828 0.50 83.52
+9.838 0.25 1837.50
+9.848 0.17 1837.50
+9.858 0.78 1837.50
+9.868 0.78 1837.50
+9.878 0.78 1837.50
+9.888 0.52 1837.50
+9.898 0.65 1837.50
+9.907 0.27 1575.00
+9.917 0.28 114.84
+9.927 0.20 114.84
+9.937 0.51 112.50
+9.947 0.34 112.50
+9.957 0.29 109.16
+9.967 0.48 580.26
+9.977 0.48 580.26
+9.987 0.33 212.02
+9.997 0.39 216.18
+10.007 0.49 212.02
+10.017 0.39 220.50
+10.027 0.05 129.71
+10.037 0.30 129.71
+10.047 0.54 109.16
+10.057 0.33 164.55
+10.067 0.39 220.50
+10.077 0.55 612.50
+10.087 0.79 612.50
+10.097 0.81 612.50
+10.107 0.78 580.26
+10.117 0.62 580.26
+10.127 0.00 648.53
+10.137 0.03 689.06
+10.147 0.48 787.50
+10.157 0.41 848.08
+10.167 0.48 848.08
+10.177 0.00 787.50
+10.187 0.00 918.75
+10.197 0.27 100.23
+10.207 0.00 132.83
+10.217 0.00 98.44
+10.227 0.00 108.09
+10.237 0.42 113.66
+10.247 0.10 99.32
+10.257 0.31 116.05
+10.267 0.00 114.84
+10.277 0.36 83.52
+10.287 0.55 92.65
+10.297 0.44 104.01
+10.307 0.28 102.08
+10.317 0.15 86.81
+10.327 0.53 86.81
+10.337 0.44 88.91
+10.346 0.26 80.47
+10.356 0.00 104.01
+10.366 0.00 121.15
+10.376 0.35 91.12
+10.386 0.68 104.01
+10.396 0.68 104.01
+10.406 0.35 103.04
+10.416 0.00 220.50
+10.426 0.30 208.02
+10.436 0.64 190.09
+10.446 0.23 126.72
+10.456 0.33 122.50
+10.466 0.71 102.08
+10.476 0.56 119.84
+10.486 0.61 86.81
+10.496 0.53 216.18
+10.506 0.62 122.50
+10.516 0.59 141.35
+10.526 0.74 137.81
+10.536 0.59 162.13
+10.546 0.64 132.83
+10.556 0.59 848.08
+10.566 0.69 95.87
+10.576 0.63 735.00
+10.586 0.35 250.57
+10.596 0.57 250.57
+10.606 0.76 250.57
+10.616 0.45 245.00
+10.626 0.44 239.67
+10.636 0.48 735.00
+10.646 0.29 848.08
+10.656 0.08 111.36
+10.666 0.00 90.37
+10.676 0.61 107.04
+10.686 0.47 91.88
+10.696 0.00 109.16
+10.706 0.45 83.52
+10.716 0.60 95.04
+10.726 0.65 90.37
+10.736 0.14 80.47
+10.746 0.54 80.47
+10.756 0.54 80.47
+10.766 0.52 93.43
+10.776 0.00 116.05
+10.785 0.19 99.32
+10.795 0.18 86.13
+10.805 0.70 80.47
+10.815 0.70 80.47
+10.825 0.50 81.07
+10.835 0.30 80.47
+10.845 0.00 80.47
+10.855 0.18 103.04
+10.865 0.00 80.47
+10.875 0.44 84.16
+10.885 0.00 82.89
+10.895 0.31 81.67
+10.905 0.75 250.57
+10.915 0.91 250.57
+10.925 0.91 250.57
+10.935 0.91 250.57
+10.945 0.83 250.57
+10.955 0.93 256.40
+10.965 0.88 256.40
+10.975 0.95 262.50
+10.985 0.95 262.50
+10.995 0.95 262.50
+11.005 0.95 262.50
+11.015 0.94 262.50
+11.025 0.64 268.90
+11.035 0.74 268.90
+11.045 0.66 268.90
+11.055 0.83 275.62
+11.065 0.83 275.62
+11.075 0.00 239.67
+11.085 0.00 239.67
+11.095 0.00 80.47
+11.105 0.00 86.81
+11.115 0.45 86.13
+11.125 0.00 256.40
+11.135 0.00 256.40
+11.145 0.78 250.57
+11.155 0.87 239.67
+11.165 0.85 229.69
+11.175 0.84 225.00
+11.185 0.57 225.00
+11.195 0.75 220.50
+11.205 0.05 216.18
+11.215 0.00 212.02
+11.224 0.38 80.47
+11.234 0.15 87.50
+11.244 0.26 101.15
+11.254 0.53 204.17
+11.264 0.53 196.88
+11.274 0.76 196.88
+11.284 0.54 190.09
+11.294 0.74 196.88
+11.304 0.80 200.45
+11.314 0.00 196.88
+11.324 0.30 193.42
+11.334 0.00 116.05
+11.344 0.00 117.29
+11.354 0.25 80.47
+11.364 0.46 91.12
+11.374 0.30 95.87
+11.384 0.32 193.42
+11.394 0.51 193.42
+11.404 0.79 193.42
+11.414 0.85 190.09
+11.424 0.90 190.09
+11.434 0.92 190.09
+11.444 0.92 190.09
+11.454 0.92 190.09
+11.464 0.95 193.42
+11.474 0.95 193.42
+11.484 0.95 193.42
+11.494 0.95 193.42
+11.504 0.95 193.42
+11.514 0.84 196.88
+11.524 0.85 196.88
+11.534 0.82 200.45
+11.544 0.84 200.45
+11.554 0.84 200.45
+11.564 0.48 193.42
+11.574 0.38 245.00
+11.584 0.26 175.00
+11.594 0.28 99.32
+11.604 0.19 234.57
+11.614 0.30 220.50
+11.624 0.57 204.17
+11.634 0.00 250.57
+11.644 0.00 183.75
+11.654 0.34 1378.12
+11.663 0.34 1378.12
+11.673 0.15 1378.12
+11.683 0.00 216.18
+11.693 0.00 80.47
+11.703 0.00 105.00
+11.713 0.27 105.00
+11.723 0.78 123.88
+11.733 0.13 105.00
+11.743 0.00 105.00
+11.753 0.57 80.47
+11.763 0.57 80.47
+11.773 0.62 80.47
+11.783 0.08 81.67
+11.793 0.62 80.47
+11.803 0.62 80.47
+11.813 0.00 100.23
+11.823 0.00 123.88
+11.833 0.00 111.36
+11.843 0.36 99.32
+11.853 0.18 100.23
+11.863 0.81 80.47
+11.873 0.81 80.47
+11.883 0.00 100.23
+11.893 0.00 100.23
+11.903 0.72 111.36
+11.913 0.00 94.23
+11.923 0.19 94.23
+11.933 0.00 151.03
+11.943 0.00 80.47
+11.953 0.00 100.23
+11.963 0.06 108.09
+11.973 0.18 100.23
+11.983 0.09 100.23
+11.993 0.50 80.47
+12.003 0.35 84.16
+12.013 0.08 85.47
+12.023 0.00 136.11
+12.033 0.00 95.87
+12.043 0.07 95.04
+12.053 0.41 91.88
+12.063 0.21 82.28
+12.073 0.03 131.25
+12.083 0.06 132.83
+12.093 0.45 155.28
+12.102 0.45 141.35
+12.112 0.45 118.55
+12.122 0.28 134.45
+12.132 0.50 125.28
+12.142 0.69 131.25
+12.152 0.51 134.45
+12.162 0.69 131.25
+12.172 0.56 119.84
+12.182 0.47 129.71
+12.192 0.56 119.84
+12.202 0.03 148.99
+12.212 0.00 148.99
+12.222 0.16 80.47
+12.232 0.00 80.47
+12.242 0.00 80.47
+12.252 0.00 99.32
+12.262 0.00 105.00
+12.272 0.45 84.81
+12.282 0.00 91.88
+12.292 0.25 84.81
+12.302 0.47 80.47
+12.312 0.52 80.47
+12.322 0.62 85.47
+12.332 0.56 80.47
+12.342 0.28 80.47
+12.352 0.56 80.47
+12.362 0.24 95.04
+12.372 0.49 104.01
+12.382 0.68 100.23
+12.392 0.34 204.17
+12.402 0.68 100.23
+12.412 0.82 100.23
+12.422 0.86 204.17
+12.432 0.83 204.17
+12.442 0.94 204.17
+12.452 0.94 204.17
+12.462 0.89 204.17
+12.472 0.91 200.45
+12.482 0.80 196.88
+12.492 0.54 204.17
+12.502 0.54 83.52
+12.512 0.57 80.47
+12.522 0.34 186.86
+12.532 0.25 212.02
+12.541 0.77 200.45
+12.551 0.06 196.88
+12.561 0.12 172.27
+12.571 0.00 103.04
+12.581 0.58 82.89
+12.591 0.28 80.47
+12.601 0.00 80.47
+12.611 0.00 147.00
+12.621 0.53 175.00
+12.631 0.67 172.27
+12.641 0.78 167.05
+12.651 0.57 164.55
+12.661 0.45 151.03
+12.671 0.51 153.12
+12.681 0.54 151.03
+12.691 0.54 151.03
+12.701 0.29 164.55
+12.711 0.00 186.86
+12.721 0.00 290.13
+12.731 0.00 80.47
+12.741 0.00 90.37
+12.751 0.00 80.47
+12.761 0.59 95.04
+12.771 0.00 118.55
+12.781 0.47 88.20
+12.791 0.19 109.16
+12.801 0.20 84.81
+12.811 0.28 96.71
+12.821 0.28 86.13
+12.831 0.42 131.25
+12.841 0.42 90.37
+12.851 0.47 106.01
+12.861 0.06 106.01
+12.871 0.00 85.47
+12.881 0.47 86.13
+12.891 0.67 84.81
+12.901 0.10 105.00
+12.911 0.00 86.81
+12.921 0.00 119.84
+12.931 0.00 121.15
+12.941 0.00 86.13
+12.951 0.78 97.57
+12.961 0.00 82.28
+12.971 0.78 97.57
+12.980 0.11 88.20
+12.990 0.00 121.15
+13.000 0.40 123.88
+13.010 0.45 114.84
+13.020 0.22 118.55
+13.030 0.28 105.00
+13.040 0.17 114.84
+13.050 0.10 89.63
+13.060 0.52 103.04
+13.070 0.00 86.81
+13.080 0.45 91.12
+13.090 0.46 220.50
+13.100 0.00 132.83
+13.110 0.00 90.37
+13.120 0.54 107.04
+13.130 0.00 91.88
+13.140 0.00 122.50
+13.150 0.40 80.47
+13.160 0.33 82.28
+13.170 0.08 113.66
+13.180 0.24 117.29
+13.190 0.67 95.87
+13.200 0.38 81.07
+13.210 0.39 81.07
+13.220 0.30 80.47
+13.230 0.11 116.05
+13.240 0.56 94.23
+13.250 0.13 101.15
+13.260 0.41 103.04
+13.270 0.62 92.65
+13.280 0.56 84.16
+13.290 0.32 83.52
+13.300 0.00 89.63
+13.310 0.47 114.84
+13.320 0.17 117.29
+13.330 0.23 118.55
+13.340 0.00 122.50
+13.350 0.01 84.81
+13.360 0.04 112.50
+13.370 0.46 100.23
+13.380 0.18 101.15
+13.390 0.15 88.91
+13.400 0.00 80.47
+13.410 0.64 91.12
+13.420 0.39 113.66
+13.429 0.00 90.37
+13.439 0.45 97.57
+13.449 0.00 87.50
+13.459 0.00 90.37
+13.469 0.61 93.43
+13.479 0.17 102.08
+13.489 0.21 113.66
+13.499 0.12 250.57
+13.509 0.44 80.47
+13.519 0.11 113.66
+13.529 0.00 80.47
+13.539 0.60 91.88
+13.549 0.73 88.20
+13.559 0.00 106.01
+13.569 0.11 80.47
+13.579 0.50 164.55
+13.589 0.00 145.07
+13.599 0.00 148.99
+13.609 0.36 80.47
+13.619 0.36 80.47
+13.629 0.28 80.47
+13.639 0.24 84.81
+13.649 0.83 83.52
+13.659 0.27 88.20
+13.669 0.00 102.08
+13.679 0.00 101.15
+13.689 0.33 117.29
+13.699 0.47 119.84
+13.709 0.75 137.81
+13.719 0.36 125.28
+13.729 0.24 116.05
+13.739 0.24 91.12
+13.749 0.77 94.23
+13.759 0.37 111.36
+13.769 0.00 117.29
+13.779 0.77 88.91
+13.789 0.00 110.25
+13.799 0.53 105.00
+13.809 0.60 117.29
+13.819 0.00 125.28
+13.829 0.38 136.11
+13.839 0.22 106.01
+13.849 0.06 183.75
+13.859 0.54 200.45
+13.868 0.83 196.88
+13.878 0.45 212.02
+13.888 0.39 225.00
+13.898 0.48 89.63
+13.908 0.30 96.71
+13.918 0.58 95.87
+13.928 0.00 82.28
+13.938 0.24 81.07
+13.948 0.00 183.75
+13.958 0.02 525.00
+13.968 0.00 393.75
+13.978 0.34 220.50
+13.988 0.05 216.18
+13.998 0.20 121.15
+14.008 0.00 132.83
+14.018 0.56 107.04
+14.028 0.43 113.66
+14.038 0.23 110.25
+14.048 0.50 121.15
+14.058 0.15 114.84
+14.068 0.32 128.20
+14.078 0.34 81.07
+14.088 0.28 91.12
+14.098 0.46 91.88
+14.108 0.25 108.09
+14.118 0.38 122.50
+14.128 0.76 101.15
+14.138 0.91 103.04
+14.148 0.91 103.04
+14.158 0.91 103.04
+14.168 0.96 102.08
+14.178 0.91 100.23
+14.188 0.87 96.71
+14.198 0.74 94.23
+14.208 0.61 87.50
+14.218 0.58 98.44
+14.228 0.58 169.62
+14.238 0.52 87.50
+14.248 0.76 96.71
+14.258 0.76 96.71
+14.268 0.90 96.71
+14.278 0.89 95.87
+14.288 0.90 96.71
+14.298 0.87 93.43
+14.307 0.90 91.88
+14.317 0.89 90.37
+14.327 0.86 90.37
+14.337 0.41 80.47
+14.347 0.25 81.07
+14.357 0.40 106.01
+14.367 0.67 97.57
+14.377 0.20 112.50
+14.387 0.28 290.13
+14.397 0.19 212.02
+14.407 0.69 245.00
+14.417 0.09 225.00
+14.427 0.00 212.02
+14.437 0.00 193.42
+14.447 0.01 11025.00
+14.457 0.01 11025.00
+14.467 0.00 11025.00
+14.477 0.00 5512.50
+14.487 0.00 3675.00
+14.497 0.00 80.47
+14.507 0.00 100.23
+14.517 0.35 80.47
+14.527 0.00 100.23
+14.537 0.35 80.47
+14.547 0.35 80.47
+14.557 0.00 99.32
+14.567 0.00 99.32
+14.577 0.45 117.29
+14.587 0.41 145.07
+14.597 0.00 99.32
+14.607 0.00 186.86
+14.617 0.14 143.18
+14.627 0.41 114.84
+14.637 0.00 128.20
+14.647 0.28 121.15
+14.657 0.35 92.65
+14.667 0.00 84.81
+14.677 0.23 204.17
+14.687 0.41 204.17
+14.697 0.81 200.45
+14.707 0.45 196.88
+14.717 0.00 225.00
+14.727 0.57 200.45
+14.737 0.41 204.17
+14.746 0.00 196.88
+14.756 0.00 408.33
+14.766 0.00 501.14
+14.776 0.62 229.69
+14.786 0.87 216.18
+14.796 0.92 216.18
+14.806 0.92 216.18
+14.816 0.92 216.18
+14.826 0.92 216.18
+14.836 0.88 208.02
+14.846 0.72 204.17
+14.856 0.39 200.45
+14.866 0.36 200.45
+14.876 0.35 105.00
+14.886 0.60 95.04
+14.896 0.61 97.57
+14.906 0.47 114.84
+14.916 0.29 95.87
+14.926 0.10 95.87
+14.936 0.67 91.88
+14.946 0.62 93.43
+14.956 0.61 92.65
+14.966 0.31 91.88
+14.976 0.29 90.37
+14.986 0.49 88.20
+14.996 0.37 91.12
+15.006 0.34 84.81
+15.016 0.35 84.81
+15.026 0.30 186.86
+15.036 0.39 175.00
+15.046 0.86 175.00
+15.056 0.86 175.00
+15.066 0.75 177.82
+15.076 0.75 177.82
+15.086 0.75 177.82
+15.096 0.34 180.74
+15.106 0.46 164.55
+15.116 0.26 128.20
+15.126 0.00 88.20
+15.136 0.23 86.13
+15.146 0.46 80.47
+15.156 0.63 85.47
+15.166 0.31 88.20
+15.176 0.63 85.47
+15.185 0.00 80.47
+15.195 0.00 80.47
+15.205 0.00 306.25
+15.215 0.00 256.40
+15.225 0.00 290.13
+15.235 0.18 105.00
+15.245 0.00 123.88
+15.255 0.30 167.05
+15.265 0.58 162.13
+15.275 0.66 159.78
+15.285 0.66 159.78
+15.295 0.00 157.50
+15.305 0.33 157.50
+15.315 0.00 408.33
+15.325 0.01 441.00
+15.335 0.44 459.38
+15.345 0.00 424.04
+15.355 0.49 479.35
+15.365 0.05 580.26
+15.375 0.00 525.00
+15.385 0.00 580.26
+15.395 0.36 153.12
+15.405 0.31 147.00
+15.415 0.72 162.13
+15.425 0.18 157.50
+15.435 0.51 153.12
+15.445 0.19 151.03
+15.455 0.00 175.00
+15.465 0.66 177.82
+15.475 0.88 169.62
+15.485 0.88 169.62
+15.495 0.88 169.62
+15.505 0.88 169.62
+15.515 0.82 169.62
+15.525 0.59 167.05
+15.535 0.81 167.05
+15.545 0.81 167.05
+15.555 0.21 186.86
+15.565 0.34 164.55
+15.575 0.60 131.25
+15.585 0.68 128.20
+15.595 0.33 157.50
+15.605 0.34 110.25
+15.615 0.27 155.28
+15.624 0.52 162.13
+15.634 0.08 167.05
+15.644 0.22 167.05
+15.654 0.15 147.00
+15.664 0.36 97.57
+15.674 0.17 101.15
+15.684 0.60 100.23
+15.694 0.18 116.05
+15.704 0.18 117.29
+15.714 0.17 117.29
+15.724 0.56 94.23
+15.734 0.22 80.47
+15.744 0.00 80.47
+15.754 0.40 107.04
+15.764 0.56 123.88
+15.774 0.18 125.28
+15.784 0.34 125.28
+15.794 0.59 101.15
+15.804 0.41 123.88
+15.814 0.22 125.28
+15.824 0.29 137.81
+15.834 0.00 134.45
+15.844 0.44 134.45
+15.854 0.56 122.50
+15.864 0.66 108.09
+15.874 0.17 122.50
+15.884 0.52 134.45
+15.894 0.56 125.28
+15.904 0.30 155.28
+15.914 0.33 122.50
+15.924 0.29 148.99
+15.934 0.00 159.78
+15.944 0.18 117.29
+15.954 0.63 137.81
+15.964 0.03 122.50
+15.974 0.60 110.25
+15.984 0.63 117.29
+15.994 0.45 139.56
+16.004 0.40 110.25
+16.014 0.26 100.23
+16.024 0.51 118.55
+16.034 0.18 136.11
+16.044 0.54 121.15
+16.054 0.29 114.84
+16.063 0.40 102.08
+16.073 0.24 118.55
+16.083 0.68 98.44
+16.093 0.00 122.50
+16.103 0.50 113.66
+16.113 0.04 98.44
+16.123 0.57 116.05
+16.133 0.00 117.29
+16.143 0.45 108.09
+16.153 0.57 141.35
+16.163 0.18 119.84
+16.173 0.43 172.27
+16.183 0.07 153.12
+16.193 0.03 153.12
+16.203 0.18 112.50
+16.213 0.20 95.87
+16.223 0.41 112.50
+16.233 0.27 125.28
+16.243 0.24 126.72
+16.253 0.38 86.13
+16.263 0.38 88.91
+16.273 0.38 88.91
+16.283 0.21 80.47
+16.293 0.19 95.04
+16.303 0.18 153.12
+16.313 0.03 113.66
+16.323 0.14 84.81
+16.333 0.55 95.04
+16.343 0.29 125.28
+16.353 0.00 101.15
+16.363 0.59 119.84
+16.373 0.00 101.15
+16.383 0.00 101.15
+16.393 0.32 80.47
+16.403 0.32 80.47
+16.413 0.13 91.88
+16.423 0.16 117.29
+16.433 0.56 95.87
+16.443 0.00 114.84
+16.453 0.00 169.62
+16.463 0.60 134.45
+16.473 0.81 137.81
+16.483 0.99 139.56
+16.493 0.99 139.56
+16.502 0.92 137.81
+16.512 0.82 137.81
+16.522 0.54 126.72
+16.532 0.91 123.88
+16.542 0.91 125.28
+16.552 0.91 123.88
+16.562 0.90 117.29
+16.572 0.69 119.84
+16.582 0.64 132.83
+16.592 0.66 128.20
+16.602 0.80 129.71
+16.612 0.91 136.11
+16.622 0.91 137.81
+16.632 0.93 141.35
+16.642 0.93 141.35
+16.652 0.68 137.81
+16.662 0.48 119.84
+16.672 0.83 113.66
+16.682 0.67 123.88
+16.692 0.38 141.35
+16.702 0.77 139.56
+16.712 0.63 129.71
+16.722 0.23 141.35
+16.732 0.06 145.07
+16.742 0.39 137.81
+16.752 0.69 131.25
+16.762 0.98 136.11
+16.772 0.99 136.11
+16.782 0.99 136.11
+16.792 0.99 136.11
+16.802 0.99 136.11
+16.812 0.88 132.83
+16.822 0.84 132.83
+16.832 0.84 136.11
+16.842 0.93 137.81
+16.852 0.90 141.35
+16.862 0.93 143.18
+16.872 0.96 147.00
+16.882 0.92 148.99
+16.892 0.96 147.00
+16.902 0.33 136.11
+16.912 0.30 137.81
+16.922 0.00 147.00
+16.932 0.00 136.11
+16.941 0.75 134.45
+16.951 0.19 125.28
+16.961 0.28 148.99
+16.971 0.37 134.45
+16.981 0.57 112.50
+16.991 0.53 108.09
+17.001 0.20 99.32
+17.011 0.48 96.71
+17.021 0.48 96.71
+17.031 0.00 81.67
+17.041 0.00 110.25
+17.051 0.42 131.25
+17.061 0.53 128.20
+17.071 0.51 122.50
+17.081 0.16 119.84
+17.091 0.55 121.15
+17.101 0.22 102.08
+17.111 0.26 151.03
+17.121 0.00 408.33
+17.131 0.00 459.38
+17.141 0.32 580.26
+17.151 0.66 580.26
+17.161 0.82 648.53
+17.171 0.00 648.53
+17.181 0.00 109.16
+17.191 0.81 109.16
+17.201 0.85 121.15
+17.211 0.81 125.28
+17.221 0.71 125.28
+17.231 0.66 129.71
+17.241 0.68 137.81
+17.251 0.77 141.35
+17.261 0.71 151.03
+17.271 0.85 162.13
+17.281 0.84 175.00
+17.291 0.91 183.75
+17.301 0.91 186.86
+17.311 0.96 200.45
+17.321 0.96 200.45
+17.331 0.91 204.17
+17.341 0.91 220.50
+17.351 0.91 216.18
+17.361 0.90 212.02
+17.371 0.92 204.17
+17.380 0.92 196.88
+17.390 0.91 180.74
+17.400 0.92 172.27
+17.410 0.92 167.05
+17.420 0.93 159.78
+17.430 0.91 157.50
+17.440 0.93 153.12
+17.450 0.90 151.03
+17.460 0.91 147.00
+17.470 0.90 141.35
+17.480 0.92 131.25
+17.490 0.90 122.50
+17.500 0.90 118.55
+17.510 0.90 109.16
+17.520 0.91 112.50
+17.530 0.93 108.09
+17.540 0.92 104.01
+17.550 0.89 96.71
+17.560 0.78 90.37
+17.570 0.42 81.67
+17.580 0.61 112.50
+17.590 0.23 101.15
+17.600 0.00 114.84
+17.610 0.59 3675.00
+17.620 0.40 3675.00
+17.630 0.59 3675.00
+17.640 0.42 11025.00
+17.650 0.49 3675.00
+17.660 0.49 3675.00
+17.670 0.44 3675.00
+17.680 0.75 2756.25
+17.690 0.75 2756.25
+17.700 0.00 3675.00
+17.710 0.00 2756.25
+17.720 0.56 128.20
+17.730 0.60 123.88
+17.740 0.67 117.29
+17.750 0.79 113.66
+17.760 0.85 111.36
+17.770 0.77 108.09
+17.780 0.54 129.71
+17.790 0.37 111.36
+17.800 0.74 648.53
+17.810 0.74 648.53
+17.820 0.74 648.53
+17.829 0.14 612.50
+17.839 0.11 129.71
+17.849 0.38 136.11
+17.859 0.74 113.66
+17.869 0.00 98.44
+17.879 0.28 105.00
+17.889 0.70 3675.00
+17.899 0.70 3675.00
+17.909 0.08 107.04
+17.919 0.59 95.04
+17.929 0.71 95.87
+17.939 0.49 93.43
+17.949 0.57 92.65
+17.959 0.64 88.91
+17.969 0.87 86.81
+17.979 0.64 82.28
+17.989 0.44 98.44
+17.999 0.72 5512.50
+18.009 0.67 5512.50
+18.019 0.72 5512.50
+18.029 0.55 5512.50
+18.039 0.72 5512.50
+18.049 0.69 2205.00
+18.059 0.69 2205.00
+18.069 0.43 3675.00
+18.079 0.81 3675.00
+18.089 0.81 3675.00
+18.099 0.81 3675.00
+18.109 0.81 3675.00
+18.119 0.31 106.01
+18.129 0.75 88.91
+18.139 0.37 86.13
+18.149 0.25 81.67
+18.159 0.00 80.47
+18.169 0.70 81.07
+18.179 0.51 80.47
+18.189 0.00 86.81
+18.199 0.54 91.12
+18.209 0.56 88.91
+18.219 0.91 88.20
+18.229 0.91 88.20
+18.239 0.89 87.50
+18.249 0.87 87.50
+18.259 0.90 86.81
+18.268 0.89 85.47
+18.278 0.90 84.81
+18.288 0.94 84.16
+18.298 0.94 84.16
+18.308 0.93 84.81
+18.318 0.94 86.81
+18.328 0.83 88.20
+18.338 0.76 89.63
+18.348 0.80 90.37
+18.358 0.66 89.63
+18.368 0.50 87.50
+18.378 0.76 86.81
+18.388 0.93 86.13
+18.398 0.95 85.47
+18.408 0.86 84.81
+18.418 0.76 83.52
+18.428 0.57 82.28
+18.438 0.62 82.89
+18.448 0.92 83.52
+18.458 0.55 85.47
+18.468 0.92 86.81
+18.478 0.92 86.81
+18.488 0.91 86.81
+18.498 0.93 86.13
+18.508 0.91 85.47
+18.518 0.90 85.47
+18.528 0.91 84.81
+18.538 0.96 83.52
+18.548 0.33 92.65
+18.558 0.44 94.23
+18.568 0.61 83.52
+18.578 0.41 81.07
+18.588 0.21 89.63
+18.598 0.30 91.12
+18.608 0.91 80.47
+18.618 0.92 84.16
+18.628 0.90 85.47
+18.638 0.81 84.81
+18.648 0.56 102.08
+18.658 0.28 100.23
+18.668 0.19 2205.00
+18.678 0.51 2205.00
+18.688 0.57 3675.00
+18.698 0.77 3675.00
+18.707 0.77 3675.00
+18.717 0.77 3675.00
+18.727 0.00 5512.50
+18.737 0.09 97.57
+18.747 0.74 95.04
+18.757 0.90 95.87
+18.767 0.93 89.63
+18.777 0.91 90.37
+18.787 0.79 90.37
+18.797 0.93 86.81
+18.807 0.95 86.81
+18.817 0.95 86.81
+18.827 0.97 86.81
+18.837 0.92 87.50
+18.847 0.97 86.81
+18.857 0.97 86.81
+18.867 0.97 86.81
+18.877 0.00 108.09
+18.887 0.40 101.15
+18.897 0.47 136.11
+18.907 0.00 114.84
+18.917 0.01 101.15
+18.927 0.07 81.07
+18.937 0.52 85.47
+18.947 0.21 106.01
+18.957 0.24 89.63
+18.967 0.34 88.20
+18.977 0.66 87.50
+18.987 0.84 86.81
+18.997 0.83 86.81
+19.007 0.84 86.13
+19.017 0.84 86.13
+19.027 0.79 83.52
+19.037 0.58 82.28
+19.047 0.71 82.28
+19.057 0.63 80.47
+19.067 0.76 82.28
+19.077 0.33 80.47
+19.087 0.31 116.05
+19.097 0.80 114.84
+19.107 0.80 114.84
+19.117 0.75 118.55
+19.127 0.70 111.36
+19.137 0.46 111.36
+19.146 0.71 112.50
+19.156 0.67 110.25
+19.166 0.77 109.16
+19.176 0.87 108.09
+19.186 0.90 107.04
+19.196 0.89 105.00
+19.206 0.89 105.00
+19.216 0.90 424.04
+19.226 0.45 393.75
+19.236 0.79 99.32
+19.246 0.87 96.71
+19.256 0.82 99.32
+19.266 0.71 100.23
+19.276 0.43 100.23
+19.286 0.36 95.87
+19.296 0.00 306.25
+19.306 0.35 297.97
+19.316 0.67 306.25
+19.326 0.18 282.69
+19.336 0.49 315.00
+19.346 0.32 95.04
+19.356 0.79 91.88
+19.366 0.83 92.65
+19.376 0.79 91.88
+19.386 0.83 92.65
+19.396 0.64 93.43
+19.406 0.55 95.04
+19.416 0.09 315.00
+19.426 0.39 96.71
+19.436 0.38 102.08
+19.446 0.22 324.26
+19.456 0.05 306.25
+19.466 0.38 97.57
+19.476 0.28 648.53
+19.486 0.26 275.62
+19.496 0.45 204.17
+19.506 0.46 225.00
+19.516 0.16 239.67
+19.526 0.27 245.00
+19.536 0.40 128.20
+19.546 0.38 268.90
+19.556 0.29 97.57
+19.566 0.28 459.38
+19.576 0.38 479.35
+19.585 0.29 102.08
+19.595 0.48 107.04
+19.605 0.65 111.36
+19.615 0.72 110.25
+19.625 0.04 96.71
+19.635 0.38 112.50
+19.645 0.54 81.67
+19.655 0.45 96.71
+19.665 0.74 96.71
+19.675 0.51 96.71
+19.685 0.45 95.87
+19.695 0.47 172.27
+19.705 0.53 95.87
+19.715 0.39 89.63
+19.725 0.21 104.01
+19.735 0.40 200.45
+19.745 0.50 172.27
+19.755 0.17 196.88
+19.765 0.75 200.45
+19.775 0.63 196.88
+19.785 0.55 193.42
+19.795 0.49 186.86
+19.805 0.80 186.86
+19.815 0.80 186.86
+19.825 0.80 186.86
+19.835 0.44 167.05
+19.845 0.46 367.50
+19.855 0.64 367.50
+19.865 0.69 424.04
+19.875 0.31 459.38
+19.885 0.55 393.75
+19.895 0.24 157.50
+19.905 0.64 175.00
+19.915 0.09 190.09
+19.925 0.06 216.18
+19.935 0.16 84.81
+19.945 0.38 88.91
+19.955 0.33 159.78
+19.965 0.57 175.00
+19.975 0.78 177.82
+19.985 0.56 180.74
+19.995 0.69 183.75
+20.005 0.65 177.82
+20.015 0.70 172.27
+20.024 0.58 175.00
+20.034 0.22 147.00
+20.044 0.48 180.74
+20.054 0.61 177.82
+20.064 0.59 88.91
+20.074 0.48 180.74
+20.084 0.55 169.62
+20.094 0.68 172.27
+20.104 0.69 177.82
+20.114 0.48 180.74
+20.124 0.38 175.00
+20.134 0.34 164.55
+20.144 0.62 162.13
+20.154 0.57 147.00
+20.164 0.37 145.07
+20.174 0.53 147.00
+20.184 0.51 147.00
+20.194 0.76 153.12
+20.204 0.71 155.28
+20.214 0.41 155.28
+20.224 0.44 159.78
+20.234 0.38 159.78
+20.244 0.70 153.12
+20.254 0.55 164.55
+20.264 0.00 155.28
+20.274 0.00 180.74
+20.284 0.13 3675.00
+20.294 0.00 103.04
+20.304 0.18 141.35
+20.314 0.36 119.84
+20.324 0.00 82.28
+20.334 0.00 98.44
+20.344 0.46 97.57
+20.354 0.68 82.28
+20.364 0.44 95.04
+20.374 0.89 88.20
+20.384 0.96 86.13
+20.394 0.90 88.20
+20.404 0.92 87.50
+20.414 0.94 88.20
+20.424 0.94 88.91
+20.434 0.91 88.20
+20.444 0.97 87.50
+20.454 0.94 88.20
+20.463 0.93 88.20
+20.473 0.95 88.20
+20.483 0.90 88.91
+20.493 0.94 87.50
+20.503 0.77 86.13
+20.513 0.94 87.50
+20.523 0.71 88.91
+20.533 0.00 106.01
+20.543 0.45 91.88
+20.553 0.04 109.16
+20.563 0.00 114.84
+20.573 0.34 118.55
+20.583 0.80 136.11
+20.593 0.00 114.84
+20.603 0.00 114.84
+20.613 0.48 80.47
+20.623 0.49 81.07
+20.633 0.73 86.13
+20.643 0.22 80.47
+20.653 0.18 80.47
+20.663 0.29 110.25
+20.673 0.57 111.36
+20.683 0.38 612.50
+20.693 0.41 612.50
+20.703 0.66 648.53
+20.713 0.66 648.53
+20.723 0.66 648.53
+20.733 0.34 689.06
+20.743 0.10 648.53
+20.753 0.02 122.50
+20.763 0.00 82.89
+20.773 0.00 145.07
+20.783 0.00 459.38
+20.793 0.13 459.38
+20.803 0.87 459.38
+20.813 0.78 229.69
+20.823 0.77 229.69
+20.833 0.95 229.69
+20.833 0.87 225.00
diff --git a/test/regression/chan3.logspec b/test/regression/chan3.logspec
new file mode 100644 (file)
index 0000000..98a48c3
Binary files /dev/null and b/test/regression/chan3.logspec differ
diff --git a/test/regression/chan3.mfc b/test/regression/chan3.mfc
new file mode 100644 (file)
index 0000000..85ea420
Binary files /dev/null and b/test/regression/chan3.mfc differ
diff --git a/test/regression/chan3.raw b/test/regression/chan3.raw
new file mode 100644 (file)
index 0000000..8c1d012
Binary files /dev/null and b/test/regression/chan3.raw differ
diff --git a/test/regression/chan3.sph b/test/regression/chan3.sph
new file mode 100644 (file)
index 0000000..19965df
Binary files /dev/null and b/test/regression/chan3.sph differ
diff --git a/test/regression/chan3.wav b/test/regression/chan3.wav
new file mode 100644 (file)
index 0000000..252cf5e
Binary files /dev/null and b/test/regression/chan3.wav differ
diff --git a/test/regression/crontab b/test/regression/crontab
new file mode 100644 (file)
index 0000000..c4c0e0b
--- /dev/null
@@ -0,0 +1,10 @@
+# This crontab is installed at sphinx@batman
+#
+# Use this as a template. The actual crontab files are located
+# at ~sphinx/script/crontab.regression.batman (or .mangueira)
+MAILTO=sphinx+regression@cs.cmu.edu
+0 0 * * * $HOME/script/DailyDoxygen.sh
+0 1 * * * (. $HOME/.profile; svn up $SF_ROOT/sphinx3/src/tests/regression/run_dailySTD.sh; $SF_ROOT/sphinx3/src/tests/regression/run_dailySTD.sh)
+0 0 * * 3,7 (. $HOME/.profile; svn up $SF_ROOT/sphinx3/src/tests/regression/run_PERFFULL.sh; $SF_ROOT/sphinx3/src/tests/regression/run_PERFFULL.sh)
+20 07 * * * (. $HOME/.profile; svn up $SF_ROOT/sphinxbase/test/regression/tutorial-check.sh; qsub -o $SF_ROOT/regression/`hostname`/tutorial.out -j oe $SF_ROOT/sphinxbase/test/regression/tutorial-check.sh)
+20 05 * * * (. $HOME/.profile; svn up $SF_ROOT/sphinxbase/test/regression/launchCompileCheck.sh; $SF_ROOT/sphinxbase/test/regression/launchCompileCheck.sh)
diff --git a/test/regression/polite.gram b/test/regression/polite.gram
new file mode 100644 (file)
index 0000000..b4a0550
--- /dev/null
@@ -0,0 +1,12 @@
+#JSGF V1.0;
+
+/**
+ * JSGF Grammar for Hello World example
+ */
+
+grammar polite;
+
+public <startPolite> = [please | kindly | could you | oh mighty computer];
+public <endPolite> = [please | thanks | thank you];
+
+public <allPolite> = (<startPolite> | <endPolite>)*;
diff --git a/test/regression/test-cepview.sh b/test/regression/test-cepview.sh
new file mode 100755 (executable)
index 0000000..62d9a2b
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+echo "CEPVIEW TEST"
+tmpout="test-cepview.out"
+
+run_program sphinx_cepview/sphinx_cepview \
+-i 13 \
+-d 13 \
+-f $tests/regression/chan3.mfc \
+> $tmpout 2>test-cepview.err
+if diff -w $tmpout $tests/regression/chan3.cepview > /dev/null 2>&1; then
+pass "CEPVIEW test"; else
+fail "CEPVIEW test"; fi
diff --git a/test/regression/test-sphinx_fe-ctl.sh b/test/regression/test-sphinx_fe-ctl.sh
new file mode 100755 (executable)
index 0000000..99ca081
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+tmpout="test-sphinx_fe-ctl.out"
+
+echo "WAVE2FEAT CTL/WAV/SPH TEST"
+run_program sphinx_fe/sphinx_fe \
+-samprate 11025 \
+-frate 105 \
+-wlen 0.024 \
+-alpha 0.97 \
+-ncep 13 \
+-nfft 512 \
+-nfilt 36 \
+-upperf 5400 \
+-lowerf 130 \
+-blocksize 262500 \
+-verbose yes \
+-c $tests/regression/chan3.ctl \
+-di $tests/regression \
+-do . \
+-eo mfc \
+-input_endian little \
+> $tmpout 2>&1 
+
+if ! cmp chan3.wav.mfc chan3.raw.mfc; then
+    fail "WAV and RAW compare"
+fi
+
+if ! cmp chan3.2chan.wav.mfc chan3.wav.mfc; then
+    fail "WAV2 and WAV compare"
+fi
+
+if ! cmp chan3.raw.mfc chan3.sph.mfc; then
+    fail "SPH and RAW compare"
+fi
+
+run_program sphinx_cepview/sphinx_cepview \
+-i 13 \
+-d 13 \
+-f chan3.wav.mfc \
+> test-sphinx_fe.cepview 2>>$tmpout
+
+compare_table "WAVE2FEAT test" test-sphinx_fe.cepview $tests/regression/chan3.cepview 0.1
diff --git a/test/regression/test-sphinx_fe-dct.sh b/test/regression/test-sphinx_fe-dct.sh
new file mode 100755 (executable)
index 0000000..5923805
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+tmpout="test-sphinx_fe-dct.out"
+
+echo "WAVE2FEAT-DCT INVERTIBLE TEST"
+run_program sphinx_fe/sphinx_fe \
+-transform dct \
+-cep2spec yes \
+-nfilt 36 \
+-i $tests/regression/chan3.mfc \
+-o test-sphinx_fe-dct.logspec.out  \
+> $tmpout 2>&1 
+
+run_program sphinx_fe/sphinx_fe \
+-transform dct \
+-spec2cep yes \
+-nfilt 36 \
+-i test-sphinx_fe-dct.logspec.out  \
+-o test-sphinx_fe-dct.mfc.out  \
+>> $tmpout 2>&1 
+
+run_program sphinx_cepview/sphinx_cepview \
+-i 13 \
+-d 13 \
+-f test-sphinx_fe-dct.mfc.out \
+> test-sphinx_fe-dct.cepview.out 2>>$tmpout
+
+compare_table "WAVE2FEAT-DCT INVERTIBLE test" test-sphinx_fe-dct.cepview.out \
+    $tests/regression/chan3.cepview
diff --git a/test/regression/test-sphinx_fe-dither-seed.sh b/test/regression/test-sphinx_fe-dither-seed.sh
new file mode 100755 (executable)
index 0000000..be95b7a
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+tmpout="test-sphinx_fe-dither-seed.out"
+
+# Run sphinx_fe with dither and seed, so it is repeatable. There's
+# nothing special about the seed. Just chose it because it's pretty
+echo "WAVE2FEAT-DITHER-SEED TEST"
+run_program sphinx_fe/sphinx_fe \
+-dither 1 \
+-seed 1234 \
+-samprate 11025 \
+-frate 105 \
+-wlen 0.024 \
+-alpha 0.97 \
+-ncep 13 \
+-nfft 512 \
+-nfilt 36 \
+-upperf 5400 \
+-lowerf 130 \
+-blocksize 262500 \
+-i $tests/regression/chan3.raw \
+-input_endian little \
+-o test-sphinx_fe-dither-seed.mfc.out  \
+-raw 1 > $tmpout 2>&1 
+
+run_program sphinx_cepview/sphinx_cepview \
+-i 13 \
+-d 13 \
+-f test-sphinx_fe-dither-seed.mfc.out \
+> test-sphinx_fe-dither-seed.cepview.out 2>>$tmpout
+
+compare_table "WAVE2FEAT-DITHER-SEED test" test-sphinx_fe-dither-seed.cepview.out \
+    $tests/regression/chan3-dither.cepview 0.1
diff --git a/test/regression/test-sphinx_fe-logspec.sh b/test/regression/test-sphinx_fe-logspec.sh
new file mode 100755 (executable)
index 0000000..8414c25
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+tmpout="test-sphinx_fe-logspec.out"
+
+echo "WAVE2FEAT-LOGSPEC TEST"
+run_program sphinx_fe/sphinx_fe \
+-logspec 1 \
+-samprate 11025 \
+-frate 105 \
+-wlen 0.024 \
+-alpha 0.97 \
+-nfft 512 \
+-nfilt 36 \
+-upperf 5400 \
+-lowerf 130 \
+-blocksize 262500 \
+-i $tests/regression/chan3.raw \
+-input_endian little \
+-o test-sphinx_fe-logspec.mfc.out  \
+-raw 1 > $tmpout 2>&1 
+
+run_program sphinx_cepview/sphinx_cepview \
+-i 36 \
+-d 36 \
+-f test-sphinx_fe-logspec.mfc.out \
+> test-sphinx_fe-logspec.cepview.out 2>>$tmpout
+
+compare_table "WAVE2FEAT-LOGSPEC test" test-sphinx_fe-logspec.cepview.out \
+    $tests/regression/chan3-logspec.cepview 0.2
diff --git a/test/regression/test-sphinx_fe-logspec2cep.sh b/test/regression/test-sphinx_fe-logspec2cep.sh
new file mode 100755 (executable)
index 0000000..e9730e3
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+tmpout="test-sphinx_fe-logspec2cep.out"
+
+echo "WAVE2FEAT-LOGSPEC2CEP TEST"
+run_program sphinx_fe/sphinx_fe \
+-spec2cep yes \
+-nfilt 36 \
+-i $tests/regression/chan3.logspec \
+-o test-sphinx_fe-logspec2cep.mfc.out  \
+> $tmpout 2>&1 
+
+run_program sphinx_cepview/sphinx_cepview \
+-i 13 \
+-d 13 \
+-f test-sphinx_fe-logspec2cep.mfc.out \
+> test-sphinx_fe-logspec2cep.cepview.out 2>>$tmpout
+
+compare_table "WAVE2FEAT-LOGSPEC2CEP test" test-sphinx_fe-logspec2cep.cepview.out \
+    $tests/regression/chan3.cepview
diff --git a/test/regression/test-sphinx_fe-smoothspec.sh b/test/regression/test-sphinx_fe-smoothspec.sh
new file mode 100755 (executable)
index 0000000..4615d96
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+tmpout="test-sphinx_fe-smoothspec.out"
+
+echo "WAVE2FEAT-SMOOTHSPEC TEST"
+run_program sphinx_fe/sphinx_fe \
+-smoothspec yes \
+-samprate 11025 \
+-frate 105 \
+-wlen 0.024 \
+-alpha 0.97 \
+-nfft 512 \
+-nfilt 36 \
+-upperf 5400 \
+-lowerf 130 \
+-blocksize 262500 \
+-i $tests/regression/chan3.raw \
+-input_endian little \
+-o test-sphinx_fe-smoothspec.logspec.out  \
+-raw yes > $tmpout 2>&1 
+
+run_program sphinx_cepview/sphinx_cepview \
+-i 36 \
+-d 36 \
+-f test-sphinx_fe-smoothspec.logspec.out \
+> test-sphinx_fe-smoothspec.cepview.out 2>>$tmpout
+
+compare_table "WAVE2FEAT-SMOOTHSPEC test" test-sphinx_fe-smoothspec.cepview.out \
+    $tests/regression/chan3-smoothspec.cepview 0.1
diff --git a/test/regression/test-sphinx_fe.sh b/test/regression/test-sphinx_fe.sh
new file mode 100755 (executable)
index 0000000..cbcd303
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+tmpout="test-sphinx_fe.out"
+
+echo "WAVE2FEAT TEST"
+run_program sphinx_fe/sphinx_fe \
+-samprate 11025 \
+-frate 105 \
+-wlen 0.024 \
+-alpha 0.97 \
+-ncep 13 \
+-nfft 512 \
+-nfilt 36 \
+-upperf 5400 \
+-lowerf 130 \
+-blocksize 262500 \
+-i $tests/regression/chan3.raw \
+-input_endian little \
+-o test-sphinx_fe.mfc  \
+-raw 1 > $tmpout 2>&1 
+
+run_program sphinx_cepview/sphinx_cepview \
+-i 13 \
+-d 13 \
+-f test-sphinx_fe.mfc \
+> test-sphinx_fe.cepview 2>>$tmpout
+
+compare_table "WAVE2FEAT test" test-sphinx_fe.cepview $tests/regression/chan3.cepview 0.1
diff --git a/test/regression/test-sphinx_jsgf2fsg.sh b/test/regression/test-sphinx_jsgf2fsg.sh
new file mode 100755 (executable)
index 0000000..67315d8
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+echo "JSGF2FSG TEST"
+rules="test.rightRecursion test.nestedRightRecursion test.kleene test.nulltest test.command"
+
+tmpout="test-jsgf2fsg.out"
+rm -f $tmpout
+
+JSGF_PATH=$tests/regression
+export JSGF_PATH
+for r in $rules; do
+    run_program sphinx_jsgf2fsg/sphinx_jsgf2fsg \
+       $tests/regression/test.gram $r > $r.out 2>>$tmpout
+    compare_table $r $r.out $tests/regression/$r.fsg
+done
+
diff --git a/test/regression/test-sphinx_pitch.sh b/test/regression/test-sphinx_pitch.sh
new file mode 100755 (executable)
index 0000000..02f6e96
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+. ./testfuncs.sh
+
+tmpout="test-sphinx_pitch.out"
+
+echo "PITCH TEST"
+run_program sphinx_adtools/sphinx_pitch \
+-samprate 11025 \
+-i $tests/regression/chan3.raw \
+-input_endian little \
+-o test-sphinx_pitch.f0  \
+-raw yes > $tmpout 2>&1 
+
+compare_table "PITCH test" test-sphinx_pitch.f0 $tests/regression/chan3.f0 0.1
diff --git a/test/regression/test.command.fsg b/test/regression/test.command.fsg
new file mode 100644 (file)
index 0000000..a56f242
--- /dev/null
@@ -0,0 +1,49 @@
+FSG_BEGIN <test.command>
+NUM_STATES 33
+START_STATE 0
+FINAL_STATE 1
+TRANSITION 0 2 1.000000 
+TRANSITION 2 4 1.000000 
+TRANSITION 3 14 1.000000 
+TRANSITION 4 7 0.200004 oh
+TRANSITION 4 10 0.200004 could
+TRANSITION 4 12 0.200004 kindly
+TRANSITION 4 13 0.200004 please
+TRANSITION 4 6 0.200004 
+TRANSITION 5 3 1.000000 
+TRANSITION 6 5 1.000000 
+TRANSITION 7 8 1.000000 mighty
+TRANSITION 8 9 1.000000 computer
+TRANSITION 9 5 1.000000 
+TRANSITION 10 11 1.000000 you
+TRANSITION 11 5 1.000000 
+TRANSITION 12 5 1.000000 
+TRANSITION 13 5 1.000000 
+TRANSITION 14 20 0.500041 
+TRANSITION 14 16 0.500041 
+TRANSITION 15 24 1.000000 
+TRANSITION 16 18 0.500041 stop
+TRANSITION 16 19 0.500041 stop
+TRANSITION 17 15 1.000000 
+TRANSITION 18 17 1.000000 
+TRANSITION 19 16 1.000000 
+TRANSITION 19 17 1.000000 
+TRANSITION 20 23 0.500041 go
+TRANSITION 20 22 0.500041 
+TRANSITION 21 15 1.000000 
+TRANSITION 22 21 1.000000 
+TRANSITION 23 20 1.000000 
+TRANSITION 23 21 1.000000 
+TRANSITION 24 26 1.000000 
+TRANSITION 25 1 1.000000 
+TRANSITION 26 29 0.250016 thank
+TRANSITION 26 31 0.250016 thanks
+TRANSITION 26 32 0.250016 please
+TRANSITION 26 28 0.250016 
+TRANSITION 27 25 1.000000 
+TRANSITION 28 27 1.000000 
+TRANSITION 29 30 1.000000 you
+TRANSITION 30 27 1.000000 
+TRANSITION 31 27 1.000000 
+TRANSITION 32 27 1.000000 
+FSG_END
diff --git a/test/regression/test.gram b/test/regression/test.gram
new file mode 100644 (file)
index 0000000..d0ec994
--- /dev/null
@@ -0,0 +1,36 @@
+#JSGF V1.0;
+
+/**
+ * JSGF Grammar for Hello World example
+ */
+
+grammar test;
+
+import <polite.startPolite>;
+import <polite.endPolite>;
+
+
+public <rightRecursion> = <action> | (<action> and <rightRecursion> ) ;
+<action> = stop | start;
+
+
+public <nestedRightRecursion> = something | <Y> ;
+<Y> = another | <nestedRightRecursion> ;
+
+
+public <kleene> = <polite>* don't crash;
+<polite> =  please | kindly | oh mighty computer;
+
+
+public <nulltest> = <ones> <twos> <threes>;
+
+<ones> = <NULL> (one [and] one);
+<twos> = <NULL> (two [and] two);
+<threes> = <NULL> (three [and] three);
+
+
+
+public <command> = <startPolite> <caction> <endPolite>;
+
+<caction> = go* | stop+;
+
diff --git a/test/regression/test.kleene.fsg b/test/regression/test.kleene.fsg
new file mode 100644 (file)
index 0000000..b4d97e2
--- /dev/null
@@ -0,0 +1,22 @@
+FSG_BEGIN <test.kleene>
+NUM_STATES 14
+START_STATE 0
+FINAL_STATE 1
+TRANSITION 0 2 1.000000
+TRANSITION 2 4 0.500041
+TRANSITION 2 5 0.500041
+TRANSITION 3 12 1.000000 don't
+TRANSITION 4 3 1.000000
+TRANSITION 5 7 0.333356 oh
+TRANSITION 5 10 0.333356 kindly
+TRANSITION 5 11 0.333356 please
+TRANSITION 6 2 1.000000
+TRANSITION 6 3 1.000000
+TRANSITION 7 8 1.000000 mighty
+TRANSITION 8 9 1.000000 computer
+TRANSITION 9 6 1.000000
+TRANSITION 10 6 1.000000
+TRANSITION 11 6 1.000000
+TRANSITION 12 13 1.000000 crash
+TRANSITION 13 1 1.000000
+FSG_END
diff --git a/test/regression/test.nestedRightRecursion.fsg b/test/regression/test.nestedRightRecursion.fsg
new file mode 100644 (file)
index 0000000..1b6a5da
--- /dev/null
@@ -0,0 +1,13 @@
+FSG_BEGIN <test.nestedRightRecursion>
+NUM_STATES 6
+START_STATE 0
+FINAL_STATE 1
+TRANSITION 0 5 0.500041 something
+TRANSITION 0 2 0.500041 
+TRANSITION 2 4 0.500041 another
+TRANSITION 2 0 0.500041 
+TRANSITION 2 3 1.000000 
+TRANSITION 3 1 1.000000 
+TRANSITION 4 3 1.000000 
+TRANSITION 5 1 1.000000 
+FSG_END
diff --git a/test/regression/test.nulltest.fsg b/test/regression/test.nulltest.fsg
new file mode 100644 (file)
index 0000000..5f0b815
--- /dev/null
@@ -0,0 +1,42 @@
+FSG_BEGIN <test.nulltest>
+NUM_STATES 35
+START_STATE 0
+FINAL_STATE 1
+TRANSITION 0 2 1.000000 
+TRANSITION 2 4 1.000000 
+TRANSITION 3 13 1.000000 
+TRANSITION 4 5 1.000000 
+TRANSITION 5 7 1.000000 one
+TRANSITION 6 3 1.000000 
+TRANSITION 7 8 1.000000 
+TRANSITION 8 11 0.500041 and
+TRANSITION 8 10 0.500041 
+TRANSITION 9 12 1.000000 one
+TRANSITION 10 9 1.000000 
+TRANSITION 11 9 1.000000 
+TRANSITION 12 6 1.000000 
+TRANSITION 13 15 1.000000 
+TRANSITION 14 24 1.000000 
+TRANSITION 15 16 1.000000 
+TRANSITION 16 18 1.000000 two
+TRANSITION 17 14 1.000000 
+TRANSITION 18 19 1.000000 
+TRANSITION 19 22 0.500041 and
+TRANSITION 19 21 0.500041 
+TRANSITION 20 23 1.000000 two
+TRANSITION 21 20 1.000000 
+TRANSITION 22 20 1.000000 
+TRANSITION 23 17 1.000000 
+TRANSITION 24 26 1.000000 
+TRANSITION 25 1 1.000000 
+TRANSITION 26 27 1.000000 
+TRANSITION 27 29 1.000000 three
+TRANSITION 28 25 1.000000 
+TRANSITION 29 30 1.000000 
+TRANSITION 30 33 0.500041 and
+TRANSITION 30 32 0.500041 
+TRANSITION 31 34 1.000000 three
+TRANSITION 32 31 1.000000 
+TRANSITION 33 31 1.000000 
+TRANSITION 34 28 1.000000 
+FSG_END
diff --git a/test/regression/test.rightRecursion.fsg b/test/regression/test.rightRecursion.fsg
new file mode 100644 (file)
index 0000000..f4301f4
--- /dev/null
@@ -0,0 +1,21 @@
+FSG_BEGIN <test.rightRecursion>
+NUM_STATES 13
+START_STATE 0
+FINAL_STATE 1
+TRANSITION 0 2 0.500041
+TRANSITION 0 9 0.500041
+TRANSITION 2 4 1.000000
+TRANSITION 3 1 1.000000
+TRANSITION 4 6 0.500041 start
+TRANSITION 4 7 0.500041 stop
+TRANSITION 5 8 1.000000 and
+TRANSITION 6 5 1.000000
+TRANSITION 7 5 1.000000
+TRANSITION 8 0 1.000000
+TRANSITION 8 3 1.000000
+TRANSITION 9 11 0.500041 start
+TRANSITION 9 12 0.500041 stop
+TRANSITION 10 1 1.000000
+TRANSITION 11 10 1.000000
+TRANSITION 12 10 1.000000
+FSG_END
diff --git a/test/regression/testfuncs.sh.in b/test/regression/testfuncs.sh.in
new file mode 100644 (file)
index 0000000..8cabcbe
--- /dev/null
@@ -0,0 +1,60 @@
+# Utility functions and parameters for regression tests
+
+# Predefined directories you may need
+# Stupid broken RedHat autoconf doesn't do @abs_top_srcdir@
+builddir="@top_builddir@"
+sourcedir="@top_srcdir@"
+tests=$sourcedir/test
+
+# Automatically report failures on exit
+failures=""
+trap "report_failures" 0
+
+run_program() {
+    program="$1"
+    shift
+    $builddir/libtool --mode=execute "$builddir/src/$program" $@
+}
+
+debug_program() {
+    program="$1"
+    shift
+    $builddir/libtool --mode=execute gdb --args "$builddir/src/$program" $@
+}
+
+memcheck_program() {
+    program="$1"
+    shift
+    $builddir/libtool --mode=execute valgrind --leak-check=full "$builddir/src/$program" $@
+}
+
+pass() {
+    title="$1"
+    echo "$title PASSED"
+}
+
+fail() {
+    title="$1"
+    echo "$title FAILED"
+    failures="$failures,$title"
+}
+
+compare_table() {
+    title="$1"
+    shift
+    if perl "$tests/compare_table.pl" $@ | grep SUCCESS >/dev/null 2>&1; then
+       pass "$title"
+    else
+       fail "$title"
+    fi 
+}
+
+report_failures() {
+    if test x"$failures" = x; then
+       echo "All sub-tests passed"
+       exit 0
+    else
+       echo "Sub-tests failed:$failures" | sed -e 's/,/ /g'
+       exit 1
+    fi
+}
diff --git a/test/regression/testfuncs_cygwin.sh b/test/regression/testfuncs_cygwin.sh
new file mode 100644 (file)
index 0000000..6ed299f
--- /dev/null
@@ -0,0 +1,60 @@
+# Utility functions and parameters for regression tests
+
+# Predefined directories you may need
+: ${CONFIGURATION:=Debug}
+builddir="../../bin/$CONFIGURATION"
+sourcedir="../.."
+tests=$sourcedir/test
+
+# Automatically report failures on exit
+failures=""
+trap "report_failures" 0
+
+run_program() {
+    program=`basename $1`
+    shift
+    "$builddir/$program" $@
+}
+
+debug_program() {
+    program=`basename $1`
+    shift
+    gdb --args "$builddir/$program" $@
+}
+
+memcheck_program() {
+    program=`basename $1`
+    shift
+    valgrind --leak-check=full "$builddir/$program" $@
+}
+
+pass() {
+    title="$1"
+    echo "$title PASSED"
+}
+
+fail() {
+    title="$1"
+    echo "$title FAILED"
+    failures="$failures,$title"
+}
+
+compare_table() {
+    title="$1"
+    shift
+    if perl "$tests/compare_table.pl" $@ | grep SUCCESS >/dev/null 2>&1; then
+       pass "$title"
+    else
+       fail "$title"
+    fi 
+}
+
+report_failures() {
+    if test x"$failures" = x; then
+       echo "All sub-tests passed"
+       exit 0
+    else
+       echo "Sub-tests failed:$failures" | sed -e 's/,/ /g'
+       exit 1
+    fi
+}
diff --git a/test/regression/tutorial-check.sh b/test/regression/tutorial-check.sh
new file mode 100755 (executable)
index 0000000..27a2910
--- /dev/null
@@ -0,0 +1,119 @@
+#!/bin/bash -x
+
+# Check if we're running under PBS and print information useful for debugging
+if [ -n "$PBS_ENVIRONMENT" ]; then
+    echo ""
+    echo "This job was submitted by user: $PBS_O_LOGNAME"
+    echo "This job was submitted to host: $PBS_O_HOST"
+    echo "This job was submitted to queue: $PBS_O_QUEUE"
+    echo "PBS working directory: $PBS_O_WORKDIR"
+    echo "PBS job id: $PBS_JOBID"
+    echo "PBS job name: $PBS_JOBNAME"
+    echo "PBS environment: $PBS_ENVIRONMENT"
+    echo ""
+    echo "This script is running on `hostname` "
+    echo ""
+fi
+
+# make sure that /usr/ucb is here, towards the beginning, to make sure
+# that the 'ps' command in Solaris is compatible with the gnu one.
+export PATH=/usr/ucb:/usr/local/bin:${PATH}
+
+loopUntilSuccess () {
+    cmd=$@
+    # start loop to download code
+    count=0;
+
+    while ! $cmd; do
+       count=`expr $count + 1`
+       if [ $count -gt 50 ]; then
+           # not successful, and we attempted it too many times. Clean up and leave.
+           return $count
+       fi
+    done
+}
+
+# Check that we have all executables
+if ! WGET=`command -v wget 2>&1`; then exit 1; fi
+if ! SVN=`command -v svn 2>&1`; then exit 1; fi
+if ! PERL=`command -v perl 2>&1`; then exit 1; fi
+if ! MAKE=`command -v gmake 2>&1`; then 
+  if ! MAKE=`command -v make 2>&1`; then exit 1; fi
+fi
+if ! TAR=`command -v gtar 2>&1`; then
+  if ! TAR=`command -v tar 2>&1`; then exit 1; fi
+fi
+if ! MAIL=`command -v mhmail 2>&1`; then
+  if ! MAIL=`command -v mailx 2>&1`; then
+    if ! MAIL=`command -v sendmail 2>&1`; then
+      if ! MAIL=`command -v mutt 2>&1`; then exit 1; fi
+    fi
+  fi
+fi
+
+# Create temp directory
+temp_dir=/tmp/temp$$
+mkdir $temp_dir
+pushd $temp_dir > /dev/null
+
+LOG=$temp_dir/log.txt
+echo > $LOG
+MAILLIST=cmusphinx-results@lists.sourceforge.net
+
+# Get the data
+${WGET} -q http://www.speech.cs.cmu.edu/databases/an4/an4_sphere.tar.gz
+${TAR} -xzf an4_sphere.tar.gz
+/bin/rm an4_sphere.tar.gz
+
+# Get sphinxbase
+if (loopUntilSuccess ${SVN} co https://cmusphinx.svn.sourceforge.net/svnroot/cmusphinx/trunk/sphinxbase > /dev/null &&
+cd sphinxbase &&
+./autogen.sh &&
+./autogen.sh CFLAGS="-O2 -Wall" --prefix=`(cd ..; pwd)`/build &&
+${MAKE} all install) >> $LOG 2>&1 ; then
+
+# Get the trainer
+if (loopUntilSuccess ${SVN} co https://cmusphinx.svn.sourceforge.net/svnroot/cmusphinx/trunk/SphinxTrain > /dev/null &&
+cd SphinxTrain &&
+./configure CFLAGS="-O2 -Wall" --with-sphinxbase=$temp_dir/sphinxbase && 
+${MAKE} && 
+${PERL} scripts_pl/setup_tutorial.pl an4) >> $LOG 2>&1 ; then
+
+# Get the decoder
+if (loopUntilSuccess ${SVN} co https://cmusphinx.svn.sourceforge.net/svnroot/cmusphinx/trunk/sphinx3 > /dev/null &&
+cd sphinx3 &&
+./autogen.sh &&
+./autogen.sh  CFLAGS="-O2 -Wall" --prefix=`(cd ..; pwd)`/build --with-sphinxbase=$temp_dir/sphinxbase && 
+${MAKE} all install && 
+${PERL} scripts/setup_tutorial.pl an4) >> $LOG 2>&1 ; then
+
+# Run it
+cd an4 &&
+perl scripts_pl/make_feats.pl -ctl etc/an4_train.fileids >> $LOG 2>&1 &&
+perl scripts_pl/make_feats.pl -ctl etc/an4_test.fileids >> $LOG 2>&1 &&
+perl scripts_pl/RunAll.pl >> $LOG 2>&1 &&
+perl scripts_pl/decode/slave.pl >> $LOG 2>&1
+
+# end of if (sphinx3)
+fi
+# end of if (SphinxTrain)
+fi
+# end of sphinxbase
+fi
+
+# Check whether the Word Error Rate is reasonable, hardwired for now
+if SER=`grep 'SENTENCE ERROR' $LOG 2>&1`; then
+SUCCESS=`echo $SER | awk '{d = $(3) - 57};{if (d < 0) d = -d};{if (d < 2) print "1"}'`;
+fi;
+
+# Send mail if we failed
+if test x${SUCCESS} == x ; then
+cat `find $temp_dir/an4/logdir/ -type f -print | tail -1` >> ${LOG}
+$MAIL -s "Tutorial failed" ${MAILLIST} < ${LOG}
+else
+echo $SER | $MAIL -s "Tutorial succeded" ${MAILLIST}
+fi
+
+# Remove what we created
+popd > /dev/null
+/bin/rm -rf $temp_dir
diff --git a/test/unit/Makefile.am b/test/unit/Makefile.am
new file mode 100644 (file)
index 0000000..af317ff
--- /dev/null
@@ -0,0 +1,24 @@
+if USE_LAPACK
+maybe_lapack = test_matrix
+endif
+
+if USE_THREADS
+maybe_threads = test_thread
+endif
+
+SUBDIRS=test_ad                                        \
+       test_alloc                              \
+       test_bitvec                             \
+       test_case                               \
+       test_string                             \
+       test_cmdln                              \
+       test_hash                               \
+       $(maybe_lapack)                         \
+       test_fe                                 \
+       test_feat                               \
+       test_logmath                            \
+       test_ngram                              \
+       test_fsg                                \
+       test_util                               \
+       $(maybe_threads)
+
diff --git a/test/unit/Makefile.in b/test/unit/Makefile.in
new file mode 100644 (file)
index 0000000..288eee7
--- /dev/null
@@ -0,0 +1,525 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+subdir = test/unit
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/testfuncs.sh.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES = testfuncs.sh
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = test_ad test_alloc test_bitvec test_case test_string \
+       test_cmdln test_hash test_matrix test_fe test_feat \
+       test_logmath test_ngram test_fsg test_util test_thread
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@USE_LAPACK_TRUE@maybe_lapack = test_matrix
+@USE_THREADS_TRUE@maybe_threads = test_thread
+SUBDIRS = test_ad                                      \
+       test_alloc                              \
+       test_bitvec                             \
+       test_case                               \
+       test_string                             \
+       test_cmdln                              \
+       test_hash                               \
+       $(maybe_lapack)                         \
+       test_fe                                 \
+       test_feat                               \
+       test_logmath                            \
+       test_ngram                              \
+       test_fsg                                \
+       test_util                               \
+       $(maybe_threads)
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/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
+testfuncs.sh: $(top_builddir)/config.status $(srcdir)/testfuncs.sh.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+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: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am
+
+# 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/unit/test_ad/Makefile.am b/test/unit/test_ad/Makefile.am
new file mode 100644 (file)
index 0000000..82c92b7
--- /dev/null
@@ -0,0 +1,13 @@
+check_PROGRAMS = test_ad_read test_ad_copy
+
+TESTS = test_ad_read test_ad_copy
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+noinst_HEADERS = test_macros.h
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la \
+       ${top_builddir}/src/libsphinxad/libsphinxad.la
diff --git a/test/unit/test_ad/Makefile.in b/test/unit/test_ad/Makefile.in
new file mode 100644 (file)
index 0000000..1a949a6
--- /dev/null
@@ -0,0 +1,566 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_ad_read$(EXEEXT) test_ad_copy$(EXEEXT)
+TESTS = test_ad_read$(EXEEXT) test_ad_copy$(EXEEXT)
+subdir = test/unit/test_ad
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_ad_copy_SOURCES = test_ad_copy.c
+test_ad_copy_OBJECTS = test_ad_copy.$(OBJEXT)
+test_ad_copy_LDADD = $(LDADD)
+test_ad_copy_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la \
+       ${top_builddir}/src/libsphinxad/libsphinxad.la
+test_ad_read_SOURCES = test_ad_read.c
+test_ad_read_OBJECTS = test_ad_read.$(OBJEXT)
+test_ad_read_LDADD = $(LDADD)
+test_ad_read_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la \
+       ${top_builddir}/src/libsphinxad/libsphinxad.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_ad_copy.c test_ad_read.c
+DIST_SOURCES = test_ad_copy.c test_ad_read.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+noinst_HEADERS = test_macros.h
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la \
+       ${top_builddir}/src/libsphinxad/libsphinxad.la
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_ad/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_ad/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_ad_copy$(EXEEXT): $(test_ad_copy_OBJECTS) $(test_ad_copy_DEPENDENCIES) 
+       @rm -f test_ad_copy$(EXEEXT)
+       $(LINK) $(test_ad_copy_OBJECTS) $(test_ad_copy_LDADD) $(LIBS)
+test_ad_read$(EXEEXT): $(test_ad_read_OBJECTS) $(test_ad_read_DEPENDENCIES) 
+       @rm -f test_ad_read$(EXEEXT)
+       $(LINK) $(test_ad_read_OBJECTS) $(test_ad_read_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ad_copy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ad_read.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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:
+
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_ad/test_ad_copy.c b/test/unit/test_ad/test_ad_copy.c
new file mode 100644 (file)
index 0000000..262b517
--- /dev/null
@@ -0,0 +1,87 @@
+/* -*- c-basic-offset: 4 -*- */
+
+#include "config.h"
+#include "ad.h"
+#include "cont_ad.h"
+#include "ckd_alloc.h"
+#include "byteorder.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+
+#ifndef WORDS_BIGENDIAN
+#define WORDS_BIGENDIAN 0
+#endif
+
+int
+main(int argc, char *argv[])
+{
+    cont_ad_t *cont;
+    FILE *infp;
+    int16 buf[512];
+    int listening;
+    int k, n_calib_samp;
+    int16 *calib, *cptr;
+
+    TEST_ASSERT(infp = fopen(TESTDATADIR "/chan3.raw", "rb"));
+    TEST_ASSERT(cont = cont_ad_init(NULL, NULL));
+
+    n_calib_samp = cont_ad_calib_size(cont);
+    calib = ckd_malloc(n_calib_samp * 2);
+    printf("Reading %d calibration samples\n", n_calib_samp);
+    TEST_ASSERT(fread(calib, 2, n_calib_samp, infp) == n_calib_samp);
+    printf("Calibrating...\n");
+    TEST_EQUAL(0, cont_ad_calib_loop(cont, calib, n_calib_samp));
+    printf("Calibrated!\n");
+
+    listening = FALSE;
+    cptr = calib;
+    while (1) {
+       /* Use up the calibration samples first. */
+       if (n_calib_samp) {
+           k = n_calib_samp;
+           if (k > 512)
+               k = 512;
+           memcpy(buf, cptr, 512 * 2);
+           cptr += k;
+           n_calib_samp -= k;
+           if (k < 512)
+               k = fread(buf + k, 2, 512-k, infp);
+       }
+       else {
+           k = fread(buf, 2, 512, infp);
+       }
+
+       /* End of file. */
+       if (k < 256) { /* FIXME: It should do something useful with fewer samples. */
+           if (listening) {
+               printf("End of file at %.3f seconds\n",
+                      (double)(cont->read_ts - k) / 16000);
+           }
+           break;
+       }
+
+       k = cont_ad_read(cont, buf, k);
+
+       if (cont->state == CONT_AD_STATE_SIL) {
+           /* Has there been enough silence to cut the utterance? */
+           if (listening && cont->seglen > 8000) {
+               printf("End of utterance at %.3f seconds\n",
+                      (double)(cont->read_ts - k - cont->seglen) / 16000);
+               listening = FALSE;
+           }
+       }
+       else {
+           if (!listening) {
+               printf("Start of utterance at %.3f seconds\n",
+                      (double)(cont->read_ts - k) / 16000);
+               listening = TRUE;
+           }
+       }
+    }
+
+    ckd_free(calib);
+    cont_ad_close(cont);
+    fclose(infp);
+    return 0;
+}
diff --git a/test/unit/test_ad/test_ad_read.c b/test/unit/test_ad/test_ad_read.c
new file mode 100644 (file)
index 0000000..2fd2479
--- /dev/null
@@ -0,0 +1,85 @@
+/* -*- c-basic-offset: 4 -*- */
+#include "config.h"
+#include "ad.h"
+#include "cont_ad.h"
+#include "byteorder.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+
+#ifndef WORDS_BIGENDIAN
+#define WORDS_BIGENDIAN 0
+#endif
+
+FILE *infp;
+
+static int32
+file_ad_read(ad_rec_t * r, int16 * buf, int32 max)
+{
+    int32 i, k;
+
+    k = fread(buf, sizeof(int16), max, infp);
+    if (WORDS_BIGENDIAN) {
+        for (i = 0; i < k; i++) {
+           SWAP_INT16(&buf[i]);
+        }
+    }
+
+    return ((k > 0) ? k : -1);
+}
+
+int
+main(int argc, char *argv[])
+{
+    cont_ad_t *cont;
+    ad_rec_t ad;
+    int16 buf[512];
+    int listening;
+
+    ad.sps = 16000;
+    ad.bps = 2;
+
+    TEST_ASSERT(infp = fopen(TESTDATADIR "/chan3.raw", "rb"));
+    TEST_ASSERT(cont = cont_ad_init(&ad, file_ad_read));
+
+    printf("Calibrating ...");
+    fflush(stdout);
+    if (cont_ad_calib(cont) < 0)
+           printf(" failed; file too short?\n");
+    else
+           printf(" done after %ld samples\n", ftell(infp) / 2);
+    rewind(infp);
+
+    listening = FALSE;
+    while (1) {
+       int k = cont_ad_read(cont, buf, 512);
+       /* End of file. */
+       if (k < 0) {
+           if (listening) {
+               printf("End of file at %.3f seconds\n",
+                      (double)(cont->read_ts - k) / 16000);
+           }
+           break;
+       }
+
+       if (cont->state == CONT_AD_STATE_SIL) {
+           /* Has there been enough silence to cut the utterance? */
+           if (listening && cont->seglen > 8000) {
+               printf("End of utterance at %.3f seconds\n",
+                      (double)(cont->read_ts - k - cont->seglen) / 16000);
+               listening = FALSE;
+           }
+       }
+       else {
+           if (!listening) {
+               printf("Start of utterance at %.3f seconds\n",
+                      (double)(cont->read_ts - k) / 16000);
+               listening = TRUE;
+           }
+       }
+    }
+
+    cont_ad_close(cont);
+    fclose(infp);
+    return 0;
+}
diff --git a/test/unit/test_ad/test_macros.h b/test/unit/test_ad/test_macros.h
new file mode 100644 (file)
index 0000000..12cd03f
--- /dev/null
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define EPSILON 0.01
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_alloc/Makefile.am b/test/unit/test_alloc/Makefile.am
new file mode 100644 (file)
index 0000000..eb9b798
--- /dev/null
@@ -0,0 +1,15 @@
+check_PROGRAMS = test_ckd_alloc test_ckd_alloc_catch test_ckd_alloc_fail test_ckd_alloc_abort \
+       test_listelem_alloc
+
+TESTS = test_ckd_alloc test_ckd_alloc_catch test_ckd_alloc_fail.sh test_ckd_alloc_abort.sh \
+       test_listelem_alloc
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+noinst_HEADERS = test_macros.h
+EXTRA_DIST = test_ckd_alloc_fail.sh test_ckd_alloc_abort.sh
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
diff --git a/test/unit/test_alloc/Makefile.in b/test/unit/test_alloc/Makefile.in
new file mode 100644 (file)
index 0000000..7ba917e
--- /dev/null
@@ -0,0 +1,598 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_ckd_alloc$(EXEEXT) test_ckd_alloc_catch$(EXEEXT) \
+       test_ckd_alloc_fail$(EXEEXT) test_ckd_alloc_abort$(EXEEXT) \
+       test_listelem_alloc$(EXEEXT)
+TESTS = test_ckd_alloc$(EXEEXT) test_ckd_alloc_catch$(EXEEXT) \
+       test_ckd_alloc_fail.sh test_ckd_alloc_abort.sh \
+       test_listelem_alloc$(EXEEXT)
+subdir = test/unit/test_alloc
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_ckd_alloc_SOURCES = test_ckd_alloc.c
+test_ckd_alloc_OBJECTS = test_ckd_alloc.$(OBJEXT)
+test_ckd_alloc_LDADD = $(LDADD)
+test_ckd_alloc_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_ckd_alloc_abort_SOURCES = test_ckd_alloc_abort.c
+test_ckd_alloc_abort_OBJECTS = test_ckd_alloc_abort.$(OBJEXT)
+test_ckd_alloc_abort_LDADD = $(LDADD)
+test_ckd_alloc_abort_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_ckd_alloc_catch_SOURCES = test_ckd_alloc_catch.c
+test_ckd_alloc_catch_OBJECTS = test_ckd_alloc_catch.$(OBJEXT)
+test_ckd_alloc_catch_LDADD = $(LDADD)
+test_ckd_alloc_catch_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_ckd_alloc_fail_SOURCES = test_ckd_alloc_fail.c
+test_ckd_alloc_fail_OBJECTS = test_ckd_alloc_fail.$(OBJEXT)
+test_ckd_alloc_fail_LDADD = $(LDADD)
+test_ckd_alloc_fail_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_listelem_alloc_SOURCES = test_listelem_alloc.c
+test_listelem_alloc_OBJECTS = test_listelem_alloc.$(OBJEXT)
+test_listelem_alloc_LDADD = $(LDADD)
+test_listelem_alloc_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_ckd_alloc.c test_ckd_alloc_abort.c \
+       test_ckd_alloc_catch.c test_ckd_alloc_fail.c \
+       test_listelem_alloc.c
+DIST_SOURCES = test_ckd_alloc.c test_ckd_alloc_abort.c \
+       test_ckd_alloc_catch.c test_ckd_alloc_fail.c \
+       test_listelem_alloc.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+noinst_HEADERS = test_macros.h
+EXTRA_DIST = test_ckd_alloc_fail.sh test_ckd_alloc_abort.sh
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_alloc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_alloc/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_ckd_alloc$(EXEEXT): $(test_ckd_alloc_OBJECTS) $(test_ckd_alloc_DEPENDENCIES) 
+       @rm -f test_ckd_alloc$(EXEEXT)
+       $(LINK) $(test_ckd_alloc_OBJECTS) $(test_ckd_alloc_LDADD) $(LIBS)
+test_ckd_alloc_abort$(EXEEXT): $(test_ckd_alloc_abort_OBJECTS) $(test_ckd_alloc_abort_DEPENDENCIES) 
+       @rm -f test_ckd_alloc_abort$(EXEEXT)
+       $(LINK) $(test_ckd_alloc_abort_OBJECTS) $(test_ckd_alloc_abort_LDADD) $(LIBS)
+test_ckd_alloc_catch$(EXEEXT): $(test_ckd_alloc_catch_OBJECTS) $(test_ckd_alloc_catch_DEPENDENCIES) 
+       @rm -f test_ckd_alloc_catch$(EXEEXT)
+       $(LINK) $(test_ckd_alloc_catch_OBJECTS) $(test_ckd_alloc_catch_LDADD) $(LIBS)
+test_ckd_alloc_fail$(EXEEXT): $(test_ckd_alloc_fail_OBJECTS) $(test_ckd_alloc_fail_DEPENDENCIES) 
+       @rm -f test_ckd_alloc_fail$(EXEEXT)
+       $(LINK) $(test_ckd_alloc_fail_OBJECTS) $(test_ckd_alloc_fail_LDADD) $(LIBS)
+test_listelem_alloc$(EXEEXT): $(test_listelem_alloc_OBJECTS) $(test_listelem_alloc_DEPENDENCIES) 
+       @rm -f test_listelem_alloc$(EXEEXT)
+       $(LINK) $(test_listelem_alloc_OBJECTS) $(test_listelem_alloc_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ckd_alloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ckd_alloc_abort.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ckd_alloc_catch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ckd_alloc_fail.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_listelem_alloc.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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:
+
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_alloc/test_ckd_alloc.c b/test/unit/test_alloc/test_ckd_alloc.c
new file mode 100644 (file)
index 0000000..5d6925d
--- /dev/null
@@ -0,0 +1,103 @@
+#include <stdio.h>
+
+#include <ckd_alloc.h>
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       int *alloc1;
+       int **alloc2;
+       int ***alloc3;
+       int i;
+
+       TEST_ASSERT(alloc1 = ckd_calloc(3*3*3, sizeof(*alloc1)));
+       TEST_ASSERT(alloc2 = ckd_calloc_2d(3, 3, sizeof(**alloc2)));
+       TEST_ASSERT(alloc3 = ckd_calloc_3d(3, 3, 3, sizeof(***alloc3)));
+
+       for (i = 0; i < 27; ++i) {
+               TEST_EQUAL(alloc1[i], 0);
+               alloc1[i] = i + 1;
+       }
+       for (i = 0; i < 27; ++i)
+               TEST_EQUAL(alloc1[i], i+1);
+
+       for (i = 0; i < 3; ++i) {
+               int j;
+               for (j = 0; j < 3; ++j) {
+                       TEST_EQUAL(alloc2[i][j], 0);
+                       alloc2[i][j] = i * 3 + j + 1;
+               }
+       }
+       /* Verify that row-major ordering is in use. */
+       for (i = 0; i < 9; ++i) {
+               TEST_EQUAL(alloc2[0][i], i+1);
+               TEST_EQUAL(alloc2[0][i], alloc1[i]);
+       }
+       for (i = 0; i < 3; ++i) {
+               int j;
+               for (j = 0; j < 3; ++j) {
+                       TEST_EQUAL(alloc2[i][j], i * 3 + j + 1);
+               }
+       }
+       /* Now test alloc_ptr. */
+       ckd_free_2d(alloc2);
+       alloc2 = ckd_alloc_2d_ptr(3, 3, alloc1, sizeof(*alloc1));
+       for (i = 0; i < 9; ++i) {
+               TEST_EQUAL(alloc2[0][i], i+1);
+               TEST_EQUAL(alloc2[0][i], alloc1[i]);
+       }
+       for (i = 0; i < 3; ++i) {
+               int j;
+               for (j = 0; j < 3; ++j) {
+                       TEST_EQUAL(alloc2[i][j], i * 3 + j + 1);
+               }
+       }
+       ckd_free_2d_ptr(alloc2);
+
+       for (i = 0; i < 3; ++i) {
+               int j;
+               for (j = 0; j < 3; ++j) {
+                       int k;
+                       for (k = 0; k < 3; ++k) {
+                               TEST_EQUAL(alloc3[i][j][k], 0);
+                               alloc3[i][j][k] = i * 3 * 3 + j * 3 + k + 1;
+                       }
+               }
+       }
+       /* Verify that row-major ordering is in use. */
+       for (i = 0; i < 27; ++i) {
+               TEST_EQUAL(alloc3[0][0][i], i+1);
+               TEST_EQUAL(alloc3[0][0][i], alloc1[i]);
+       }
+       for (i = 0; i < 3; ++i) {
+               int j;
+               for (j = 0; j < 3; ++j) {
+                       int k;
+                       for (k = 0; k < 3; ++k) {
+                               TEST_EQUAL(alloc3[i][j][k], i * 3 * 3 + j * 3 + k + 1);
+                       }
+               }
+       }
+       /* Now test alloc_ptr. */
+       ckd_free_3d(alloc3);
+       alloc3 = ckd_alloc_3d_ptr(3, 3, 3, alloc1, sizeof(*alloc1));
+       for (i = 0; i < 27; ++i) {
+               TEST_EQUAL(alloc3[0][0][i], i+1);
+               TEST_EQUAL(alloc3[0][0][i], alloc1[i]);
+       }
+       for (i = 0; i < 3; ++i) {
+               int j;
+               for (j = 0; j < 3; ++j) {
+                       int k;
+                       for (k = 0; k < 3; ++k) {
+                               TEST_EQUAL(alloc3[i][j][k], i * 3 * 3 + j * 3 + k + 1);
+                       }
+               }
+       }
+       ckd_free_3d_ptr(alloc3);
+       ckd_free(alloc1);
+
+       return 0;
+}
diff --git a/test/unit/test_alloc/test_ckd_alloc_abort.c b/test/unit/test_alloc/test_ckd_alloc_abort.c
new file mode 100644 (file)
index 0000000..db9dc7d
--- /dev/null
@@ -0,0 +1,19 @@
+#include <stdio.h>
+
+#include <ckd_alloc.h>
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       int *alloc1;
+       int bad_alloc_did_not_fail = FALSE;
+
+       ckd_set_jump(NULL, TRUE);
+       /* Guaranteed to fail, we hope!. */
+       alloc1 = ckd_calloc(-1,-1);
+       TEST_ASSERT(bad_alloc_did_not_fail);
+
+       return 0;
+}
diff --git a/test/unit/test_alloc/test_ckd_alloc_abort.sh b/test/unit/test_alloc/test_ckd_alloc_abort.sh
new file mode 100755 (executable)
index 0000000..6f1123e
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. ../testfuncs.sh
+
+ulimit -c 0
+if ./test_ckd_alloc_abort; then
+    fail expected_failure
+else
+    pass expected_failure
+fi
+
diff --git a/test/unit/test_alloc/test_ckd_alloc_catch.c b/test/unit/test_alloc/test_ckd_alloc_catch.c
new file mode 100644 (file)
index 0000000..35ec9e2
--- /dev/null
@@ -0,0 +1,26 @@
+#include <stdio.h>
+
+#include <ckd_alloc.h>
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       int *alloc1;
+       jmp_buf env;
+
+       ckd_set_jump(&env, FALSE);
+       if (setjmp(env)) {
+               printf("Successfully caught bad allocation!\n");
+       }
+       else {
+               int failed_to_catch_bad_alloc = FALSE;
+
+               /* Guaranteed to fail, we hope!. */
+               alloc1 = ckd_calloc(-1,-1);
+               TEST_ASSERT(failed_to_catch_bad_alloc);
+       }
+
+       return 0;
+}
diff --git a/test/unit/test_alloc/test_ckd_alloc_fail.c b/test/unit/test_alloc/test_ckd_alloc_fail.c
new file mode 100644 (file)
index 0000000..845d87a
--- /dev/null
@@ -0,0 +1,19 @@
+#include <stdio.h>
+
+#include <ckd_alloc.h>
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       int *alloc1;
+       int bad_alloc_did_not_fail = FALSE;
+
+       ckd_set_jump(NULL, FALSE);
+       /* Guaranteed to fail, we hope!. */
+       alloc1 = ckd_calloc(-1,-1);
+       TEST_ASSERT(bad_alloc_did_not_fail);
+
+       return 0;
+}
diff --git a/test/unit/test_alloc/test_ckd_alloc_fail.sh b/test/unit/test_alloc/test_ckd_alloc_fail.sh
new file mode 100755 (executable)
index 0000000..7758811
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+. ../testfuncs.sh
+
+./test_ckd_alloc_fail
+if [ $? = 255 ]; then
+    pass expected_failure
+else
+    fail expected_failure
+fi
+
diff --git a/test/unit/test_alloc/test_listelem_alloc.c b/test/unit/test_alloc/test_listelem_alloc.c
new file mode 100644 (file)
index 0000000..e2fd458
--- /dev/null
@@ -0,0 +1,64 @@
+#include <stdio.h>
+#include <string.h>
+
+#include <listelem_alloc.h>
+
+#include "test_macros.h"
+
+struct bogus {
+       char const *str;
+       long foobie;
+};
+
+int
+main(int argc, char *argv[])
+{
+       listelem_alloc_t *le;
+       struct bogus *bogus1, *bogus2;
+       int i;
+
+       TEST_ASSERT(le = listelem_alloc_init(sizeof(struct bogus)));
+       bogus1 = listelem_malloc(le);
+       bogus1->str = "hello";
+       bogus1->foobie = 42;
+       bogus2 = listelem_malloc(le);
+       bogus2->str = "goodbye";
+       bogus2->foobie = 69;
+       TEST_EQUAL(bogus1->foobie, 42);
+       TEST_EQUAL(0, strcmp(bogus1->str, "hello"));
+       listelem_free(le, bogus1);
+       listelem_free(le, bogus2);
+       listelem_alloc_free(le);
+
+       TEST_ASSERT(le = listelem_alloc_init(sizeof(struct bogus)));
+       listelem_stats(le);
+       for (i = 0; i < 60; ++i)
+               bogus1 = listelem_malloc(le);
+       listelem_stats(le);
+       listelem_alloc_free(le);
+
+       {
+               struct bogus *bogus[600];
+               int32 bogus_id[600];
+
+               le = listelem_alloc_init(sizeof(struct bogus));
+               for (i = 0; i < 600; ++i)
+                       bogus[i] = listelem_malloc_id(le, bogus_id + i);
+               listelem_stats(le);
+               for (i = 0; i < 600; ++i) {
+                       TEST_EQUAL(bogus[i], listelem_get_item(le, bogus_id[i]));
+               }
+               for (i = 0; i < 600; ++i)
+                       listelem_free(le, bogus[i]);
+               listelem_stats(le);
+               for (i = 0; i < 600; ++i)
+                       bogus[i] = listelem_malloc_id(le, bogus_id + i);
+               listelem_stats(le);
+               for (i = 0; i < 600; ++i)
+                       TEST_EQUAL(bogus[i], listelem_get_item(le, bogus_id[i]));
+               listelem_alloc_free(le);
+       }
+
+
+       return 0;
+}
diff --git a/test/unit/test_alloc/test_macros.h b/test/unit/test_alloc/test_macros.h
new file mode 100644 (file)
index 0000000..12cd03f
--- /dev/null
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define EPSILON 0.01
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_bitvec/Makefile.am b/test/unit/test_bitvec/Makefile.am
new file mode 100644 (file)
index 0000000..26934c6
--- /dev/null
@@ -0,0 +1,12 @@
+check_PROGRAMS = test_bitvec
+
+TESTS = test_bitvec
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+noinst_HEADERS = test_macros.h
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
diff --git a/test/unit/test_bitvec/Makefile.in b/test/unit/test_bitvec/Makefile.in
new file mode 100644 (file)
index 0000000..0fb9297
--- /dev/null
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_bitvec$(EXEEXT)
+TESTS = test_bitvec$(EXEEXT)
+subdir = test/unit/test_bitvec
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_bitvec_SOURCES = test_bitvec.c
+test_bitvec_OBJECTS = test_bitvec.$(OBJEXT)
+test_bitvec_LDADD = $(LDADD)
+test_bitvec_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_bitvec.c
+DIST_SOURCES = test_bitvec.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+noinst_HEADERS = test_macros.h
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_bitvec/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_bitvec/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_bitvec$(EXEEXT): $(test_bitvec_OBJECTS) $(test_bitvec_DEPENDENCIES) 
+       @rm -f test_bitvec$(EXEEXT)
+       $(LINK) $(test_bitvec_OBJECTS) $(test_bitvec_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_bitvec.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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:
+
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_bitvec/test_bitvec.c b/test/unit/test_bitvec/test_bitvec.c
new file mode 100644 (file)
index 0000000..37cf98b
--- /dev/null
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <time.h>
+
+#include "bitvec.h"
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       bitvec_t *bv;
+       int i, j;
+       clock_t c;
+
+       TEST_ASSERT(bv = bitvec_alloc(199));
+       bitvec_set(bv,198);
+       bitvec_set(bv,0);
+       bitvec_set(bv,42);
+       bitvec_set(bv,43);
+       bitvec_set(bv,44);
+       TEST_ASSERT(bitvec_is_set(bv,198));
+       TEST_ASSERT(bitvec_is_set(bv,0));
+       TEST_ASSERT(bitvec_is_set(bv,42));
+       TEST_ASSERT(bitvec_is_set(bv,43));
+       TEST_ASSERT(bitvec_is_set(bv,44));
+       TEST_EQUAL(5, bitvec_count_set(bv, 199));
+       bitvec_clear(bv, 43);
+       TEST_EQUAL(0, bitvec_is_set(bv,43));
+
+       c = clock();
+       for (j = 0; j < 1000000; ++j)
+               bitvec_count_set(bv, 199);
+       c = clock() - c;
+       printf("1000000 * 199 bitvec_count_set in %.2f sec\n",
+              (double)c / CLOCKS_PER_SEC);
+       bitvec_free(bv);
+
+       bv = bitvec_alloc(1314);
+       c = clock();
+       for (j = 0; j < 50000; ++j)
+               for (i = 0; i < 1314; ++i)
+                       bitvec_set(bv, i);
+       c = clock() - c;
+       printf("50000 * 1314 bitvec_set in %.2f sec\n",
+              (double)c / CLOCKS_PER_SEC);
+       bitvec_free(bv);
+
+       return 0;
+}
diff --git a/test/unit/test_bitvec/test_macros.h b/test/unit/test_bitvec/test_macros.h
new file mode 100644 (file)
index 0000000..12cd03f
--- /dev/null
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define EPSILON 0.01
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_case/Makefile.am b/test/unit/test_case/Makefile.am
new file mode 100644 (file)
index 0000000..8c872e0
--- /dev/null
@@ -0,0 +1,21 @@
+check_PROGRAMS = chgCase
+
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la -lm
+
+TESTS = _lcase1.test                           \
+       _lcase2.test                            \
+       _lcase3.test                            \
+       _strcmp1.test                           \
+       _strcmp2.test                           \
+       _strcmp3.test                           \
+       _ucase1.test                            \
+       _ucase2.test                            \
+       _ucase3.test
+
+EXTRA_DIST = $(TESTS)
diff --git a/test/unit/test_case/Makefile.in b/test/unit/test_case/Makefile.in
new file mode 100644 (file)
index 0000000..a98256a
--- /dev/null
@@ -0,0 +1,558 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = chgCase$(EXEEXT)
+subdir = test/unit/test_case
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+chgCase_SOURCES = chgCase.c
+chgCase_OBJECTS = chgCase.$(OBJEXT)
+chgCase_LDADD = $(LDADD)
+chgCase_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = chgCase.c
+DIST_SOURCES = chgCase.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la -lm
+TESTS = _lcase1.test                           \
+       _lcase2.test                            \
+       _lcase3.test                            \
+       _strcmp1.test                           \
+       _strcmp2.test                           \
+       _strcmp3.test                           \
+       _ucase1.test                            \
+       _ucase2.test                            \
+       _ucase3.test
+
+EXTRA_DIST = $(TESTS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_case/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_case/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+chgCase$(EXEEXT): $(chgCase_OBJECTS) $(chgCase_DEPENDENCIES) 
+       @rm -f chgCase$(EXEEXT)
+       $(LINK) $(chgCase_OBJECTS) $(chgCase_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chgCase.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+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:
+
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_case/_lcase1.test b/test/unit/test_case/_lcase1.test
new file mode 100755 (executable)
index 0000000..4785356
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase lcase 5 3
diff --git a/test/unit/test_case/_lcase2.test b/test/unit/test_case/_lcase2.test
new file mode 100755 (executable)
index 0000000..43afe47
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase lcase 1 1
diff --git a/test/unit/test_case/_lcase3.test b/test/unit/test_case/_lcase3.test
new file mode 100755 (executable)
index 0000000..144afbd
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase lcase
\ No newline at end of file
diff --git a/test/unit/test_case/_strcmp1.test b/test/unit/test_case/_strcmp1.test
new file mode 100755 (executable)
index 0000000..9462226
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase strcmp_nocase 2 3
\ No newline at end of file
diff --git a/test/unit/test_case/_strcmp2.test b/test/unit/test_case/_strcmp2.test
new file mode 100755 (executable)
index 0000000..245aa1a
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase strcmp_nocase 1 1
\ No newline at end of file
diff --git a/test/unit/test_case/_strcmp3.test b/test/unit/test_case/_strcmp3.test
new file mode 100755 (executable)
index 0000000..0fb9741
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase strcmp_nocase
\ No newline at end of file
diff --git a/test/unit/test_case/_ucase1.test b/test/unit/test_case/_ucase1.test
new file mode 100755 (executable)
index 0000000..cd635b5
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase ucase 2 4
\ No newline at end of file
diff --git a/test/unit/test_case/_ucase2.test b/test/unit/test_case/_ucase2.test
new file mode 100755 (executable)
index 0000000..4a19153
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase ucase 1 1
\ No newline at end of file
diff --git a/test/unit/test_case/_ucase3.test b/test/unit/test_case/_ucase3.test
new file mode 100755 (executable)
index 0000000..f2a48ad
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./chgCase ucase
\ No newline at end of file
diff --git a/test/unit/test_case/chgCase.c b/test/unit/test_case/chgCase.c
new file mode 100644 (file)
index 0000000..ed4f3e0
--- /dev/null
@@ -0,0 +1,99 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <case.h>
+#include <err.h>
+
+#define MAX_STR_LEN 64
+#define NUM_STRS 6
+
+#define STR0 "this string should NEVER show up"
+#define STR1 ""
+#define STR2 "az3o%\tW@^#\\\n\r[]{}|\() '\""
+#define STR3 "az3o%\tw@^#\\\n\r[]{}|\() '\""
+#define STR4 "AZ3O%\tW@^#\\\n\r[]{}|\() '\""
+#define STR5 "AZ3O%\tw@^#\\\n\r[]{}|\() '\""
+
+
+int
+main(int argc, char **argv)
+{
+    int cmp;
+    char *n1 = NULL;
+    char *n2 = NULL;
+
+    char s1[MAX_STR_LEN];
+    char s2[MAX_STR_LEN];
+
+    char strs[NUM_STRS][MAX_STR_LEN] = { STR0,
+        STR1,
+        STR2,
+        STR3,
+        STR4,
+        STR5
+    };
+
+    if (argc < 2 ||
+        3 == argc ||
+        argc > 4 ||
+        (strcmp(argv[1], "lcase") &&
+         strcmp(argv[1], "ucase") && strcmp(argv[1], "strcmp_nocase")
+        )) {
+        /*printf("INVALID PARAMETERS to chgCase\n"); */
+        exit(1);
+    }
+
+
+    if (2 == argc) {
+        if (0 == strcmp(argv[1], "ucase")) {
+            ucase(n1);
+        }
+        else if (0 == strcmp(argv[1], "lcase")) {
+            lcase(n1);
+        }
+        else {
+            strcmp_nocase(n1, n2);
+        }
+        /*
+           if we're still alive we obviously didn't segfault
+         */
+        exit(0);
+    }
+
+    if (4 == argc) {
+
+        if (0 >= atoi(argv[2]) ||
+            atoi(argv[2]) >= NUM_STRS ||
+            0 >= atoi(argv[3]) || atoi(argv[3]) >= NUM_STRS) {
+            E_INFO("INVALID PARAMS TO chkCase\n");
+            exit(1);
+        }
+
+        strcpy(s1, strs[atoi(argv[2])]);
+        strcpy(s2, strs[atoi(argv[3])]);
+
+        if (0 == strcmp(argv[1], "ucase")) {
+            ucase(s1);
+            cmp = strcmp(s1, s2);
+        }
+        else if (0 == strcmp(argv[1], "lcase")) {
+            lcase(s1);
+            cmp = strcmp(s1, s2);
+        }
+        else {
+            cmp = strcmp_nocase(s1, s2);
+        }
+
+        /*    E_INFO("Value of cmp %d\n", cmp); */
+        if (0 != cmp) {
+            E_FATAL("test failed\nstr1:|%s|\nstr2:|%s|\n", s1, s2);
+        }
+
+        return (cmp != 0);
+    }
+
+    /*somehow we got here and we shouldn't have */
+
+    exit(1);
+}
diff --git a/test/unit/test_cmdln/Makefile.am b/test/unit/test_cmdln/Makefile.am
new file mode 100644 (file)
index 0000000..2396a21
--- /dev/null
@@ -0,0 +1,23 @@
+check_PROGRAMS = cmdln_parse cmdln_parse_multiple cmdln_parse_r
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la -lm
+
+
+TESTS = _test_parse_badargs.test               \
+       _test_parse_defaults_r.test             \
+       _test_parse_defaults.test               \
+       _test_parse_goodargs.test               \
+       _test_parse_multiple.test
+
+
+EXTRA_DIST = $(TESTS)                          \
+       _test_parse_badargs.res                 \
+       _test_parse_defaults.res                \
+       _test_parse_defaults_r.res              \
+       _test_parse_goodargs.res                \
+       _test_parse_multiple.res
diff --git a/test/unit/test_cmdln/Makefile.in b/test/unit/test_cmdln/Makefile.in
new file mode 100644 (file)
index 0000000..7fab963
--- /dev/null
@@ -0,0 +1,579 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = cmdln_parse$(EXEEXT) cmdln_parse_multiple$(EXEEXT) \
+       cmdln_parse_r$(EXEEXT)
+subdir = test/unit/test_cmdln
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+cmdln_parse_SOURCES = cmdln_parse.c
+cmdln_parse_OBJECTS = cmdln_parse.$(OBJEXT)
+cmdln_parse_LDADD = $(LDADD)
+cmdln_parse_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+cmdln_parse_multiple_SOURCES = cmdln_parse_multiple.c
+cmdln_parse_multiple_OBJECTS = cmdln_parse_multiple.$(OBJEXT)
+cmdln_parse_multiple_LDADD = $(LDADD)
+cmdln_parse_multiple_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+cmdln_parse_r_SOURCES = cmdln_parse_r.c
+cmdln_parse_r_OBJECTS = cmdln_parse_r.$(OBJEXT)
+cmdln_parse_r_LDADD = $(LDADD)
+cmdln_parse_r_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = cmdln_parse.c cmdln_parse_multiple.c cmdln_parse_r.c
+DIST_SOURCES = cmdln_parse.c cmdln_parse_multiple.c cmdln_parse_r.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la -lm
+TESTS = _test_parse_badargs.test               \
+       _test_parse_defaults_r.test             \
+       _test_parse_defaults.test               \
+       _test_parse_goodargs.test               \
+       _test_parse_multiple.test
+
+EXTRA_DIST = $(TESTS)                          \
+       _test_parse_badargs.res                 \
+       _test_parse_defaults.res                \
+       _test_parse_defaults_r.res              \
+       _test_parse_goodargs.res                \
+       _test_parse_multiple.res
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_cmdln/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_cmdln/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+cmdln_parse$(EXEEXT): $(cmdln_parse_OBJECTS) $(cmdln_parse_DEPENDENCIES) 
+       @rm -f cmdln_parse$(EXEEXT)
+       $(LINK) $(cmdln_parse_OBJECTS) $(cmdln_parse_LDADD) $(LIBS)
+cmdln_parse_multiple$(EXEEXT): $(cmdln_parse_multiple_OBJECTS) $(cmdln_parse_multiple_DEPENDENCIES) 
+       @rm -f cmdln_parse_multiple$(EXEEXT)
+       $(LINK) $(cmdln_parse_multiple_OBJECTS) $(cmdln_parse_multiple_LDADD) $(LIBS)
+cmdln_parse_r$(EXEEXT): $(cmdln_parse_r_OBJECTS) $(cmdln_parse_r_DEPENDENCIES) 
+       @rm -f cmdln_parse_r$(EXEEXT)
+       $(LINK) $(cmdln_parse_r_OBJECTS) $(cmdln_parse_r_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmdln_parse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmdln_parse_multiple.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmdln_parse_r.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+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:
+
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_cmdln/_test_parse_badargs.res b/test/unit/test_cmdln/_test_parse_badargs.res
new file mode 100644 (file)
index 0000000..748ddb8
--- /dev/null
@@ -0,0 +1,9 @@
+ERROR: Bad argument value for -a: foobar
+ERROR: Failed to parse arguments list
+ERROR: Failed to parse arguments list, forced exit
+ERROR: Unknown argument name '-noarg'
+ERROR: Failed to parse arguments list
+ERROR: Failed to parse arguments list, forced exit
+ERROR: Argument value for '-c' missing
+ERROR: Failed to parse arguments list
+ERROR: Failed to parse arguments list, forced exit
diff --git a/test/unit/test_cmdln/_test_parse_badargs.test b/test/unit/test_cmdln/_test_parse_badargs.test
new file mode 100755 (executable)
index 0000000..e5dca54
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+testname=`basename $0 .test`
+
+./cmdln_parse -a foobar > $testname.out 2>&1 && exit 1
+./cmdln_parse -a 42 -noarg >> $testname.out 2>&1 && exit 1
+./cmdln_parse -a 42 -c >> $testname.out 2>&1 && exit 1
+
+sed -ne 's,^ERROR:.*line [0-9]*:,ERROR:,p' < $testname.out > $testname.tmp.out \
+    && mv $testname.tmp.out $testname.out
+compare_table defaults $testname.out $tests/unit/test_cmdln/$testname.res 100
+rm -f $testname.out
diff --git a/test/unit/test_cmdln/_test_parse_defaults.res b/test/unit/test_cmdln/_test_parse_defaults.res
new file mode 100644 (file)
index 0000000..ce2b0ed
--- /dev/null
@@ -0,0 +1,4 @@
+-a     42      This is the first argument.
+-b             This is the second argument.
+-c     no      This is the third argument.
+-d     1e-50   This is the fourth argument.
diff --git a/test/unit/test_cmdln/_test_parse_defaults.test b/test/unit/test_cmdln/_test_parse_defaults.test
new file mode 100755 (executable)
index 0000000..867895d
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+testname=`basename $0 .test`
+./cmdln_parse > $testname.out 2>&1 || true
+sed -ne 's,^-,-,p' < $testname.out > $testname.tmp.out \
+    && mv $testname.tmp.out $testname.out
+compare_table defaults $testname.out $tests/unit/test_cmdln/$testname.res 100
+rm -f $testname.out
diff --git a/test/unit/test_cmdln/_test_parse_defaults_r.res b/test/unit/test_cmdln/_test_parse_defaults_r.res
new file mode 100644 (file)
index 0000000..9e09792
--- /dev/null
@@ -0,0 +1,8 @@
+-a     42      42
+-b             
+-c     no      no
+-d     1e-50   1.000000e-50
+-a     42      42
+-b             foobie
+-c     no      no
+-d     1e-50   1.000000e-50
diff --git a/test/unit/test_cmdln/_test_parse_defaults_r.test b/test/unit/test_cmdln/_test_parse_defaults_r.test
new file mode 100755 (executable)
index 0000000..a494ec6
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+testname=`basename $0 .test`
+./cmdln_parse_r -a 42 > $testname.out 2>&1
+sed -ne 's,^-,-,p' < $testname.out > $testname.tmp.out \
+    && mv $testname.tmp.out $testname.out
+compare_table defaults $testname.out $tests/unit/test_cmdln/$testname.res 100
+rm -f $testname.out
diff --git a/test/unit/test_cmdln/_test_parse_goodargs.res b/test/unit/test_cmdln/_test_parse_goodargs.res
new file mode 100644 (file)
index 0000000..0e6e6ec
--- /dev/null
@@ -0,0 +1 @@
+36 hello 1 4.500000
diff --git a/test/unit/test_cmdln/_test_parse_goodargs.test b/test/unit/test_cmdln/_test_parse_goodargs.test
new file mode 100755 (executable)
index 0000000..eebb0da
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+testname=`basename $0 .test`
+./cmdln_parse -a 36 -b hello -c yes -d 4.5 > $testname.out 2>/dev/null
+compare_table defaults $testname.out $tests/unit/test_cmdln/$testname.res
+rm -f $testname.out
diff --git a/test/unit/test_cmdln/_test_parse_multiple.res b/test/unit/test_cmdln/_test_parse_multiple.res
new file mode 100644 (file)
index 0000000..792023e
--- /dev/null
@@ -0,0 +1 @@
+42 (null) 0 4.500000
diff --git a/test/unit/test_cmdln/_test_parse_multiple.test b/test/unit/test_cmdln/_test_parse_multiple.test
new file mode 100755 (executable)
index 0000000..5ac96f0
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+testname=`basename $0 .test`
+./cmdln_parse_multiple -a 42 -d 4.5 > $testname.out 2>/dev/null
+compare_table defaults $testname.out $tests/unit/test_cmdln/$testname.res
+rm -f $testname.out
diff --git a/test/unit/test_cmdln/cmdln_parse.c b/test/unit/test_cmdln/cmdln_parse.c
new file mode 100644 (file)
index 0000000..db341c3
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "cmd_ln.h"
+#include "ckd_alloc.h"
+
+const arg_t defs[] = {
+    { "-a", ARG_INT32, "42", "This is the first argument." },
+    { "-b", ARG_STRING, NULL, "This is the second argument." },
+    { "-c", ARG_BOOLEAN, "no", "This is the third argument." },
+    { "-d", ARG_FLOAT64, "1e-50", "This is the fourth argument." },
+    { NULL, 0, NULL, NULL }
+};
+
+int
+main(int argc, char *argv[])
+{
+    cmd_ln_parse(defs, argc, argv, TRUE);
+    printf("%d %s %d %f\n",
+           cmd_ln_int32("-a"),
+           cmd_ln_str("-b") ? cmd_ln_str("-b") : "(null)",
+           cmd_ln_boolean("-c"),
+           cmd_ln_float64("-d"));
+           
+    cmd_ln_free();
+
+    return 0;
+}
diff --git a/test/unit/test_cmdln/cmdln_parse_multiple.c b/test/unit/test_cmdln/cmdln_parse_multiple.c
new file mode 100644 (file)
index 0000000..b6e0a14
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "cmd_ln.h"
+#include "ckd_alloc.h"
+
+const arg_t defs[] = {
+    { "-a", ARG_INT32, "42", "This is the first argument." },
+    { "-b", ARG_STRING, NULL, "This is the second argument." },
+    { "-c", ARG_BOOLEAN, "no", "This is the third argument." },
+    { "-d", ARG_FLOAT64, "1e-50", "This is the fourth argument." },
+    { NULL, 0, NULL, NULL }
+};
+
+static char *orig_argv[] = {
+    "foobie",
+    "-a", "69"
+};
+static int orig_argc = sizeof(orig_argv) / sizeof(orig_argv[0]);
+
+int
+main(int argc, char *argv[])
+{
+    cmd_ln_parse(defs, orig_argc, orig_argv, TRUE);
+    cmd_ln_parse(defs, argc, argv, FALSE);
+    printf("%d %s %d %f\n",
+           cmd_ln_int32("-a"),
+           cmd_ln_str("-b") ? cmd_ln_str("-b") : "(null)",
+           cmd_ln_boolean("-c"),
+           cmd_ln_float64("-d"));
+    cmd_ln_free();
+           
+    return 0;
+}
diff --git a/test/unit/test_cmdln/cmdln_parse_r.c b/test/unit/test_cmdln/cmdln_parse_r.c
new file mode 100644 (file)
index 0000000..84d83a1
--- /dev/null
@@ -0,0 +1,61 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "cmd_ln.h"
+#include "ckd_alloc.h"
+
+const arg_t defs[] = {
+    { "-a", ARG_INT32, "42", "This is the first argument." },
+    { "-b", ARG_STRING, NULL, "This is the second argument." },
+    { "-c", ARG_BOOLEAN, "no", "This is the third argument." },
+    { "-d", ARG_FLOAT64, "1e-50", "This is the fourth argument." },
+    { NULL, 0, NULL, NULL }
+};
+
+int
+main(int argc, char *argv[])
+{
+    cmd_ln_t *config;
+
+    config = cmd_ln_parse_r(NULL, defs, argc, argv, TRUE);
+    if (config == NULL)
+        return 1;
+    printf("%d %s %d %f\n",
+           cmd_ln_int32_r(config, "-a"),
+           cmd_ln_str_r(config, "-b") ? cmd_ln_str_r(config, "-b") : "(null)",
+           cmd_ln_boolean_r(config, "-c"),
+           cmd_ln_float64_r(config, "-d"));
+    cmd_ln_free_r(config);
+
+    config = cmd_ln_init(NULL, NULL, FALSE,
+                         "-b", "foobie", NULL);
+    if (config == NULL)
+        return 1;
+    cmd_ln_free_r(config);
+
+    config = cmd_ln_init(NULL, defs, TRUE,
+                         "-b", "foobie", NULL);
+    if (config == NULL)
+        return 1;
+    printf("%d %s %d %f\n",
+           cmd_ln_int32_r(config, "-a"),
+           cmd_ln_str_r(config, "-b") ? cmd_ln_str_r(config, "-b") : "(null)",
+           cmd_ln_boolean_r(config, "-c"),
+           cmd_ln_float64_r(config, "-d"));
+    cmd_ln_free_r(config);
+
+    config = cmd_ln_init(NULL, NULL, FALSE,
+                         "-b", "foobie", NULL);
+    if (config == NULL)
+        return 1;
+    printf("%s\n",
+           cmd_ln_str_r(config, "-b") ? cmd_ln_str_r(config, "-b") : "(null)");
+    cmd_ln_set_str_r(config, "-b", "blatz");
+    printf("%s\n",
+           cmd_ln_str_r(config, "-b") ? cmd_ln_str_r(config, "-b") : "(null)");
+    cmd_ln_free_r(config);
+           
+    return 0;
+}
diff --git a/test/unit/test_fe/Makefile.am b/test/unit/test_fe/Makefile.am
new file mode 100644 (file)
index 0000000..e7adc0a
--- /dev/null
@@ -0,0 +1,12 @@
+check_PROGRAMS = test_fe test_pitch
+
+TESTS = test_fe test_pitch
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+noinst_HEADERS = test_macros.h
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
diff --git a/test/unit/test_fe/Makefile.in b/test/unit/test_fe/Makefile.in
new file mode 100644 (file)
index 0000000..bb284b5
--- /dev/null
@@ -0,0 +1,562 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_fe$(EXEEXT) test_pitch$(EXEEXT)
+TESTS = test_fe$(EXEEXT) test_pitch$(EXEEXT)
+subdir = test/unit/test_fe
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_fe_SOURCES = test_fe.c
+test_fe_OBJECTS = test_fe.$(OBJEXT)
+test_fe_LDADD = $(LDADD)
+test_fe_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_pitch_SOURCES = test_pitch.c
+test_pitch_OBJECTS = test_pitch.$(OBJEXT)
+test_pitch_LDADD = $(LDADD)
+test_pitch_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_fe.c test_pitch.c
+DIST_SOURCES = test_fe.c test_pitch.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+noinst_HEADERS = test_macros.h
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_fe/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_fe/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_fe$(EXEEXT): $(test_fe_OBJECTS) $(test_fe_DEPENDENCIES) 
+       @rm -f test_fe$(EXEEXT)
+       $(LINK) $(test_fe_OBJECTS) $(test_fe_LDADD) $(LIBS)
+test_pitch$(EXEEXT): $(test_pitch_OBJECTS) $(test_pitch_DEPENDENCIES) 
+       @rm -f test_pitch$(EXEEXT)
+       $(LINK) $(test_pitch_OBJECTS) $(test_pitch_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_pitch.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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:
+
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_fe/test_fe.c b/test/unit/test_fe/test_fe.c
new file mode 100644 (file)
index 0000000..13130f5
--- /dev/null
@@ -0,0 +1,205 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "fe.h"
+#include "cmd_ln.h"
+#include "ckd_alloc.h"
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       static const arg_t fe_args[] = {
+               waveform_to_cepstral_command_line_macro(),
+               { NULL, 0, NULL, NULL }
+       };
+       FILE *raw;
+       cmd_ln_t *config;
+       fe_t *fe;
+       int16 buf[1024];
+       int16 const *inptr;
+       int32 frame_shift, frame_size;
+       mfcc_t **cepbuf1, **cepbuf2, **cptr;
+       int32 nfr, i;
+       size_t nsamp;
+
+       TEST_ASSERT(config = cmd_ln_parse_r(NULL, fe_args, argc, argv, FALSE));
+       TEST_ASSERT(fe = fe_init_auto_r(config));
+
+       TEST_EQUAL(fe_get_output_size(fe), DEFAULT_NUM_CEPSTRA);
+
+       fe_get_input_size(fe, &frame_shift, &frame_size);
+       TEST_EQUAL(frame_shift, DEFAULT_FRAME_SHIFT);
+       TEST_EQUAL(frame_size, (int)(DEFAULT_WINDOW_LENGTH*DEFAULT_SAMPLING_RATE));
+
+       TEST_ASSERT(raw = fopen(TESTDATADIR "/chan3.raw", "rb"));
+
+       TEST_EQUAL(0, fe_start_utt(fe));
+       TEST_EQUAL(1024, fread(buf, sizeof(int16), 1024, raw));
+
+       nsamp = 1024;
+       TEST_ASSERT(fe_process_frames(fe, NULL, &nsamp, NULL, &nfr) >= 0);
+       TEST_EQUAL(1024, nsamp);
+       TEST_EQUAL(4, nfr);
+
+       cepbuf1 = ckd_calloc_2d(5, DEFAULT_NUM_CEPSTRA, sizeof(**cepbuf1));
+       inptr = &buf[0];
+       nfr = 1;
+
+       printf("frame_size %d frame_shift %d\n", frame_size, frame_shift);
+       /* Process the first frame. */
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, &cepbuf1[0], &nfr) >= 0);
+       printf("inptr %d nsamp %d nfr %d\n", inptr - buf, nsamp, nfr);
+       TEST_EQUAL(nfr, 1);
+
+       /* Note that this next one won't actually consume any frames
+        * of input, because it already got sufficient overflow
+        * samples last time around.  This is implementation-dependent
+        * so we shouldn't actually test for it. */
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, &cepbuf1[1], &nfr) >= 0);
+       printf("inptr %d nsamp %d nfr %d\n", inptr - buf, nsamp, nfr);
+       TEST_EQUAL(nfr, 1);
+
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, &cepbuf1[2], &nfr) >= 0);
+       printf("inptr %d nsamp %d nfr %d\n", inptr - buf, nsamp, nfr);
+       TEST_EQUAL(nfr, 1);
+
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, &cepbuf1[3], &nfr) >= 0);
+       printf("inptr %d nsamp %d nfr %d\n", inptr - buf, nsamp, nfr);
+       TEST_EQUAL(nfr, 1);
+
+       TEST_ASSERT(fe_end_utt(fe, cepbuf1[4], &nfr) >= 0);
+       printf("nfr %d\n", nfr);
+       TEST_EQUAL(nfr, 1);
+
+       /* What we *should* test is that the output we get by
+        * processing one frame at a time is exactly the same as what
+        * we get from doing them all at once.  So let's do that */
+       cepbuf2 = ckd_calloc_2d(5, DEFAULT_NUM_CEPSTRA, sizeof(**cepbuf2));
+       inptr = &buf[0];
+       nfr = 5;
+       nsamp = 1024;
+       TEST_EQUAL(0, fe_start_utt(fe));
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, cepbuf2, &nfr) >= 0);
+       printf("nfr %d\n", nfr);
+       TEST_EQUAL(nfr, 4);
+       nfr = 1;
+       TEST_ASSERT(fe_end_utt(fe, cepbuf2[4], &nfr) >= 0);
+       printf("nfr %d\n", nfr);
+       TEST_EQUAL(nfr, 1);
+
+       for (i = 0; i < 5; ++i) {
+               int j;
+               printf("%d: ", i);
+               for (j = 0; j < DEFAULT_NUM_CEPSTRA; ++j) {
+                       printf("%.2f,%.2f ",
+                              MFCC2FLOAT(cepbuf1[i][j]),
+                              MFCC2FLOAT(cepbuf2[i][j]));
+                       TEST_EQUAL_FLOAT(cepbuf1[i][j], cepbuf2[i][j]);
+               }
+               printf("\n");
+       }
+
+       /* Now, also test to make sure that even if we feed data in
+        * little tiny bits we can still make things work. */
+       memset(cepbuf2[0], 0, 5 * DEFAULT_NUM_CEPSTRA * sizeof(**cepbuf2));
+       inptr = &buf[0];
+       cptr = &cepbuf2[0];
+       nfr = 5;
+       i = 5;
+       nsamp = 256;
+       TEST_EQUAL(0, fe_start_utt(fe));
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, cptr, &i) >= 0);
+       printf("inptr %d nsamp %d nfr %d\n", inptr - buf, nsamp, i);
+       cptr += i;
+       nfr -= i;
+       i = nfr;
+       nsamp = 256;
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, cptr, &i) >= 0);
+       printf("inptr %d nsamp %d nfr %d\n", inptr - buf, nsamp, i);
+       cptr += i;
+       nfr -= i;
+       i = nfr;
+       nsamp = 256;
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, cptr, &i) >= 0);
+       printf("inptr %d nsamp %d nfr %d\n", inptr - buf, nsamp, i);
+       cptr += i;
+       nfr -= i;
+       i = nfr;
+       nsamp = 256;
+       TEST_ASSERT(fe_process_frames(fe, &inptr, &nsamp, cptr, &i) >= 0);
+       printf("inptr %d nsamp %d nfr %d\n", inptr - buf, nsamp, i);
+       cptr += i;
+       nfr -= i;
+       TEST_ASSERT(fe_end_utt(fe, *cptr, &nfr) >= 0);
+       printf("nfr %d\n", nfr);
+       TEST_EQUAL(nfr, 1);
+
+       for (i = 0; i < 5; ++i) {
+               int j;
+               printf("%d: ", i);
+               for (j = 0; j < DEFAULT_NUM_CEPSTRA; ++j) {
+                       printf("%.2f,%.2f ",
+                              MFCC2FLOAT(cepbuf1[i][j]),
+                              MFCC2FLOAT(cepbuf2[i][j]));
+                       TEST_EQUAL_FLOAT(cepbuf1[i][j], cepbuf2[i][j]);
+               }
+               printf("\n");
+       }
+
+       /* And now, finally, test fe_process_utt() */
+       inptr = &buf[0];
+       i = 0;
+       TEST_EQUAL(0, fe_start_utt(fe));
+       TEST_ASSERT(fe_process_utt(fe, inptr, 256, &cptr, &nfr) >= 0);
+       printf("i %d nfr %d\n", i, nfr);
+       if (nfr)
+               memcpy(cepbuf2[i], cptr[0], nfr * DEFAULT_NUM_CEPSTRA * sizeof(**cptr));
+       ckd_free_2d(cptr);
+       i += nfr;
+       inptr += 256;
+       TEST_ASSERT(fe_process_utt(fe, inptr, 256, &cptr, &nfr) >= 0);
+       printf("i %d nfr %d\n", i, nfr);
+       if (nfr)
+               memcpy(cepbuf2[i], cptr[0], nfr * DEFAULT_NUM_CEPSTRA * sizeof(**cptr));
+       ckd_free_2d(cptr);
+       i += nfr;
+       inptr += 256;
+       TEST_ASSERT(fe_process_utt(fe, inptr, 256, &cptr, &nfr) >= 0);
+       printf("i %d nfr %d\n", i, nfr);
+       if (nfr)
+               memcpy(cepbuf2[i], cptr[0], nfr * DEFAULT_NUM_CEPSTRA * sizeof(**cptr));
+       ckd_free_2d(cptr);
+       i += nfr;
+       inptr += 256;
+       TEST_ASSERT(fe_process_utt(fe, inptr, 256, &cptr, &nfr) >= 0);
+       printf("i %d nfr %d\n", i, nfr);
+       if (nfr)
+               memcpy(cepbuf2[i], cptr[0], nfr * DEFAULT_NUM_CEPSTRA * sizeof(**cptr));
+       ckd_free_2d(cptr);
+       i += nfr;
+       inptr += 256;
+       TEST_ASSERT(fe_end_utt(fe, cepbuf2[i], &nfr) >= 0);
+       printf("i %d nfr %d\n", i, nfr);
+       TEST_EQUAL(nfr, 1);
+
+       for (i = 0; i < 5; ++i) {
+               int j;
+               printf("%d: ", i);
+               for (j = 0; j < DEFAULT_NUM_CEPSTRA; ++j) {
+                       printf("%.2f,%.2f ",
+                              MFCC2FLOAT(cepbuf1[i][j]),
+                              MFCC2FLOAT(cepbuf2[i][j]));
+                       TEST_EQUAL_FLOAT(cepbuf1[i][j], cepbuf2[i][j]);
+               }
+               printf("\n");
+       }
+
+       ckd_free_2d(cepbuf1);
+       ckd_free_2d(cepbuf2);
+       fclose(raw);
+       fe_free(fe);
+
+       return 0;
+}
diff --git a/test/unit/test_fe/test_macros.h b/test/unit/test_fe/test_macros.h
new file mode 100644 (file)
index 0000000..12cd03f
--- /dev/null
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define EPSILON 0.01
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_fe/test_pitch.c b/test/unit/test_fe/test_pitch.c
new file mode 100644 (file)
index 0000000..02c9de7
--- /dev/null
@@ -0,0 +1,55 @@
+#include <stdio.h>
+
+#include "yin.h"
+#include "ckd_alloc.h"
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       /* This is 11025Hz data (yikes) */
+       static const int frame_shift = 110, frame_size = 265;
+       FILE *raw;
+       yin_t *pe;
+       int16 *buf;
+       size_t nsamp, start;
+       uint16 period, bestdiff;
+       int nfr;
+
+       /* To make life easier, read the whole thing. */
+       TEST_ASSERT(raw = fopen(TESTDATADIR "/chan3.raw", "rb"));
+       fseek(raw, 0, SEEK_END);
+       nsamp = ftell(raw) / 2;
+       buf = ckd_calloc(nsamp, 2);
+       fseek(raw, 0, SEEK_SET);
+       TEST_EQUAL(nsamp, fread(buf, 2, nsamp, raw));
+       fclose(raw);
+
+       TEST_ASSERT(pe = yin_init(frame_size, 0.1, 0.2, 2));
+       yin_start(pe);
+       nfr = 0;
+       for (start = 0; start + frame_size < nsamp; start += frame_shift) {
+               yin_write(pe, buf + start);
+               if (yin_read(pe, &period, &bestdiff)) {
+                       if (bestdiff < 0.2 * 32768)
+                               printf("%d ", period ? 11025/period : 0);
+                       else
+                               printf("0 ");
+                       ++nfr;
+               }
+       }
+       yin_end(pe);
+       while (yin_read(pe, &period, &bestdiff)) {
+               if (bestdiff < 0.2 * 32768)
+                       printf("%d ", period ? 11025/period : 0);
+               else
+                       printf("0 ");
+               ++nfr;
+       }
+       printf("\n");
+       yin_free(pe);
+       ckd_free(buf);
+
+       return 0;
+}
diff --git a/test/unit/test_feat/Makefile.am b/test/unit/test_feat/Makefile.am
new file mode 100644 (file)
index 0000000..bdaa029
--- /dev/null
@@ -0,0 +1,15 @@
+check_PROGRAMS = test_feat test_feat_live test_feat_fe test_subvq
+noinst_HEADERS = test_macros.h
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+
+TESTS = _test_feat.test test_feat_live test_feat_fe test_subvq
+EXTRA_DIST = _test_feat.res _test_feat.test
+CLEANFILES = *.out
diff --git a/test/unit/test_feat/Makefile.in b/test/unit/test_feat/Makefile.in
new file mode 100644 (file)
index 0000000..892cef4
--- /dev/null
@@ -0,0 +1,586 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_feat$(EXEEXT) test_feat_live$(EXEEXT) \
+       test_feat_fe$(EXEEXT) test_subvq$(EXEEXT)
+TESTS = _test_feat.test test_feat_live$(EXEEXT) test_feat_fe$(EXEEXT) \
+       test_subvq$(EXEEXT)
+subdir = test/unit/test_feat
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_feat_SOURCES = test_feat.c
+test_feat_OBJECTS = test_feat.$(OBJEXT)
+test_feat_LDADD = $(LDADD)
+test_feat_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_feat_fe_SOURCES = test_feat_fe.c
+test_feat_fe_OBJECTS = test_feat_fe.$(OBJEXT)
+test_feat_fe_LDADD = $(LDADD)
+test_feat_fe_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_feat_live_SOURCES = test_feat_live.c
+test_feat_live_OBJECTS = test_feat_live.$(OBJEXT)
+test_feat_live_LDADD = $(LDADD)
+test_feat_live_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_subvq_SOURCES = test_subvq.c
+test_subvq_OBJECTS = test_subvq.$(OBJEXT)
+test_subvq_LDADD = $(LDADD)
+test_subvq_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_feat.c test_feat_fe.c test_feat_live.c test_subvq.c
+DIST_SOURCES = test_feat.c test_feat_fe.c test_feat_live.c \
+       test_subvq.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_HEADERS = test_macros.h
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+EXTRA_DIST = _test_feat.res _test_feat.test
+CLEANFILES = *.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_feat/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_feat/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_feat$(EXEEXT): $(test_feat_OBJECTS) $(test_feat_DEPENDENCIES) 
+       @rm -f test_feat$(EXEEXT)
+       $(LINK) $(test_feat_OBJECTS) $(test_feat_LDADD) $(LIBS)
+test_feat_fe$(EXEEXT): $(test_feat_fe_OBJECTS) $(test_feat_fe_DEPENDENCIES) 
+       @rm -f test_feat_fe$(EXEEXT)
+       $(LINK) $(test_feat_fe_OBJECTS) $(test_feat_fe_LDADD) $(LIBS)
+test_feat_live$(EXEEXT): $(test_feat_live_OBJECTS) $(test_feat_live_DEPENDENCIES) 
+       @rm -f test_feat_live$(EXEEXT)
+       $(LINK) $(test_feat_live_OBJECTS) $(test_feat_live_LDADD) $(LIBS)
+test_subvq$(EXEEXT): $(test_subvq_OBJECTS) $(test_subvq_DEPENDENCIES) 
+       @rm -f test_subvq$(EXEEXT)
+       $(LINK) $(test_subvq_OBJECTS) $(test_subvq_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_feat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_feat_fe.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_feat_live.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_subvq.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_feat/_test_feat.res b/test/unit/test_feat/_test_feat.res
new file mode 100644 (file)
index 0000000..b104b55
--- /dev/null
@@ -0,0 +1,18 @@
+15.114 -1.424 -0.953 0.186 -0.656 -0.226 -0.105 -0.412 -0.024 -0.091 -0.124 -0.158 -0.197 
+14.729 -1.313 -0.892 0.140 -0.676 -0.089 -0.313 -0.422 -0.058 -0.101 -0.100 -0.128 -0.123 
+14.502 -1.351 -1.028 -0.189 -0.718 -0.139 -0.121 -0.365 -0.139 -0.154 0.041 0.009 -0.073 
+14.557 -1.676 -0.864 0.118 -0.445 -0.168 -0.069 -0.503 -0.013 0.007 -0.056 -0.075 -0.237 
+14.665 -1.498 -0.582 0.209 -0.487 -0.247 -0.142 -0.439 0.059 -0.058 -0.265 -0.109 -0.196 
+15.025 -1.199 -0.607 0.235 -0.499 -0.080 -0.062 -0.554 -0.209 -0.124 -0.445 -0.352 -0.400 
+15.114 -1.424 -0.953 0.186 -0.656 -0.226 -0.105 -0.412 -0.024 -0.091 -0.124 -0.158 -0.197 15.114 -1.424 -0.953 0.186 -0.656 -0.226 -0.105 -0.412 -0.024 -0.091 -0.124 -0.158 -0.197 14.729 -1.313 -0.892 0.140 -0.676 -0.089 -0.313 -0.422 -0.058 -0.101 -0.100 -0.128 -0.123 
+15.114 -1.424 -0.953 0.186 -0.656 -0.226 -0.105 -0.412 -0.024 -0.091 -0.124 -0.158 -0.197 14.729 -1.313 -0.892 0.140 -0.676 -0.089 -0.313 -0.422 -0.058 -0.101 -0.100 -0.128 -0.123 14.502 -1.351 -1.028 -0.189 -0.718 -0.139 -0.121 -0.365 -0.139 -0.154 0.041 0.009 -0.073 
+14.729 -1.313 -0.892 0.140 -0.676 -0.089 -0.313 -0.422 -0.058 -0.101 -0.100 -0.128 -0.123 14.502 -1.351 -1.028 -0.189 -0.718 -0.139 -0.121 -0.365 -0.139 -0.154 0.041 0.009 -0.073 14.557 -1.676 -0.864 0.118 -0.445 -0.168 -0.069 -0.503 -0.013 0.007 -0.056 -0.075 -0.237 
+14.502 -1.351 -1.028 -0.189 -0.718 -0.139 -0.121 -0.365 -0.139 -0.154 0.041 0.009 -0.073 14.557 -1.676 -0.864 0.118 -0.445 -0.168 -0.069 -0.503 -0.013 0.007 -0.056 -0.075 -0.237 14.665 -1.498 -0.582 0.209 -0.487 -0.247 -0.142 -0.439 0.059 -0.058 -0.265 -0.109 -0.196 
+14.557 -1.676 -0.864 0.118 -0.445 -0.168 -0.069 -0.503 -0.013 0.007 -0.056 -0.075 -0.237 14.665 -1.498 -0.582 0.209 -0.487 -0.247 -0.142 -0.439 0.059 -0.058 -0.265 -0.109 -0.196 15.025 -1.199 -0.607 0.235 -0.499 -0.080 -0.062 -0.554 -0.209 -0.124 -0.445 -0.352 -0.400 
+14.665 -1.498 -0.582 0.209 -0.487 -0.247 -0.142 -0.439 0.059 -0.058 -0.265 -0.109 -0.196 15.025 -1.199 -0.607 0.235 -0.499 -0.080 -0.062 -0.554 -0.209 -0.124 -0.445 -0.352 -0.400 15.025 -1.199 -0.607 0.235 -0.499 -0.080 -0.062 -0.554 -0.209 -0.124 -0.445 -0.352 -0.400 
+15.114 -1.424 -0.953 0.186 -0.656 -0.226 -0.105 -0.412 -0.024 -0.091 -0.124 -0.158 -0.197 -0.612 0.073 -0.075 -0.375 -0.062 0.087 -0.016 0.047 -0.115 -0.063 0.165 0.167 0.124 -0.172 -0.363 0.028 -0.022 0.231 -0.079 0.244 -0.081 0.045 0.108 0.044 0.053 -0.114 
+14.729 -1.313 -0.892 0.140 -0.676 -0.089 -0.313 -0.422 -0.058 -0.101 -0.100 -0.128 -0.123 -0.557 -0.252 0.089 -0.068 0.211 0.058 0.036 -0.091 0.011 0.098 0.068 0.083 -0.040 0.163 -0.147 0.446 0.398 0.231 -0.108 -0.021 -0.074 0.198 0.096 -0.306 -0.118 -0.123 
+14.502 -1.351 -1.028 -0.189 -0.718 -0.139 -0.121 -0.365 -0.139 -0.154 0.041 0.009 -0.073 -0.449 -0.074 0.371 0.023 0.169 -0.021 -0.037 -0.027 0.083 0.033 -0.141 0.049 0.001 0.853 0.366 0.196 0.163 -0.034 -0.049 0.215 -0.041 -0.162 -0.121 -0.413 -0.307 -0.237 
+14.557 -1.676 -0.864 0.118 -0.445 -0.168 -0.069 -0.503 -0.013 0.007 -0.056 -0.075 -0.237 0.296 0.114 0.285 0.095 0.177 0.009 0.251 -0.132 -0.151 -0.023 -0.345 -0.224 -0.277 0.972 0.226 0.050 0.401 0.050 0.080 0.096 -0.162 -0.153 -0.003 -0.345 -0.410 -0.328 
+14.665 -1.498 -0.582 0.209 -0.487 -0.247 -0.142 -0.439 0.059 -0.058 -0.265 -0.109 -0.196 0.523 0.152 0.421 0.424 0.219 0.059 0.059 -0.189 -0.070 0.030 -0.486 -0.361 -0.327 0.172 0.363 -0.028 0.022 -0.231 0.079 -0.244 0.081 -0.045 -0.108 -0.044 -0.053 0.114 
+15.025 -1.199 -0.607 0.235 -0.499 -0.080 -0.062 -0.554 -0.209 -0.124 -0.445 -0.352 -0.400 0.468 0.477 0.257 0.117 -0.054 0.088 0.007 -0.051 -0.196 -0.131 -0.389 -0.277 -0.163 -0.163 0.147 -0.446 -0.398 -0.231 0.108 0.021 0.074 -0.198 -0.096 0.306 0.118 0.123 
diff --git a/test/unit/test_feat/_test_feat.test b/test/unit/test_feat/_test_feat.test
new file mode 100755 (executable)
index 0000000..0c6144b
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./test_feat > _test_feat.out
+compare_table feat _test_feat.out $tests/unit/test_feat/_test_feat.res
+rm -f _test_feat.out
diff --git a/test/unit/test_feat/test_feat.c b/test/unit/test_feat/test_feat.c
new file mode 100644 (file)
index 0000000..e937c6d
--- /dev/null
@@ -0,0 +1,108 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#include "feat.h"
+#include "ckd_alloc.h"
+
+const mfcc_t data[6][13] = {
+       { FLOAT2MFCC(15.114), FLOAT2MFCC(-1.424), FLOAT2MFCC(-0.953),
+         FLOAT2MFCC(0.186), FLOAT2MFCC(-0.656), FLOAT2MFCC(-0.226),
+         FLOAT2MFCC(-0.105), FLOAT2MFCC(-0.412), FLOAT2MFCC(-0.024),
+         FLOAT2MFCC(-0.091), FLOAT2MFCC(-0.124), FLOAT2MFCC(-0.158), FLOAT2MFCC(-0.197)},
+       { FLOAT2MFCC(14.729), FLOAT2MFCC(-1.313), FLOAT2MFCC(-0.892),
+         FLOAT2MFCC(0.140), FLOAT2MFCC(-0.676), FLOAT2MFCC(-0.089),
+         FLOAT2MFCC(-0.313), FLOAT2MFCC(-0.422), FLOAT2MFCC(-0.058),
+         FLOAT2MFCC(-0.101), FLOAT2MFCC(-0.100), FLOAT2MFCC(-0.128), FLOAT2MFCC(-0.123)},
+       { FLOAT2MFCC(14.502), FLOAT2MFCC(-1.351), FLOAT2MFCC(-1.028),
+         FLOAT2MFCC(-0.189), FLOAT2MFCC(-0.718), FLOAT2MFCC(-0.139),
+         FLOAT2MFCC(-0.121), FLOAT2MFCC(-0.365), FLOAT2MFCC(-0.139),
+         FLOAT2MFCC(-0.154), FLOAT2MFCC(0.041), FLOAT2MFCC(0.009), FLOAT2MFCC(-0.073)},
+       { FLOAT2MFCC(14.557), FLOAT2MFCC(-1.676), FLOAT2MFCC(-0.864),
+         FLOAT2MFCC(0.118), FLOAT2MFCC(-0.445), FLOAT2MFCC(-0.168),
+         FLOAT2MFCC(-0.069), FLOAT2MFCC(-0.503), FLOAT2MFCC(-0.013),
+         FLOAT2MFCC(0.007), FLOAT2MFCC(-0.056), FLOAT2MFCC(-0.075), FLOAT2MFCC(-0.237)},
+       { FLOAT2MFCC(14.665), FLOAT2MFCC(-1.498), FLOAT2MFCC(-0.582),
+         FLOAT2MFCC(0.209), FLOAT2MFCC(-0.487), FLOAT2MFCC(-0.247),
+         FLOAT2MFCC(-0.142), FLOAT2MFCC(-0.439), FLOAT2MFCC(0.059),
+         FLOAT2MFCC(-0.058), FLOAT2MFCC(-0.265), FLOAT2MFCC(-0.109), FLOAT2MFCC(-0.196)},
+       { FLOAT2MFCC(15.025), FLOAT2MFCC(-1.199), FLOAT2MFCC(-0.607),
+         FLOAT2MFCC(0.235), FLOAT2MFCC(-0.499), FLOAT2MFCC(-0.080),
+         FLOAT2MFCC(-0.062), FLOAT2MFCC(-0.554), FLOAT2MFCC(-0.209),
+         FLOAT2MFCC(-0.124), FLOAT2MFCC(-0.445), FLOAT2MFCC(-0.352), FLOAT2MFCC(-0.400)},
+};
+
+int
+main(int argc, char *argv[])
+{
+       feat_t *fcb;
+       mfcc_t **in_feats, ***out_feats;
+       int32 i, j, ncep;
+
+       /* Test "raw" features without concatenation */
+       fcb = feat_init("13", CMN_NONE, 0, AGC_NONE, 1, 13);
+
+       in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t));
+       out_feats = (mfcc_t ***)ckd_calloc_3d(6, 1, 13, sizeof(mfcc_t));
+       ncep = 6;
+       feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats);
+
+       for (i = 0; i < 6; ++i) {
+               for (j = 0; j < 13; ++j) {
+                       printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j]));
+               }
+               printf("\n");
+       }
+       feat_free(fcb);
+       ckd_free(in_feats);
+       ckd_free_3d(out_feats);
+
+       /* Test "raw" features with concatenation */
+       fcb = feat_init("13:1", CMN_NONE, 0, AGC_NONE, 1, 13);
+
+       in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t));
+       out_feats = (mfcc_t ***)ckd_calloc_3d(8, 1, 39, sizeof(mfcc_t));
+       ncep = 6;
+       feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats);
+
+       for (i = 0; i < 6; ++i) {
+               for (j = 0; j < 39; ++j) {
+                       printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j]));
+               }
+               printf("\n");
+       }
+       feat_free(fcb);
+
+       /* Test 1s_c_d_dd features */
+       fcb = feat_init("1s_c_d_dd", CMN_NONE, 0, AGC_NONE, 1, 13);
+       ncep = 6;
+       feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats);
+
+       for (i = 0; i < 6; ++i) {
+               for (j = 0; j < 39; ++j) {
+                       printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j]));
+               }
+               printf("\n");
+       }
+
+       /* Verify that the deltas are correct. */
+       for (i = 2; i < 4; ++i) {
+               for (j = 0; j < 13; ++j) {
+                       if (fabs(MFCC2FLOAT(out_feats[i][0][13+j] - 
+                                           (out_feats[i+2][0][j]
+                                            - out_feats[i-2][0][j]))) > 0.01) {
+                               printf("Delta mismatch in [%d][%d]\n", i, j);
+                               return 1;
+                       }
+               }
+       }
+       feat_free(fcb);
+       ckd_free(in_feats);
+       ckd_free_3d(out_feats);
+
+       return 0;
+}
diff --git a/test/unit/test_feat/test_feat_fe.c b/test/unit/test_feat/test_feat_fe.c
new file mode 100644 (file)
index 0000000..92966bd
--- /dev/null
@@ -0,0 +1,152 @@
+#include <stdio.h>
+#include <errno.h>
+
+#include "fe.h"
+#include "feat.h"
+#include "cmd_ln.h"
+#include "ckd_alloc.h"
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       static const arg_t fe_args[] = {
+               waveform_to_cepstral_command_line_macro(),
+               { NULL, 0, NULL, NULL }
+       };
+       FILE *raw;
+       cmd_ln_t *config;
+       fe_t *fe;
+       feat_t *fcb;
+       int16 buf[2048];
+       mfcc_t **cepbuf, **cptr;
+       mfcc_t ***featbuf1, ***featbuf2, ***fptr;
+       size_t nsamp;
+       int32 total_frames, ncep, nfr, i;
+
+       if ((raw = fopen(TESTDATADIR "/chan3.raw", "rb")) == NULL) {
+               perror(TESTDATADIR "/chan3.raw");
+               return 1;
+       }
+
+       config = cmd_ln_parse_r(NULL, fe_args, argc, argv, FALSE);
+       fe = fe_init_auto_r(config);
+       fcb = feat_init("1s_c_d_dd", CMN_NONE, FALSE, AGC_NONE,
+                       TRUE, fe_get_output_size(fe));
+
+       /* Determine how much data and how many MFCC frames we need. */
+       fseek(raw, 0, SEEK_END);
+       nsamp = ftell(raw) / sizeof(int16);
+       fe_process_frames(fe, NULL, &nsamp, NULL, &total_frames);
+       printf("%d samples, %d + 1 frames\n", nsamp, total_frames);
+       total_frames++; /* For the possible fe_end_utt() frame */
+       cepbuf = ckd_calloc_2d(total_frames + 1, fe_get_output_size(fe), sizeof(**cepbuf));
+       fseek(raw, 0, SEEK_SET);
+
+       /* Pay close attention, kids.  This is how you use fe_process_frames(). */
+       fe_start_utt(fe);
+       cptr = cepbuf;
+       nfr = total_frames;
+       while ((nsamp = fread(buf, sizeof(int16), 2048, raw)) > 0) {
+               int16 const *bptr = buf;
+               while (nsamp) {
+                       int32 ncep = nfr;
+                       fe_process_frames(fe, &bptr, &nsamp, cptr, &ncep);
+                       cptr += ncep;
+                       nfr -= ncep;
+               }
+       }
+       fe_end_utt(fe, *cptr, &nfr);
+
+       /* Now test some feature extraction problems. */
+       featbuf1 = feat_array_alloc(fcb, total_frames);
+       featbuf2 = feat_array_alloc(fcb, total_frames);
+
+       /* Whole utterance: canonical, assumed to be correct. */
+       ncep = total_frames;
+       TEST_EQUAL(total_frames,
+                  feat_s2mfc2feat_live(fcb, cepbuf,
+                                       &ncep, TRUE, TRUE,
+                                       featbuf1));
+       TEST_EQUAL(ncep, total_frames);
+
+       /* Process one frame at a time. */
+       cptr = cepbuf;
+       fptr = featbuf2;
+       ncep = 1;
+       nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, TRUE, FALSE, fptr);
+       TEST_EQUAL(nfr, 0); /* Not possible to make any frames yet. */
+       TEST_EQUAL(ncep, 1); /* But we shold have consumed one. */
+       cptr += ncep;
+       for (i = 1; i < total_frames - 1; ++i) {
+               ncep = 1;
+               nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, FALSE, FALSE, fptr);
+               cptr += ncep;
+               fptr += nfr;
+       }
+       nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, FALSE, TRUE, fptr);
+       TEST_EQUAL(nfr, 4); /* This should have dumped the trailing window. */
+       TEST_EQUAL(ncep, 1); /* And only consumed one frame of MFCCs. */
+       cptr += ncep;
+       fptr += nfr;
+       /* Verify that we actually got the correct number of frames. */
+       TEST_EQUAL(cptr - cepbuf, total_frames);
+       TEST_EQUAL(fptr - featbuf2, total_frames);
+
+       /* Now verify that the results are equal. */
+       for (i = 0; i < total_frames; ++i) {
+               int32 j;
+               printf("%-4d ", i);
+               for (j = 0; j < feat_dimension(fcb); ++j) {
+                       TEST_EQUAL_FLOAT(featbuf1[i][0][j], featbuf2[i][0][j]);
+               }
+               if (i % 10 == 9)
+                       printf("\n");
+       }
+       printf("\n");
+
+       /* Process large chunks of frames at once, so as to exceed the
+        * internal ringbuffer size in feat_s2mfc2feat_live(). */
+       cptr = cepbuf;
+       fptr = featbuf2;
+       ncep = total_frames;
+       nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, TRUE, FALSE, fptr);
+       TEST_ASSERT(ncep != nfr);
+       cptr += ncep;
+       fptr += nfr;
+       ncep = total_frames - ncep;
+       while (ncep) {
+               int32 tmp_ncep;
+               tmp_ncep = ncep;
+               nfr = feat_s2mfc2feat_live(fcb, cptr, &tmp_ncep, FALSE, FALSE, fptr);
+               cptr += tmp_ncep;
+               fptr += nfr;
+               ncep -= tmp_ncep;
+       }
+       nfr = feat_s2mfc2feat_live(fcb, cptr, &ncep, FALSE, TRUE, fptr);
+       cptr += ncep;
+       fptr += nfr;
+       TEST_EQUAL(cptr - cepbuf, total_frames);
+       TEST_EQUAL(fptr - featbuf2, total_frames);
+
+       /* Now verify that the results are equal. */
+       for (i = 0; i < total_frames; ++i) {
+               int32 j;
+               printf("%-4d ", i);
+               for (j = 0; j < feat_dimension(fcb); ++j)
+                       TEST_EQUAL_FLOAT(featbuf1[i][0][j], featbuf2[i][0][j]);
+               if (i % 10 == 9)
+                       printf("\n");
+       }
+       printf("\n");
+
+       fclose(raw);
+       fe_free(fe);
+       feat_array_free(featbuf1);
+       feat_array_free(featbuf2);
+       feat_free(fcb);
+       ckd_free_2d(cepbuf);
+
+       return 0;
+}
diff --git a/test/unit/test_feat/test_feat_live.c b/test/unit/test_feat/test_feat_live.c
new file mode 100644 (file)
index 0000000..ac1c2d6
--- /dev/null
@@ -0,0 +1,118 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#include "feat.h"
+#include "ckd_alloc.h"
+#include "test_macros.h"
+
+const mfcc_t data[6][13] = {
+       { FLOAT2MFCC(15.114), FLOAT2MFCC(-1.424), FLOAT2MFCC(-0.953),
+         FLOAT2MFCC(0.186), FLOAT2MFCC(-0.656), FLOAT2MFCC(-0.226),
+         FLOAT2MFCC(-0.105), FLOAT2MFCC(-0.412), FLOAT2MFCC(-0.024),
+         FLOAT2MFCC(-0.091), FLOAT2MFCC(-0.124), FLOAT2MFCC(-0.158), FLOAT2MFCC(-0.197)},
+       { FLOAT2MFCC(14.729), FLOAT2MFCC(-1.313), FLOAT2MFCC(-0.892),
+         FLOAT2MFCC(0.140), FLOAT2MFCC(-0.676), FLOAT2MFCC(-0.089),
+         FLOAT2MFCC(-0.313), FLOAT2MFCC(-0.422), FLOAT2MFCC(-0.058),
+         FLOAT2MFCC(-0.101), FLOAT2MFCC(-0.100), FLOAT2MFCC(-0.128), FLOAT2MFCC(-0.123)},
+       { FLOAT2MFCC(14.502), FLOAT2MFCC(-1.351), FLOAT2MFCC(-1.028),
+         FLOAT2MFCC(-0.189), FLOAT2MFCC(-0.718), FLOAT2MFCC(-0.139),
+         FLOAT2MFCC(-0.121), FLOAT2MFCC(-0.365), FLOAT2MFCC(-0.139),
+         FLOAT2MFCC(-0.154), FLOAT2MFCC(0.041), FLOAT2MFCC(0.009), FLOAT2MFCC(-0.073)},
+       { FLOAT2MFCC(14.557), FLOAT2MFCC(-1.676), FLOAT2MFCC(-0.864),
+         FLOAT2MFCC(0.118), FLOAT2MFCC(-0.445), FLOAT2MFCC(-0.168),
+         FLOAT2MFCC(-0.069), FLOAT2MFCC(-0.503), FLOAT2MFCC(-0.013),
+         FLOAT2MFCC(0.007), FLOAT2MFCC(-0.056), FLOAT2MFCC(-0.075), FLOAT2MFCC(-0.237)},
+       { FLOAT2MFCC(14.665), FLOAT2MFCC(-1.498), FLOAT2MFCC(-0.582),
+         FLOAT2MFCC(0.209), FLOAT2MFCC(-0.487), FLOAT2MFCC(-0.247),
+         FLOAT2MFCC(-0.142), FLOAT2MFCC(-0.439), FLOAT2MFCC(0.059),
+         FLOAT2MFCC(-0.058), FLOAT2MFCC(-0.265), FLOAT2MFCC(-0.109), FLOAT2MFCC(-0.196)},
+       { FLOAT2MFCC(15.025), FLOAT2MFCC(-1.199), FLOAT2MFCC(-0.607),
+         FLOAT2MFCC(0.235), FLOAT2MFCC(-0.499), FLOAT2MFCC(-0.080),
+         FLOAT2MFCC(-0.062), FLOAT2MFCC(-0.554), FLOAT2MFCC(-0.209),
+         FLOAT2MFCC(-0.124), FLOAT2MFCC(-0.445), FLOAT2MFCC(-0.352), FLOAT2MFCC(-0.400)},
+};
+
+int
+main(int argc, char *argv[])
+{
+       feat_t *fcb;
+       mfcc_t **in_feats, ***out_feats, ***out_feats2, ***optr;
+       int32 i, j, ncep, nfr, nfr1, nfr2;
+
+       in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t));
+       out_feats = (mfcc_t ***)ckd_calloc_3d(8, 1, 39, sizeof(mfcc_t));
+       /* Test 1s_c_d_dd features */
+       fcb = feat_init("1s_c_d_dd", CMN_NONE, 0, AGC_NONE, 1, 13);
+       ncep = 6;
+       nfr1 = feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats);
+       printf("Processed %d input %d output frames\n", ncep, nfr1);
+       for (i = 0; i < nfr1; ++i) {
+               printf("%d: ", i);
+               for (j = 0; j < 39; ++j) {
+                       printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j]));
+               }
+               printf("\n");
+       }
+       feat_free(fcb);
+
+       /* Test in "live" mode. */
+       fcb = feat_init("1s_c_d_dd", CMN_NONE, 0, AGC_NONE, 1, 13);
+       optr = out_feats2 = (mfcc_t ***)ckd_calloc_3d(8, 1, 39, sizeof(mfcc_t));
+       nfr2 = 0;
+       ncep = 2;
+       nfr = feat_s2mfc2feat_live(fcb, in_feats, &ncep, TRUE, FALSE, optr);
+       printf("Processed %d input %d output frames\n", ncep, nfr);
+       nfr2 += nfr;
+       for (i = 0; i < nfr; ++i) {
+               printf("%d: ", i);
+               for (j = 0; j < 39; ++j) {
+                       printf("%.3f ", MFCC2FLOAT(optr[i][0][j]));
+               }
+               printf("\n");
+       }
+       optr += nfr;
+
+       ncep = 2;
+       nfr = feat_s2mfc2feat_live(fcb, in_feats + 2, &ncep, FALSE, FALSE, optr);
+       nfr2 += nfr;
+       printf("Processed %d input %d output frames\n", ncep, nfr);
+       for (i = 0; i < nfr; ++i) {
+               printf("%d: ", i);
+               for (j = 0; j < 39; ++j) {
+                       printf("%.3f ", MFCC2FLOAT(optr[i][0][j]));
+               }
+               printf("\n");
+       }
+       optr += nfr;
+
+       ncep = 2;
+       nfr = feat_s2mfc2feat_live(fcb, in_feats + 4, &ncep, FALSE, TRUE, optr);
+       nfr2 += nfr;
+       printf("Processed %d input %d output frames\n", ncep, nfr);
+       for (i = 0; i < nfr; ++i) {
+               printf("%d: ", i);
+               for (j = 0; j < 39; ++j) {
+                       printf("%.3f ", MFCC2FLOAT(optr[i][0][j]));
+               }
+               printf("\n");
+       }
+       optr += nfr;
+       feat_free(fcb);
+
+       TEST_EQUAL(nfr1, nfr2);
+       for (i = 0; i < nfr1; ++i) {
+               for (j = 0; j < 39; ++j) {
+                       TEST_EQUAL(out_feats[i][0][j], out_feats2[i][0][j]);
+               }
+       }
+       ckd_free_3d(out_feats2);
+       ckd_free_3d(out_feats);
+       ckd_free(in_feats);
+
+       return 0;
+}
diff --git a/test/unit/test_feat/test_macros.h b/test/unit/test_feat/test_macros.h
new file mode 100644 (file)
index 0000000..12cd03f
--- /dev/null
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define EPSILON 0.01
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_feat/test_subvq.c b/test/unit/test_feat/test_subvq.c
new file mode 100644 (file)
index 0000000..2f0fb34
--- /dev/null
@@ -0,0 +1,91 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+#include "feat.h"
+#include "test_macros.h"
+#include "ckd_alloc.h"
+
+const mfcc_t data[6][13] = {
+       { FLOAT2MFCC(15.114), FLOAT2MFCC(-1.424), FLOAT2MFCC(-0.953),
+         FLOAT2MFCC(0.186), FLOAT2MFCC(-0.656), FLOAT2MFCC(-0.226),
+         FLOAT2MFCC(-0.105), FLOAT2MFCC(-0.412), FLOAT2MFCC(-0.024),
+         FLOAT2MFCC(-0.091), FLOAT2MFCC(-0.124), FLOAT2MFCC(-0.158), FLOAT2MFCC(-0.197)},
+       { FLOAT2MFCC(14.729), FLOAT2MFCC(-1.313), FLOAT2MFCC(-0.892),
+         FLOAT2MFCC(0.140), FLOAT2MFCC(-0.676), FLOAT2MFCC(-0.089),
+         FLOAT2MFCC(-0.313), FLOAT2MFCC(-0.422), FLOAT2MFCC(-0.058),
+         FLOAT2MFCC(-0.101), FLOAT2MFCC(-0.100), FLOAT2MFCC(-0.128), FLOAT2MFCC(-0.123)},
+       { FLOAT2MFCC(14.502), FLOAT2MFCC(-1.351), FLOAT2MFCC(-1.028),
+         FLOAT2MFCC(-0.189), FLOAT2MFCC(-0.718), FLOAT2MFCC(-0.139),
+         FLOAT2MFCC(-0.121), FLOAT2MFCC(-0.365), FLOAT2MFCC(-0.139),
+         FLOAT2MFCC(-0.154), FLOAT2MFCC(0.041), FLOAT2MFCC(0.009), FLOAT2MFCC(-0.073)},
+       { FLOAT2MFCC(14.557), FLOAT2MFCC(-1.676), FLOAT2MFCC(-0.864),
+         FLOAT2MFCC(0.118), FLOAT2MFCC(-0.445), FLOAT2MFCC(-0.168),
+         FLOAT2MFCC(-0.069), FLOAT2MFCC(-0.503), FLOAT2MFCC(-0.013),
+         FLOAT2MFCC(0.007), FLOAT2MFCC(-0.056), FLOAT2MFCC(-0.075), FLOAT2MFCC(-0.237)},
+       { FLOAT2MFCC(14.665), FLOAT2MFCC(-1.498), FLOAT2MFCC(-0.582),
+         FLOAT2MFCC(0.209), FLOAT2MFCC(-0.487), FLOAT2MFCC(-0.247),
+         FLOAT2MFCC(-0.142), FLOAT2MFCC(-0.439), FLOAT2MFCC(0.059),
+         FLOAT2MFCC(-0.058), FLOAT2MFCC(-0.265), FLOAT2MFCC(-0.109), FLOAT2MFCC(-0.196)},
+       { FLOAT2MFCC(15.025), FLOAT2MFCC(-1.199), FLOAT2MFCC(-0.607),
+         FLOAT2MFCC(0.235), FLOAT2MFCC(-0.499), FLOAT2MFCC(-0.080),
+         FLOAT2MFCC(-0.062), FLOAT2MFCC(-0.554), FLOAT2MFCC(-0.209),
+         FLOAT2MFCC(-0.124), FLOAT2MFCC(-0.445), FLOAT2MFCC(-0.352), FLOAT2MFCC(-0.400)},
+};
+
+int
+main(int argc, char *argv[])
+{
+       static char const svspec[] = "1-12/14-25/0,13,26/27-38";
+       int32 **subvecs, i, j, k, ncep;
+       mfcc_t **in_feats, ***out_feats;
+       feat_t *fcb;
+
+       /* Test parsing of a subvector spec. */
+       subvecs = parse_subvecs(svspec);
+       TEST_ASSERT(subvecs);
+       for (i = 0; i < 12; ++i) {
+               TEST_EQUAL(subvecs[0][i], i+1);
+       }
+       for (i = 0; i < 12; ++i) {
+               TEST_EQUAL(subvecs[1][i], i+14);
+       }
+       TEST_EQUAL(subvecs[2][0], 0);
+       TEST_EQUAL(subvecs[2][1], 13);
+       TEST_EQUAL(subvecs[2][2], 26);
+       for (i = 0; i < 12; ++i) {
+               TEST_EQUAL(subvecs[3][i], i+27);
+       }
+
+       /* Create a 1s_c_d_dd feature stream and split it into subvectors. */
+       fcb = feat_init("1s_c_d_dd", CMN_NONE, 0, AGC_NONE, 1, 13);
+       TEST_ASSERT(fcb);
+       feat_set_subvecs(fcb, subvecs);
+
+       in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t));
+       out_feats = feat_array_alloc(fcb, 6);
+       TEST_ASSERT(out_feats);
+
+       ncep = 6;
+       feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats);
+
+       for (i = 0; i < 6; ++i) {
+               for (j = 0; j < feat_dimension1(fcb); ++j) {
+                       for (k = 0; k < feat_dimension2(fcb, j); ++k) {
+                               printf("%.3f ", MFCC2FLOAT(out_feats[i][j][k]));
+                       }
+                       printf("\n");
+               }
+               printf("\n");
+       }
+
+       feat_array_free(out_feats);
+       ckd_free(in_feats);
+       feat_free(fcb);
+
+       return 0;
+}
diff --git a/test/unit/test_fsg/Makefile.am b/test/unit/test_fsg/Makefile.am
new file mode 100644 (file)
index 0000000..b499d3f
--- /dev/null
@@ -0,0 +1,18 @@
+check_PROGRAMS = \
+       test_fsg_read \
+       test_fsg_jsgf \
+       test_fsg_write_fsm
+
+TESTS = $(check_PROGRAMS)
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DLMDIR=\"${srcdir}\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+
+noinst_HEADERS = test_macros.h
+
+EXTRA_DIST = goforward.fsg polite.gram
diff --git a/test/unit/test_fsg/Makefile.in b/test/unit/test_fsg/Makefile.in
new file mode 100644 (file)
index 0000000..d0d8de1
--- /dev/null
@@ -0,0 +1,573 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_fsg_read$(EXEEXT) test_fsg_jsgf$(EXEEXT) \
+       test_fsg_write_fsm$(EXEEXT)
+subdir = test/unit/test_fsg
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_fsg_jsgf_SOURCES = test_fsg_jsgf.c
+test_fsg_jsgf_OBJECTS = test_fsg_jsgf.$(OBJEXT)
+test_fsg_jsgf_LDADD = $(LDADD)
+test_fsg_jsgf_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_fsg_read_SOURCES = test_fsg_read.c
+test_fsg_read_OBJECTS = test_fsg_read.$(OBJEXT)
+test_fsg_read_LDADD = $(LDADD)
+test_fsg_read_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_fsg_write_fsm_SOURCES = test_fsg_write_fsm.c
+test_fsg_write_fsm_OBJECTS = test_fsg_write_fsm.$(OBJEXT)
+test_fsg_write_fsm_LDADD = $(LDADD)
+test_fsg_write_fsm_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_fsg_jsgf.c test_fsg_read.c test_fsg_write_fsm.c
+DIST_SOURCES = test_fsg_jsgf.c test_fsg_read.c test_fsg_write_fsm.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = $(check_PROGRAMS)
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DLMDIR=\"${srcdir}\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+noinst_HEADERS = test_macros.h
+EXTRA_DIST = goforward.fsg polite.gram
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_fsg/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_fsg/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_fsg_jsgf$(EXEEXT): $(test_fsg_jsgf_OBJECTS) $(test_fsg_jsgf_DEPENDENCIES) 
+       @rm -f test_fsg_jsgf$(EXEEXT)
+       $(LINK) $(test_fsg_jsgf_OBJECTS) $(test_fsg_jsgf_LDADD) $(LIBS)
+test_fsg_read$(EXEEXT): $(test_fsg_read_OBJECTS) $(test_fsg_read_DEPENDENCIES) 
+       @rm -f test_fsg_read$(EXEEXT)
+       $(LINK) $(test_fsg_read_OBJECTS) $(test_fsg_read_LDADD) $(LIBS)
+test_fsg_write_fsm$(EXEEXT): $(test_fsg_write_fsm_OBJECTS) $(test_fsg_write_fsm_DEPENDENCIES) 
+       @rm -f test_fsg_write_fsm$(EXEEXT)
+       $(LINK) $(test_fsg_write_fsm_OBJECTS) $(test_fsg_write_fsm_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fsg_jsgf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fsg_read.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fsg_write_fsm.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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:
+
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_fsg/goforward.fsg b/test/unit/test_fsg/goforward.fsg
new file mode 100644 (file)
index 0000000..89b6f11
--- /dev/null
@@ -0,0 +1,24 @@
+FSG_BEGIN turtle
+NUM_STATES 7
+START_STATE 0
+FINAL_STATE 6
+
+# Transitions
+TRANSITION 0 1 1.0 GO
+TRANSITION 1 2 0.5 FORWARD
+TRANSITION 1 3 0.5 BACKWARD
+TRANSITION 2 4 1.0
+TRANSITION 3 4 1.0
+TRANSITION 4 5 0.1 ONE
+TRANSITION 4 5 0.1 TWO
+TRANSITION 4 5 0.1 THREE
+TRANSITION 4 5 0.1 FOUR
+TRANSITION 4 5 0.1 FIVE
+TRANSITION 4 5 0.1 SIX
+TRANSITION 4 5 0.1 SEVEN
+TRANSITION 4 5 0.1 EIGHT
+TRANSITION 4 5 0.1 NINE
+TRANSITION 4 5 0.1 TEN
+TRANSITION 5 6 0.1 METER
+TRANSITION 5 6 0.9 METERS
+FSG_END
diff --git a/test/unit/test_fsg/polite.gram b/test/unit/test_fsg/polite.gram
new file mode 100644 (file)
index 0000000..49805f0
--- /dev/null
@@ -0,0 +1,10 @@
+#JSGF V1.0;
+
+/**
+ * JSGF Grammar for Hello World example
+ */
+
+grammar polite;
+
+public <startPolite> = [please | kindly | could you | oh mighty computer];
+public <endPolite> = [please | thanks | thank you];
diff --git a/test/unit/test_fsg/test_fsg_jsgf.c b/test/unit/test_fsg/test_fsg_jsgf.c
new file mode 100644 (file)
index 0000000..3585bd5
--- /dev/null
@@ -0,0 +1,33 @@
+#include <jsgf.h>
+#include <fsg_model.h>
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       fsg_model_t *fsg;
+       jsgf_t *jsgf;
+       jsgf_rule_t *rule;
+
+       /* Initialize a logmath object to pass to fsg_model_read */
+       lmath = logmath_init(1.0001, 0, 0);
+       jsgf = jsgf_parse_file(LMDIR "/polite.gram", NULL);
+       TEST_ASSERT(jsgf);
+       rule = jsgf_get_rule(jsgf, "<polite.startPolite>");
+       TEST_ASSERT(rule);
+       fsg = jsgf_build_fsg(jsgf, rule, lmath, 7.5);
+       TEST_ASSERT(fsg);
+
+       TEST_ASSERT(fsg_model_add_silence(fsg, "<sil>", -1, 0.3));
+       TEST_ASSERT(fsg_model_add_silence(fsg, "++NOISE++", -1, 0.3));
+       TEST_ASSERT(fsg_model_add_alt(fsg, "please", "please(2)"));
+
+       jsgf_grammar_free(jsgf);
+       fsg_model_write(fsg, stdout);
+       fsg_model_free(fsg);
+       logmath_free(lmath);
+
+       return 0;
+}
diff --git a/test/unit/test_fsg/test_fsg_read.c b/test/unit/test_fsg/test_fsg_read.c
new file mode 100644 (file)
index 0000000..60fd635
--- /dev/null
@@ -0,0 +1,56 @@
+#include <fsg_model.h>
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       fsg_model_t *fsg;
+       fsg_arciter_t *itor;
+
+       /* Initialize a logmath object to pass to fsg_model_read */
+       lmath = logmath_init(1.0001, 0, 0);
+       /* Read a FSG. */
+       fsg = fsg_model_readfile(LMDIR "/goforward.fsg", lmath, 7.5);
+       TEST_ASSERT(fsg);
+
+       TEST_ASSERT(fsg_model_add_silence(fsg, "<sil>", -1, 0.3));
+       TEST_ASSERT(fsg_model_add_silence(fsg, "++NOISE++", -1, 0.3));
+       TEST_ASSERT(fsg_model_add_alt(fsg, "FORWARD", "FORWARD(2)"));
+
+       fsg_model_write(fsg, stdout);
+
+       /* Test reference counting. */
+       TEST_ASSERT(fsg = fsg_model_retain(fsg));
+       TEST_EQUAL(1, fsg_model_free(fsg));
+       fsg_model_write(fsg, stdout);
+
+       /* Test iteration. */
+       for (itor = fsg_model_arcs(fsg, 3);
+            itor; itor = fsg_arciter_next(itor)) {
+               fsg_link_t *link = fsg_arciter_get(itor);
+
+               TEST_EQUAL(fsg_link_from_state(link), 3);
+               if (fsg_link_wid(link) == -1) {
+                       TEST_EQUAL(fsg_link_to_state(link), 4);
+                       TEST_EQUAL(fsg_link_logs2prob(link), 0);
+               }
+               else if (fsg_link_wid(link) == fsg_model_word_id(fsg, "++NOISE++")
+                        || fsg_link_wid(link) == fsg_model_word_id(fsg, "<sil>")) {
+                       TEST_EQUAL(fsg_link_to_state(link), 3);
+                       TEST_EQUAL_LOG(fsg_link_logs2prob(link), -90300);
+               }
+               printf("%d => %d %s %d\n",
+                      fsg_link_from_state(link),
+                      fsg_link_to_state(link),
+                      fsg_link_wid(link) == -1
+                      ? "&epsilon;" : fsg_model_word_str(fsg, fsg_link_wid(link)),
+                      fsg_link_logs2prob(link));
+       }
+
+       TEST_EQUAL(0, fsg_model_free(fsg));
+       logmath_free(lmath);
+
+       return 0;
+}
diff --git a/test/unit/test_fsg/test_fsg_write_fsm.c b/test/unit/test_fsg/test_fsg_write_fsm.c
new file mode 100644 (file)
index 0000000..774ed9e
--- /dev/null
@@ -0,0 +1,34 @@
+#include <jsgf.h>
+#include <fsg_model.h>
+
+#include "test_macros.h"
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       fsg_model_t *fsg;
+       jsgf_t *jsgf;
+       jsgf_rule_t *rule;
+
+       /* Initialize a logmath object to pass to fsg_model_read */
+       lmath = logmath_init(1.0001, 0, 0);
+       jsgf = jsgf_parse_file(LMDIR "/polite.gram", NULL);
+       TEST_ASSERT(jsgf);
+       rule = jsgf_get_rule(jsgf, "<polite.startPolite>");
+       TEST_ASSERT(rule);
+       fsg = jsgf_build_fsg(jsgf, rule, lmath, 7.5);
+       TEST_ASSERT(fsg);
+
+       TEST_ASSERT(fsg_model_add_silence(fsg, "<sil>", -1, 0.3));
+       TEST_ASSERT(fsg_model_add_silence(fsg, "++NOISE++", -1, 0.3));
+       TEST_ASSERT(fsg_model_add_alt(fsg, "please", "please(2)"));
+
+       jsgf_grammar_free(jsgf);
+       fsg_model_write_fsm(fsg, stdout);
+       fsg_model_write_symtab(fsg, stdout);
+       fsg_model_free(fsg);
+       logmath_free(lmath);
+
+       return 0;
+}
diff --git a/test/unit/test_fsg/test_macros.h b/test/unit/test_fsg/test_macros.h
new file mode 100644 (file)
index 0000000..675d2e1
--- /dev/null
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_hash/Makefile.am b/test/unit/test_hash/Makefile.am
new file mode 100644 (file)
index 0000000..085fe68
--- /dev/null
@@ -0,0 +1,31 @@
+check_PROGRAMS = displayhash deletehash test_hash_iter
+
+noinst_HEADERS = test_macros.h
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+
+TESTS = test_hash_iter                         \
+       _hash_delete1.test                      \
+       _hash_delete2.test                      \
+       _hash_delete3.test                      \
+       _hash_delete4.test                      \
+       _hash_delete5.test
+
+EXTRA_DIST = display.res                       \
+       _hash_delete1.res                       \
+       _hash_delete1.test                      \
+       _hash_delete2.res                       \
+       _hash_delete2.test                      \
+       _hash_delete3.res                       \
+       _hash_delete3.test                      \
+       _hash_delete4.res                       \
+       _hash_delete4.test                      \
+       _hash_delete5.res                       \
+       _hash_delete5.test
+
+CLEANFILES = *.out
\ No newline at end of file
diff --git a/test/unit/test_hash/Makefile.in b/test/unit/test_hash/Makefile.in
new file mode 100644 (file)
index 0000000..cb5f99d
--- /dev/null
@@ -0,0 +1,586 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = displayhash$(EXEEXT) deletehash$(EXEEXT) \
+       test_hash_iter$(EXEEXT)
+TESTS = test_hash_iter$(EXEEXT) _hash_delete1.test _hash_delete2.test \
+       _hash_delete3.test _hash_delete4.test _hash_delete5.test
+subdir = test/unit/test_hash
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+deletehash_SOURCES = deletehash.c
+deletehash_OBJECTS = deletehash.$(OBJEXT)
+deletehash_LDADD = $(LDADD)
+deletehash_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+displayhash_SOURCES = displayhash.c
+displayhash_OBJECTS = displayhash.$(OBJEXT)
+displayhash_LDADD = $(LDADD)
+displayhash_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_hash_iter_SOURCES = test_hash_iter.c
+test_hash_iter_OBJECTS = test_hash_iter.$(OBJEXT)
+test_hash_iter_LDADD = $(LDADD)
+test_hash_iter_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = deletehash.c displayhash.c test_hash_iter.c
+DIST_SOURCES = deletehash.c displayhash.c test_hash_iter.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_HEADERS = test_macros.h
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+EXTRA_DIST = display.res                       \
+       _hash_delete1.res                       \
+       _hash_delete1.test                      \
+       _hash_delete2.res                       \
+       _hash_delete2.test                      \
+       _hash_delete3.res                       \
+       _hash_delete3.test                      \
+       _hash_delete4.res                       \
+       _hash_delete4.test                      \
+       _hash_delete5.res                       \
+       _hash_delete5.test
+
+CLEANFILES = *.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_hash/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_hash/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+deletehash$(EXEEXT): $(deletehash_OBJECTS) $(deletehash_DEPENDENCIES) 
+       @rm -f deletehash$(EXEEXT)
+       $(LINK) $(deletehash_OBJECTS) $(deletehash_LDADD) $(LIBS)
+displayhash$(EXEEXT): $(displayhash_OBJECTS) $(displayhash_DEPENDENCIES) 
+       @rm -f displayhash$(EXEEXT)
+       $(LINK) $(displayhash_OBJECTS) $(displayhash_LDADD) $(LIBS)
+test_hash_iter$(EXEEXT): $(test_hash_iter_OBJECTS) $(test_hash_iter_DEPENDENCIES) 
+       @rm -f test_hash_iter$(EXEEXT)
+       $(LINK) $(test_hash_iter_OBJECTS) $(test_hash_iter_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deletehash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/displayhash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hash_iter.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_hash/_hash_delete1.res b/test/unit/test_hash/_hash_delete1.res
new file mode 100644 (file)
index 0000000..1fb4237
--- /dev/null
@@ -0,0 +1,6 @@
+Hash with chaining representation of the hash table
+|key:-bla|len:4|val=8|->NULL
+|key:-hmmdump|len:8|val=1|->|key:-subvq|len:6|val=7|->|key:-outlatdir|len:10|val=3|->NULL
+|key:-svq4svq|len:8|val=2|->|key:-lminmemory|len:11|val=6|->NULL
+|key:-beam|len:5|val=5|->NULL
+The total number of keys =7
diff --git a/test/unit/test_hash/_hash_delete1.test b/test/unit/test_hash/_hash_delete1.test
new file mode 100755 (executable)
index 0000000..814d396
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./deletehash -lm > _hash_delete1.out 2>&1 
+compare_table delete1 _hash_delete1.out $tests/unit/test_hash/_hash_delete1.res
+rm -f _hash_delete1.out
diff --git a/test/unit/test_hash/_hash_delete2.res b/test/unit/test_hash/_hash_delete2.res
new file mode 100644 (file)
index 0000000..5f8151a
--- /dev/null
@@ -0,0 +1,7 @@
+Hash with chaining representation of the hash table
+|key:-bla|len:4|val=8|->NULL
+|key:-hmmdump|len:8|val=1|->|key:-outlatdir|len:10|val=3|->NULL
+|key:-svq4svq|len:8|val=2|->|key:-lminmemory|len:11|val=6|->NULL
+|key:-lm|len:3|val=4|->NULL
+|key:-beam|len:5|val=5|->NULL
+The total number of keys =7
diff --git a/test/unit/test_hash/_hash_delete2.test b/test/unit/test_hash/_hash_delete2.test
new file mode 100755 (executable)
index 0000000..7b14909
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./deletehash -subvq > _hash_delete2.out 2>&1 
+compare_table delete2 _hash_delete2.out $tests/unit/test_hash/_hash_delete2.res
+rm -f _hash_delete2.out
\ No newline at end of file
diff --git a/test/unit/test_hash/_hash_delete3.res b/test/unit/test_hash/_hash_delete3.res
new file mode 100644 (file)
index 0000000..949300e
--- /dev/null
@@ -0,0 +1,7 @@
+Hash with chaining representation of the hash table
+|key:-bla|len:4|val=8|->NULL
+|key:-hmmdump|len:8|val=1|->|key:-subvq|len:6|val=7|->|key:-outlatdir|len:10|val=3|->NULL
+|key:-lminmemory|len:11|val=6|->NULL
+|key:-lm|len:3|val=4|->NULL
+|key:-beam|len:5|val=5|->NULL
+The total number of keys =7
diff --git a/test/unit/test_hash/_hash_delete3.test b/test/unit/test_hash/_hash_delete3.test
new file mode 100755 (executable)
index 0000000..7179a95
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./deletehash -svq4svq > _hash_delete3.out 2>&1 
+compare_table delete3 _hash_delete3.out $tests/unit/test_hash/_hash_delete3.res
+rm -f _hash_delete3.out
\ No newline at end of file
diff --git a/test/unit/test_hash/_hash_delete4.res b/test/unit/test_hash/_hash_delete4.res
new file mode 100644 (file)
index 0000000..5ee8c03
--- /dev/null
@@ -0,0 +1,7 @@
+Hash with chaining representation of the hash table
+|key:-bla|len:4|val=8|->NULL
+|key:-subvq|len:6|val=7|->|key:-outlatdir|len:10|val=3|->NULL
+|key:-svq4svq|len:8|val=2|->|key:-lminmemory|len:11|val=6|->NULL
+|key:-lm|len:3|val=4|->NULL
+|key:-beam|len:5|val=5|->NULL
+The total number of keys =7
diff --git a/test/unit/test_hash/_hash_delete4.test b/test/unit/test_hash/_hash_delete4.test
new file mode 100755 (executable)
index 0000000..24858f0
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./deletehash -hmmdump > _hash_delete4.out 2>&1 
+compare_table delete4 _hash_delete4.out $tests/unit/test_hash/_hash_delete4.res
+rm -f _hash_delete4.out
\ No newline at end of file
diff --git a/test/unit/test_hash/_hash_delete5.res b/test/unit/test_hash/_hash_delete5.res
new file mode 100644 (file)
index 0000000..d203c2f
--- /dev/null
@@ -0,0 +1 @@
+Failed as expected
diff --git a/test/unit/test_hash/_hash_delete5.test b/test/unit/test_hash/_hash_delete5.test
new file mode 100755 (executable)
index 0000000..d309e3d
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./deletehash -foo > _hash_delete5.out 2>&1 
+compare_table delete5 _hash_delete5.out $tests/unit/test_hash/_hash_delete5.res
+rm -f _hash_delete5.out
\ No newline at end of file
diff --git a/test/unit/test_hash/deletehash.c b/test/unit/test_hash/deletehash.c
new file mode 100644 (file)
index 0000000..4a5dee5
--- /dev/null
@@ -0,0 +1,95 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <hash_table.h>
+#include <err.h>
+
+/* Explore a more complicated case for deletion */
+int
+main(int argc, char **argv)
+{
+    hash_table_t *ht;
+    void *val;
+
+    if (argc != 2) {
+        printf("deletehash <key>\n");
+        exit(-1);
+    }
+
+    ht = hash_table_new(75, 0);
+
+    if (hash_table_enter(ht, "-hmmdump", (void *)1) != (void *)1) {
+        E_FATAL("Insertion of -hmmdump failed\n");
+    }
+
+    if (hash_table_enter(ht, "-svq4svq", (void *)2) != (void *)2) {
+        E_FATAL("Insertion of -svq4svq failed\n");
+    }
+
+    if (hash_table_enter(ht, "-outlatdir", (void *)3) != (void *)3) {
+        E_FATAL("Insertion of -svq4svq failed\n");
+    }
+
+    if (hash_table_enter(ht, "-lm", (void *)4) != (void *)4) {
+        E_FATAL("Insertion of -lm failed\n");
+    }
+
+    if (hash_table_enter(ht, "-beam", (void *)5) != (void *)5) {
+        E_FATAL("Insertion of -beam failed\n");
+    }
+
+    if (hash_table_enter(ht, "-lminmemory", (void *)6) != (void *)6) {
+        E_FATAL("Insertion of -lminmemory failed\n");
+    }
+
+    if (hash_table_enter(ht, "-subvq", (void *)7) != (void *)7) {
+        E_FATAL("Insertion of -outlatdir failed\n");
+    }
+
+    if (hash_table_enter(ht, "-bla", (void *)8) != (void *)8) {
+        E_FATAL("Insertion of -bla failed\n");
+    }
+
+    /*  hash_table_display(ht,1); */
+    if (hash_table_delete(ht, argv[1]) == NULL) {
+        E_INFOCONT("Failed as expected\n");
+        return 0;
+    }
+    else {
+        hash_table_display(ht, 1);
+    }
+
+    /* Test emptying */
+    hash_table_empty(ht);
+    if (hash_table_lookup(ht, "-beam", &val) == 0) {
+        E_FATAL("Emptying hash table failed\n");
+    }
+
+    hash_table_free(ht);
+    ht = NULL;
+    return 0;
+}
+
+
+#if 0
+E_INFO("Hash table in the command line\n");
+hash_table_display(ht, 1);
+
+E_INFO("After deletion of -lm\n");
+hash_table_delete(ht, "-lm");
+hash_table_display(ht, 1);
+
+E_INFO("After deletion of -lm\n");
+
+hash_table_delete(ht, "-lm");
+hash_table_display(ht, 1);
+
+E_INFO("After deletion of -svq4svq\n");
+hash_table_delete(ht, "-svq4svq");
+hash_table_display(ht, 1);
+
+E_INFO("After deletion of -beam\n");
+hash_table_delete(ht, "-beam");
+hash_table_display(ht, 1);
+#endif
diff --git a/test/unit/test_hash/display.res b/test/unit/test_hash/display.res
new file mode 100644 (file)
index 0000000..addb1d5
--- /dev/null
@@ -0,0 +1,6 @@
+Hash with chaining representation of the hash table
+|key:-hmmdump|len:8|val=1|->NULL
+|key:-svq4svq|len:8|val=1|->|key:-lminmemory|len:11|val=1|->NULL
+|key:-lm|len:3|val=1|->NULL
+|key:-beam|len:5|val=1|->NULL
+The total number of keys =5
diff --git a/test/unit/test_hash/displayhash.c b/test/unit/test_hash/displayhash.c
new file mode 100644 (file)
index 0000000..3d8ab04
--- /dev/null
@@ -0,0 +1,63 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <hash_table.h>
+#include <err.h>
+
+/* Insert -hmmdump, -lm, -svq4svq, -beam, -lminmemory into a hash and display it. */
+int
+main(int argc, char **argv)
+{
+    hash_table_t *ht;
+    ht = hash_table_new(75, 0);
+
+    if (hash_table_enter(ht, "-hmmdump", (void *)1) != (void *)1) {
+        E_FATAL("Insertion of -hmmdump failed\n");
+    }
+
+    if (hash_table_enter(ht, "-svq4svq", (void *)1) != (void *)1) {
+        E_FATAL("Insertion of -svq4svq failed\n");
+    }
+
+    if (hash_table_enter(ht, "-lm", (void *)1) != (void *)1) {
+        E_FATAL("Insertion of -lm failed\n");
+    }
+
+    if (hash_table_enter(ht, "-beam", (void *)1) != (void *)1) {
+        E_FATAL("Insertion of -beam failed\n");
+    }
+
+    if (hash_table_enter(ht, "-lminmemory", (void *)1) != (void *)1) {
+        E_FATAL("Insertion of -lminmemory failed\n");
+    }
+
+    hash_table_display(ht, 1);
+
+    hash_table_free(ht);
+    ht = NULL;
+    return 0;
+}
+
+
+#if 0
+E_INFO("Hash table in the command line\n");
+hash_table_display(ht, 1);
+
+E_INFO("After deletion of -lm\n");
+hash_table_delete(ht, "-lm");
+hash_table_display(ht, 1);
+
+E_INFO("After deletion of -lm\n");
+
+hash_table_delete(ht, "-lm");
+hash_table_display(ht, 1);
+
+E_INFO("After deletion of -svq4svq\n");
+hash_table_delete(ht, "-svq4svq");
+hash_table_display(ht, 1);
+
+E_INFO("After deletion of -beam\n");
+hash_table_delete(ht, "-beam");
+hash_table_display(ht, 1);
+#endif
diff --git a/test/unit/test_hash/test_hash_iter.c b/test/unit/test_hash/test_hash_iter.c
new file mode 100644 (file)
index 0000000..1bc9cd6
--- /dev/null
@@ -0,0 +1,52 @@
+/**
+ * @file test_hash_iter.c Test hash table iterators
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "hash_table.h"
+#include "ckd_alloc.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main(int argc, char *argv[])
+{
+       hash_table_t *h;
+       hash_iter_t *itor;
+       char *foo2 = ckd_salloc("foo");
+       char *foo3 = ckd_salloc("foo");
+
+       /* Test insertion and replacement. */
+       TEST_ASSERT(h = hash_table_new(42, FALSE));
+       TEST_EQUAL((void*)0xdeadbeef, hash_table_enter(h, "foo", (void*)0xdeadbeef));
+       TEST_EQUAL((void*)0xdeadbeef, hash_table_replace(h, foo2, (void*)0xd0d0feed));
+       TEST_EQUAL((void*)0xd0d0feed, hash_table_replace(h, foo3, (void*)0xdeadbeaf));
+       TEST_EQUAL((void*)0xcafec0de, hash_table_enter(h, "bar", (void*)0xcafec0de));
+       TEST_EQUAL((void*)0xeeefeeef, hash_table_enter(h, "baz", (void*)0xeeefeeef));
+       TEST_EQUAL((void*)0xbabababa, hash_table_enter(h, "quux", (void*)0xbabababa));
+
+       hash_table_display(h, TRUE);
+       /* Now test iterators. */
+       for (itor = hash_table_iter(h); itor; itor = hash_table_iter_next(itor)) {
+               printf("%s %p\n", itor->ent->key, itor->ent->val);
+               if (0 == strcmp(itor->ent->key, "foo")) {
+                       TEST_EQUAL(itor->ent->val, (void*)0xdeadbeaf);
+               }
+               else if (0 == strcmp(itor->ent->key, "bar")) {
+                       TEST_EQUAL(itor->ent->val, (void*)0xcafec0de);
+               }
+               else if (0 == strcmp(itor->ent->key, "baz")) {
+                       TEST_EQUAL(itor->ent->val, (void*)0xeeefeeef);
+               }
+               else if (0 == strcmp(itor->ent->key, "quux")) {
+                       TEST_EQUAL(itor->ent->val, (void*)0xbabababa);
+               }
+       }
+       ckd_free(foo2);
+       ckd_free(foo3);
+
+       return 0;
+}
diff --git a/test/unit/test_hash/test_macros.h b/test/unit/test_hash/test_macros.h
new file mode 100644 (file)
index 0000000..c315ced
--- /dev/null
@@ -0,0 +1,7 @@
+#include <stdio.h>
+#include <math.h>
+
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define EPSILON 0.001
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
diff --git a/test/unit/test_logmath/Makefile.am b/test/unit/test_logmath/Makefile.am
new file mode 100644 (file)
index 0000000..d2f4e80
--- /dev/null
@@ -0,0 +1,13 @@
+check_PROGRAMS = test_log_int16 test_log_int8 test_log_shifted
+TESTS = test_log_int16 test_log_int8 test_log_shifted
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la -lm
+
+noinst_HEADERS = test_macros.h
+
+CLEANFILES = *.out tmp.*
diff --git a/test/unit/test_logmath/Makefile.in b/test/unit/test_logmath/Makefile.in
new file mode 100644 (file)
index 0000000..d393fb3
--- /dev/null
@@ -0,0 +1,574 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_log_int16$(EXEEXT) test_log_int8$(EXEEXT) \
+       test_log_shifted$(EXEEXT)
+TESTS = test_log_int16$(EXEEXT) test_log_int8$(EXEEXT) \
+       test_log_shifted$(EXEEXT)
+subdir = test/unit/test_logmath
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_log_int16_SOURCES = test_log_int16.c
+test_log_int16_OBJECTS = test_log_int16.$(OBJEXT)
+test_log_int16_LDADD = $(LDADD)
+test_log_int16_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_log_int8_SOURCES = test_log_int8.c
+test_log_int8_OBJECTS = test_log_int8.$(OBJEXT)
+test_log_int8_LDADD = $(LDADD)
+test_log_int8_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_log_shifted_SOURCES = test_log_shifted.c
+test_log_shifted_OBJECTS = test_log_shifted.$(OBJEXT)
+test_log_shifted_LDADD = $(LDADD)
+test_log_shifted_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_log_int16.c test_log_int8.c test_log_shifted.c
+DIST_SOURCES = test_log_int16.c test_log_int8.c test_log_shifted.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la -lm
+noinst_HEADERS = test_macros.h
+CLEANFILES = *.out tmp.*
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_logmath/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_logmath/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_log_int16$(EXEEXT): $(test_log_int16_OBJECTS) $(test_log_int16_DEPENDENCIES) 
+       @rm -f test_log_int16$(EXEEXT)
+       $(LINK) $(test_log_int16_OBJECTS) $(test_log_int16_LDADD) $(LIBS)
+test_log_int8$(EXEEXT): $(test_log_int8_OBJECTS) $(test_log_int8_DEPENDENCIES) 
+       @rm -f test_log_int8$(EXEEXT)
+       $(LINK) $(test_log_int8_OBJECTS) $(test_log_int8_LDADD) $(LIBS)
+test_log_shifted$(EXEEXT): $(test_log_shifted_OBJECTS) $(test_log_shifted_DEPENDENCIES) 
+       @rm -f test_log_shifted$(EXEEXT)
+       $(LINK) $(test_log_shifted_OBJECTS) $(test_log_shifted_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_log_int16.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_log_int8.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_log_shifted.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_logmath/test_log_int16.c b/test/unit/test_logmath/test_log_int16.c
new file mode 100644 (file)
index 0000000..7545172
--- /dev/null
@@ -0,0 +1,77 @@
+#include <logmath.h>
+
+#include "test_macros.h"
+
+#define LOG_EPSILON 1500
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       int32 rv;
+
+       lmath = logmath_init(1.0001, 0, 1);
+       TEST_ASSERT(lmath);
+       printf("log(1e-150) = %d\n", logmath_log(lmath, 1e-150));
+       TEST_EQUAL_LOG(logmath_log(lmath, 1e-150), -3454050);
+       printf("exp(log(1e-150)) = %e\n",logmath_exp(lmath, logmath_log(lmath, 1e-150)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 1e-150)), 1e-150);
+       printf("log(1e-48) = %d\n", logmath_log(lmath, 1e-48));
+       printf("exp(log(1e-48)) = %e\n",logmath_exp(lmath, logmath_log(lmath, 1e-48)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 1e-48)), 1e-48);
+       printf("log(42) = %d\n", logmath_log(lmath, 42));
+       TEST_EQUAL_LOG(logmath_log(lmath, 42), 37378);
+       printf("exp(log(42)) = %f\n",logmath_exp(lmath, logmath_log(lmath, 42)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 42)), 42);
+       printf("log(1e-3 + 5e-3) = %d l+ %d = %d\n",
+              logmath_log(lmath, 1e-3),
+              logmath_log(lmath, 5e-3),
+              logmath_add(lmath, logmath_log(lmath, 1e-3),
+                          logmath_log(lmath, 5e-3)));
+       printf("log(1e-3 + 5e-3) = %e + %e = %e\n",
+              logmath_exp(lmath, logmath_log(lmath, 1e-3)),
+              logmath_exp(lmath, logmath_log(lmath, 5e-3)),
+              logmath_exp(lmath, logmath_add(lmath, logmath_log(lmath, 1e-3),
+                                             logmath_log(lmath, 5e-3))));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 5e-48)),
+                      logmath_log(lmath, 6e-48));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 42)),
+                      logmath_log(lmath, 42));
+
+       rv = logmath_write(lmath, "tmp.logadd");
+       TEST_EQUAL(rv, 0);
+       logmath_free(lmath);
+       lmath = logmath_read("tmp.logadd");
+       TEST_ASSERT(lmath);
+       printf("log(1e-150) = %d\n", logmath_log(lmath, 1e-150));
+       TEST_EQUAL_LOG(logmath_log(lmath, 1e-150), -3454050);
+       printf("exp(log(1e-150)) = %e\n",logmath_exp(lmath, logmath_log(lmath, 1e-150)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 1e-150)), 1e-150);
+       printf("log(1e-48) = %d\n", logmath_log(lmath, 1e-48));
+       printf("exp(log(1e-48)) = %e\n",logmath_exp(lmath, logmath_log(lmath, 1e-48)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 1e-48)), 1e-48);
+       printf("log(42) = %d\n", logmath_log(lmath, 42));
+       TEST_EQUAL_LOG(logmath_log(lmath, 42), 37378);
+       printf("exp(log(42)) = %f\n",logmath_exp(lmath, logmath_log(lmath, 42)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 42)), 41.99);
+       printf("log(1e-3 + 5e-3) = %d l+ %d = %d\n",
+              logmath_log(lmath, 1e-3),
+              logmath_log(lmath, 5e-3),
+              logmath_add(lmath, logmath_log(lmath, 1e-3),
+                          logmath_log(lmath, 5e-3)));
+       printf("log(1e-3 + 5e-3) = %e + %e = %e\n",
+              logmath_exp(lmath, logmath_log(lmath, 1e-3)),
+              logmath_exp(lmath, logmath_log(lmath, 5e-3)),
+              logmath_exp(lmath, logmath_add(lmath, logmath_log(lmath, 1e-3),
+                                             logmath_log(lmath, 5e-3))));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 5e-48)),
+                      logmath_log(lmath, 6e-48));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 42)),
+                      logmath_log(lmath, 42));
+
+       return 0;
+}
diff --git a/test/unit/test_logmath/test_log_int8.c b/test/unit/test_logmath/test_log_int8.c
new file mode 100644 (file)
index 0000000..a1f3838
--- /dev/null
@@ -0,0 +1,44 @@
+#include <logmath.h>
+
+#include "test_macros.h"
+
+#define LOG_EPSILON 1500
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       int32 rv;
+
+       lmath = logmath_init(1.003, 0, 1);
+       TEST_ASSERT(lmath);
+       printf("log(1e-48) = %d\n", logmath_log(lmath, 1e-48));
+       TEST_EQUAL_LOG(logmath_log(lmath, 1e-48), -36896);
+       printf("exp(log(1e-48)) = %e\n",logmath_exp(lmath, -36896));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, -36896), 1e-48);
+       printf("log(42) = %d\n", logmath_log(lmath, 42));
+       TEST_EQUAL_LOG(logmath_log(lmath, 42), 1247);
+       printf("exp(log(42)) = %f\n",logmath_exp(lmath, 1247));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, 1247), 41.9);
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 5e-48)),
+                      logmath_log(lmath, 6e-48));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 42)), 1247);
+
+       rv = logmath_write(lmath, "tmp.logadd");
+       TEST_EQUAL(rv, 0);
+       logmath_free(lmath);
+       lmath = logmath_read("tmp.logadd");
+       TEST_ASSERT(lmath);
+       TEST_EQUAL_LOG(logmath_log(lmath, 1e-48), -36896);
+       TEST_EQUAL_LOG(logmath_log(lmath, 42), 1247);
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 5e-48)),
+                      logmath_log(lmath, 6e-48));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 42)), 1247);
+       logmath_free(lmath);
+
+       return 0;
+}
diff --git a/test/unit/test_logmath/test_log_shifted.c b/test/unit/test_logmath/test_log_shifted.c
new file mode 100644 (file)
index 0000000..006adf1
--- /dev/null
@@ -0,0 +1,77 @@
+#include <logmath.h>
+
+#include "test_macros.h"
+
+#define LOG_EPSILON 1500
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       int32 rv;
+
+       lmath = logmath_init(1.0001, 8, 1);
+       TEST_ASSERT(lmath);
+       printf("log(1e-150) = %d\n", logmath_log(lmath, 1e-150));
+       TEST_EQUAL_LOG(logmath_log(lmath, 1e-150), -13493);
+       printf("exp(log(1e-150)) = %e\n",logmath_exp(lmath, logmath_log(lmath, 1e-150)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 1e-150)), 1e-150);
+       printf("log(1e-48) = %d\n", logmath_log(lmath, 1e-48));
+       printf("exp(log(1e-48)) = %e\n",logmath_exp(lmath, logmath_log(lmath, 1e-48)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 1e-48)), 1e-48);
+       printf("log(42) = %d\n", logmath_log(lmath, 42));
+       TEST_EQUAL_LOG(logmath_log(lmath, 42), 146);
+       printf("exp(log(42)) = %f\n",logmath_exp(lmath, logmath_log(lmath, 42)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 42)), 41.99);
+       printf("log(1e-3 + 5e-3) = %d l+ %d = %d\n",
+              logmath_log(lmath, 1e-3),
+              logmath_log(lmath, 5e-3),
+              logmath_add(lmath, logmath_log(lmath, 1e-3),
+                          logmath_log(lmath, 5e-3)));
+       printf("log(1e-3 + 5e-3) = %e + %e = %e\n",
+              logmath_exp(lmath, logmath_log(lmath, 1e-3)),
+              logmath_exp(lmath, logmath_log(lmath, 5e-3)),
+              logmath_exp(lmath, logmath_add(lmath, logmath_log(lmath, 1e-3),
+                                             logmath_log(lmath, 5e-3))));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 5e-48)),
+                      logmath_log(lmath, 6e-48));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 42)),
+                      logmath_log(lmath, 42));
+
+       rv = logmath_write(lmath, "tmp.logadd");
+       TEST_EQUAL(rv, 0);
+       logmath_free(lmath);
+       lmath = logmath_read("tmp.logadd");
+       TEST_ASSERT(lmath);
+       printf("log(1e-150) = %d\n", logmath_log(lmath, 1e-150));
+       TEST_EQUAL_LOG(logmath_log(lmath, 1e-150), -13493);
+       printf("exp(log(1e-150)) = %e\n",logmath_exp(lmath, logmath_log(lmath, 1e-150)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 1e-150)), 1e-150);
+       printf("log(1e-48) = %d\n", logmath_log(lmath, 1e-48));
+       printf("exp(log(1e-48)) = %e\n",logmath_exp(lmath, logmath_log(lmath, 1e-48)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 1e-48)), 1e-48);
+       printf("log(42) = %d\n", logmath_log(lmath, 42));
+       TEST_EQUAL_LOG(logmath_log(lmath, 42), 146);
+       printf("exp(log(42)) = %f\n",logmath_exp(lmath, logmath_log(lmath, 42)));
+       TEST_EQUAL_FLOAT(logmath_exp(lmath, logmath_log(lmath, 42)), 41.99);
+       printf("log(1e-3 + 5e-3) = %d l+ %d = %d\n",
+              logmath_log(lmath, 1e-3),
+              logmath_log(lmath, 5e-3),
+              logmath_add(lmath, logmath_log(lmath, 1e-3),
+                          logmath_log(lmath, 5e-3)));
+       printf("log(1e-3 + 5e-3) = %e + %e = %e\n",
+              logmath_exp(lmath, logmath_log(lmath, 1e-3)),
+              logmath_exp(lmath, logmath_log(lmath, 5e-3)),
+              logmath_exp(lmath, logmath_add(lmath, logmath_log(lmath, 1e-3),
+                                             logmath_log(lmath, 5e-3))));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 5e-48)),
+                      logmath_log(lmath, 6e-48));
+       TEST_EQUAL_LOG(logmath_add(lmath, logmath_log(lmath, 1e-48),
+                                  logmath_log(lmath, 42)),
+                      logmath_log(lmath, 42));
+
+       return 0;
+}
diff --git a/test/unit/test_logmath/test_macros.h b/test/unit/test_logmath/test_macros.h
new file mode 100644 (file)
index 0000000..774357e
--- /dev/null
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include <math.h>
+
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define EPSILON 0.01
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_matrix/Makefile.am b/test/unit/test_matrix/Makefile.am
new file mode 100644 (file)
index 0000000..5cc652e
--- /dev/null
@@ -0,0 +1,27 @@
+
+check_PROGRAMS = test_solve test_invert test_determinant
+
+test_solve_SRCS = test_solve.c
+test_invert_SRCS = test_invert.c
+test_determinant_SRCS = test_determinant.c
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la -lm
+
+
+TESTS = _test_determinant.test                 \
+       _test_invert.test                       \
+       _test_solve.test
+
+EXTRA_DIST = _test_determinant.res             \
+       _test_determinant.test                  \
+       _test_invert.res                        \
+       _test_invert.test                       \
+       _test_solve.res                         \
+       _test_solve.test
+
+CLEANFILES = *.out
diff --git a/test/unit/test_matrix/Makefile.in b/test/unit/test_matrix/Makefile.in
new file mode 100644 (file)
index 0000000..b8fcf88
--- /dev/null
@@ -0,0 +1,582 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_solve$(EXEEXT) test_invert$(EXEEXT) \
+       test_determinant$(EXEEXT)
+subdir = test/unit/test_matrix
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_determinant_SOURCES = test_determinant.c
+test_determinant_OBJECTS = test_determinant.$(OBJEXT)
+test_determinant_LDADD = $(LDADD)
+test_determinant_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_invert_SOURCES = test_invert.c
+test_invert_OBJECTS = test_invert.$(OBJEXT)
+test_invert_LDADD = $(LDADD)
+test_invert_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_solve_SOURCES = test_solve.c
+test_solve_OBJECTS = test_solve.$(OBJEXT)
+test_solve_LDADD = $(LDADD)
+test_solve_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_determinant.c test_invert.c test_solve.c
+DIST_SOURCES = test_determinant.c test_invert.c test_solve.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+test_solve_SRCS = test_solve.c
+test_invert_SRCS = test_invert.c
+test_determinant_SRCS = test_determinant.c
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la -lm
+TESTS = _test_determinant.test                 \
+       _test_invert.test                       \
+       _test_solve.test
+
+EXTRA_DIST = _test_determinant.res             \
+       _test_determinant.test                  \
+       _test_invert.res                        \
+       _test_invert.test                       \
+       _test_solve.res                         \
+       _test_solve.test
+
+CLEANFILES = *.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_matrix/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_matrix/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_determinant$(EXEEXT): $(test_determinant_OBJECTS) $(test_determinant_DEPENDENCIES) 
+       @rm -f test_determinant$(EXEEXT)
+       $(LINK) $(test_determinant_OBJECTS) $(test_determinant_LDADD) $(LIBS)
+test_invert$(EXEEXT): $(test_invert_OBJECTS) $(test_invert_DEPENDENCIES) 
+       @rm -f test_invert$(EXEEXT)
+       $(LINK) $(test_invert_OBJECTS) $(test_invert_LDADD) $(LIBS)
+test_solve$(EXEEXT): $(test_solve_OBJECTS) $(test_solve_DEPENDENCIES) 
+       @rm -f test_solve$(EXEEXT)
+       $(LINK) $(test_solve_OBJECTS) $(test_solve_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_determinant.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_invert.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_solve.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_matrix/_test_determinant.res b/test/unit/test_matrix/_test_determinant.res
new file mode 100644 (file)
index 0000000..24a5f55
--- /dev/null
@@ -0,0 +1,2 @@
+5.22
+-1.00
diff --git a/test/unit/test_matrix/_test_determinant.test b/test/unit/test_matrix/_test_determinant.test
new file mode 100755 (executable)
index 0000000..bd63a19
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./test_determinant | sed -e 's,-0\.0,0.0,g' > _test_determinant.out
+compare_table determinant _test_determinant.out $tests/unit/test_matrix/_test_determinant.res
+rm -f _test_determinant.out
diff --git a/test/unit/test_matrix/_test_invert.res b/test/unit/test_matrix/_test_invert.res
new file mode 100644 (file)
index 0000000..31c483b
--- /dev/null
@@ -0,0 +1,15 @@
+0
+0.75 -0.25 -0.25 
+-0.25 0.75 -0.25 
+-0.25 -0.25 0.75 
+1.00 0.00 0.00 
+0.00 1.00 0.00 
+0.00 0.00 1.00 
+0
+0.67 0.00 -0.33 
+0.00 0.67 -0.33 
+-0.33 -0.33 0.83 
+1.00 0.00 0.00 
+0.00 1.00 0.00 
+0.00 0.00 1.00 
+0
diff --git a/test/unit/test_matrix/_test_invert.test b/test/unit/test_matrix/_test_invert.test
new file mode 100755 (executable)
index 0000000..33bef05
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./test_invert | sed -e 's,-0\.0,0.0,g' > _test_invert.out
+compare_table invert _test_invert.out $tests/unit/test_matrix/_test_invert.res
+rm -f _test_invert.out
diff --git a/test/unit/test_matrix/_test_solve.res b/test/unit/test_matrix/_test_solve.res
new file mode 100644 (file)
index 0000000..f5f338a
--- /dev/null
@@ -0,0 +1 @@
+-0.25 1.75 -0.25 
diff --git a/test/unit/test_matrix/_test_solve.test b/test/unit/test_matrix/_test_solve.test
new file mode 100755 (executable)
index 0000000..c171684
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+. ../testfuncs.sh
+
+set -e
+./test_solve > _test_solve.out
+compare_table solve _test_solve.out $tests/unit/test_matrix/_test_solve.res
+rm -f _test_solve.out
diff --git a/test/unit/test_matrix/test_determinant.c b/test/unit/test_matrix/test_determinant.c
new file mode 100644 (file)
index 0000000..e7ca81c
--- /dev/null
@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "matrix.h"
+#include "ckd_alloc.h"
+
+const float32 foo[3][3] = {
+       {2, 0.42, 1},
+       {0.42, 2, -0.3},
+       {1, -0.3, 2}
+};
+const float32 bar[3][3] = {
+       {1, 0, 1},
+       {0, 1, 0},
+       {0, 0, 1}
+};
+
+int
+main(int argc, char *argv[])
+{
+       float32 **a;
+
+       a = (float32 **)ckd_calloc_2d(3, 3, sizeof(float32));
+
+       memcpy(a[0], foo, sizeof(float32) * 3 * 3);
+       /* Should see 5.22 */
+       printf("%.2f\n", determinant(a, 3));
+
+       /* Should see -1.0 */
+       memcpy(a[0], bar, sizeof(float32) * 3 * 3);
+       printf("%.2f\n", determinant(a, 3));
+
+       ckd_free_2d((void **)a);
+
+       return 0;
+}
diff --git a/test/unit/test_matrix/test_invert.c b/test/unit/test_matrix/test_invert.c
new file mode 100644 (file)
index 0000000..0d5f662
--- /dev/null
@@ -0,0 +1,89 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "matrix.h"
+#include "ckd_alloc.h"
+
+const float32 foo[3][3] = {
+       {2, 1, 1},
+       {1, 2, 1},
+       {1, 1, 2}
+};
+const float32 bar[3][3] = {
+       {2, 0.5, 1},
+       {0.5, 2, 1},
+       {1, 1, 2}
+};
+
+int
+main(int argc, char *argv[])
+{
+       float32 **a, **ainv, **ii;
+       int i, j;
+
+       a = (float32 **)ckd_calloc_2d(3, 3, sizeof(float32));
+       ainv = (float32 **)ckd_calloc_2d(3, 3, sizeof(float32));
+       ii = (float32 **)ckd_calloc_2d(3, 3, sizeof(float32));
+
+       memcpy(a[0], foo, sizeof(float32) * 3 * 3);
+       printf("%d\n", invert(ainv, a, 3));
+       /* Should see:
+          0.75 -0.25 -0.25 
+          -0.25 0.75 -0.25 
+          -0.25 -0.25 0.75 
+       */
+       for (i = 0; i < 3; ++i) {
+               for (j = 0; j < 3; ++j) {
+                       printf("%.2f ", ainv[i][j]);
+               }
+               printf("\n");
+       }
+       /* Should see:
+          1.00 0.00 0.00
+          0.00 1.00 0.00
+          0.00 0.00 1.00
+       */
+       matrixmultiply(ii, ainv, a, 3);
+       for (i = 0; i < 3; ++i) {
+               for (j = 0; j < 3; ++j) {
+                       printf("%.2f ", ii[i][j]);
+               }
+               printf("\n");
+       }
+
+       memcpy(a[0], bar, sizeof(float32) * 3 * 3);
+       printf("%d\n", invert(ainv, a, 3));
+       /* Should see:
+       */
+       for (i = 0; i < 3; ++i) {
+               for (j = 0; j < 3; ++j) {
+                       printf("%.2f ", ainv[i][j]);
+               }
+               printf("\n");
+       }
+       /* Should see:
+          1.00 0.00 0.00 
+          0.00 1.00 0.00 
+          0.00 0.00 1.00 
+       */
+       memset(ii[0], 0, sizeof(float32) * 3 * 3);
+       matrixmultiply(ii, ainv, a, 3);
+       for (i = 0; i < 3; ++i) {
+               for (j = 0; j < 3; ++j) {
+                       printf("%.2f ", ii[i][j]);
+               }
+               printf("\n");
+       }
+
+       /* Should see:
+          -1
+       */
+       a[0][0] = 1.0;
+       printf("%d\n", invert(ainv, a, 3));
+
+       ckd_free_2d((void **)a);
+       ckd_free_2d((void **)ainv);
+       ckd_free_2d((void **)ii);
+
+       return 0;
+}
diff --git a/test/unit/test_matrix/test_solve.c b/test/unit/test_matrix/test_solve.c
new file mode 100644 (file)
index 0000000..ad237be
--- /dev/null
@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "matrix.h"
+#include "ckd_alloc.h"
+
+const float32 foo[3][3] = {
+       {2, 1, 1},
+       {1, 2, 1},
+       {1, 1, 2}
+};
+float32 bar[3] = {1, 3, 1};
+
+int
+main(int argc, char *argv[])
+{
+       float32 **a, *x;
+       int i;
+
+       a = (float32 **)ckd_calloc_2d(3, 3, sizeof(float32));
+       memcpy(a[0], foo, sizeof(float32) * 3 * 3);
+       x = ckd_calloc(3, sizeof(float32));
+
+       /* Should see:
+          -0.25 1.75 -0.25
+       */
+       solve(a, bar, x, 3);
+       for (i = 0; i < 3; ++i)
+               printf("%.2f ", x[i]);
+       printf("\n");
+
+       ckd_free_2d((void **)a);
+       ckd_free(x);
+
+       return 0;
+}
diff --git a/test/unit/test_ngram/100.arpa.DMP b/test/unit/test_ngram/100.arpa.DMP
new file mode 100644 (file)
index 0000000..1eb9cc5
Binary files /dev/null and b/test/unit/test_ngram/100.arpa.DMP differ
diff --git a/test/unit/test_ngram/100.arpa.bz2 b/test/unit/test_ngram/100.arpa.bz2
new file mode 100644 (file)
index 0000000..4451d7e
Binary files /dev/null and b/test/unit/test_ngram/100.arpa.bz2 differ
diff --git a/test/unit/test_ngram/100.arpa.gz b/test/unit/test_ngram/100.arpa.gz
new file mode 100644 (file)
index 0000000..d334c10
Binary files /dev/null and b/test/unit/test_ngram/100.arpa.gz differ
diff --git a/test/unit/test_ngram/100.lmctl b/test/unit/test_ngram/100.lmctl
new file mode 100644 (file)
index 0000000..af564f4
--- /dev/null
@@ -0,0 +1,4 @@
+{ 100.probdef }
+100.arpa.DMP 100 { scylla zero }
+100_2.arpa.gz 100_2
+turtle.lm turtle
diff --git a/test/unit/test_ngram/100.probdef b/test/unit/test_ngram/100.probdef
new file mode 100644 (file)
index 0000000..be283da
--- /dev/null
@@ -0,0 +1,11 @@
+LMCLASS scylla
+scylla:scylla          0.4
+karybdis:scylla                0.4
+scooby:scylla          0.1
+redwood:scylla         0.1
+END scylla
+
+LMCLASS zero
+zero:zero      0.3
+oh:zero                0.7
+END zero
diff --git a/test/unit/test_ngram/100_2.arpa.DMP b/test/unit/test_ngram/100_2.arpa.DMP
new file mode 100644 (file)
index 0000000..ce2dc4d
Binary files /dev/null and b/test/unit/test_ngram/100_2.arpa.DMP differ
diff --git a/test/unit/test_ngram/100_2.arpa.gz b/test/unit/test_ngram/100_2.arpa.gz
new file mode 100644 (file)
index 0000000..1da0ca5
Binary files /dev/null and b/test/unit/test_ngram/100_2.arpa.gz differ
diff --git a/test/unit/test_ngram/Makefile.am b/test/unit/test_ngram/Makefile.am
new file mode 100644 (file)
index 0000000..a6146fa
--- /dev/null
@@ -0,0 +1,37 @@
+check_PROGRAMS = \
+       test_lm_read \
+       test_lm_mmap \
+       test_lm_score \
+       test_lm_add \
+       test_lm_recode \
+       test_lm_casefold \
+       test_lm_class \
+       test_lm_set \
+       test_lm_iter \
+       test_lm_write
+
+TESTS = $(check_PROGRAMS)
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DLMDIR=\"${srcdir}\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+
+noinst_HEADERS = test_macros.h
+
+EXTRA_DIST = 100.arpa.gz \
+       100.arpa.bz2 \
+       100.arpa.DMP \
+       100.probdef \
+       100.lmctl \
+       100_2.arpa.gz \
+       100_2.arpa.DMP \
+       turtle.lm \
+       turtle.lm.DMP \
+       turtle.ug.lm \
+       turtle.ug.lm.DMP
+
+CLEANFILES = 100.tmp.arpa 100.tmp.DMP
diff --git a/test/unit/test_ngram/Makefile.in b/test/unit/test_ngram/Makefile.in
new file mode 100644 (file)
index 0000000..9face44
--- /dev/null
@@ -0,0 +1,656 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_lm_read$(EXEEXT) test_lm_mmap$(EXEEXT) \
+       test_lm_score$(EXEEXT) test_lm_add$(EXEEXT) \
+       test_lm_recode$(EXEEXT) test_lm_casefold$(EXEEXT) \
+       test_lm_class$(EXEEXT) test_lm_set$(EXEEXT) \
+       test_lm_iter$(EXEEXT) test_lm_write$(EXEEXT)
+subdir = test/unit/test_ngram
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_lm_add_SOURCES = test_lm_add.c
+test_lm_add_OBJECTS = test_lm_add.$(OBJEXT)
+test_lm_add_LDADD = $(LDADD)
+test_lm_add_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_casefold_SOURCES = test_lm_casefold.c
+test_lm_casefold_OBJECTS = test_lm_casefold.$(OBJEXT)
+test_lm_casefold_LDADD = $(LDADD)
+test_lm_casefold_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_class_SOURCES = test_lm_class.c
+test_lm_class_OBJECTS = test_lm_class.$(OBJEXT)
+test_lm_class_LDADD = $(LDADD)
+test_lm_class_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_iter_SOURCES = test_lm_iter.c
+test_lm_iter_OBJECTS = test_lm_iter.$(OBJEXT)
+test_lm_iter_LDADD = $(LDADD)
+test_lm_iter_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_mmap_SOURCES = test_lm_mmap.c
+test_lm_mmap_OBJECTS = test_lm_mmap.$(OBJEXT)
+test_lm_mmap_LDADD = $(LDADD)
+test_lm_mmap_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_read_SOURCES = test_lm_read.c
+test_lm_read_OBJECTS = test_lm_read.$(OBJEXT)
+test_lm_read_LDADD = $(LDADD)
+test_lm_read_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_recode_SOURCES = test_lm_recode.c
+test_lm_recode_OBJECTS = test_lm_recode.$(OBJEXT)
+test_lm_recode_LDADD = $(LDADD)
+test_lm_recode_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_score_SOURCES = test_lm_score.c
+test_lm_score_OBJECTS = test_lm_score.$(OBJEXT)
+test_lm_score_LDADD = $(LDADD)
+test_lm_score_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_set_SOURCES = test_lm_set.c
+test_lm_set_OBJECTS = test_lm_set.$(OBJEXT)
+test_lm_set_LDADD = $(LDADD)
+test_lm_set_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_lm_write_SOURCES = test_lm_write.c
+test_lm_write_OBJECTS = test_lm_write.$(OBJEXT)
+test_lm_write_LDADD = $(LDADD)
+test_lm_write_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_lm_add.c test_lm_casefold.c test_lm_class.c \
+       test_lm_iter.c test_lm_mmap.c test_lm_read.c test_lm_recode.c \
+       test_lm_score.c test_lm_set.c test_lm_write.c
+DIST_SOURCES = test_lm_add.c test_lm_casefold.c test_lm_class.c \
+       test_lm_iter.c test_lm_mmap.c test_lm_read.c test_lm_recode.c \
+       test_lm_score.c test_lm_set.c test_lm_write.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = $(check_PROGRAMS)
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DLMDIR=\"${srcdir}\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+noinst_HEADERS = test_macros.h
+EXTRA_DIST = 100.arpa.gz \
+       100.arpa.bz2 \
+       100.arpa.DMP \
+       100.probdef \
+       100.lmctl \
+       100_2.arpa.gz \
+       100_2.arpa.DMP \
+       turtle.lm \
+       turtle.lm.DMP \
+       turtle.ug.lm \
+       turtle.ug.lm.DMP
+
+CLEANFILES = 100.tmp.arpa 100.tmp.DMP
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_ngram/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_ngram/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_lm_add$(EXEEXT): $(test_lm_add_OBJECTS) $(test_lm_add_DEPENDENCIES) 
+       @rm -f test_lm_add$(EXEEXT)
+       $(LINK) $(test_lm_add_OBJECTS) $(test_lm_add_LDADD) $(LIBS)
+test_lm_casefold$(EXEEXT): $(test_lm_casefold_OBJECTS) $(test_lm_casefold_DEPENDENCIES) 
+       @rm -f test_lm_casefold$(EXEEXT)
+       $(LINK) $(test_lm_casefold_OBJECTS) $(test_lm_casefold_LDADD) $(LIBS)
+test_lm_class$(EXEEXT): $(test_lm_class_OBJECTS) $(test_lm_class_DEPENDENCIES) 
+       @rm -f test_lm_class$(EXEEXT)
+       $(LINK) $(test_lm_class_OBJECTS) $(test_lm_class_LDADD) $(LIBS)
+test_lm_iter$(EXEEXT): $(test_lm_iter_OBJECTS) $(test_lm_iter_DEPENDENCIES) 
+       @rm -f test_lm_iter$(EXEEXT)
+       $(LINK) $(test_lm_iter_OBJECTS) $(test_lm_iter_LDADD) $(LIBS)
+test_lm_mmap$(EXEEXT): $(test_lm_mmap_OBJECTS) $(test_lm_mmap_DEPENDENCIES) 
+       @rm -f test_lm_mmap$(EXEEXT)
+       $(LINK) $(test_lm_mmap_OBJECTS) $(test_lm_mmap_LDADD) $(LIBS)
+test_lm_read$(EXEEXT): $(test_lm_read_OBJECTS) $(test_lm_read_DEPENDENCIES) 
+       @rm -f test_lm_read$(EXEEXT)
+       $(LINK) $(test_lm_read_OBJECTS) $(test_lm_read_LDADD) $(LIBS)
+test_lm_recode$(EXEEXT): $(test_lm_recode_OBJECTS) $(test_lm_recode_DEPENDENCIES) 
+       @rm -f test_lm_recode$(EXEEXT)
+       $(LINK) $(test_lm_recode_OBJECTS) $(test_lm_recode_LDADD) $(LIBS)
+test_lm_score$(EXEEXT): $(test_lm_score_OBJECTS) $(test_lm_score_DEPENDENCIES) 
+       @rm -f test_lm_score$(EXEEXT)
+       $(LINK) $(test_lm_score_OBJECTS) $(test_lm_score_LDADD) $(LIBS)
+test_lm_set$(EXEEXT): $(test_lm_set_OBJECTS) $(test_lm_set_DEPENDENCIES) 
+       @rm -f test_lm_set$(EXEEXT)
+       $(LINK) $(test_lm_set_OBJECTS) $(test_lm_set_LDADD) $(LIBS)
+test_lm_write$(EXEEXT): $(test_lm_write_OBJECTS) $(test_lm_write_DEPENDENCIES) 
+       @rm -f test_lm_write$(EXEEXT)
+       $(LINK) $(test_lm_write_OBJECTS) $(test_lm_write_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_add.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_casefold.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_class.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_iter.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_mmap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_read.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_recode.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_score.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_set.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_write.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_ngram/test_lm_add.c b/test/unit/test_ngram/test_lm_add.c
new file mode 100644 (file)
index 0000000..4a6b97f
--- /dev/null
@@ -0,0 +1,51 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+void
+run_tests(logmath_t *lmath, ngram_model_t *model)
+{
+       int32 wid, score;
+
+       wid = ngram_model_add_word(model, "foobie", 1.0);
+       score = ngram_score(model, "foobie", NULL);
+       TEST_EQUAL_LOG(score, logmath_log(lmath, 1.0/400.0)); /* #unigrams */
+
+       wid = ngram_model_add_word(model, "quux", 0.5);
+       score = ngram_score(model, "quux", NULL);
+       TEST_EQUAL_LOG(score, logmath_log(lmath, 0.5/400.0)); /* #unigrams */
+
+       ngram_model_apply_weights(model, 1.0, 1.0, 0.9);
+       score = ngram_score(model, "quux", NULL);
+       TEST_EQUAL_LOG(score, logmath_log(lmath, 0.5/400.0*0.9 + 1.0/400.0*0.1));
+
+       wid = ngram_model_add_word(model, "bazbar", 0.5);
+       score = ngram_score(model, "bazbar", NULL);
+       TEST_EQUAL_LOG(score, logmath_log(lmath, 0.5/400.0*0.9 + 1.0/400.0*0.1));
+}
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *model;
+
+       lmath = logmath_init(1.0001, 0, 0);
+
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       run_tests(lmath, model);
+       ngram_model_free(model);
+
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.gz", NGRAM_ARPA, lmath);
+       run_tests(lmath, model);
+       ngram_model_free(model);
+
+       logmath_free(lmath);
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_lm_casefold.c b/test/unit/test_ngram/test_lm_casefold.c
new file mode 100755 (executable)
index 0000000..c77f4db
--- /dev/null
@@ -0,0 +1,44 @@
+#include <ngram_model.h>\r
+#include <logmath.h>\r
+#include <strfuncs.h>\r
+\r
+#include "test_macros.h"\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <math.h>\r
+\r
+int\r
+main(int argc, char *argv[])\r
+{\r
+       logmath_t *lmath;\r
+       ngram_model_t *model;\r
+\r
+       /* Initialize a logmath object to pass to ngram_read */\r
+       lmath = logmath_init(1.0001, 0, 0);\r
+\r
+       /* Read a language model */\r
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);\r
+       TEST_ASSERT(model);\r
+\r
+       ngram_model_casefold(model, NGRAM_UPPER);\r
+\r
+       TEST_EQUAL(0, strcmp("</s>", ngram_word(model, 5)));\r
+       TEST_EQUAL(0, strcmp("BE", ngram_word(model, 42)));\r
+       TEST_EQUAL(0, strcmp("FLOORED", ngram_word(model, 130)));\r
+       TEST_EQUAL(0, strcmp("ZERO", ngram_word(model, 398)));\r
+       TEST_EQUAL(0, strcmp("~", ngram_word(model, 399)));\r
+\r
+       ngram_model_casefold(model, NGRAM_LOWER);\r
+\r
+       TEST_EQUAL(0, strcmp("</s>", ngram_word(model, 5)));\r
+       TEST_EQUAL(0, strcmp("be", ngram_word(model, 42)));\r
+       TEST_EQUAL(0, strcmp("floored", ngram_word(model, 130)));\r
+       TEST_EQUAL(0, strcmp("zero", ngram_word(model, 398)));\r
+       TEST_EQUAL(0, strcmp("~", ngram_word(model, 399)));\r
+\r
+       ngram_model_free(model);\r
+       logmath_free(lmath);\r
+\r
+       return 0;\r
+}\r
diff --git a/test/unit/test_ngram/test_lm_class.c b/test/unit/test_ngram/test_lm_class.c
new file mode 100644 (file)
index 0000000..61dd234
--- /dev/null
@@ -0,0 +1,123 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+void
+run_tests(logmath_t *lmath, ngram_model_t *model)
+{
+       int32 rv, i;
+
+       TEST_ASSERT(model);
+
+       TEST_EQUAL(ngram_wid(model, "scylla"), 285);
+       TEST_EQUAL(strcmp(ngram_word(model, 285), "scylla"), 0);
+
+       rv = ngram_model_read_classdef(model, LMDIR "/100.probdef");
+       TEST_EQUAL(rv, 0);
+
+       /* Verify that class word IDs remain the same. */
+       TEST_EQUAL(ngram_wid(model, "scylla"), 285);
+       TEST_EQUAL(strcmp(ngram_word(model, 285), "scylla"), 0);
+
+       /* Verify in-class word IDs. */
+       TEST_EQUAL(ngram_wid(model, "scylla:scylla"), 0x80000000 | 400);
+
+       /* Verify in-class and out-class unigram scores. */
+       TEST_EQUAL_LOG(ngram_score(model, "scylla:scylla", NULL),
+                      logmath_log10_to_log(lmath, -2.7884) + logmath_log(lmath, 0.4));
+       TEST_EQUAL_LOG(ngram_score(model, "scooby:scylla", NULL),
+                      logmath_log10_to_log(lmath, -2.7884) + logmath_log(lmath, 0.1));
+       TEST_EQUAL_LOG(ngram_score(model, "scylla", NULL),
+                      logmath_log10_to_log(lmath, -2.7884));
+       TEST_EQUAL_LOG(ngram_score(model, "oh:zero", NULL),
+                      logmath_log10_to_log(lmath, -1.9038) + logmath_log(lmath, 0.7));
+       TEST_EQUAL_LOG(ngram_score(model, "zero", NULL),
+                      logmath_log10_to_log(lmath, -1.9038));
+
+       /* Verify class bigram scores. */
+       TEST_EQUAL_LOG(ngram_score(model, "scylla", "on", NULL),
+                      logmath_log10_to_log(lmath, -1.2642));
+       TEST_EQUAL_LOG(ngram_score(model, "scylla:scylla", "on", NULL),
+                      logmath_log10_to_log(lmath, -1.2642) + logmath_log(lmath, 0.4));
+       TEST_EQUAL_LOG(ngram_score(model, "apparently", "scylla", NULL),
+                      logmath_log10_to_log(lmath, -0.5172));
+       TEST_EQUAL_LOG(ngram_score(model, "apparently", "karybdis:scylla", NULL),
+                      logmath_log10_to_log(lmath, -0.5172));
+       TEST_EQUAL_LOG(ngram_score(model, "apparently", "scooby:scylla", NULL),
+                      logmath_log10_to_log(lmath, -0.5172));
+
+       /* Verify class trigram scores. */
+       TEST_EQUAL_LOG(ngram_score(model, "zero", "be", "will", NULL),
+                      logmath_log10_to_log(lmath, -0.5725));
+       TEST_EQUAL_LOG(ngram_score(model, "oh:zero", "be", "will", NULL),
+                      logmath_log10_to_log(lmath, -0.5725) + logmath_log(lmath, 0.7));
+       TEST_EQUAL_LOG(ngram_score(model, "should", "variance", "zero", NULL),
+                      logmath_log10_to_log(lmath, -0.9404));
+       TEST_EQUAL_LOG(ngram_score(model, "should", "variance", "zero:zero", NULL),
+                      logmath_log10_to_log(lmath, -0.9404));
+
+       /* Add words to classes. */
+       rv = ngram_model_add_class_word(model, "scylla", "scrappy:scylla", 1.0);
+       TEST_ASSERT(rv >= 0);
+       TEST_EQUAL(ngram_wid(model, "scrappy:scylla"), 0x80000196);
+       TEST_EQUAL_LOG(ngram_score(model, "scrappy:scylla", NULL),
+                      logmath_log10_to_log(lmath, -2.7884) + logmath_log(lmath, 0.2));
+       printf("scrappy:scylla %08x %d %f\n", 
+              ngram_wid(model, "scrappy:scylla"),
+              ngram_score(model, "scrappy:scylla", NULL),
+              logmath_exp(lmath, ngram_score(model, "scrappy:scylla", NULL)));
+       /* Add a lot of words to a class. */
+       for (i = 0; i < 129; ++i) {
+               char word[32];
+               sprintf(word, "%d:scylla", i);
+               rv = ngram_model_add_class_word(model, "scylla", word, 1.0);
+               printf("%s %08x %d %f\n", word,
+                      ngram_wid(model, word),
+                      ngram_score(model, word, NULL),
+                      logmath_exp(lmath, ngram_score(model, word, NULL)));
+               TEST_ASSERT(rv >= 0);
+               TEST_EQUAL(ngram_wid(model, word), 0x80000197 + i);
+       }
+
+       /* Add a new class. */
+       {
+               const char *words[] = { "blatz:foobie", "hurf:foobie" };
+               float32 weights[] = { 0.6, 0.4 };
+               int32 foobie_prob;
+               rv = ngram_model_add_class(model, "[foobie]", 1.0,
+                                          words, weights, 2);
+               TEST_ASSERT(rv >= 0);
+               foobie_prob = ngram_score(model, "[foobie]", NULL);
+               TEST_EQUAL_LOG(ngram_score(model, "blatz:foobie", NULL),
+                              foobie_prob + logmath_log(lmath, 0.6));
+               TEST_EQUAL_LOG(ngram_score(model, "hurf:foobie", NULL),
+                              foobie_prob + logmath_log(lmath, 0.4));
+       }
+}
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *model;
+
+       lmath = logmath_init(1.0001, 0, 0);
+
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       run_tests(lmath, model);
+       ngram_model_free(model);
+
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.gz", NGRAM_ARPA, lmath);
+       run_tests(lmath, model);
+       ngram_model_free(model);
+
+       logmath_free(lmath);
+
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_lm_iter.c b/test/unit/test_ngram/test_lm_iter.c
new file mode 100644 (file)
index 0000000..02d6898
--- /dev/null
@@ -0,0 +1,135 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *model;
+       ngram_iter_t *itor;
+       int i;
+
+       /* Initialize a logmath object to pass to ngram_read */
+       lmath = logmath_init(1.0001, 0, 0);
+       /* Read a language model */
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       TEST_ASSERT(model);
+
+       for (i = 0, itor = ngram_model_mgrams(model, 0);
+            itor; ++i, itor = ngram_iter_next(itor)) {
+               int32 score, bowt;
+               int32 const *wids = ngram_iter_get(itor, &score, &bowt);
+
+               /*
+               printf("%.4f %s %.4f\n",
+                      logmath_log_to_log10(lmath, score),
+                      ngram_word(model, wids[0]),
+                      logmath_log_to_log10(lmath, bowt));
+               */
+
+               if (i == 0) TEST_EQUAL(wids[0], ngram_wid(model, "<UNK>"));
+               if (i == 1) TEST_EQUAL(wids[0], ngram_wid(model, "'s"));
+       }
+
+       for (i = 0, itor = ngram_model_mgrams(model, 1);
+            itor; ++i, itor = ngram_iter_next(itor)) {
+               int32 score, bowt;
+               int32 const *wids = ngram_iter_get(itor, &score, &bowt);
+
+               /*
+               printf("%.4f %s %s %.4f\n",
+                      logmath_log_to_log10(lmath, score),
+                      ngram_word(model, wids[0]),
+                      ngram_word(model, wids[1]),
+                      logmath_log_to_log10(lmath, bowt));
+               */
+
+               /* FIXME: These tests are not sufficient - actually we
+                * need to make sure all word IDs line up
+                * correctly. */
+               if (i == 0) TEST_EQUAL(wids[0], ngram_wid(model, "'s"));
+               if (i == 0) TEST_EQUAL(wids[1], ngram_wid(model, "an"));
+               if (i == 1) TEST_EQUAL(wids[0], ngram_wid(model, "'s"));
+               if (i == 1) TEST_EQUAL(wids[1], ngram_wid(model, "going"));
+       }
+
+       for (i = 0, itor = ngram_model_mgrams(model, 2);
+            itor; ++i, itor = ngram_iter_next(itor)) {
+               int32 score, bowt;
+               int32 const *wids = ngram_iter_get(itor, &score, &bowt);
+
+               /*
+               printf("%.4f %s %s %s\n",
+                      logmath_log_to_log10(lmath, score),
+                      ngram_word(model, wids[0]),
+                      ngram_word(model, wids[1]),
+                      ngram_word(model, wids[2]));
+               */
+
+               /* FIXME: These tests are not sufficient - actually we
+                * need to make sure all word IDs line up
+                * correctly. */
+               if (i == 0) TEST_EQUAL(wids[0], ngram_wid(model, "'s"));
+               if (i == 0) TEST_EQUAL(wids[1], ngram_wid(model, "an"));
+               if (i == 0) TEST_EQUAL(wids[2], ngram_wid(model, "r"));
+               if (i == 1) TEST_EQUAL(wids[0], ngram_wid(model, "'s"));
+               if (i == 1) TEST_EQUAL(wids[1], ngram_wid(model, "going"));
+               if (i == 1) TEST_EQUAL(wids[2], ngram_wid(model, "so"));
+       }
+
+       {
+               ngram_iter_t *itor2, *itor3;
+               int32 score, bowt;
+               int32 const *wids;
+
+               /* Test the boundary condition - successors of last 1-gram. */
+               itor = ngram_ng_iter(model, ngram_model_get_counts(model)[0] - 1,
+                                    NULL, 0);
+               wids = ngram_iter_get(itor, &score, &bowt);
+               printf("%.4f %s %.4f\n",
+                      logmath_log_to_log10(lmath, score),
+                      ngram_word(model, wids[0]),
+                      logmath_log_to_log10(lmath, bowt));
+               TEST_EQUAL(wids[0], ngram_wid(model, "~"));
+
+               for (itor2 = ngram_iter_successors(itor);
+                    itor2; itor2 = ngram_iter_next(itor2)) {
+                       wids = ngram_iter_get(itor2, &score, &bowt);
+                       printf("%.4f %s %s %.4f\n",
+                              logmath_log_to_log10(lmath, score),
+                              ngram_word(model, wids[0]),
+                              ngram_word(model, wids[1]),
+                              logmath_log_to_log10(lmath, bowt));
+                       TEST_EQUAL(wids[0], ngram_wid(model, "~"));
+                       TEST_EQUAL(wids[1], ngram_wid(model, "eleven"));
+               }
+               itor2 = ngram_iter_successors(itor);
+               for (itor3 = ngram_iter_successors(itor2);
+                    itor3; itor3 = ngram_iter_next(itor3)) {
+                       wids = ngram_iter_get(itor3, &score, &bowt);
+                       printf("%.4f %s %s %s\n",
+                              logmath_log_to_log10(lmath, score),
+                              ngram_word(model, wids[0]),
+                              ngram_word(model, wids[1]),
+                              ngram_word(model, wids[2]));
+                       TEST_EQUAL(wids[0], ngram_wid(model, "~"));
+                       TEST_EQUAL(wids[1], ngram_wid(model, "eleven"));
+                       TEST_EQUAL(wids[2], ngram_wid(model, "per"));
+               }
+               ngram_iter_free(itor2);
+               ngram_iter_free(itor);
+       }
+       
+       TEST_EQUAL(0, ngram_model_free(model));
+       logmath_free(lmath);
+
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_lm_mmap.c b/test/unit/test_ngram/test_lm_mmap.c
new file mode 100644 (file)
index 0000000..968ad56
--- /dev/null
@@ -0,0 +1,111 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+static const arg_t defn[] = {
+       { "-mmap", ARG_BOOLEAN, "yes", "use mmap" },
+       { "-lw", ARG_FLOAT32, "1.0", "language weight" },
+       { "-wip", ARG_FLOAT32, "1.0", "word insertion penalty" },
+       { "-uw", ARG_FLOAT32, "1.0", "unigram weight" },
+       { NULL, 0, NULL, NULL }
+};
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *model;
+       cmd_ln_t *config;
+       int32 n_used;
+
+       /* Initialize a logmath object to pass to ngram_read */
+       lmath = logmath_init(1.0001, 0, 0);
+       /* Initialize a cmd_ln_t with -mmap yes */
+       config = cmd_ln_parse_r(NULL, defn, 0, NULL, FALSE);
+
+       /* Read a language model (this won't mmap) */
+       model = ngram_model_read(config, LMDIR "/100.arpa.gz", NGRAM_ARPA, lmath);
+       TEST_ASSERT(model);
+       TEST_EQUAL(ngram_wid(model, "<UNK>"), 0);
+       TEST_EQUAL(ngram_wid(model, "absolute"), 13);
+       TEST_EQUAL(strcmp(ngram_word(model, 13), "absolute"), 0);
+       /* Test unigrams. */
+       TEST_EQUAL(ngram_score(model, "<UNK>", NULL), -75346);
+       TEST_EQUAL(ngram_bg_score(model, ngram_wid(model, "<UNK>"),
+                                 NGRAM_INVALID_WID, &n_used), -75346);
+       TEST_EQUAL(n_used, 1);
+       TEST_EQUAL(ngram_score(model, "sphinxtrain", NULL), -64208);
+       TEST_EQUAL(ngram_bg_score(model, ngram_wid(model, "sphinxtrain"),
+                                 NGRAM_INVALID_WID, &n_used), -64208);
+       TEST_EQUAL(n_used, 1);
+       /* Test bigrams. */
+       TEST_EQUAL(ngram_score(model, "huggins", "david", NULL), -831);
+       /* Test trigrams. */
+       TEST_EQUAL_LOG(ngram_score(model, "daines", "huggins", "david", NULL), -9450);
+
+       ngram_model_free(model);
+
+       /* Read a language model (this will mmap) */
+       model = ngram_model_read(config, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       TEST_ASSERT(model);
+       TEST_EQUAL(ngram_wid(model, "<UNK>"), 0);
+       TEST_EQUAL(strcmp(ngram_word(model, 0), "<UNK>"), 0);
+       TEST_EQUAL(ngram_wid(model, "absolute"), 13);
+       TEST_EQUAL(strcmp(ngram_word(model, 13), "absolute"), 0);
+       /* Test unigrams. */
+       TEST_EQUAL(ngram_score(model, "<UNK>", NULL), -75346);
+       TEST_EQUAL(ngram_bg_score(model, ngram_wid(model, "<UNK>"),
+                                 NGRAM_INVALID_WID, &n_used), -75346);
+       TEST_EQUAL(n_used, 1);
+       TEST_EQUAL(ngram_score(model, "sphinxtrain", NULL), -64208);
+       TEST_EQUAL(ngram_bg_score(model, ngram_wid(model, "sphinxtrain"),
+                                 NGRAM_INVALID_WID, &n_used), -64208);
+       TEST_EQUAL(n_used, 1);
+       /* Test bigrams. */
+       TEST_EQUAL(ngram_score(model, "huggins", "david", NULL), -831);
+       /* Test trigrams. */
+       TEST_EQUAL(ngram_score(model, "daines", "huggins", "david", NULL), -9452);
+
+       ngram_model_free(model);
+
+       /* Test language weights on the command line. */
+       cmd_ln_set_float32_r(config, "-lw", 2.0);
+       cmd_ln_set_float32_r(config, "-wip", 0.5);
+       model = ngram_model_read(config, LMDIR "/100.arpa.gz", NGRAM_ARPA, lmath);
+       TEST_ASSERT(model);
+       TEST_EQUAL(ngram_wid(model, "<UNK>"), 0);
+       TEST_EQUAL(ngram_wid(model, "absolute"), 13);
+       TEST_EQUAL(strcmp(ngram_word(model, 13), "absolute"), 0);
+       /* Test unigrams. */
+       TEST_EQUAL(ngram_score(model, "<UNK>", NULL), -75346
+                  * 2 + logmath_log(lmath, 0.5));
+       TEST_EQUAL(ngram_bg_score(model, ngram_wid(model, "<UNK>"),
+                                 NGRAM_INVALID_WID, &n_used), -75346
+                  * 2 + logmath_log(lmath, 0.5));
+       TEST_EQUAL(n_used, 1);
+       TEST_EQUAL(ngram_score(model, "sphinxtrain", NULL), -64208
+                  * 2 + logmath_log(lmath, 0.5));
+       TEST_EQUAL(ngram_bg_score(model, ngram_wid(model, "sphinxtrain"),
+                                 NGRAM_INVALID_WID, &n_used), -64208
+                  * 2 + logmath_log(lmath, 0.5));
+       TEST_EQUAL(n_used, 1);
+       /* Test bigrams. */
+       TEST_EQUAL(ngram_score(model, "huggins", "david", NULL),
+                  -831 * 2 + logmath_log(lmath, 0.5));
+       /* Test trigrams. */
+       TEST_EQUAL_LOG(ngram_score(model, "daines", "huggins", "david", NULL),
+                      -9450 * 2 + logmath_log(lmath, 0.5));
+
+       ngram_model_free(model);
+
+       logmath_free(lmath);
+       cmd_ln_free_r(config);
+
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_lm_read.c b/test/unit/test_ngram/test_lm_read.c
new file mode 100644 (file)
index 0000000..8e79c1d
--- /dev/null
@@ -0,0 +1,79 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+static int
+test_lm_vals(ngram_model_t *model)
+{
+       int32 n_used;
+       TEST_ASSERT(model);
+       TEST_EQUAL(ngram_wid(model, "<UNK>"), 0);
+       TEST_EQUAL(strcmp(ngram_word(model, 0), "<UNK>"), 0);
+       TEST_EQUAL(ngram_wid(model, "absolute"), 13);
+       TEST_EQUAL(strcmp(ngram_word(model, 13), "absolute"), 0);
+       /* Test unigrams. */
+       TEST_EQUAL(ngram_score(model, "<UNK>", NULL), -75346);
+       TEST_EQUAL(ngram_bg_score(model, ngram_wid(model, "<UNK>"),
+                                 NGRAM_INVALID_WID, &n_used), -75346);
+       TEST_EQUAL(n_used, 1);
+       TEST_EQUAL(ngram_score(model, "sphinxtrain", NULL), -64208);
+       TEST_EQUAL(ngram_bg_score(model, ngram_wid(model, "sphinxtrain"),
+                                 NGRAM_INVALID_WID, &n_used), -64208);
+       TEST_EQUAL(n_used, 1);
+       /* Test bigrams. */
+       TEST_EQUAL(ngram_score(model, "huggins", "david", NULL), -831);
+       /* Test trigrams. */
+       TEST_EQUAL_LOG(ngram_score(model, "daines", "huggins", "david", NULL), -9450);
+       return 0;
+}
+
+static int
+test_lm_ug_vals(ngram_model_t *model)
+{
+       TEST_ASSERT(model);
+       TEST_EQUAL(ngram_score(model, "BACKWARD", NULL), -53008);
+       return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *model;
+
+       /* Initialize a logmath object to pass to ngram_read */
+       lmath = logmath_init(1.0001, 0, 0);
+       /* Read a language model */
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.bz2", NGRAM_ARPA, lmath);
+       test_lm_vals(model);
+       TEST_EQUAL(0, ngram_model_free(model));
+
+       /* Read a language model */
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       test_lm_vals(model);
+
+       /* Test refcounting. */
+       model = ngram_model_retain(model);
+       TEST_EQUAL(1, ngram_model_free(model));
+       TEST_EQUAL(ngram_score(model, "daines", "huggins", "david", NULL), -9452);
+       TEST_EQUAL(0, ngram_model_free(model));
+
+       /* Read a language model */
+       model = ngram_model_read(NULL, LMDIR "/turtle.ug.lm", NGRAM_ARPA, lmath);
+       test_lm_ug_vals(model);
+
+       /* Read a language model */
+       model = ngram_model_read(NULL, LMDIR "/turtle.ug.lm.DMP", NGRAM_DMP, lmath);
+       test_lm_ug_vals(model);
+
+       logmath_free(lmath);
+
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_lm_recode.c b/test/unit/test_ngram/test_lm_recode.c
new file mode 100644 (file)
index 0000000..b4691a3
--- /dev/null
@@ -0,0 +1,30 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *model;
+
+       /* Initialize a logmath object to pass to ngram_read */
+       lmath = logmath_init(1.0001, 0, 0);
+
+       /* Read a language model */
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       TEST_ASSERT(model);
+
+       ngram_model_recode(model, "iso8859-1", "utf-8");
+       TEST_EQUAL(strcmp(ngram_word(model, 0), "<UNK>"), 0);
+       ngram_model_free(model);
+       logmath_free(lmath);
+
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_lm_score.c b/test/unit/test_ngram/test_lm_score.c
new file mode 100644 (file)
index 0000000..7fbe5a7
--- /dev/null
@@ -0,0 +1,88 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+void
+run_tests(ngram_model_t *model)
+{
+       int32 n_used;
+
+       ngram_tg_score(model,
+                      ngram_wid(model, "daines"),
+                      ngram_wid(model, "huggins"),
+                      ngram_wid(model, "huggins"), &n_used);
+       TEST_EQUAL(n_used, 2);
+       ngram_tg_score(model,
+                      ngram_wid(model, "david"),
+                      ngram_wid(model, "david"),
+                      ngram_wid(model, "david"), &n_used);
+       TEST_EQUAL(n_used, 1);
+
+       /* Apply weights. */
+       ngram_model_apply_weights(model, 7.5, 0.5, 1.0);
+       /* -9452 * 7.5 + log(0.5) = -77821 */
+       TEST_EQUAL_LOG(ngram_score(model, "daines", "huggins", "david", NULL),
+                  -77821);
+       /* Recover original score. */
+       TEST_EQUAL_LOG(ngram_prob(model, "daines", "huggins", "david", NULL),
+                  -9452);
+       TEST_EQUAL_LOG(ngram_prob(model, "huggins", "david", NULL), -831);
+
+       /* Un-apply weights. */
+       ngram_model_apply_weights(model, 1.0, 1.0, 1.0);
+       TEST_EQUAL_LOG(ngram_score(model, "daines", "huggins", "david", NULL),
+                      -9452);
+       TEST_EQUAL_LOG(ngram_score(model, "huggins", "david", NULL), -831);
+       /* Recover original score. */
+       TEST_EQUAL_LOG(ngram_prob(model, "daines", "huggins", "david", NULL),
+                      -9452);
+
+       /* Pre-weighting, this should give the "raw" score. */
+       TEST_EQUAL_LOG(ngram_score(model, "daines", "huggins", "david", NULL),
+                      -9452);
+       TEST_EQUAL_LOG(ngram_score(model, "huggins", "david", NULL), -831);
+       /* Verify that backoff mode calculations work. */
+       ngram_bg_score(model,
+                      ngram_wid(model, "huggins"),
+                      ngram_wid(model, "david"), &n_used);
+       TEST_EQUAL(n_used, 2);
+       ngram_bg_score(model,
+                      ngram_wid(model, "blorglehurfle"),
+                      ngram_wid(model, "david"), &n_used);
+       TEST_EQUAL(n_used, 1);
+       ngram_bg_score(model,
+                      ngram_wid(model, "david"),
+                      ngram_wid(model, "david"), &n_used);
+       TEST_EQUAL(n_used, 1);
+       ngram_tg_score(model,
+                      ngram_wid(model, "daines"),
+                      ngram_wid(model, "huggins"),
+                      ngram_wid(model, "david"), &n_used);
+       TEST_EQUAL(n_used, 3);
+}
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *model;
+
+       lmath = logmath_init(1.0001, 0, 0);
+
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       run_tests(model);
+       ngram_model_free(model);
+
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.gz", NGRAM_ARPA, lmath);
+       run_tests(model);
+       ngram_model_free(model);
+
+       logmath_free(lmath);
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_lm_set.c b/test/unit/test_ngram/test_lm_set.c
new file mode 100644 (file)
index 0000000..5d064c1
--- /dev/null
@@ -0,0 +1,198 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *lms[3];
+       ngram_model_t *lmset;
+       const char *names[] = { "100", "100_2" };
+       const char *words[] = {
+               "<UNK>",
+               "ROBOMAN",
+               "libio",
+               "sphinxtrain",
+               "bigbird",
+               "quuxfuzz"
+       };
+       const int32 n_words = sizeof(words) / sizeof(words[0]);
+       float32 weights[] = { 0.6, 0.4 };
+
+       lmath = logmath_init(1.0001, 0, 0);
+
+       lms[0] = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       lms[1] = ngram_model_read(NULL, LMDIR "/100_2.arpa.DMP", NGRAM_DMP, lmath);
+
+       lmset = ngram_model_set_init(NULL, lms, (char **)names, NULL, 2);
+       TEST_ASSERT(lmset);
+       TEST_EQUAL(ngram_model_set_select(lmset, "100_2"), lms[1]);
+       TEST_EQUAL(ngram_model_set_select(lmset, "100"), lms[0]);
+       TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL),
+                  logmath_log10_to_log(lmath, -2.7884));
+       TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL),
+                  logmath_log10_to_log(lmath, -0.0361));
+       TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL),
+                      logmath_log10_to_log(lmath, -0.4105));
+
+       TEST_EQUAL(ngram_model_set_select(lmset, "100_2"), lms[1]);
+       TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL),
+                  logmath_log10_to_log(lmath, -2.8192));
+       TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL),
+                  logmath_log10_to_log(lmath, -0.1597));
+       TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL),
+                      logmath_log10_to_log(lmath, -0.0512));
+
+       /* Test interpolation with default weights. */
+       TEST_ASSERT(ngram_model_set_interp(lmset, NULL, NULL));
+       TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL),
+                      logmath_log(lmath,
+                                  0.5 * pow(10, -2.7884)
+                                  + 0.5 * pow(10, -2.8192)));
+
+       /* Test interpolation with set weights. */
+       TEST_ASSERT(ngram_model_set_interp(lmset, names, weights));
+       TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL),
+                      logmath_log(lmath,
+                                  0.6 * pow(10, -2.7884)
+                                  + 0.4 * pow(10, -2.8192)));
+
+       /* Test switching back to selected mode. */
+       TEST_EQUAL(ngram_model_set_select(lmset, "100_2"), lms[1]);
+       TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL),
+                  logmath_log10_to_log(lmath, -2.8192));
+       TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL),
+                  logmath_log10_to_log(lmath, -0.1597));
+       TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL),
+                      logmath_log10_to_log(lmath, -0.0512));
+
+       /* Test interpolation with previously set weights. */
+       TEST_ASSERT(ngram_model_set_interp(lmset, NULL, NULL));
+       TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL),
+                      logmath_log(lmath,
+                                  0.6 * pow(10, -2.7884)
+                                  + 0.4 * pow(10, -2.8192)));
+
+       /* Test interpolation with closed-vocabulary models and OOVs. */
+       lms[2] = ngram_model_read(NULL, LMDIR "/turtle.lm", NGRAM_ARPA, lmath);
+       TEST_ASSERT(ngram_model_set_add(lmset, lms[2], "turtle", 1.0, FALSE));
+       TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL),
+                      logmath_log(lmath,
+                                  0.6 * (2.0 / 3.0) * pow(10, -2.7884)
+                                  + 0.4 * (2.0 / 3.0) * pow(10, -2.8192)));
+       ngram_model_free(lmset);
+
+       /* Test adding and removing language models with preserved
+        * word ID mappings. */
+       lms[0] = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       lms[1] = ngram_model_read(NULL, LMDIR "/100_2.arpa.DMP", NGRAM_DMP, lmath);
+       lms[2] = ngram_model_read(NULL, LMDIR "/turtle.lm", NGRAM_ARPA, lmath);
+       lmset = ngram_model_set_init(NULL, lms, (char **)names, NULL, 1);
+       {
+               int32 wid;
+               wid = ngram_wid(lmset, "sphinxtrain");
+               TEST_ASSERT(ngram_model_set_add(lmset, lms[1], "100_2", 1.0, TRUE));
+               /* Verify that it is the same. */
+               TEST_EQUAL(wid, ngram_wid(lmset, "sphinxtrain"));
+               /* Now add another model and verify that its words
+                * don't actually get added. */
+               TEST_ASSERT(ngram_model_set_add(lmset, lms[2], "turtle", 1.0, TRUE));
+               TEST_EQUAL(wid, ngram_wid(lmset, "sphinxtrain"));
+               TEST_EQUAL(ngram_unknown_wid(lmset), ngram_wid(lmset, "FORWARD"));
+               /* Remove language model, make sure this doesn't break horribly. */
+               TEST_EQUAL(lms[1], ngram_model_set_remove(lmset, "100_2", TRUE));
+               ngram_model_free(lms[1]);
+               TEST_EQUAL(wid, ngram_wid(lmset, "sphinxtrain"));
+               /* Now enable remapping of word IDs and verify that it works. */
+               TEST_EQUAL(lms[2], ngram_model_set_remove(lmset, "turtle", TRUE));
+               TEST_ASSERT(ngram_model_set_add(lmset, lms[2], "turtle", 1.0, FALSE));
+               printf("FORWARD = %d\n", ngram_wid(lmset, "FORWARD"));
+       }
+
+       ngram_model_free(lmset);
+
+       /* Now test lmctl files. */
+       lmset = ngram_model_set_read(NULL, LMDIR "/100.lmctl", lmath);
+       TEST_ASSERT(lmset);
+       /* Test iterators. */
+       {
+               ngram_model_set_iter_t *itor;
+               ngram_model_t *lm;
+               char const *lmname;
+
+               itor = ngram_model_set_iter(lmset);
+               TEST_ASSERT(itor);
+               lm = ngram_model_set_iter_model(itor, &lmname);
+               printf("1: %s\n", lmname);
+               itor = ngram_model_set_iter_next(itor);
+               lm = ngram_model_set_iter_model(itor, &lmname);
+               printf("2: %s\n", lmname);
+               itor = ngram_model_set_iter_next(itor);
+               lm = ngram_model_set_iter_model(itor, &lmname);
+               printf("3: %s\n", lmname);
+               itor = ngram_model_set_iter_next(itor);
+               TEST_EQUAL(itor, NULL);
+       }
+
+       TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL),
+                  logmath_log10_to_log(lmath, -2.7884));
+
+       TEST_ASSERT(ngram_model_set_interp(lmset, NULL, NULL));
+       TEST_EQUAL_LOG(ngram_score(lmset, "sphinxtrain", NULL),
+                      logmath_log(lmath,
+                                  (1.0 / 3.0) * pow(10, -2.7884)
+                                  + (1.0 / 3.0) * pow(10, -2.8192)));
+
+       ngram_model_set_select(lmset, "100_2");
+       TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL),
+                  logmath_log10_to_log(lmath, -2.8192));
+       TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL),
+                  logmath_log10_to_log(lmath, -0.1597));
+       TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL),
+                      logmath_log10_to_log(lmath, -0.0512));
+
+       ngram_model_set_select(lmset, "100");
+       TEST_EQUAL(ngram_score(lmset, "sphinxtrain", NULL),
+                  logmath_log10_to_log(lmath, -2.7884));
+       TEST_EQUAL(ngram_score(lmset, "huggins", "david", NULL),
+                  logmath_log10_to_log(lmath, -0.0361));
+       TEST_EQUAL_LOG(ngram_score(lmset, "daines", "huggins", "david", NULL),
+                      logmath_log10_to_log(lmath, -0.4105));
+
+       /* Test class probabilities. */
+       ngram_model_set_select(lmset, "100");
+       TEST_EQUAL_LOG(ngram_score(lmset, "scylla:scylla", NULL),
+                      logmath_log10_to_log(lmath, -2.7884) + logmath_log(lmath, 0.4));
+       TEST_EQUAL_LOG(ngram_score(lmset, "scooby:scylla", NULL),
+                      logmath_log10_to_log(lmath, -2.7884) + logmath_log(lmath, 0.1));
+       TEST_EQUAL_LOG(ngram_score(lmset, "apparently", "karybdis:scylla", NULL),
+                      logmath_log10_to_log(lmath, -0.5172));
+
+       /* Test word ID mapping. */
+       ngram_model_set_select(lmset, "turtle");
+       TEST_EQUAL(ngram_wid(lmset, "ROBOMAN"),
+                  ngram_wid(lmset, ngram_word(lmset, ngram_wid(lmset, "ROBOMAN"))));
+       TEST_EQUAL(ngram_wid(lmset, "bigbird"),
+                  ngram_wid(lmset, ngram_word(lmset, ngram_wid(lmset, "bigbird"))));
+       TEST_EQUAL(ngram_wid(lmset, "quuxfuzz"), ngram_unknown_wid(lmset));
+       TEST_EQUAL(ngram_score(lmset, "quuxfuzz", NULL), ngram_zero(lmset));
+       ngram_model_set_map_words(lmset, words, n_words);
+       TEST_EQUAL(ngram_wid(lmset, "ROBOMAN"),
+                  ngram_wid(lmset, ngram_word(lmset, ngram_wid(lmset, "ROBOMAN"))));
+       TEST_EQUAL(ngram_wid(lmset, "bigbird"),
+                  ngram_wid(lmset, ngram_word(lmset, ngram_wid(lmset, "bigbird"))));
+       TEST_EQUAL(ngram_wid(lmset, "quuxfuzz"), 5);
+       TEST_EQUAL(ngram_score(lmset, "quuxfuzz", NULL), ngram_zero(lmset));
+
+       ngram_model_free(lmset);
+       logmath_free(lmath);
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_lm_write.c b/test/unit/test_ngram/test_lm_write.c
new file mode 100644 (file)
index 0000000..90f46a4
--- /dev/null
@@ -0,0 +1,91 @@
+#include <ngram_model.h>
+#include <logmath.h>
+#include <strfuncs.h>
+#include <err.h>
+
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static int
+test_lm_vals(ngram_model_t *model)
+{
+       int32 n_used;
+
+       TEST_ASSERT(model);
+       TEST_EQUAL(ngram_wid(model, "<UNK>"), 0);
+       TEST_EQUAL(strcmp(ngram_word(model, 0), "<UNK>"), 0);
+       TEST_EQUAL(ngram_wid(model, "absolute"), 13);
+       TEST_EQUAL(strcmp(ngram_word(model, 13), "absolute"), 0);
+       /* Test unigrams. */
+       TEST_EQUAL_LOG(ngram_score(model, "<UNK>", NULL), -75346);
+       TEST_EQUAL_LOG(ngram_bg_score(model, ngram_wid(model, "<UNK>"),
+                                 NGRAM_INVALID_WID, &n_used), -75346);
+       TEST_EQUAL(n_used, 1);
+       TEST_EQUAL_LOG(ngram_score(model, "sphinxtrain", NULL), -64208);
+       TEST_EQUAL_LOG(ngram_bg_score(model, ngram_wid(model, "sphinxtrain"),
+                                 NGRAM_INVALID_WID, &n_used), -64208);
+       TEST_EQUAL(n_used, 1);
+       printf("FOO %d\n", ngram_score(model, "huggins", "david", NULL));
+       printf("FOO %d\n", ngram_score(model, "daines", "huggins", "david", NULL));
+       /* Test bigrams. */
+       TEST_EQUAL_LOG(ngram_score(model, "huggins", "david", NULL), -831);
+       /* Test trigrams. */
+       TEST_EQUAL_LOG(ngram_score(model, "daines", "huggins", "david", NULL), -9450);
+       return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+       logmath_t *lmath;
+       ngram_model_t *model;
+
+       /* Initialize a logmath object to pass to ngram_read */
+       lmath = logmath_init(1.0001, 0, 0);
+
+       /* Convert ARPA to DMP */
+       E_INFO("Converting ARPA to DMP\n");
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.bz2", NGRAM_ARPA, lmath);
+       test_lm_vals(model);
+       TEST_EQUAL(0, ngram_model_write(model, "100.tmp.DMP", NGRAM_DMP));
+       ngram_model_free(model);
+
+       /* Convert DMP to ARPA */
+       E_INFO("Converting DMP to ARPA\n");
+       model = ngram_model_read(NULL, LMDIR "/100.arpa.DMP", NGRAM_DMP, lmath);
+       test_lm_vals(model);
+       TEST_EQUAL(0, ngram_model_write(model, "100.tmp.arpa", NGRAM_ARPA));
+       ngram_model_free(model);
+
+       /* Test converted DMP */
+       E_INFO("Testing converted DMP\n");
+       model = ngram_model_read(NULL, "100.tmp.DMP", NGRAM_DMP, lmath);
+       test_lm_vals(model);
+       ngram_model_free(model);
+
+       /* Test converted ARPA */
+       E_INFO("Testing converted ARPA\n");
+       model = ngram_model_read(NULL, "100.tmp.arpa", NGRAM_ARPA, lmath);
+       test_lm_vals(model);
+       ngram_model_free(model);
+
+       /* Convert DMP back to ARPA*/
+       E_INFO("Converting ARPA back to DMP\n");
+       model = ngram_model_read(NULL, "100.tmp.arpa", NGRAM_ARPA, lmath);
+       test_lm_vals(model);
+       TEST_EQUAL(0, ngram_model_write(model, "100.tmp.DMP", NGRAM_DMP));
+       ngram_model_free(model);
+
+       /* Convert ARPA back to DMP */
+       E_INFO("Converting DMP back to ARPA\n");
+       model = ngram_model_read(NULL, "100.tmp.DMP", NGRAM_DMP, lmath);
+       test_lm_vals(model);
+       TEST_EQUAL(0, ngram_model_write(model, "100.tmp.arpa", NGRAM_ARPA));
+       ngram_model_free(model);
+
+       logmath_free(lmath);
+       return 0;
+}
diff --git a/test/unit/test_ngram/test_macros.h b/test/unit/test_ngram/test_macros.h
new file mode 100644 (file)
index 0000000..67b177b
--- /dev/null
@@ -0,0 +1,11 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_ngram/turtle.lm b/test/unit/test_ngram/turtle.lm
new file mode 100644 (file)
index 0000000..1cf3d7a
--- /dev/null
@@ -0,0 +1,498 @@
+Language model created by QuickLM on Wed Aug  4 14:21:56 EDT 1999
+Carnegie Mellon University (c) 1996
+
+This model based on a corpus of  sentences and  words
+The (fixed) discount mass is 0.5
+
+\data\
+ngram 1=91
+ngram 2=212
+ngram 3=177
+
+\1-grams:
+-0.9129 </s> -0.3010
+-0.9129 <s> -0.2144
+-2.6031 A -0.2999
+-2.6031 AND -0.2989
+-2.3021 ARE -0.2978
+-2.6031 AROUND -0.2444
+-2.3021 BACKWARD -0.2338
+-2.9042 BACKWARDS -0.2444
+-2.6031 BYE -0.2432
+-2.9042 CENTIMETER -0.2444
+-2.9042 CENTIMETERS -0.2444
+-2.9042 CHASE -0.2989
+-2.9042 COLOR -0.2999
+-1.9499 DEGREES -0.2444
+-2.6031 DISPLAY -0.2999
+-2.9042 DO -0.2983
+-2.9042 DOING -0.2444
+-2.9042 EIGHT -0.2444
+-2.9042 EIGHTEEN -0.2444
+-2.4271 EIGHTY -0.2388
+-2.9042 ELEVEN -0.2444
+-2.9042 EXIT -0.2444
+-2.9042 EXPLORE -0.2444
+-2.6031 FIFTEEN -0.2388
+-2.9042 FIFTY -0.2444
+-2.9042 FIND -0.2989
+-2.9042 FINISH -0.2444
+-2.1260 FIVE -0.2338
+-2.3021 FORTY -0.2407
+-2.0011 FORWARD -0.2281
+-2.9042 FOUR -0.2444
+-2.9042 FOURTEEN -0.2444
+-1.7001 GO -0.2923
+-2.9042 GREY -0.2999
+-2.9042 GUARD -0.2989
+-2.4271 HALF -0.2420
+-2.9042 HALL -0.2444
+-2.9042 HALLWAY -0.2444
+-2.9042 HALT -0.2444
+-2.9042 HELLO -0.2444
+-2.9042 HOME -0.2444
+-2.6031 HUNDRED -0.2432
+-2.9042 KEVIN -0.2444
+-2.6031 LAB -0.2444
+-2.2052 LEFT -0.2338
+-2.9042 LISTENING -0.2444
+-2.9042 LOST -0.2444
+-2.3021 METER -0.2444
+-2.0011 METERS -0.2444
+-2.6031 MINUS -0.2983
+-2.9042 NINE -0.2444
+-2.9042 NINETEEN -0.2444
+-2.4271 NINETY -0.2388
+-2.9042 OFFICE -0.2444
+-2.0011 ONE -0.2351
+-2.9042 PERSON -0.2444
+-2.4271 QUARTER -0.2444
+-2.9042 QUARTERS -0.2444
+-2.9042 QUIT -0.2444
+-2.9042 READY -0.2444
+-2.9042 REID -0.2444
+-2.1260 RIGHT -0.2325
+-2.9042 ROBOMAN -0.2444
+-2.9042 ROOM -0.2444
+-2.0591 ROTATE -0.2950
+-2.6031 SAY -0.2994
+-2.9042 SEBASTIAN -0.2444
+-2.6031 SEVEN -0.2395
+-2.9042 SEVENTEEN -0.2444
+-2.9042 SEVENTY -0.2444
+-2.9042 SIX -0.2444
+-2.9042 SIXTEEN -0.2444
+-2.9042 SIXTY -0.2444
+-2.9042 STOP -0.2444
+-2.4271 TEN -0.2338
+-2.3021 THE -0.2432
+-2.9042 THEN -0.2444
+-2.9042 THIRTEEN -0.2444
+-2.6031 THIRTY -0.2388
+-2.3021 THREE -0.2370
+-2.6031 TO -0.2420
+-2.9042 TOM -0.2444
+-2.2052 TURN -0.2939
+-2.9042 TWELVE -0.2444
+-2.9042 TWENTY -0.2444
+-2.4271 TWO -0.2395
+-2.9042 UNDERSTAND -0.2444
+-2.9042 WANDER -0.2999
+-2.9042 WHAT -0.2989
+-2.6031 WINDOW -0.2444
+-2.2052 YOU -0.2967
+
+\2-grams:
+-2.2923 <s> AND -0.1761
+-1.9912 <s> ARE -0.0969
+-2.2923 <s> CENTIMETER 0.0000
+-2.2923 <s> CENTIMETERS 0.0000
+-2.2923 <s> CHASE 0.0000
+-1.9912 <s> DISPLAY 0.0000
+-2.2923 <s> DO 0.0000
+-2.2923 <s> EIGHT 0.0000
+-2.2923 <s> EIGHTEEN 0.0000
+-2.2923 <s> EIGHTY -0.2218
+-2.2923 <s> ELEVEN 0.0000
+-2.2923 <s> EXIT 0.0000
+-2.2923 <s> EXPLORE 0.0000
+-2.2923 <s> FIFTEEN -0.1761
+-2.2923 <s> FIFTY 0.0000
+-2.2923 <s> FIND 0.0000
+-2.2923 <s> FINISH 0.0000
+-2.2923 <s> FIVE -0.2218
+-1.9912 <s> FORTY 0.0000
+-2.2923 <s> FOUR 0.0000
+-2.2923 <s> FOURTEEN 0.0000
+-1.0881 <s> GO 0.0000
+-2.2923 <s> GUARD 0.0000
+-2.2923 <s> HALF -0.1249
+-2.2923 <s> HALL 0.0000
+-2.2923 <s> HALLWAY 0.0000
+-2.2923 <s> HALT 0.0000
+-2.2923 <s> HUNDRED -0.1761
+-2.2923 <s> KEVIN 0.0000
+-2.2923 <s> LAB 0.0000
+-2.2923 <s> METER 0.0000
+-2.2923 <s> METERS 0.0000
+-2.2923 <s> NINE 0.0000
+-2.2923 <s> NINETEEN 0.0000
+-2.2923 <s> NINETY -0.2218
+-2.2923 <s> OFFICE 0.0000
+-1.8151 <s> ONE -0.1761
+-2.2923 <s> PERSON 0.0000
+-2.2923 <s> QUARTER 0.0000
+-2.2923 <s> QUIT 0.0000
+-2.2923 <s> REID 0.0000
+-2.2923 <s> ROBOMAN 0.0000
+-2.2923 <s> ROOM 0.0000
+-1.4472 <s> ROTATE 0.0000
+-1.9912 <s> SAY 0.0000
+-2.2923 <s> SEBASTIAN 0.0000
+-2.2923 <s> SEVEN -0.1761
+-2.2923 <s> SEVENTEEN 0.0000
+-2.2923 <s> SEVENTY 0.0000
+-2.2923 <s> SIX 0.0000
+-2.2923 <s> SIXTEEN 0.0000
+-2.2923 <s> SIXTY 0.0000
+-2.2923 <s> STOP 0.0000
+-2.2923 <s> TEN -0.2218
+-2.2923 <s> THIRTEEN 0.0000
+-2.2923 <s> THIRTY -0.1761
+-1.8151 <s> THREE -0.0969
+-2.2923 <s> TOM 0.0000
+-1.5933 <s> TURN 0.0000
+-2.2923 <s> TWELVE 0.0000
+-2.2923 <s> TWENTY 0.0000
+-2.2923 <s> TWO -0.2218
+-2.2923 <s> WANDER 0.0000
+-2.2923 <s> WHAT 0.0000
+-2.2923 <s> YOU -0.2553
+-0.6021 A COLOR 0.0000
+-0.6021 A GREY 0.0000
+-0.6021 AND EIGHTY -0.1249
+-0.6021 AND THEN 0.0000
+-0.9031 ARE LOST 0.0000
+-0.4260 ARE YOU -0.1461
+-0.3010 AROUND </s> -0.3010
+-0.9031 BACKWARD </s> -0.3010
+-0.9031 BACKWARD FIVE -0.2218
+-0.9031 BACKWARD ONE -0.2430
+-0.9031 BACKWARD TWO -0.1249
+-0.3010 BACKWARDS </s> -0.3010
+-0.6021 BYE </s> -0.3010
+-0.6021 BYE BYE -0.1761
+-0.3010 CENTIMETER </s> -0.3010
+-0.3010 CENTIMETERS </s> -0.3010
+-0.3010 CHASE THE -0.0969
+-0.3010 COLOR WINDOW 0.0000
+-0.3010 DEGREES </s> -0.3010
+-0.3010 DISPLAY A 0.0000
+-0.3010 DO YOU -0.2553
+-0.3010 DOING </s> -0.3010
+-0.3010 EIGHT </s> -0.3010
+-0.3010 EIGHTEEN </s> -0.3010
+-0.7782 EIGHTY </s> -0.3010
+-0.4771 EIGHTY DEGREES 0.0000
+-0.3010 ELEVEN </s> -0.3010
+-0.3010 EXIT </s> -0.3010
+-0.3010 EXPLORE </s> -0.3010
+-0.6021 FIFTEEN </s> -0.3010
+-0.6021 FIFTEEN DEGREES 0.0000
+-0.3010 FIFTY </s> -0.3010
+-0.3010 FIND THE -0.0969
+-0.3010 FINISH </s> -0.3010
+-0.7782 FIVE </s> -0.3010
+-0.7782 FIVE DEGREES 0.0000
+-0.7782 FIVE METERS 0.0000
+-0.9031 FORTY </s> -0.3010
+-0.4260 FORTY FIVE -0.1249
+-1.2041 FORWARD </s> -0.3010
+-1.2041 FORWARD FIVE -0.2218
+-0.9031 FORWARD ONE -0.1761
+-1.2041 FORWARD SEVEN -0.1761
+-1.2041 FORWARD TEN -0.2218
+-1.2041 FORWARD THREE -0.2430
+-1.2041 FORWARD TWO -0.1249
+-0.3010 FOUR </s> -0.3010
+-0.3010 FOURTEEN </s> -0.3010
+-0.9031 GO BACKWARD 0.0000
+-1.5051 GO BACKWARDS 0.0000
+-0.6021 GO FORWARD 0.0000
+-1.5051 GO HOME 0.0000
+-1.2041 GO TO 0.0000
+-0.3010 GREY WINDOW 0.0000
+-0.3010 GUARD THE -0.0969
+-0.4771 HALF </s> -0.3010
+-0.7782 HALF METER 0.0000
+-0.3010 HALL </s> -0.3010
+-0.3010 HALLWAY </s> -0.3010
+-0.3010 HALT </s> -0.3010
+-0.3010 HELLO </s> -0.3010
+-0.3010 HOME </s> -0.3010
+-0.6021 HUNDRED </s> -0.3010
+-0.6021 HUNDRED AND -0.1761
+-0.3010 KEVIN </s> -0.3010
+-0.3010 LAB </s> -0.3010
+-1.0000 LEFT </s> -0.3010
+-1.0000 LEFT FORTY -0.0969
+-1.0000 LEFT MINUS -0.1761
+-1.0000 LEFT NINETY -0.1249
+-1.0000 LEFT ONE -0.2730
+-0.3010 LISTENING </s> -0.3010
+-0.3010 LOST </s> -0.3010
+-0.3010 METER </s> -0.3010
+-0.3010 METERS </s> -0.3010
+-0.6021 MINUS NINETY -0.1249
+-0.6021 MINUS THIRTY -0.1761
+-0.3010 NINE </s> -0.3010
+-0.3010 NINETEEN </s> -0.3010
+-0.7782 NINETY </s> -0.3010
+-0.4771 NINETY DEGREES 0.0000
+-0.3010 OFFICE </s> -0.3010
+-1.2041 ONE </s> -0.3010
+-1.2041 ONE EIGHTY -0.1249
+-0.9031 ONE HALF 0.0000
+-1.2041 ONE HUNDRED -0.1761
+-0.9031 ONE METER 0.0000
+-1.2041 ONE QUARTER 0.0000
+-0.3010 PERSON </s> -0.3010
+-0.3010 QUARTER </s> -0.3010
+-0.3010 QUARTERS </s> -0.3010
+-0.3010 QUIT </s> -0.3010
+-0.3010 READY </s> -0.3010
+-0.3010 REID </s> -0.3010
+-1.0792 RIGHT </s> -0.3010
+-1.0792 RIGHT FIFTEEN -0.1761
+-1.0792 RIGHT FORTY -0.0969
+-1.0792 RIGHT MINUS -0.1761
+-1.0792 RIGHT ONE -0.2730
+-1.0792 RIGHT TEN -0.2218
+-0.3010 ROBOMAN </s> -0.3010
+-0.3010 ROOM </s> -0.3010
+-0.6690 ROTATE LEFT -0.1461
+-0.5441 ROTATE RIGHT -0.1249
+-0.6021 SAY BYE -0.1761
+-0.6021 SAY HELLO 0.0000
+-0.3010 SEBASTIAN </s> -0.3010
+-0.6021 SEVEN </s> -0.3010
+-0.6021 SEVEN METERS 0.0000
+-0.3010 SEVENTEEN </s> -0.3010
+-0.3010 SEVENTY </s> -0.3010
+-0.3010 SIX </s> -0.3010
+-0.3010 SIXTEEN </s> -0.3010
+-0.3010 SIXTY </s> -0.3010
+-0.3010 STOP </s> -0.3010
+-0.7782 TEN </s> -0.3010
+-0.7782 TEN DEGREES 0.0000
+-0.7782 TEN METERS 0.0000
+-0.4260 THE </s> -0.3010
+-0.9031 THE LAB 0.0000
+-0.3010 THEN </s> -0.3010
+-0.3010 THIRTEEN </s> -0.3010
+-0.6021 THIRTY </s> -0.3010
+-0.6021 THIRTY DEGREES 0.0000
+-0.9031 THREE </s> -0.3010
+-0.9031 THREE METERS 0.0000
+-0.9031 THREE QUARTER 0.0000
+-0.9031 THREE QUARTERS 0.0000
+-0.6021 TO </s> -0.3010
+-0.6021 TO THE -0.2430
+-0.3010 TOM </s> -0.3010
+-1.0000 TURN AROUND 0.0000
+-0.6990 TURN LEFT -0.2041
+-0.6990 TURN RIGHT -0.2218
+-0.3010 TWELVE </s> -0.3010
+-0.3010 TWENTY </s> -0.3010
+-0.7782 TWO </s> -0.3010
+-0.4771 TWO METERS 0.0000
+-0.3010 UNDERSTAND </s> -0.3010
+-0.3010 WANDER AROUND 0.0000
+-0.3010 WHAT ARE -0.0969
+-0.3010 WINDOW </s> -0.3010
+-1.0000 YOU ARE -0.2430
+-1.0000 YOU DOING 0.0000
+-1.0000 YOU LISTENING 0.0000
+-1.0000 YOU READY 0.0000
+-1.0000 YOU UNDERSTAND 0.0000
+
+\3-grams:
+-0.3010 <s> AND THEN
+-0.3010 <s> ARE YOU
+-0.3010 <s> CENTIMETER </s>
+-0.3010 <s> CENTIMETERS </s>
+-0.3010 <s> CHASE THE
+-0.3010 <s> DISPLAY A
+-0.3010 <s> DO YOU
+-0.3010 <s> EIGHT </s>
+-0.3010 <s> EIGHTEEN </s>
+-0.3010 <s> EIGHTY </s>
+-0.3010 <s> ELEVEN </s>
+-0.3010 <s> EXIT </s>
+-0.3010 <s> EXPLORE </s>
+-0.3010 <s> FIFTEEN </s>
+-0.3010 <s> FIFTY </s>
+-0.3010 <s> FIND THE
+-0.3010 <s> FINISH </s>
+-0.3010 <s> FIVE </s>
+-0.6021 <s> FORTY </s>
+-0.6021 <s> FORTY FIVE
+-0.3010 <s> FOUR </s>
+-0.3010 <s> FOURTEEN </s>
+-0.9031 <s> GO BACKWARD
+-1.5051 <s> GO BACKWARDS
+-0.6021 <s> GO FORWARD
+-1.5051 <s> GO HOME
+-1.2041 <s> GO TO
+-0.3010 <s> GUARD THE
+-0.3010 <s> HALF </s>
+-0.3010 <s> HALL </s>
+-0.3010 <s> HALLWAY </s>
+-0.3010 <s> HALT </s>
+-0.3010 <s> HUNDRED </s>
+-0.3010 <s> KEVIN </s>
+-0.3010 <s> LAB </s>
+-0.3010 <s> METER </s>
+-0.3010 <s> METERS </s>
+-0.3010 <s> NINE </s>
+-0.3010 <s> NINETEEN </s>
+-0.3010 <s> NINETY </s>
+-0.3010 <s> OFFICE </s>
+-0.7782 <s> ONE </s>
+-0.7782 <s> ONE HALF
+-0.7782 <s> ONE QUARTER
+-0.3010 <s> PERSON </s>
+-0.3010 <s> QUARTER </s>
+-0.3010 <s> QUIT </s>
+-0.3010 <s> REID </s>
+-0.3010 <s> ROBOMAN </s>
+-0.3010 <s> ROOM </s>
+-0.6690 <s> ROTATE LEFT
+-0.5441 <s> ROTATE RIGHT
+-0.6021 <s> SAY BYE
+-0.6021 <s> SAY HELLO
+-0.3010 <s> SEBASTIAN </s>
+-0.3010 <s> SEVEN </s>
+-0.3010 <s> SEVENTEEN </s>
+-0.3010 <s> SEVENTY </s>
+-0.3010 <s> SIX </s>
+-0.3010 <s> SIXTEEN </s>
+-0.3010 <s> SIXTY </s>
+-0.3010 <s> STOP </s>
+-0.3010 <s> TEN </s>
+-0.3010 <s> THIRTEEN </s>
+-0.3010 <s> THIRTY </s>
+-0.7782 <s> THREE </s>
+-0.7782 <s> THREE QUARTER
+-0.7782 <s> THREE QUARTERS
+-0.3010 <s> TOM </s>
+-1.0000 <s> TURN AROUND
+-0.6990 <s> TURN LEFT
+-0.6990 <s> TURN RIGHT
+-0.3010 <s> TWELVE </s>
+-0.3010 <s> TWENTY </s>
+-0.3010 <s> TWO </s>
+-0.3010 <s> WANDER AROUND
+-0.3010 <s> WHAT ARE
+-0.3010 <s> YOU ARE
+-0.3010 A COLOR WINDOW
+-0.3010 A GREY WINDOW
+-0.3010 AND EIGHTY DEGREES
+-0.3010 AND THEN </s>
+-0.3010 ARE LOST </s>
+-0.7782 ARE YOU DOING
+-0.7782 ARE YOU LISTENING
+-0.7782 ARE YOU READY
+-0.3010 BACKWARD FIVE METERS
+-0.3010 BACKWARD ONE METER
+-0.3010 BACKWARD TWO METERS
+-0.3010 BYE BYE </s>
+-0.3010 CHASE THE </s>
+-0.3010 COLOR WINDOW </s>
+-0.6021 DISPLAY A COLOR
+-0.6021 DISPLAY A GREY
+-0.3010 DO YOU UNDERSTAND
+-0.3010 EIGHTY DEGREES </s>
+-0.3010 FIFTEEN DEGREES </s>
+-0.3010 FIND THE </s>
+-0.3010 FIVE DEGREES </s>
+-0.3010 FIVE METERS </s>
+-0.7782 FORTY FIVE </s>
+-0.4771 FORTY FIVE DEGREES
+-0.3010 FORWARD FIVE METERS
+-0.6021 FORWARD ONE HALF
+-0.6021 FORWARD ONE METER
+-0.3010 FORWARD SEVEN METERS
+-0.3010 FORWARD TEN METERS
+-0.3010 FORWARD THREE METERS
+-0.3010 FORWARD TWO METERS
+-0.9031 GO BACKWARD </s>
+-0.9031 GO BACKWARD FIVE
+-0.9031 GO BACKWARD ONE
+-0.9031 GO BACKWARD TWO
+-0.3010 GO BACKWARDS </s>
+-1.2041 GO FORWARD </s>
+-1.2041 GO FORWARD FIVE
+-0.9031 GO FORWARD ONE
+-1.2041 GO FORWARD SEVEN
+-1.2041 GO FORWARD TEN
+-1.2041 GO FORWARD THREE
+-1.2041 GO FORWARD TWO
+-0.3010 GO HOME </s>
+-0.6021 GO TO </s>
+-0.6021 GO TO THE
+-0.3010 GREY WINDOW </s>
+-0.3010 GUARD THE </s>
+-0.3010 HALF METER </s>
+-0.3010 HUNDRED AND EIGHTY
+-0.3010 LEFT FORTY FIVE
+-0.3010 LEFT MINUS NINETY
+-0.3010 LEFT NINETY DEGREES
+-0.3010 LEFT ONE EIGHTY
+-0.3010 MINUS NINETY DEGREES
+-0.3010 MINUS THIRTY DEGREES
+-0.3010 NINETY DEGREES </s>
+-0.3010 ONE EIGHTY DEGREES
+-0.6021 ONE HALF </s>
+-0.6021 ONE HALF METER
+-0.3010 ONE HUNDRED AND
+-0.3010 ONE METER </s>
+-0.3010 ONE QUARTER </s>
+-0.3010 RIGHT FIFTEEN DEGREES
+-0.3010 RIGHT FORTY FIVE
+-0.3010 RIGHT MINUS THIRTY
+-0.3010 RIGHT ONE HUNDRED
+-0.3010 RIGHT TEN DEGREES
+-0.7782 ROTATE LEFT FORTY
+-0.7782 ROTATE LEFT MINUS
+-0.7782 ROTATE LEFT ONE
+-0.9031 ROTATE RIGHT FIFTEEN
+-0.9031 ROTATE RIGHT MINUS
+-0.9031 ROTATE RIGHT ONE
+-0.9031 ROTATE RIGHT TEN
+-0.3010 SAY BYE BYE
+-0.3010 SAY HELLO </s>
+-0.3010 SEVEN METERS </s>
+-0.3010 TEN DEGREES </s>
+-0.3010 TEN METERS </s>
+-0.3010 THE LAB </s>
+-0.3010 THIRTY DEGREES </s>
+-0.3010 THREE METERS </s>
+-0.3010 THREE QUARTER </s>
+-0.3010 THREE QUARTERS </s>
+-0.3010 TO THE LAB
+-0.3010 TURN AROUND </s>
+-0.6021 TURN LEFT </s>
+-0.6021 TURN LEFT NINETY
+-0.6021 TURN RIGHT </s>
+-0.6021 TURN RIGHT FORTY
+-0.3010 TWO METERS </s>
+-0.3010 WANDER AROUND </s>
+-0.3010 WHAT ARE YOU
+-0.3010 YOU ARE LOST
+-0.3010 YOU DOING </s>
+-0.3010 YOU LISTENING </s>
+-0.3010 YOU READY </s>
+-0.3010 YOU UNDERSTAND </s>
+
+\end\
diff --git a/test/unit/test_ngram/turtle.lm.DMP b/test/unit/test_ngram/turtle.lm.DMP
new file mode 100644 (file)
index 0000000..cef559b
Binary files /dev/null and b/test/unit/test_ngram/turtle.lm.DMP differ
diff --git a/test/unit/test_ngram/turtle.ug.lm b/test/unit/test_ngram/turtle.ug.lm
new file mode 100644 (file)
index 0000000..77bb834
--- /dev/null
@@ -0,0 +1,98 @@
+This is an ARPA-format language model file, generated by CMU Sphinx
+\data\
+ngram 1=91
+
+\1-grams:
+-0.9128 </s> 
+-0.9128 <s> 
+-2.6030 A 
+-2.6030 AND 
+-2.3020 ARE 
+-2.6030 AROUND 
+-2.3020 BACKWARD 
+-2.9042 BACKWARDS 
+-2.6030 BYE 
+-2.9042 CENTIMETER 
+-2.9042 CENTIMETERS 
+-2.9042 CHASE 
+-2.9042 COLOR 
+-1.9499 DEGREES 
+-2.6030 DISPLAY 
+-2.9042 DO 
+-2.9042 DOING 
+-2.9042 EIGHT 
+-2.9042 EIGHTEEN 
+-2.4271 EIGHTY 
+-2.9042 ELEVEN 
+-2.9042 EXIT 
+-2.9042 EXPLORE 
+-2.6030 FIFTEEN 
+-2.9042 FIFTY 
+-2.9042 FIND 
+-2.9042 FINISH 
+-2.1259 FIVE 
+-2.3020 FORTY 
+-2.0011 FORWARD 
+-2.9042 FOUR 
+-2.9042 FOURTEEN 
+-1.7000 GO 
+-2.9042 GREY 
+-2.9042 GUARD 
+-2.4271 HALF 
+-2.9042 HALL 
+-2.9042 HALLWAY 
+-2.9042 HALT 
+-2.9042 HELLO 
+-2.9042 HOME 
+-2.6030 HUNDRED 
+-2.9042 KEVIN 
+-2.6030 LAB 
+-2.2052 LEFT 
+-2.9042 LISTENING 
+-2.9042 LOST 
+-2.3020 METER 
+-2.0011 METERS 
+-2.6030 MINUS 
+-2.9042 NINE 
+-2.9042 NINETEEN 
+-2.4271 NINETY 
+-2.9042 OFFICE 
+-2.0011 ONE 
+-2.9042 PERSON 
+-2.4271 QUARTER 
+-2.9042 QUARTERS 
+-2.9042 QUIT 
+-2.9042 READY 
+-2.9042 REID 
+-2.1259 RIGHT 
+-2.9042 ROBOMAN 
+-2.9042 ROOM 
+-2.0590 ROTATE 
+-2.6030 SAY 
+-2.9042 SEBASTIAN 
+-2.6030 SEVEN 
+-2.9042 SEVENTEEN 
+-2.9042 SEVENTY 
+-2.9042 SIX 
+-2.9042 SIXTEEN 
+-2.9042 SIXTY 
+-2.9042 STOP 
+-2.4271 TEN 
+-2.3020 THE 
+-2.9042 THEN 
+-2.9042 THIRTEEN 
+-2.6030 THIRTY 
+-2.3020 THREE 
+-2.6030 TO 
+-2.9042 TOM 
+-2.2052 TURN 
+-2.9042 TWELVE 
+-2.9042 TWENTY 
+-2.4271 TWO 
+-2.9042 UNDERSTAND 
+-2.9042 WANDER 
+-2.9042 WHAT 
+-2.6030 WINDOW 
+-2.2052 YOU 
+
+\end\
diff --git a/test/unit/test_ngram/turtle.ug.lm.DMP b/test/unit/test_ngram/turtle.ug.lm.DMP
new file mode 100644 (file)
index 0000000..d39a97d
Binary files /dev/null and b/test/unit/test_ngram/turtle.ug.lm.DMP differ
diff --git a/test/unit/test_string/Makefile.am b/test/unit/test_string/Makefile.am
new file mode 100644 (file)
index 0000000..dd1a011
--- /dev/null
@@ -0,0 +1,23 @@
+check_PROGRAMS = strtest test_atof
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(srcdir)\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+
+TESTS = _fread_line.test                       \
+       _nextword.test                          \
+       _str2words.test                         \
+       _string_join.test                       \
+       _string_trim.test                       \
+       test_atof
+
+EXTRA_DIST = _fread_line.txt                   \
+        _fread_line.test                       \
+       _nextword.test                          \
+       _str2words.test                         \
+       _string_join.test                       \
+       _string_trim.test
diff --git a/test/unit/test_string/Makefile.in b/test/unit/test_string/Makefile.in
new file mode 100644 (file)
index 0000000..21f10eb
--- /dev/null
@@ -0,0 +1,566 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = strtest$(EXEEXT) test_atof$(EXEEXT)
+TESTS = _fread_line.test _nextword.test _str2words.test \
+       _string_join.test _string_trim.test test_atof$(EXEEXT)
+subdir = test/unit/test_string
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+strtest_SOURCES = strtest.c
+strtest_OBJECTS = strtest.$(OBJEXT)
+strtest_LDADD = $(LDADD)
+strtest_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_atof_SOURCES = test_atof.c
+test_atof_OBJECTS = test_atof.$(OBJEXT)
+test_atof_LDADD = $(LDADD)
+test_atof_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = strtest.c test_atof.c
+DIST_SOURCES = strtest.c test_atof.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(srcdir)\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+EXTRA_DIST = _fread_line.txt                   \
+        _fread_line.test                       \
+       _nextword.test                          \
+       _str2words.test                         \
+       _string_join.test                       \
+       _string_trim.test
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_string/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_string/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+strtest$(EXEEXT): $(strtest_OBJECTS) $(strtest_DEPENDENCIES) 
+       @rm -f strtest$(EXEEXT)
+       $(LINK) $(strtest_OBJECTS) $(strtest_LDADD) $(LIBS)
+test_atof$(EXEEXT): $(test_atof_OBJECTS) $(test_atof_DEPENDENCIES) 
+       @rm -f test_atof$(EXEEXT)
+       $(LINK) $(test_atof_OBJECTS) $(test_atof_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_atof.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+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:
+
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_string/_fread_line.test b/test/unit/test_string/_fread_line.test
new file mode 100755 (executable)
index 0000000..dd3827e
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec ./strtest fread_line
diff --git a/test/unit/test_string/_fread_line.txt b/test/unit/test_string/_fread_line.txt
new file mode 100644 (file)
index 0000000..e00c129
--- /dev/null
@@ -0,0 +1,3 @@
+Hello world!
+123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456
+All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  
diff --git a/test/unit/test_string/_nextword.test b/test/unit/test_string/_nextword.test
new file mode 100755 (executable)
index 0000000..bccbf6d
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec ./strtest nextword
diff --git a/test/unit/test_string/_str2words.test b/test/unit/test_string/_str2words.test
new file mode 100755 (executable)
index 0000000..49b3555
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec ./strtest str2words
diff --git a/test/unit/test_string/_string_join.test b/test/unit/test_string/_string_join.test
new file mode 100755 (executable)
index 0000000..cbdb6b6
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec ./strtest string_join
diff --git a/test/unit/test_string/_string_trim.test b/test/unit/test_string/_string_trim.test
new file mode 100755 (executable)
index 0000000..9ad5d93
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec ./strtest string_trim
diff --git a/test/unit/test_string/strtest.c b/test/unit/test_string/strtest.c
new file mode 100644 (file)
index 0000000..c76abad
--- /dev/null
@@ -0,0 +1,191 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "strfuncs.h"
+#include "pio.h"
+#include "ckd_alloc.h"
+
+int
+main(int argc, char *argv[])
+{
+    if (argc < 2)
+        return 1;
+
+    if (!strcmp(argv[1], "string_join")) {
+        char *foo = string_join("bar", "baz", "quux", NULL);
+        if (strcmp(foo, "barbazquux") != 0) {
+            printf("%s != barbazquux\n", foo);
+            return 1;
+        }
+        foo = string_join("hello", NULL);
+        if (strcmp(foo, "hello") != 0) {
+            printf("%s != hello\n", foo);
+            return 1;
+        }
+        return 0;
+    }
+    else if (!strcmp(argv[1], "fread_line")) {
+        FILE *fp = fopen(TESTDATADIR "/_fread_line.txt", "r");
+        char *line;
+        size_t len;
+
+        if (fp == NULL) {
+            perror("Failed to open " TESTDATADIR "/_fread_line.txt");
+            return 1;
+        }
+        line = fread_line(fp, &len);
+        printf("len = %d orig = %d\n", len,
+               strlen("Hello world!\n"));
+        if (strcmp(line, "Hello world!\n") != 0) {
+            printf("'%s' != 'Hello world!\\n'\n", line);
+            return 1;
+        }
+        ckd_free(line);
+        line = fread_line(fp, &len);
+        /* A line of exactly 127 characters. */
+        printf("len = %d orig = %d\n", len,
+               strlen("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\n"));
+        if (strcmp(line, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\n") != 0) {
+            printf("'%s' != '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\\n'\n", line);
+            return 1;
+        }
+        ckd_free(line);
+        /* A very long line. */
+        line = fread_line(fp, &len);
+        printf("len = %d orig = %d\n", len,
+               strlen("All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  \n"));
+        if (strcmp(line, "All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  \n") != 0) {
+            printf("'%s' != 'All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  All work and no play makes Jack a very dull boy.  \\n'\n", line);
+            return 1;
+        }
+        ckd_free(line);
+        line = fread_line(fp, &len);
+        if (line != NULL) {
+            printf("%p != NULL\n", line);
+            return 1;
+        }
+    }
+    else if (!strcmp(argv[1], "string_trim")) {
+        char *foo = ckd_salloc("\t foo bar baz  \n");
+        string_trim(foo, STRING_BOTH);
+        if (strcmp(foo, "foo bar baz") != 0) {
+            printf("'%s' != 'foo bar baz'\n", foo);
+            return 1;
+        }
+        string_trim(foo, STRING_BOTH);
+        if (strcmp(foo, "foo bar baz") != 0) {
+            printf("'%s' != 'foo bar baz'\n", foo);
+            return 1;
+        }
+        strcpy(foo, "foo\nbar\n\n");
+        string_trim(foo, STRING_END);
+        if (strcmp(foo, "foo\nbar") != 0) {
+            printf("'%s' != 'foo\\nbar'\n", foo);
+            return 1;
+        }
+        strcpy(foo, " \t \t foobar\n");
+        string_trim(foo, STRING_START);
+        if (strcmp(foo, "foobar\n") != 0) {
+            printf("'%s' != 'foobar\\n'\n", foo);
+            return 1;
+        }
+    }
+    else if (!strcmp(argv[1], "str2words")) {
+        char *line = strdup("    foo bar baz argh");
+        char **words;
+        int n;
+
+        n = str2words(line, NULL, 0);
+        if (n != 4) {
+            printf("%d != 4\n", n);
+            return 1;
+        }
+        words = ckd_calloc(n, sizeof(*words));
+        n = str2words(line, words, n);
+        if (n != 4) {
+            printf("%d != 4\n", n);
+            return 1;
+        }
+        if (strcmp(words[0], "foo") != 0
+            || strcmp(words[1], "bar") != 0
+            || strcmp(words[2], "baz") != 0
+            || strcmp(words[3], "argh") != 0) {
+            printf("%s, %s, %s, %s != foo, bar, baz, argh\n",
+                   words[0], words[1], words[2], words[3]);
+            return 1;
+        }
+        return 0;
+    }
+    else if (!strcmp(argv[1], "nextword")) {
+        char *line = strdup(" \tfoo bar\nbaz argh");
+        char *word;
+        const char *delim = " \t\n";
+        char delimfound;
+        int n;
+
+        n = nextword(line, delim, &word, &delimfound);
+        if (strcmp(word, "foo") != 0) {
+            printf("%s != foo\n", word);
+            return 1;
+        }
+        if (delimfound != ' ') {
+            printf("didn't find ' '\n");
+            return 1;
+        }
+        word[n] = delimfound;
+        line = word + n;
+        n = nextword(line, delim, &word, &delimfound);
+        if (strcmp(word, "bar") != 0) {
+            printf("%s != bar\n", word);
+            return 1;
+        }
+        if (delimfound != '\n') {
+            printf("didn't find '\\n'\n");
+            return 1;
+        }
+        word[n] = delimfound;
+        line = word + n;
+        n = nextword(line, delim, &word, &delimfound);
+        if (strcmp(word, "baz") != 0) {
+            printf("%s != baz\n", word);
+            return 1;
+        }
+        if (delimfound != ' ') {
+            printf("didn't find ' '\n");
+            return 1;
+        }
+        word[n] = delimfound;
+        line = word + n;
+        n = nextword(line, delim, &word, &delimfound);
+        if (strcmp(word, "argh") != 0) {
+            printf("%s != argh\n", word);
+            return 1;
+        }
+        if (delimfound != '\0') {
+            printf("didn't find NUL\n");
+            return 1;
+        }
+        word[n] = delimfound;
+        line = word + n;
+        n = nextword(line, delim, &word, &delimfound);
+        if (n != -1) {
+            printf("didn't get -1 at end of string\n");
+        }
+
+        line = strdup("FOO!");
+        n = nextword(line, delim, &word, &delimfound);
+        if (strcmp(word, "FOO!") != 0) {
+            printf("%s != FOO!\n", word);
+            return 1;
+        }
+        if (delimfound != '\0') {
+            printf("didn't find NUL\n");
+            return 1;
+        }
+
+        return 0;
+    }
+    return 0;
+}
diff --git a/test/unit/test_string/test_atof.c b/test/unit/test_string/test_atof.c
new file mode 100644 (file)
index 0000000..1cf110d
--- /dev/null
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <locale.h>
+#include <stdlib.h>
+
+#include "strfuncs.h"
+
+int
+main(int argc, char *argv[])
+{
+       double foo;
+
+       /* Ensure that it's really locale-independent. */
+       if (setlocale(LC_ALL, "fr_CA.UTF-8") == NULL)
+               fprintf(stderr, "Note: setlocale(LC_ALL, fr_CA.UTF-8) failed\n");
+       
+       foo = atof("1.5324523524523423");
+       printf("atof(): 1.5324523524523423 %f\n", foo);
+
+       foo = atof_c("1.5324523524523423");
+       printf("1.5324523524523423 %f\n", foo);
+       if (fabs(foo - 1.532) > 0.01)
+               return 1;
+
+       foo = atof_c("5e-3");
+       printf("5e-3 %f\n", foo);
+       if (fabs(foo - 0.005) > 0.01)
+               return 1;
+
+       foo = atof_c("1.2e+2");
+       printf("1.2e+2 %f\n", foo);
+       if (fabs(foo - 120.0) > 0.01)
+               return 1;
+
+       foo = atof_c("1e-80");
+       printf("1e-80 %g\n", foo);
+
+       return 0;
+}
diff --git a/test/unit/test_thread/Makefile.am b/test/unit/test_thread/Makefile.am
new file mode 100644 (file)
index 0000000..20e6f53
--- /dev/null
@@ -0,0 +1,19 @@
+check_PROGRAMS = \
+       test_thread \
+       test_tls_log \
+       test_event \
+       test_msgq
+
+TESTS = $(check_PROGRAMS)
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+
+noinst_HEADERS = test_macros.h
+
+CLEANFILES = *.log
diff --git a/test/unit/test_thread/Makefile.in b/test/unit/test_thread/Makefile.in
new file mode 100644 (file)
index 0000000..c3ea4b9
--- /dev/null
@@ -0,0 +1,583 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_thread$(EXEEXT) test_tls_log$(EXEEXT) \
+       test_event$(EXEEXT) test_msgq$(EXEEXT)
+subdir = test/unit/test_thread
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_event_SOURCES = test_event.c
+test_event_OBJECTS = test_event.$(OBJEXT)
+test_event_LDADD = $(LDADD)
+test_event_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_msgq_SOURCES = test_msgq.c
+test_msgq_OBJECTS = test_msgq.$(OBJEXT)
+test_msgq_LDADD = $(LDADD)
+test_msgq_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_thread_SOURCES = test_thread.c
+test_thread_OBJECTS = test_thread.$(OBJEXT)
+test_thread_LDADD = $(LDADD)
+test_thread_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_tls_log_SOURCES = test_tls_log.c
+test_tls_log_OBJECTS = test_tls_log.$(OBJEXT)
+test_tls_log_LDADD = $(LDADD)
+test_tls_log_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_event.c test_msgq.c test_thread.c test_tls_log.c
+DIST_SOURCES = test_event.c test_msgq.c test_thread.c test_tls_log.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = $(check_PROGRAMS)
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+noinst_HEADERS = test_macros.h
+CLEANFILES = *.log
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_thread/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_thread/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_event$(EXEEXT): $(test_event_OBJECTS) $(test_event_DEPENDENCIES) 
+       @rm -f test_event$(EXEEXT)
+       $(LINK) $(test_event_OBJECTS) $(test_event_LDADD) $(LIBS)
+test_msgq$(EXEEXT): $(test_msgq_OBJECTS) $(test_msgq_DEPENDENCIES) 
+       @rm -f test_msgq$(EXEEXT)
+       $(LINK) $(test_msgq_OBJECTS) $(test_msgq_LDADD) $(LIBS)
+test_thread$(EXEEXT): $(test_thread_OBJECTS) $(test_thread_DEPENDENCIES) 
+       @rm -f test_thread$(EXEEXT)
+       $(LINK) $(test_thread_OBJECTS) $(test_thread_LDADD) $(LIBS)
+test_tls_log$(EXEEXT): $(test_tls_log_OBJECTS) $(test_tls_log_DEPENDENCIES) 
+       @rm -f test_tls_log$(EXEEXT)
+       $(LINK) $(test_tls_log_OBJECTS) $(test_tls_log_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_event.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_msgq.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_thread.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tls_log.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_thread/test_event.c b/test/unit/test_thread/test_event.c
new file mode 100644 (file)
index 0000000..a497d61
--- /dev/null
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <sbthread.h>
+#include <err.h>
+
+int
+worker_main(sbthread_t *th)
+{
+       sbevent_t *cond;
+
+       cond = sbthread_arg(th);
+
+       /* Get the first signal. */
+       sbevent_wait(cond, -1, -1);
+       E_INFO("Got signal\n");
+
+       /* Now wait a while and exit. */
+       sbevent_wait(cond, 1, 500*1000*1000);
+       return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+       sbthread_t *worker;
+       sbevent_t *cond;
+
+       cond = sbevent_init();
+       worker = sbthread_start(NULL, worker_main, cond);
+
+       E_INFO("Signalling condition\n");
+       sbevent_signal(cond);
+
+       E_INFO("Waiting (about 1.5 sec) for thread termination\n");
+       sbthread_free(worker);
+       sbevent_free(cond);
+       return 0;
+}
diff --git a/test/unit/test_thread/test_macros.h b/test/unit/test_thread/test_macros.h
new file mode 100644 (file)
index 0000000..675d2e1
--- /dev/null
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_thread/test_msgq.c b/test/unit/test_thread/test_msgq.c
new file mode 100644 (file)
index 0000000..c9f11ee
--- /dev/null
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <sbthread.h>
+#include <err.h>
+
+int
+worker_main(sbthread_t *th)
+{
+       sbmsgq_t *msgq;
+       void *data;
+       size_t len;
+
+       msgq = sbthread_msgq(th);
+       while ((data = sbmsgq_wait(msgq, &len, -1, -1)) != NULL) {
+               int msg = *(int *)data;
+               E_INFO("Got message: %d\n", msg);
+               if (msg == 32)
+                       break;
+       }
+
+       return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+       sbthread_t *worker;
+       int i;
+       
+       worker = sbthread_start(NULL, worker_main, NULL);
+       for (i = 0; i <= 32; ++i) {
+               int ii[128];
+               E_INFO("Sending message: %d\n", i);
+               ii[0] = i;
+               if (sbthread_send(worker, sizeof(ii), &ii) < 0) {
+                       E_ERROR("sbthread_send failed\n");
+                       return 1;
+               }
+       }
+       sbthread_free(worker);
+
+       return 0;
+}
diff --git a/test/unit/test_thread/test_thread.c b/test/unit/test_thread/test_thread.c
new file mode 100644 (file)
index 0000000..956d554
--- /dev/null
@@ -0,0 +1,67 @@
+#include <stdio.h>
+#include <sbthread.h>
+#include <fe.h>
+#include <ckd_alloc.h>
+#include <err.h>
+
+static const arg_t fe_args[] = {
+       waveform_to_cepstral_command_line_macro(),
+       { NULL, 0, NULL, NULL }
+};
+
+static int
+process(sbthread_t *th)
+{
+       FILE *raw;
+       int16 *buf;
+       mfcc_t **cepbuf;
+       size_t nsamps;
+       fe_t *fe;
+       long fsize;
+       int32 nfr;
+
+       if ((fe = fe_init_auto_r(sbthread_config(th))) == NULL)
+               return -1;
+
+       if ((raw = fopen(TESTDATADIR "/chan3.raw", "rb")) == NULL)
+               return -1;
+       fseek(raw, 0, SEEK_END);
+       fsize = ftell(raw);
+       fseek(raw, 0, SEEK_SET);
+       buf = ckd_malloc(fsize);
+       fread(buf, 1, fsize, raw);
+       nsamps = fsize / 2;
+
+       fe_process_utt(fe, buf, nsamps, &cepbuf, &nfr);
+       E_INFO("nfr = %d\n", nfr);
+       fe_free_2d(cepbuf);
+       ckd_free(buf);
+       fclose(raw);
+       fe_free(fe);
+
+       return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+       sbthread_t *threads[10];
+       cmd_ln_t *config;
+       int i;
+
+       E_INFO("Processing chan3.raw in 10 threads\n");
+       if ((config = cmd_ln_parse_r(NULL, fe_args, 0, NULL, FALSE)) == NULL)
+               return -1;
+       for (i = 0; i < 10; ++i) {
+               config = cmd_ln_retain(config);
+               threads[i] = sbthread_start(config, process, NULL);
+       }
+       for (i = 0; i < 10; ++i) {
+               int rv;
+               rv = sbthread_wait(threads[i]);
+               E_INFO("Thread %d exited with status %d\n", i, rv);
+               sbthread_free(threads[i]);
+       }
+       cmd_ln_free_r(config);
+       return 0;
+}
diff --git a/test/unit/test_thread/test_tls_log.c b/test/unit/test_thread/test_tls_log.c
new file mode 100644 (file)
index 0000000..8c41880
--- /dev/null
@@ -0,0 +1,91 @@
+#include <string.h>
+#include <stdio.h>
+#include <sbthread.h>
+#include <strfuncs.h>
+#include <fe.h>
+#include <ckd_alloc.h>
+#include <err.h>
+
+#include "test_macros.h"
+
+static const arg_t fe_args[] = {
+       waveform_to_cepstral_command_line_macro(),
+       { NULL, 0, NULL, NULL }
+};
+
+static int
+process(sbthread_t *th)
+{
+       FILE *raw, *logfh;
+       int16 *buf;
+       mfcc_t **cepbuf;
+       size_t nsamps;
+       fe_t *fe;
+       long fsize;
+       int32 nfr;
+       char outfile[16];
+
+       sprintf(outfile, "%03ld.log", (long)sbthread_arg(th));
+       if ((logfh = fopen(outfile, "w")) == NULL)
+               return -1;
+       err_set_logfp(logfh);
+       if ((fe = fe_init_auto_r(sbthread_config(th))) == NULL)
+               return -1;
+       if ((raw = fopen(TESTDATADIR "/chan3.raw", "rb")) == NULL)
+               return -1;
+       fseek(raw, 0, SEEK_END);
+       fsize = ftell(raw);
+       fseek(raw, 0, SEEK_SET);
+       buf = ckd_malloc(fsize);
+       fread(buf, 1, fsize, raw);
+       nsamps = fsize / 2;
+
+       fe_process_utt(fe, buf, nsamps, &cepbuf, &nfr);
+       E_INFO("nfr = %d\n", nfr);
+       fe_free_2d(cepbuf);
+       ckd_free(buf);
+       fclose(raw);
+       fe_free(fe);
+       fclose(logfh);
+
+       return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+       sbthread_t *threads[10];
+       cmd_ln_t *config;
+       int i;
+
+       E_INFO("Processing chan3.raw in 10 threads\n");
+       if ((config = cmd_ln_parse_r(NULL, fe_args, 0, NULL, FALSE)) == NULL)
+               return -1;
+       for (i = 0; i < 10; ++i) {
+               config = cmd_ln_retain(config);
+               threads[i] = sbthread_start(config, process, (void *)(long)i);
+       }
+       for (i = 0; i < 10; ++i) {
+               int rv;
+               rv = sbthread_wait(threads[i]);
+               E_INFO("Thread %d exited with status %d\n", i, rv);
+               sbthread_free(threads[i]);
+       }
+       /* Now check to make sure they all created logfiles with the
+        * correct contents. */
+       for (i = 0; i < 10; ++i) {
+               char logfile[16], line[256];
+               FILE *logfh;
+
+               sprintf(logfile, "%03d.log", i);
+               TEST_ASSERT(logfh = fopen(logfile, "r"));
+               while (fgets(line, sizeof(line), logfh)) {
+                       string_trim(line, STRING_BOTH);
+                       printf("%s: |%s|\n", logfile, line);
+                       TEST_EQUAL(0, strcmp(line, "INFO: test_tls_log.c(44): nfr = 1436"));
+               }
+               fclose(logfh);
+       }
+       cmd_ln_free_r(config);
+       return 0;
+}
diff --git a/test/unit/test_util/Makefile.am b/test/unit/test_util/Makefile.am
new file mode 100644 (file)
index 0000000..1b60f49
--- /dev/null
@@ -0,0 +1,23 @@
+check_PROGRAMS = \
+       test_fopen \
+       test_huff_code \
+       test_bit_encode \
+       test_build_directory \
+       test_heap \
+       test_filename \
+       test_readfile
+
+TESTS = $(check_PROGRAMS)
+
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\" \
+       -DLMDIR=\"${top_srcdir}/test/unit/test_ngram\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+
+noinst_HEADERS = test_macros.h
+
+CLEANFILES = *.log *.out
diff --git a/test/unit/test_util/Makefile.in b/test/unit/test_util/Makefile.in
new file mode 100644 (file)
index 0000000..76b8a36
--- /dev/null
@@ -0,0 +1,616 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  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@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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@
+check_PROGRAMS = test_fopen$(EXEEXT) test_huff_code$(EXEEXT) \
+       test_bit_encode$(EXEEXT) test_build_directory$(EXEEXT) \
+       test_heap$(EXEEXT) test_filename$(EXEEXT) \
+       test_readfile$(EXEEXT)
+subdir = test/unit/test_util
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h \
+       $(top_builddir)/include/sphinx_config.h
+CONFIG_CLEAN_FILES =
+test_bit_encode_SOURCES = test_bit_encode.c
+test_bit_encode_OBJECTS = test_bit_encode.$(OBJEXT)
+test_bit_encode_LDADD = $(LDADD)
+test_bit_encode_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_build_directory_SOURCES = test_build_directory.c
+test_build_directory_OBJECTS = test_build_directory.$(OBJEXT)
+test_build_directory_LDADD = $(LDADD)
+test_build_directory_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_filename_SOURCES = test_filename.c
+test_filename_OBJECTS = test_filename.$(OBJEXT)
+test_filename_LDADD = $(LDADD)
+test_filename_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_fopen_SOURCES = test_fopen.c
+test_fopen_OBJECTS = test_fopen.$(OBJEXT)
+test_fopen_LDADD = $(LDADD)
+test_fopen_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_heap_SOURCES = test_heap.c
+test_heap_OBJECTS = test_heap.$(OBJEXT)
+test_heap_LDADD = $(LDADD)
+test_heap_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_huff_code_SOURCES = test_huff_code.c
+test_huff_code_OBJECTS = test_huff_code.$(OBJEXT)
+test_huff_code_LDADD = $(LDADD)
+test_huff_code_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+test_readfile_SOURCES = test_readfile.c
+test_readfile_OBJECTS = test_readfile.$(OBJEXT)
+test_readfile_LDADD = $(LDADD)
+test_readfile_DEPENDENCIES =  \
+       ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = test_bit_encode.c test_build_directory.c test_filename.c \
+       test_fopen.c test_heap.c test_huff_code.c test_readfile.c
+DIST_SOURCES = test_bit_encode.c test_build_directory.c \
+       test_filename.c test_fopen.c test_heap.c test_huff_code.c \
+       test_readfile.c
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_CYTHON = @HAVE_CYTHON@
+HAVE_DOXYGEN = @HAVE_DOXYGEN@
+HAVE_PKGCONFIG = @HAVE_PKGCONFIG@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PYTHON = @PYTHON@
+PYTHON_CONFIG = @PYTHON_CONFIG@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ad_backend = @ad_backend@
+ad_files = @ad_files@
+ad_libs = @ad_libs@
+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@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = $(check_PROGRAMS)
+INCLUDES = \
+       -I$(top_srcdir)/include/sphinxbase \
+       -I$(top_srcdir)/include \
+       -I$(top_builddir)/include \
+       -DTESTDATADIR=\"$(top_srcdir)/test/regression\" \
+       -DLMDIR=\"${top_srcdir}/test/unit/test_ngram\"
+
+LDADD = ${top_builddir}/src/libsphinxbase/libsphinxbase.la
+noinst_HEADERS = test_macros.h
+CLEANFILES = *.log *.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  test/unit/test_util/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  test/unit/test_util/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
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+test_bit_encode$(EXEEXT): $(test_bit_encode_OBJECTS) $(test_bit_encode_DEPENDENCIES) 
+       @rm -f test_bit_encode$(EXEEXT)
+       $(LINK) $(test_bit_encode_OBJECTS) $(test_bit_encode_LDADD) $(LIBS)
+test_build_directory$(EXEEXT): $(test_build_directory_OBJECTS) $(test_build_directory_DEPENDENCIES) 
+       @rm -f test_build_directory$(EXEEXT)
+       $(LINK) $(test_build_directory_OBJECTS) $(test_build_directory_LDADD) $(LIBS)
+test_filename$(EXEEXT): $(test_filename_OBJECTS) $(test_filename_DEPENDENCIES) 
+       @rm -f test_filename$(EXEEXT)
+       $(LINK) $(test_filename_OBJECTS) $(test_filename_LDADD) $(LIBS)
+test_fopen$(EXEEXT): $(test_fopen_OBJECTS) $(test_fopen_DEPENDENCIES) 
+       @rm -f test_fopen$(EXEEXT)
+       $(LINK) $(test_fopen_OBJECTS) $(test_fopen_LDADD) $(LIBS)
+test_heap$(EXEEXT): $(test_heap_OBJECTS) $(test_heap_DEPENDENCIES) 
+       @rm -f test_heap$(EXEEXT)
+       $(LINK) $(test_heap_OBJECTS) $(test_heap_LDADD) $(LIBS)
+test_huff_code$(EXEEXT): $(test_huff_code_OBJECTS) $(test_huff_code_DEPENDENCIES) 
+       @rm -f test_huff_code$(EXEEXT)
+       $(LINK) $(test_huff_code_OBJECTS) $(test_huff_code_LDADD) $(LIBS)
+test_readfile$(EXEEXT): $(test_readfile_OBJECTS) $(test_readfile_DEPENDENCIES) 
+       @rm -f test_readfile$(EXEEXT)
+       $(LINK) $(test_readfile_OBJECTS) $(test_readfile_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_bit_encode.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_build_directory.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_filename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fopen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_heap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_huff_code.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_readfile.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               echo "XPASS: $$tst"; \
+             ;; \
+             *) \
+               echo "PASS: $$tst"; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               echo "XFAIL: $$tst"; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               echo "FAIL: $$tst"; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             echo "SKIP: $$tst"; \
+           fi; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         echo "$$dashes"; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(HEADERS)
+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: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+# 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/unit/test_util/test_bit_encode.c b/test/unit/test_util/test_bit_encode.c
new file mode 100644 (file)
index 0000000..5ead3f1
--- /dev/null
@@ -0,0 +1,51 @@
+/**
+ * @file test_bit_encode.c Test bitstream encoding
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "pio.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main(int argc, char *argv[])
+{
+       FILE *fh;
+       bit_encode_t *be;
+       int i;
+       static unsigned char const bits[] = "\xde\xad\xbe\xef";
+       uint32 cw = 0xdeadbeef;
+       unsigned char inbits[16];
+
+       fh = fopen("bittest.out", "wb");
+       be = bit_encode_attach(fh);
+       bit_encode_write(be, bits, 8);
+       bit_encode_write(be, bits + 1, 16);
+       bit_encode_write(be, bits + 3, 8);
+       bit_encode_write_cw(be, cw >> 24, 8);
+       bit_encode_write_cw(be, cw >> 16, 8);
+       bit_encode_write_cw(be, cw >> 8, 8);
+       bit_encode_write_cw(be, cw, 8);
+       bit_encode_write_cw(be, cw >> 26, 6);
+       bit_encode_write_cw(be, cw >> 14, 12);
+       bit_encode_write_cw(be, cw >> 8, 6);
+       bit_encode_write_cw(be, cw, 8);
+       for (i = 0; i < 32; ++i) {
+               bit_encode_write_cw(be, cw >> (31-i), 1);
+       }
+       bit_encode_flush(be);
+       bit_encode_free(be);
+       fclose(fh);
+       fh = fopen("bittest.out", "rb");
+       i = fread(inbits, 1, 16, fh);
+       TEST_ASSERT(0 == memcmp(inbits, bits, 4));
+       TEST_ASSERT(0 == memcmp(inbits + 4, bits, 4));
+       TEST_ASSERT(0 == memcmp(inbits + 8, bits, 4));
+       TEST_ASSERT(0 == memcmp(inbits + 12, bits, 4));
+       fclose(fh);
+
+       return 0;
+}
diff --git a/test/unit/test_util/test_build_directory.c b/test/unit/test_util/test_build_directory.c
new file mode 100644 (file)
index 0000000..5e78427
--- /dev/null
@@ -0,0 +1,26 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/**
+ * @file test_build_directory.c Test recursive directory creation
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "pio.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main(int argc, char *argv[])
+{
+    TEST_EQUAL(0, build_directory("foo/bar/baz"));
+    TEST_ASSERT(stat_mtime("foo/bar/baz") != -1);
+    TEST_EQUAL(0, build_directory("./quux/"));
+    TEST_ASSERT(stat_mtime("quux") != -1);
+    TEST_EQUAL(0, build_directory("./foo/bar/baz"));
+    TEST_ASSERT(stat_mtime("foo/bar/baz") != -1);
+    TEST_EQUAL(0, build_directory("/tmp/sphinxbase_foo_bar_baz"));
+    TEST_ASSERT(stat_mtime("/tmp/sphinxbase_foo_bar_baz") != -1);
+
+    return 0;
+}
diff --git a/test/unit/test_util/test_filename.c b/test/unit/test_util/test_filename.c
new file mode 100644 (file)
index 0000000..b339236
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/**
+ * @file test_filename.c Test file name operations
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "filename.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int
+main(int argc, char *argv[])
+{
+    char const testname[] = "/foo/bar/baz/quux.argh";
+    char const testname2[] = "foo/bar/baz";
+    char const testname3[] = "/foo";
+    char testout[32];
+
+    path2basename(testname, testout);
+    TEST_EQUAL(0, strcmp("quux.argh", testout));
+
+    path2dirname(testname, testout);
+    TEST_EQUAL(0, strcmp("/foo/bar/baz", testout));
+
+    path2dirname(testname2, testout);
+    TEST_EQUAL(0, strcmp("foo/bar", testout));
+
+    path2dirname(testname3, testout);
+    TEST_EQUAL(0, strcmp("", testout));
+
+    return 0;
+}
diff --git a/test/unit/test_util/test_fopen.c b/test/unit/test_util/test_fopen.c
new file mode 100644 (file)
index 0000000..c3b4784
--- /dev/null
@@ -0,0 +1,44 @@
+/**
+ * @file test_fopen.c Test file opening
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "pio.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main(int argc, char *argv[])
+{
+    FILE *fh;
+    char line[256], *c;
+    int ispipe;
+
+    fh = fopen_comp(LMDIR "/100.arpa.gz", "r", &ispipe);
+    TEST_ASSERT(fh != NULL);
+    c = fgets(line, sizeof(line), fh);
+    TEST_EQUAL('#', line[0]);
+    fclose_comp(fh, ispipe);
+
+    fh = fopen_compchk(LMDIR "/100.arpa.gz", &ispipe);
+    TEST_ASSERT(fh != NULL);
+    c = fgets(line, sizeof(line), fh);
+    TEST_EQUAL('#', line[0]);
+    fclose_comp(fh, ispipe);
+
+    fh = fopen_compchk(LMDIR "/100.arpa.bz2", &ispipe);
+    TEST_ASSERT(fh != NULL);
+    c = fgets(line, sizeof(line), fh);
+    TEST_EQUAL('#', line[0]);
+    fclose_comp(fh, ispipe);
+
+    fh = fopen_compchk(LMDIR "/100.arpa", &ispipe);
+    TEST_ASSERT(fh != NULL);
+    c = fgets(line, sizeof(line), fh);
+    TEST_EQUAL('#', line[0]);
+    fclose_comp(fh, ispipe);
+
+    return 0;
+}
diff --git a/test/unit/test_util/test_heap.c b/test/unit/test_util/test_heap.c
new file mode 100644 (file)
index 0000000..d3b0f80
--- /dev/null
@@ -0,0 +1,40 @@
+/**
+ * @file test_heap.c Test heaps
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "heap.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main(int argc, char *argv[])
+{
+       heap_t *heap;
+       int i;
+
+       heap = heap_new();
+       for (i = 0; i < 25; ++i)
+               heap_insert(heap, (void *)(long)i, i);
+       for (i = 0; i < 25; ++i) {
+               int32 val;
+               void *data;
+               TEST_EQUAL(1, heap_pop(heap, &data, &val));
+               TEST_EQUAL(val, i);
+               TEST_EQUAL((int)(long)data, i);
+               TEST_EQUAL(heap_size(heap), 25 - i - 1);
+       }
+       for (i = 0; i < 25; ++i)
+               heap_insert(heap, (void *)(long)i, i);
+       TEST_EQUAL(0, heap_remove(heap, (void *)(long)10));
+       TEST_EQUAL(-1, heap_remove(heap, (void *)(long)10));
+       TEST_EQUAL(heap_size(heap), 24);
+       TEST_EQUAL(0, heap_remove(heap, (void *)(long)15));
+       TEST_EQUAL(0, heap_remove(heap, (void *)(long)9));
+       TEST_EQUAL(0, heap_remove(heap, (void *)(long)0));
+       TEST_EQUAL(heap_size(heap), 21);
+       return 0;
+}
diff --git a/test/unit/test_util/test_huff_code.c b/test/unit/test_util/test_huff_code.c
new file mode 100644 (file)
index 0000000..652b59a
--- /dev/null
@@ -0,0 +1,161 @@
+/**
+ * @file test_huff_code.c Test Huffman coding
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "huff_code.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int32 const ivalues[10] = {
+       1, 2, 3, 5, 7, 11, 13, 17, 19, 23
+};
+int32 const frequencies[10] = {
+       42, 4, 5, 6, 225, 15001, 3, 2, 87, 1003
+};
+char * const svalues[10] = {
+       "foo", "bar", "baz", "quux", "argh",
+       "hurf", "burf", "blatz", "unf", "woof"
+};
+char * const svalues2[10] = {
+       "1","2","3","4","5","6","7","8","9","10"
+};
+char const cdata[7] = { 0x08, 0x30, 0x40, 0x4c, 0x00, 0x04, 0x50 };
+
+void
+test_intcode(huff_code_t *hc)
+{
+       FILE *fh;
+       char const *dptr;
+       int i, offset;
+       size_t dlen;
+       int32 val;
+
+       fh = fopen("hufftest.out", "wb");
+       huff_code_attach(hc, fh, "wb");
+       for (i = 0; i < 10; ++i) {
+               huff_code_encode_int(hc, ivalues[i], NULL);
+       }
+       huff_code_detach(hc);
+       fclose(fh);
+       fh = fopen("hufftest.out", "rb");
+       huff_code_attach(hc, fh, "rb");
+       for (i = 0; i < 10; ++i) {
+               int32 val;
+               huff_code_decode_int(hc, &val, NULL, NULL, 0);
+               printf("%d ", val);
+               TEST_EQUAL(val, ivalues[i]);
+       }
+       printf("\n");
+       huff_code_detach(hc);
+       fclose(fh);
+
+       dptr = cdata;
+       dlen = 7;
+       offset = 0;
+       for (i = 0; i < 10; ++i) {
+               huff_code_decode_int(hc, &val, &dptr, &dlen, &offset);
+               printf("%d ", val);
+               TEST_EQUAL(val, ivalues[i]);
+       }
+       TEST_EQUAL(dlen, 1);
+       TEST_EQUAL(offset, 4);
+       printf("\n");
+
+       dptr = cdata;
+       dlen = 7;
+       offset = 0;
+       i = 0;
+       while (huff_code_decode_int(hc, &val, &dptr, &dlen, &offset) != -1) {
+               printf("%d ", val);
+               TEST_EQUAL(val, ivalues[i++]);
+       }
+       TEST_EQUAL(dlen, 1);
+       TEST_EQUAL(offset, 4);
+       printf("\n");
+}
+
+void
+test_strcode(huff_code_t *hc, char * const *svalues)
+{
+       FILE *fh;
+       char const *dptr;
+       int i, offset;
+       size_t dlen;
+
+       fh = fopen("hufftest.out", "wb");
+       huff_code_attach(hc, fh, "wb");
+       for (i = 9; i >= 0; --i) {
+               huff_code_encode_str(hc, svalues[i], NULL);
+       }
+       huff_code_detach(hc);
+       fclose(fh);
+       fh = fopen("hufftest.out", "rb");
+       huff_code_attach(hc, fh, "rb");
+       for (i = 9; i >= 0; --i) {
+               char const *val = huff_code_decode_str(hc, NULL, NULL, 0);
+               printf("%s ", val);
+               TEST_EQUAL(0, strcmp(val, svalues[i]));
+       }
+       printf("\n");
+       huff_code_detach(hc);
+       fclose(fh);
+
+       dptr = cdata;
+       dlen = 7;
+       offset = 0;
+       for (i = 0; i < 10; ++i) {
+               char const *val = huff_code_decode_str(hc, &dptr, &dlen, &offset);
+               printf("%s ", val);
+               TEST_EQUAL(0, strcmp(val, svalues[i]));
+       }
+       TEST_EQUAL(dlen, 1);
+       TEST_EQUAL(offset, 4);
+       printf("\n");
+}
+
+int
+main(int argc, char *argv[])
+{
+       huff_code_t *hc;
+       FILE *fh;
+
+       hc = huff_code_build_int(ivalues, frequencies, 10);
+       huff_code_dump(hc, stdout);
+       test_intcode(hc);
+       fh = fopen("huffcode.out", "wb");
+       huff_code_write(hc, fh);
+       fclose(fh);
+       huff_code_free(hc);
+
+       fh = fopen("huffcode.out", "rb");
+       hc = huff_code_read(fh);
+       fclose(fh);
+       test_intcode(hc);
+       huff_code_free(hc);
+
+       hc = huff_code_build_str(svalues, frequencies, 10);
+       huff_code_dump(hc, stdout);
+       test_strcode(hc, svalues);
+       fh = fopen("huffcode.out", "wb");
+       huff_code_write(hc, fh);
+       fclose(fh);
+       huff_code_free(hc);
+
+       fh = fopen("huffcode.out", "rb");
+       hc = huff_code_read(fh);
+       fclose(fh);
+       test_strcode(hc, svalues);
+       huff_code_free(hc);
+
+       hc = huff_code_build_str(svalues2, frequencies, 10);
+       huff_code_dump(hc, stdout);
+       test_strcode(hc, svalues2);
+       huff_code_free(hc);
+
+       return 0;
+}
+
diff --git a/test/unit/test_util/test_macros.h b/test/unit/test_util/test_macros.h
new file mode 100644 (file)
index 0000000..675d2e1
--- /dev/null
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <math.h>
+
+#include "logmath.h"
+
+#define TEST_ASSERT(x) if (!(x)) { fprintf(stderr, "FAIL: %s\n", #x); exit(1); }
+#define TEST_EQUAL(a,b) TEST_ASSERT((a) == (b))
+#define TEST_EQUAL_FLOAT(a,b) TEST_ASSERT(fabs((a) - (b)) < EPSILON)
+#define LOG_EPSILON 20
+#define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON)
diff --git a/test/unit/test_util/test_readfile.c b/test/unit/test_util/test_readfile.c
new file mode 100644 (file)
index 0000000..3ffa7e5
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/**
+ * @file test_readfile.c: Test for the methods to read the file
+ * @author David Huggins-Daines <dhuggins@cs.cmu.edu>
+ */
+
+#include "ckd_alloc.h"
+#include "bio.h"
+#include "test_macros.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int
+main(int argc, char *argv[])
+{
+    int nsamps;
+    int16 *data;
+    
+    data = bio_read_wavfile(TESTDATADIR, "chan3", ".wav", 44, FALSE, &nsamps);
+    TEST_EQUAL(230108, nsamps);
+    
+    ckd_free(data);
+
+    return 0;
+}
diff --git a/test/unit/testfuncs.sh.in b/test/unit/testfuncs.sh.in
new file mode 100644 (file)
index 0000000..250afa9
--- /dev/null
@@ -0,0 +1,58 @@
+# Utility functions and parameters for regression tests
+
+# Predefined directories you may need
+# Stupid broken CMU Facilities autoconf doesn't do @abs_top_srcdir@
+builddir=../"@top_builddir@"
+sourcedir=../"@top_srcdir@"
+tests=$sourcedir/test
+
+# Automatically report failures on exit
+failures=""
+trap "report_failures" 0
+
+run_program() {
+    program="$1"
+    shift
+    $builddir/libtool --mode=execute "$builddir/src/$program/$program" $@
+}
+
+pass() {
+    title="$1"
+    echo "$title PASSED"
+}
+
+fail() {
+    title="$1"
+    echo "$title FAILED"
+    failures="$failures,$title"
+}
+
+assert() {
+    title="$1"
+    shift
+    if $@ >/dev/null 2>&1; then
+       pass "$title"
+    else
+       fail "$title"
+    fi
+}
+
+compare_table() {
+    title="$1"
+    shift
+    if perl "$tests/compare_table.pl" $@ | grep SUCCESS >/dev/null 2>&1; then
+       pass "$title"
+    else
+       fail "$title"
+    fi 
+}
+
+report_failures() {
+    if test x"$failures" = x; then
+       echo "All sub-tests passed"
+       exit 0
+    else
+       echo "Sub-tests failed:$failures" | sed -e 's/,/\n/g'
+       exit 1
+    fi
+}
diff --git a/win32/sphinx_cepview/sphinx_cepview.vcxproj b/win32/sphinx_cepview/sphinx_cepview.vcxproj
new file mode 100755 (executable)
index 0000000..42ffb81
--- /dev/null
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{06364F13-FBCE-4E2B-9289-0DD39E246205}</ProjectGuid>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\../../bin/Debug\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\../../bin/Release\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>.\../../bin/Debug/sphinx_cepview.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../../include/win32;../../include;../../src/libsphinxbase/fe;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;WIN32;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeaderOutputFile>.\Debug/sphinx_cepview.pch</PrecompiledHeaderOutputFile>\r
+      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>\r
+      <ObjectFileName>.\Debug/</ObjectFileName>\r
+      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <OutputFile>.\../../bin/Debug/sphinx_cepview.exe</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>.\../../bin/Debug/sphinx_cepview.pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+    <Bscmake>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <OutputFile>.\../../bin/Debug/sphinx_cepview.bsc</OutputFile>\r
+    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>.\../../bin/Release/sphinx_cepview.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>../../include/win32;../../include;../../src/libsphinxbase/fe;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeaderOutputFile>.\Release/sphinx_cepview.pch</PrecompiledHeaderOutputFile>\r
+      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>\r
+      <ObjectFileName>.\Release/</ObjectFileName>\r
+      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <OutputFile>.\../../bin/Release/sphinx_cepview.exe</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <ProgramDatabaseFile>.\../../bin/Release/sphinx_cepview.pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+    <Bscmake>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <OutputFile>.\../../bin/Release/sphinx_cepview.bsc</OutputFile>\r
+    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_cepview\main_cepview.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="..\sphinxbase\sphinxbase.vcxproj">\r
+      <Project>{2f025ead-99bd-40f5-b2cc-f0a28cad7f2d}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_cepview/sphinx_cepview.vcxproj.filters b/win32/sphinx_cepview/sphinx_cepview.vcxproj.filters
new file mode 100755 (executable)
index 0000000..efa14f3
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{fb2ec15f-1293-4caf-9e7e-96ab15c92074}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{20a38e95-9739-4f78-9dd1-da3dc30f9b63}</UniqueIdentifier>\r
+      <Extensions>h;hpp;hxx;hm;inl</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{d6e04c7c-930c-409a-8b2c-369254961949}</UniqueIdentifier>\r
+      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_cepview\main_cepview.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_cepview/sphinx_cepview.vcxproj.user b/win32/sphinx_cepview/sphinx_cepview.vcxproj.user
new file mode 100755 (executable)
index 0000000..695b5c7
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_fe/sphinx_fe.vcxproj b/win32/sphinx_fe/sphinx_fe.vcxproj
new file mode 100755 (executable)
index 0000000..25d78c6
--- /dev/null
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{D088C451-BB4D-4379-AFFA-C7523DBD35DD}</ProjectGuid>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\../../bin/Debug\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\../../bin/Release\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>.\../../bin/Debug/sphinx_fe.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../../include/win32;../../include;../../src/libsphinxbase/fe;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;WIN32;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeaderOutputFile>.\Debug/sphinx_fe.pch</PrecompiledHeaderOutputFile>\r
+      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>\r
+      <ObjectFileName>.\Debug/</ObjectFileName>\r
+      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <OutputFile>.\../../bin/Debug/sphinx_fe.exe</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>.\../../bin/Debug/sphinx_fe.pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+    <Bscmake>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <OutputFile>.\../../bin/Debug/sphinx_fe.bsc</OutputFile>\r
+    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>.\../../bin/Release/sphinx_fe.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>../../include/win32;../../include;../../src/libsphinxbase/fe;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;WIN32;HAVE_CONFIG_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeaderOutputFile>.\Release/sphinx_fe.pch</PrecompiledHeaderOutputFile>\r
+      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>\r
+      <ObjectFileName>.\Release/</ObjectFileName>\r
+      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <OutputFile>.\../../bin/Release/sphinx_fe.exe</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <ProgramDatabaseFile>.\../../bin/Release/sphinx_fe.pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+    <Bscmake>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <OutputFile>.\../../bin/Release/sphinx_fe.bsc</OutputFile>\r
+    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_fe\sphinx_fe.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\src\sphinx_fe\cmd_ln_defn.h" />\r
+    <ClInclude Include="..\..\src\sphinx_fe\sphinx_wave2feat.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="..\sphinxbase\sphinxbase.vcxproj">\r
+      <Project>{2f025ead-99bd-40f5-b2cc-f0a28cad7f2d}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_fe/sphinx_fe.vcxproj.filters b/win32/sphinx_fe/sphinx_fe.vcxproj.filters
new file mode 100755 (executable)
index 0000000..2552fe4
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{7ed03328-b900-4740-8d07-ab9eaec51fb2}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{33d5a7d6-f860-4b3b-b0b1-fd97051c2ad5}</UniqueIdentifier>\r
+      <Extensions>h;hpp;hxx;hm;inl</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{54e29ae7-a644-41d7-9ea9-0200a873301d}</UniqueIdentifier>\r
+      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_fe\sphinx_fe.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\src\sphinx_fe\cmd_ln_defn.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\sphinx_fe\sphinx_wave2feat.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_fe/sphinx_fe.vcxproj.user b/win32/sphinx_fe/sphinx_fe.vcxproj.user
new file mode 100755 (executable)
index 0000000..695b5c7
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj b/win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj
new file mode 100755 (executable)
index 0000000..b2ff1e2
--- /dev/null
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{0E6AF9F5-8904-4873-8856-7216415782B4}</ProjectGuid>\r
+    <RootNamespace>sphinx_jsgf2fsg</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)\bin\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)\bin\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <AdditionalIncludeDirectories>../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_jsgf2fsg\main.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="..\sphinxbase\sphinxbase.vcxproj">\r
+      <Project>{2f025ead-99bd-40f5-b2cc-f0a28cad7f2d}</Project>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>                                                 
\ No newline at end of file
diff --git a/win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.filters b/win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.filters
new file mode 100755 (executable)
index 0000000..3ac32f9
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_jsgf2fsg\main.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.user b/win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj.user
new file mode 100755 (executable)
index 0000000..695b5c7
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj b/win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj
new file mode 100755 (executable)
index 0000000..6910133
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{AFB07B69-EDC1-4E99-B0F3-E6B14FF07C5D}</ProjectGuid>\r
+    <RootNamespace>sphinx_lm_convert</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)\bin\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)\bin\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <AdditionalIncludeDirectories>../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_lmtools\sphinx_lm_convert.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="..\sphinxbase\sphinxbase.vcxproj">\r
+      <Project>{2f025ead-99bd-40f5-b2cc-f0a28cad7f2d}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.filters b/win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.filters
new file mode 100755 (executable)
index 0000000..82870f7
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_lmtools\sphinx_lm_convert.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.user b/win32/sphinx_lm_convert/sphinx_lm_convert.vcxproj.user
new file mode 100755 (executable)
index 0000000..695b5c7
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_pitch/sphinx_pitch.vcxproj b/win32/sphinx_pitch/sphinx_pitch.vcxproj
new file mode 100755 (executable)
index 0000000..4e853b4
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{AF17E630-A43F-4E0A-9BC4-67CD4E2E7FA1}</ProjectGuid>\r
+    <RootNamespace>sphinx_pitch</RootNamespace>\r
+    <Keyword>Win32Proj</Keyword>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+    <WholeProgramOptimization>true</WholeProgramOptimization>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <CharacterSet>Unicode</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)\bin\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)\bin\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <IntrinsicFunctions>true</IntrinsicFunctions>\r
+      <AdditionalIncludeDirectories>../../include;../../include/win32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeader>\r
+      </PrecompiledHeader>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <Link>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <SubSystem>Console</SubSystem>\r
+      <OptimizeReferences>true</OptimizeReferences>\r
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_adtools\sphinx_pitch.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="..\sphinxbase\sphinxbase.vcxproj">\r
+      <Project>{2f025ead-99bd-40f5-b2cc-f0a28cad7f2d}</Project>\r
+      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_pitch/sphinx_pitch.vcxproj.filters b/win32/sphinx_pitch/sphinx_pitch.vcxproj.filters
new file mode 100755 (executable)
index 0000000..53327ab
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
+    </Filter>\r
+    <Filter Include="Resource Files">\r
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\sphinx_adtools\sphinx_pitch.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinx_pitch/sphinx_pitch.vcxproj.user b/win32/sphinx_pitch/sphinx_pitch.vcxproj.user
new file mode 100755 (executable)
index 0000000..695b5c7
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinxbase/sphinxbase.vcxproj b/win32/sphinxbase/sphinxbase.vcxproj
new file mode 100755 (executable)
index 0000000..1245b25
--- /dev/null
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="Debug|Win32">\r
+      <Configuration>Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="Release|Win32">\r
+      <Configuration>Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}</ProjectGuid>\r
+    <RootNamespace>sphinxbase</RootNamespace>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../bin/Release\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../bin/Debug\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>.\../../bin/Release/sphinxbase.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>../../include/win32;../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;SPHINXBASE_EXPORTS;HAVE_CONFIG_H;SPHINXDLL;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <PrecompiledHeaderOutputFile>.\Release/sphinxbase.pch</PrecompiledHeaderOutputFile>\r
+      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>\r
+      <ObjectFileName>.\Release/</ObjectFileName>\r
+      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>../../bin/Release/sphinxbase.dll</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <ProgramDatabaseFile>../../bin/Release/sphinxbase.pdb</ProgramDatabaseFile>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <ImportLibrary>../../bin/Release/sphinxbase.lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+    <Bscmake>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <OutputFile>.\../../bin/Release/sphinxbase.bsc</OutputFile>\r
+    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>.\../../bin/Debug/sphinxbase.tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>../../include/win32;../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;WIN32;_WINDOWS;_USRDLL;SPHINXBASE_EXPORTS;HAVE_CONFIG_H;SPHINXDLL;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <PrecompiledHeaderOutputFile>.\Debug/sphinxbase.pch</PrecompiledHeaderOutputFile>\r
+      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>\r
+      <ObjectFileName>.\Debug/</ObjectFileName>\r
+      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>../../bin/Debug/sphinxbase.dll</OutputFile>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>../../bin/Debug/sphinxbase.pdb</ProgramDatabaseFile>\r
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
+      <DataExecutionPrevention>\r
+      </DataExecutionPrevention>\r
+      <ImportLibrary>../../bin/Debug/sphinxbase.lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+    <Bscmake>\r
+      <SuppressStartupBanner>true</SuppressStartupBanner>\r
+      <OutputFile>.\../../bin/Debug/sphinxbase.bsc</OutputFile>\r
+    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\agc.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\bio.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\bitvec.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\blas_lite.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\case.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\ckd_alloc.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\cmd_ln.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\cmn.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\cmn_prior.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxad\cont_ad_base.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\dtoa.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\err.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\errno.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\f2c_lite.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_interface.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_sigproc.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_warp.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_warp_affine.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_warp_inverse_linear.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_warp_piecewise_linear.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\feat.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\filename.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fixlog.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\fsg_model.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\genrand.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\glist.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\hash_table.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\heap.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\huff_code.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\info.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\jsgf.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\jsgf_parser.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\jsgf_scanner.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\lda.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\listelem_alloc.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\lm3g_model.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\logmath.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\matrix.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\mmio.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model_arpa.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model_dmp.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model_dmp32.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model_set.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\pio.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxad\play_win32.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\profile.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxad\rec_win32.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\sbthread.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\slamch.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\slapack_lite.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\strfuncs.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\string_wce.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\unlimit.c">\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\utf8.c" />\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\yin.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\include\ad.h" />\r
+    <ClInclude Include="..\..\include\agc.h" />\r
+    <ClInclude Include="..\..\include\bio.h" />\r
+    <ClInclude Include="..\..\include\bitvec.h" />\r
+    <ClInclude Include="..\..\include\byteorder.h" />\r
+    <ClInclude Include="..\..\include\case.h" />\r
+    <ClInclude Include="..\..\include\ckd_alloc.h" />\r
+    <ClInclude Include="..\..\include\clapack_lite.h" />\r
+    <ClInclude Include="..\..\include\cmd_ln.h" />\r
+    <ClInclude Include="..\..\include\cmn.h" />\r
+    <ClInclude Include="..\..\include\win32\config.h" />\r
+    <ClInclude Include="..\..\include\cont_ad.h" />\r
+    <ClInclude Include="..\..\include\err.h" />\r
+    <ClInclude Include="..\..\include\f2c.h" />\r
+    <ClInclude Include="..\..\include\fe.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_internal.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_warp.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_warp_affine.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_warp_inverse_linear.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_warp_piecewise_linear.h" />\r
+    <ClInclude Include="..\..\include\feat.h" />\r
+    <ClInclude Include="..\..\include\filename.h" />\r
+    <ClInclude Include="..\..\include\fixpoint.h" />\r
+    <ClInclude Include="..\..\include\fsg_model.h" />\r
+    <ClInclude Include="..\..\include\gau_cb.h" />\r
+    <ClInclude Include="..\..\include\gau_cb_float64.h" />\r
+    <ClInclude Include="..\..\include\gau_cb_int32.h" />\r
+    <ClInclude Include="..\..\include\gau_file.h" />\r
+    <ClInclude Include="..\..\include\gau_mix.h" />\r
+    <ClInclude Include="..\..\include\genrand.h" />\r
+    <ClInclude Include="..\..\include\glist.h" />\r
+    <ClInclude Include="..\..\include\hash_table.h" />\r
+    <ClInclude Include="..\..\include\heap.h" />\r
+    <ClInclude Include="..\..\include\huff_code.h" />\r
+    <ClInclude Include="..\..\include\info.h" />\r
+    <ClInclude Include="..\..\include\jsgf.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\jsgf_internal.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\jsgf_parser.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\jsgf_scanner.h" />\r
+    <ClInclude Include="..\..\include\libutil.h" />\r
+    <ClInclude Include="..\..\include\listelem_alloc.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\lm3g_model.h" />\r
+    <ClInclude Include="..\..\include\logmath.h" />\r
+    <ClInclude Include="..\..\include\matrix.h" />\r
+    <ClInclude Include="..\..\include\mmio.h" />\r
+    <ClInclude Include="..\..\include\mulaw.h" />\r
+    <ClInclude Include="..\..\include\ngram_model.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\ngram_model_arpa.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\ngram_model_dmp.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\ngram_model_internal.h" />\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\ngram_model_set.h" />\r
+    <ClInclude Include="..\..\include\pio.h" />\r
+    <ClInclude Include="..\..\include\prim_type.h" />\r
+    <ClInclude Include="..\..\include\profile.h" />\r
+    <ClInclude Include="..\..\include\s3_arraylist.h" />\r
+    <ClInclude Include="..\..\include\sbthread.h" />\r
+    <ClInclude Include="..\..\include\win32\sphinx_config.h" />\r
+    <ClInclude Include="..\..\include\sphinx_types.h" />\r
+    <ClInclude Include="..\..\include\sphinxbase_export.h" />\r
+    <ClInclude Include="..\..\include\strfuncs.h" />\r
+    <ClInclude Include="..\..\include\unlimit.h" />\r
+    <ClInclude Include="..\..\include\yin.h" />\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinxbase/sphinxbase.vcxproj.filters b/win32/sphinxbase/sphinxbase.vcxproj.filters
new file mode 100755 (executable)
index 0000000..b8d222a
--- /dev/null
@@ -0,0 +1,371 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup>\r
+    <Filter Include="Source Files">\r
+      <UniqueIdentifier>{cc0ceed0-a34d-4f0f-bcb8-e1f44f59d62b}</UniqueIdentifier>\r
+      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>\r
+    </Filter>\r
+    <Filter Include="Header Files">\r
+      <UniqueIdentifier>{7d23a9d1-9320-4724-abaa-525fd55849b4}</UniqueIdentifier>\r
+      <Extensions>h;hpp;hxx;hm;inl</Extensions>\r
+    </Filter>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\agc.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\bio.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\bitvec.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\blas_lite.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\case.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\ckd_alloc.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\cmd_ln.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\cmn.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\cmn_prior.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxad\cont_ad_base.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\dtoa.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\err.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\errno.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\f2c_lite.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_interface.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_sigproc.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_warp.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_warp_affine.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_warp_inverse_linear.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fe_warp_piecewise_linear.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\feat.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\filename.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\fixlog.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\fsg_model.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\genrand.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\glist.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\hash_table.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\heap.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\huff_code.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\info.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\jsgf.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\jsgf_parser.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\jsgf_scanner.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\feat\lda.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\listelem_alloc.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\lm3g_model.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\logmath.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\matrix.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\mmio.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model_arpa.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model_dmp.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model_dmp32.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\lm\ngram_model_set.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\pio.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxad\play_win32.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\profile.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxad\rec_win32.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\sbthread.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\slamch.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\slapack_lite.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\strfuncs.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\string_wce.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\unlimit.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\util\utf8.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+    <ClCompile Include="..\..\src\libsphinxbase\fe\yin.c">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\include\ad.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\agc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\bio.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\bitvec.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\byteorder.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\case.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\ckd_alloc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\clapack_lite.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\cmd_ln.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\cmn.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\win32\config.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\cont_ad.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\err.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\f2c.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\fe.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_internal.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_warp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_warp_affine.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_warp_inverse_linear.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\fe\fe_warp_piecewise_linear.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\feat.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\filename.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\fixpoint.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\fsg_model.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\gau_cb.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\gau_cb_float64.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\gau_cb_int32.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\gau_file.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\gau_mix.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\genrand.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\glist.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\hash_table.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\heap.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\huff_code.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\info.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\jsgf.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\jsgf_internal.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\jsgf_parser.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\jsgf_scanner.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\libutil.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\listelem_alloc.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\lm3g_model.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\logmath.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\matrix.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\mmio.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\mulaw.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\ngram_model.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\ngram_model_arpa.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\ngram_model_dmp.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\ngram_model_internal.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\src\libsphinxbase\lm\ngram_model_set.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\pio.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\prim_type.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\profile.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\s3_arraylist.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\sbthread.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\win32\sphinx_config.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\sphinx_types.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\sphinxbase_export.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\strfuncs.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\unlimit.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+    <ClInclude Include="..\..\include\yin.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
+  </ItemGroup>\r
+</Project>
\ No newline at end of file
diff --git a/win32/sphinxbase/sphinxbase.vcxproj.user b/win32/sphinxbase/sphinxbase.vcxproj.user
new file mode 100755 (executable)
index 0000000..695b5c7
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+</Project>
\ No newline at end of file
diff --git a/ylwrap b/ylwrap
new file mode 100755 (executable)
index 0000000..7278b6a
--- /dev/null
+++ b/ylwrap
@@ -0,0 +1,223 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2007-11-22.22
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
+# 2007  Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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, 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.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case "$1" in
+  '')
+    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
+    exit 1
+    ;;
+  --basedir)
+    basedir=$2
+    shift 2
+    ;;
+  -h|--h*)
+    cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+  INPUT is the input file
+  OUTPUT is one file PROG generates
+  DESIRED is the file we actually want instead of OUTPUT
+  PROGRAM is program to run
+  ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v|--v*)
+    echo "ylwrap $scriptversion"
+    exit $?
+    ;;
+esac
+
+
+# The input.
+input="$1"
+shift
+case "$input" in
+  [\\/]* | ?:[\\/]*)
+    # Absolute path; do nothing.
+    ;;
+  *)
+    # Relative path.  Make it absolute.
+    input="`pwd`/$input"
+    ;;
+esac
+
+pairlist=
+while test "$#" -ne 0; do
+  if test "$1" = "--"; then
+    shift
+    break
+  fi
+  pairlist="$pairlist $1"
+  shift
+done
+
+# The program to run.
+prog="$1"
+shift
+# Make any relative path in $prog absolute.
+case "$prog" in
+  [\\/]* | ?:[\\/]*) ;;
+  *[\\/]*) prog="`pwd`/$prog" ;;
+esac
+
+# FIXME: add hostname here for parallel makes that run commands on
+# other machines.  But that might take us over the 14-char limit.
+dirname=ylwrap$$
+trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+  0) "$prog" "$input" ;;
+  *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+  set X $pairlist
+  shift
+  first=yes
+  # Since DOS filename conventions don't allow two dots,
+  # the DOS version of Bison writes out y_tab.c instead of y.tab.c
+  # and y_tab.h instead of y.tab.h. Test to see if this is the case.
+  y_tab_nodot="no"
+  if test -f y_tab.c || test -f y_tab.h; then
+    y_tab_nodot="yes"
+  fi
+
+  # The directory holding the input.
+  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
+  # Quote $INPUT_DIR so we can use it in a regexp.
+  # FIXME: really we should care about more than `.' and `\'.
+  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
+
+  while test "$#" -ne 0; do
+    from="$1"
+    # Handle y_tab.c and y_tab.h output by DOS
+    if test $y_tab_nodot = "yes"; then
+      if test $from = "y.tab.c"; then
+       from="y_tab.c"
+      else
+       if test $from = "y.tab.h"; then
+         from="y_tab.h"
+       fi
+      fi
+    fi
+    if test -f "$from"; then
+      # If $2 is an absolute path name, then just use that,
+      # otherwise prepend `../'.
+      case "$2" in
+       [\\/]* | ?:[\\/]*) target="$2";;
+       *) target="../$2";;
+      esac
+
+      # We do not want to overwrite a header file if it hasn't
+      # changed.  This avoid useless recompilations.  However the
+      # parser itself (the first file) should always be updated,
+      # because it is the destination of the .y.c rule in the
+      # Makefile.  Divert the output of all other files to a temporary
+      # file so we can compare them to existing versions.
+      if test $first = no; then
+       realtarget="$target"
+       target="tmp-`echo $target | sed s/.*[\\/]//g`"
+      fi
+      # Edit out `#line' or `#' directives.
+      #
+      # We don't want the resulting debug information to point at
+      # an absolute srcdir; it is better for it to just mention the
+      # .y file with no path.
+      #
+      # We want to use the real output file name, not yy.lex.c for
+      # instance.
+      #
+      # We want the include guards to be adjusted too.
+      FROM=`echo "$from" | sed \
+            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+      TARGET=`echo "$2" | sed \
+            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+
+      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
+          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
+
+      # Check whether header files must be updated.
+      if test $first = no; then
+       if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+         echo "$2" is unchanged
+         rm -f "$target"
+       else
+          echo updating "$2"
+          mv -f "$target" "$realtarget"
+        fi
+      fi
+    else
+      # A missing file is only an error for the first file.  This
+      # is a blatant hack to let us support using "yacc -d".  If -d
+      # is not specified, we don't want an error when the header
+      # file is "missing".
+      if test $first = yes; then
+        ret=1
+      fi
+    fi
+    shift
+    shift
+    first=no
+  done
+else
+  ret=$?
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End: